src/HOL/Set_Interval.thy
changeset 56238 5d147e1e18d1
parent 56215 fcf90317383d
child 56328 b3551501424e
equal deleted inserted replaced
56237:69a9dfe71aed 56238:5d147e1e18d1
  1466   also have "(\<Sum>i\<le>n. f (Suc i)) + f (Suc (Suc n)) = (\<Sum>i\<le>Suc n. f (Suc i))"
  1466   also have "(\<Sum>i\<le>n. f (Suc i)) + f (Suc (Suc n)) = (\<Sum>i\<le>Suc n. f (Suc i))"
  1467     by (rule setsum_atMost_Suc [symmetric])
  1467     by (rule setsum_atMost_Suc [symmetric])
  1468   finally show ?case .
  1468   finally show ?case .
  1469 qed
  1469 qed
  1470 
  1470 
  1471 lemma setsum_last_plus: "n \<noteq> 0 \<Longrightarrow> (\<Sum>i = 0..n. f i) = f n + (\<Sum>i = 0..n - Suc 0. f i)"
  1471 lemma setsum_last_plus: fixes n::nat shows "m <= n \<Longrightarrow> (\<Sum>i = m..n. f i) = f n + (\<Sum>i = m..<n. f i)"
  1472   using atLeastAtMostSuc_conv [of 0 "n - 1"]
  1472   by (cases n) (auto simp: atLeastLessThanSuc_atLeastAtMost add_commute)
  1473   by auto
  1473 
       
  1474 lemma setsum_Suc_diff:
       
  1475   fixes f :: "nat \<Rightarrow> 'a::ab_group_add"
       
  1476   assumes "m \<le> Suc n"
       
  1477   shows "(\<Sum>i = m..n. f(Suc i) - f i) = f (Suc n) - f m"
       
  1478 using assms by (induct n) (auto simp: le_Suc_eq)
  1474 
  1479 
  1475 lemma nested_setsum_swap:
  1480 lemma nested_setsum_swap:
  1476      "(\<Sum>i = 0..n. (\<Sum>j = 0..<i. a i j)) = (\<Sum>j = 0..<n. \<Sum>i = Suc j..n. a i j)"
  1481      "(\<Sum>i = 0..n. (\<Sum>j = 0..<i. a i j)) = (\<Sum>j = 0..<n. \<Sum>i = Suc j..n. a i j)"
  1477   by (induction n) (auto simp: setsum_addf)
  1482   by (induction n) (auto simp: setsum_addf)
  1478 
  1483 
  1483 lemma setsum_zero_power [simp]:
  1488 lemma setsum_zero_power [simp]:
  1484   fixes c :: "nat \<Rightarrow> 'a::division_ring"
  1489   fixes c :: "nat \<Rightarrow> 'a::division_ring"
  1485   shows "(\<Sum>i\<in>A. c i * 0^i) = (if finite A \<and> 0 \<in> A then c 0 else 0)"
  1490   shows "(\<Sum>i\<in>A. c i * 0^i) = (if finite A \<and> 0 \<in> A then c 0 else 0)"
  1486 apply (cases "finite A")
  1491 apply (cases "finite A")
  1487   by (induction A rule: finite_induct) auto
  1492   by (induction A rule: finite_induct) auto
       
  1493 
       
  1494 lemma setsum_zero_power' [simp]:
       
  1495   fixes c :: "nat \<Rightarrow> 'a::field"
       
  1496   shows "(\<Sum>i\<in>A. c i * 0^i / d i) = (if finite A \<and> 0 \<in> A then c 0 / d 0 else 0)"
       
  1497   using setsum_zero_power [of "\<lambda>i. c i / d i" A]
       
  1498   by auto
  1488 
  1499 
  1489 
  1500 
  1490 subsection {* The formula for geometric sums *}
  1501 subsection {* The formula for geometric sums *}
  1491 
  1502 
  1492 lemma geometric_sum:
  1503 lemma geometric_sum: