equal
deleted
inserted
replaced
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: |