# HG changeset patch # User nipkow # Date 1109761575 -3600 # Node ID 045a07ac35a73eefbd6130e0ccf1dace6f7f3587 # Parent c862d556fb189d9e62df044e391201036dbf91ab another reorganization of setsums and intervals diff -r c862d556fb18 -r 045a07ac35a7 src/HOL/HoareParallel/OG_Examples.thy --- a/src/HOL/HoareParallel/OG_Examples.thy Wed Mar 02 10:33:10 2005 +0100 +++ b/src/HOL/HoareParallel/OG_Examples.thy Wed Mar 02 12:06:15 2005 +0100 @@ -484,17 +484,19 @@ subsubsection {* Increment a Variable in Parallel *} -text {* First some lemmas about summation properties. Summation is -defined in PreList. *} +declare setsum_op_ivl_Suc [simp] +text {* First some lemmas about summation properties. *} +(* lemma Example2_lemma1: "!!b. j (\i::nat b j = 0 " apply(induct n) apply simp_all apply(force simp add: less_Suc_eq) done - +*) lemma Example2_lemma2_aux: "!!b. j - (\iiii=0..i=0..i=0.. s \ (\i::nati s \ (\i::nat=0..i=0..j \ Suc (\i::nat< n. b i)=(\i< n. (b (j := Suc 0)) i)" + "!!b. \j \ Suc (\i::nat=0..i=0..iii=0..i=0..j") @@ -526,7 +528,7 @@ apply simp_all done -lemma Example2_lemma3: "!!b. \i< n. b i = (Suc 0) \ (\ii< n. b i = (Suc 0) \ (\i=0.. - \- .{\x=0 \ (\i< n. \c i)=0}. + \- .{\x=0 \ (\i=0..c i)=0}. COBEGIN SCHEME [0\ix=(\i< n. \c i) \ \c i=0}. + .{\x=(\i=0..c i) \ \c i=0}. \ \x:=\x+(Suc 0),, \c:=\c (i:=(Suc 0)) \ - .{\x=(\i< n. \c i) \ \c i=(Suc 0)}. + .{\x=(\i=0..c i) \ \c i=(Suc 0)}. COEND .{\x=n}." apply oghoare diff -r c862d556fb18 -r 045a07ac35a7 src/HOL/HoareParallel/RG_Examples.thy --- a/src/HOL/HoareParallel/RG_Examples.thy Wed Mar 02 10:33:10 2005 +0100 +++ b/src/HOL/HoareParallel/RG_Examples.thy Wed Mar 02 12:06:15 2005 +0100 @@ -154,14 +154,11 @@ subsubsection {* Parameterized *} -lemma Example2_lemma1: "j (\i::nat b j = 0 " -apply(induct n) - apply simp_all -apply(force simp add: less_Suc_eq) -done +declare setsum_op_ivl_Suc [simp] -lemma Example2_lemma2_aux: - "j (\iii + (\i=0..i=0..i=0.. s \ (\i::nati s \ (\i::nat=0..i=0..j \ Suc (\i::nat< n. b i)=(\i< n. (b (j := Suc 0)) i)" + "\j \ Suc (\i::nat=0..i=0..iii=0..i=0..j") @@ -192,14 +190,10 @@ apply simp_all done -lemma Example2_lemma2_Suc0: "\j \ Suc (\i::nat< n. b i)=(\i< n. (b (j:=Suc 0)) i)" +lemma Example2_lemma2_Suc0: "\j \ + Suc (\i::nat=0..< n. b i)=(\i=0..< n. (b (j:=Suc 0)) i)" by(simp add:Example2_lemma2) -lemma Example2_lemma3: "\i< n. b i = 1 \ (\i::nat nat" y :: nat @@ -207,21 +201,21 @@ lemma Example2_parameterized: "0 \ COBEGIN SCHEME [0\i \y:=\y+1;; \C:=\C (i:=1) \, - \\y=(\iC i) \ \C i=0\, + \\y=(\i=0..C i) \ \C i=0\, \\C i = \C i \ - (\y=(\iC i) \ \y =(\iC i))\, + (\y=(\i=0..C i) \ \y =(\i=0..C i))\, \(\jj \ \C j = \C j) \ - (\y=(\iC i) \ \y =(\iC i))\, - \\y=(\iC i) \ \C i=1\) + (\y=(\i=0..C i) \ \y =(\i=0..C i))\, + \\y=(\i=0..C i) \ \C i=1\) COEND - SAT [\\y=0 \ (\iC i)=0 \, \\C=\C \ \y=\y\, \True\, \\y=n\]" + SAT [\\y=0 \ (\i=0..C i)=0 \, \\C=\C \ \y=\y\, \True\, \\y=n\]" apply(rule Parallel) apply force apply force -apply(force elim:Example2_lemma1) +apply(force) apply clarify apply simp -apply(force intro:Example2_lemma3) +apply(simp cong:setsum_ivl_cong) apply clarify apply simp apply(rule Await) diff -r c862d556fb18 -r 045a07ac35a7 src/HOL/Hyperreal/MacLaurin.thy --- a/src/HOL/Hyperreal/MacLaurin.thy Wed Mar 02 10:33:10 2005 +0100 +++ b/src/HOL/Hyperreal/MacLaurin.thy Wed Mar 02 12:06:15 2005 +0100 @@ -99,9 +99,9 @@ prefer 3 apply (simp add: fact_diff_Suc) prefer 2 apply simp apply (frule_tac m = m in less_add_one, clarify) -apply (simp del: setsum_Suc) +apply (simp del: setsum_op_ivl_Suc) apply (insert sumr_offset4 [of 1]) -apply (simp del: setsum_Suc fact_Suc realpow_Suc) +apply (simp del: setsum_op_ivl_Suc fact_Suc realpow_Suc) apply (rule lemma_DERIV_subst) apply (rule DERIV_add) apply (rule_tac [2] DERIV_const) @@ -157,9 +157,9 @@ apply (erule exE) apply (subgoal_tac "g 0 = 0 & g h =0") prefer 2 - apply (simp del: setsum_Suc) + apply (simp del: setsum_op_ivl_Suc) apply (cut_tac n = m and k = 1 in sumr_offset2) - apply (simp add: eq_diff_eq' del: setsum_Suc) + apply (simp add: eq_diff_eq' del: setsum_op_ivl_Suc) apply (subgoal_tac "\difg. difg = (%m t. diff m t - (setsum (%p. (diff (m + p) 0 / real (fact p)) * (t ^ p)) {0..m. m < n --> (\t. 0 < t & t < h & DERIV (difg m) t :> 0) ") apply (rule allI, rule impI) apply (drule_tac x = ma and P="%m. m (\t. ?QQ m t)" in spec) @@ -515,7 +515,7 @@ apply (simp (no_asm)) apply (simp (no_asm)) apply (case_tac "n", simp) -apply (simp del: setsum_Suc) +apply (simp del: setsum_op_ivl_Suc) apply (rule ccontr, simp) apply (drule_tac x = x in spec, simp) apply (erule ssubst) diff -r c862d556fb18 -r 045a07ac35a7 src/HOL/Hyperreal/Series.thy --- a/src/HOL/Hyperreal/Series.thy Wed Mar 02 10:33:10 2005 +0100 +++ b/src/HOL/Hyperreal/Series.thy Wed Mar 02 12:06:15 2005 +0100 @@ -11,10 +11,9 @@ theory Series imports SEQ Lim begin -thm atLeastLessThan_empty -(* FIXME why not globally? *) -declare atLeastLessThan_empty[simp]; + declare atLeastLessThan_iff[iff] +declare setsum_op_ivl_Suc[simp] constdefs sums :: "(nat => real) => real => bool" (infixr "sums" 80) @@ -31,9 +30,6 @@ translations "\i. b" == "suminf (%i. b)" -lemma setsum_Suc[simp]: - "setsum f {m..p=0..p=0..p=0..p=0..p=0.. K") apply (drule_tac [2] n = d in zero_le_power) -apply (auto simp del: setsum_Suc) +apply (auto simp del: setsum_op_ivl_Suc) apply (rule setsum_abs [THEN real_le_trans]) apply (rule real_setsum_nat_ivl_bounded, auto dest!: less_add_one intro!: mult_mono simp add: power_add) apply (auto intro!: power_mono zero_le_power simp add: power_abs, arith+) @@ -1412,7 +1412,7 @@ "\n=0..< Suc(Suc(Suc 0)). - ((- 1) ^ n / (real(fact (2*n))) * 2 ^ (2*n))" in order_less_trans) apply (simp (no_asm) add: fact_num_eq_if realpow_num_eq_if del: fact_Suc realpow_Suc) -apply (simp (no_asm) add: mult_assoc del: setsum_Suc) +apply (simp (no_asm) add: mult_assoc del: setsum_op_ivl_Suc) apply (rule sumr_pos_lt_pair) apply (erule sums_summable, safe) apply (simp (no_asm) add: divide_inverse real_0_less_add_iff mult_assoc [symmetric] diff -r c862d556fb18 -r 045a07ac35a7 src/HOL/Isar_examples/Summation.thy --- a/src/HOL/Isar_examples/Summation.thy Wed Mar 02 10:33:10 2005 +0100 +++ b/src/HOL/Isar_examples/Summation.thy Wed Mar 02 12:06:15 2005 +0100 @@ -5,7 +5,11 @@ header {* Summing natural numbers *} -theory Summation = Main: +theory Summation +imports Main +begin + +declare setsum_op_ivl_Suc [simp] setsum_cl_ivl_Suc [simp] text_raw {* \footnote{This example is somewhat reminiscent of the @@ -31,7 +35,7 @@ *} theorem sum_of_naturals: - "2 * (\i::nat < n + 1. i) = n * (n + 1)" + "2 * (\i::nat=0..n. i) = n * (n + 1)" (is "?P n" is "?S n = _") proof (induct n) show "?P 0" by simp @@ -86,7 +90,7 @@ *} theorem sum_of_odds: - "(\i::nat < n. 2 * i + 1) = n^Suc (Suc 0)" + "(\i::nat=0..i::nat < n + 1. i^Suc (Suc 0)) = n * (n + 1) * (2 * n + 1)" + "6 * (\i::nat=0..n. i^Suc (Suc 0)) = n * (n + 1) * (2 * n + 1)" (is "?P n" is "?S n = _") proof (induct n) show "?P 0" by simp @@ -119,7 +123,7 @@ qed theorem sum_of_cubes: - "4 * (\i::nat < n + 1. i^3) = (n * (n + 1))^Suc (Suc 0)" + "4 * (\i::nat=0..n. i^3) = (n * (n + 1))^Suc (Suc 0)" (is "?P n" is "?S n = _") proof (induct n) show "?P 0" by (simp add: power_eq_if) diff -r c862d556fb18 -r 045a07ac35a7 src/HOL/SetInterval.thy --- a/src/HOL/SetInterval.thy Wed Mar 02 10:33:10 2005 +0100 +++ b/src/HOL/SetInterval.thy Wed Mar 02 12:06:15 2005 +0100 @@ -392,7 +392,7 @@ lemma image_atLeastLessThan_int_shift: "(%x. x + (l::int)) ` {0.. - (\i=n..m+1. f i) = (\i=n..m. f i) + f(m + 1)" -by (auto simp:add_ac atLeastAtMostSuc_conv) - (* FIXME delete lemma Summation_Suc[simp]: "(\i < Suc n. b i) = b n + (\i < n. b i)" by (simp add:lessThan_Suc) *) +lemma setsum_cl_ivl_Suc: + "setsum f {m..Suc n} = (if Suc n < m then 0 else setsum f {m..n} + f(Suc n))" +by (auto simp:add_ac atLeastAtMostSuc_conv) + +lemma setsum_op_ivl_Suc: + "setsum f {m.. + (\i=n..m+1. f i) = (\i=n..m. f i) + f(m + 1)" +by (auto simp:add_ac atLeastAtMostSuc_conv) + lemma setsum_add_nat_ivl: "\ m \ n; n \ p \ \ setsum f {m..i \ {..i \ {0..i \ {..i=0..i \ {..i=0..i \ {..n}. i) = n * Suc n" + "2 * (\i=0..n. i) = n * Suc n" apply (induct n) apply auto done lemma sum_of_squares: - "6 * (\i \ {..n}. i * i) = n * Suc n * Suc (2 * n)" + "6 * (\i=0..n. i * i) = n * Suc n * Suc (2 * n)" apply (induct n) apply auto done lemma sum_of_cubes: - "4 * (\i \ {..n}. i * i * i) = n * n * Suc n * Suc n" + "4 * (\i=0..n. i * i * i) = n * n * Suc n * Suc n" apply (induct n) apply auto done text {* - \medskip Sum of fourth powers: two versions. + \medskip Sum of fourth powers: three versions. *} lemma sum_of_fourth_powers: - "30 * (\i \ {..n}. i * i * i * i) = + "30 * (\i=0..n. i * i * i * i) = n * Suc n * Suc (2 * n) * (3 * n * n + 3 * n - 1)" apply (induct n) apply simp_all @@ -94,11 +95,19 @@ done text {* - Alternative proof, with a change of variables and much more + Tow alternative proofs, with a change of variables and much more subtraction, performed using the integers. *} lemma int_sum_of_fourth_powers: - "30 * of_nat (\i \ {..i=0..i=0..i \ {..i=0..i \ {..i=0.. (k - 1) * (\i \ {.. (k - 1) * (\i=0..