Up to index of Isabelle/HOL/HOL-Complex/NumberTheory
theory PartialSummation = Series + FiniteLib + RealLib:(* Title: PartialSummation.thy Author: Kevin Donnelly and Jeremy Avigad License: GPL (GNU GENERAL PUBLIC LICENSE) *) header "Partial Summation" theory PartialSummation = Series + FiniteLib + RealLib:; lemma partial_sum: "!x. F(x) = sumr 0 x (%n. f(n+1)) ==> sumr a (a + c + 1) (%n. f(n + 1) * G(n + 1)) = F(a + c + 1) * G(a + c + 1) - sumr a (a + c) (%n. F(n+1) * (G(n+2) - G(n+1))) - F(a) * G(a + 1)"; apply(induct_tac c); apply(auto simp add: ring_eq_simps); done; lemma partial_sum0: "!x. F(x) = sumr 0 x (%n. f(n+1)) ==> sumr 0 (c + 1) (%n. f(n + 1) * G(n + 1)) = F(c + 1) * G(c + 1) - sumr 0 (c) (%n. F(n+1) * (G(n+2) - G(n+1)))"; apply(insert partial_sum[of F f 0]); by(force); subsection {* Added later *} lemma partial_sum_b: "ALL x. (F::nat=>real)(x) = (∑n=1..x. f n) ==> 1 <= a ==> (∑n=a..a + c. f(n + 1) * G(n + 1)) = F(a + c + 1) * G(a + c + 1) - (∑n=a..a + c - 1. F(n+1) * (G(n+2) - G(n+1))) - F(a) * G(a + 1)"; apply (subst setsum_sumr5)+; apply (subst partial_sum); apply (rule allI); apply (subst setsum_sumr4 [THEN sym]); apply (erule spec); apply simp; done; lemma partial_sum_b0: "ALL x. 1 <= x --> (F::nat=>real)(x) = (∑n=1..x. f n) ==> (∑n=1..x + 1. f n * G n) = F(x + 1) * G(x + 1) - (∑n=1..x. F n * (G (n + 1) - G n))"; apply (subst setsum_sumr4)+; apply (subst partial_sum0); apply (rule allI); apply (subst setsum_sumr4 [THEN sym]); apply (subgoal_tac "(if x = 0 then 0 else F x) = ?s"); apply assumption; apply force; apply simp; done; declare One_nat_def [simp del]; lemma another_partial_sum: "(∑n=1..x+1. (F::nat=>'b::ordered_ring)(n) * (G n - G (n - 1))) = F(x + 1) * G(x + 1) - F 1 * G 0 + (∑n=1..x. G n * (F n - F (n+1)))"; apply (induct x); apply (simp add: ring_eq_simps); apply (subst Suc_plus1)+; apply (subst setsum_range_plus_one_nat');back; apply force; apply (erule ssubst); apply (simp add: ring_eq_simps compare_rls); apply (subst setsum_range_plus_one_nat'); apply force; apply (simp add: ring_eq_simps compare_rls); done; lemma another_partial_sum2: "(∑n=1..x. G n * (F n - F (n+1))) = (∑n=1..x+1. (F::nat=>'b::ordered_ring)(n) * (G n - G (n - 1))) - F(x + 1) * G(x + 1) + F 1 * G 0"; apply (subst another_partial_sum); apply (simp add: ring_eq_simps); done; declare One_nat_def [simp add]; end
lemma partial_sum:
∀x. F x = sumr 0 x (%n. f (n + 1)) ==> sumr a (a + c + 1) (%n. f (n + 1) * G (n + 1)) = F (a + c + 1) * G (a + c + 1) - sumr a (a + c) (%n. F (n + 1) * (G (n + 2) - G (n + 1))) - F a * G (a + 1)
lemma partial_sum0:
∀x. F x = sumr 0 x (%n. f (n + 1)) ==> sumr 0 (c + 1) (%n. f (n + 1) * G (n + 1)) = F (c + 1) * G (c + 1) - sumr 0 c (%n. F (n + 1) * (G (n + 2) - G (n + 1)))
lemma partial_sum_b:
[| ∀x. F x = setsum f {1..x}; 1 ≤ a |] ==> (∑n = a..a + c. f (n + 1) * G (n + 1)) = F (a + c + 1) * G (a + c + 1) - (∑n = a..a + c - 1. F (n + 1) * (G (n + 2) - G (n + 1))) - F a * G (a + 1)
lemma partial_sum_b0:
∀x. 1 ≤ x --> F x = setsum f {1..x} ==> (∑n = 1..x + 1. f n * G n) = F (x + 1) * G (x + 1) - (∑n = 1..x. F n * (G (n + 1) - G n))
lemma another_partial_sum:
(∑n = 1..x + 1. F n * (G n - G (n - 1))) = F (x + 1) * G (x + 1) - F 1 * G 0 + (∑n = 1..x. G n * (F n - F (n + 1)))
lemma another_partial_sum2:
(∑n = 1..x. G n * (F n - F (n + 1))) = (∑n = 1..x + 1. F n * (G n - G (n - 1))) - F (x + 1) * G (x + 1) + F 1 * G 0