# HG changeset patch # User nipkow # Date 1116869985 -7200 # Node ID 880b0e786c1b04f98598137f9d1a3cd472af5a4a # Parent b6a945f205b720f46f193095b17d6674d00d7fc4 tuned setsum rewrites diff -r b6a945f205b7 -r 880b0e786c1b src/HOL/Algebra/abstract/Ring.thy --- a/src/HOL/Algebra/abstract/Ring.thy Mon May 23 19:14:16 2005 +0200 +++ b/src/HOL/Algebra/abstract/Ring.thy Mon May 23 19:39:45 2005 +0200 @@ -117,15 +117,16 @@ (* Basic facts --- move to HOL!!! *) +(* needed because natsum_cong (below) disables atMost_0 *) lemma natsum_0 [simp]: "setsum f {..(0::nat)} = (f 0::'a::comm_monoid_add)" by simp - +(* lemma natsum_Suc [simp]: "setsum f {..Suc n} = (f (Suc n) + setsum f {..n}::'a::comm_monoid_add)" by (simp add: atMost_Suc) - +*) lemma natsum_Suc2: - "setsum f {..Suc n} = (setsum (%i. f (Suc i)) {..n} + f 0::'a::comm_monoid_add)" + "setsum f {..Suc n} = (f 0::'a::comm_monoid_add) + (setsum (%i. f (Suc i)) {..n})" proof (induct n) case 0 show ?case by simp next diff -r b6a945f205b7 -r 880b0e786c1b src/HOL/Algebra/poly/UnivPoly2.thy --- a/src/HOL/Algebra/poly/UnivPoly2.thy Mon May 23 19:14:16 2005 +0200 +++ b/src/HOL/Algebra/poly/UnivPoly2.thy Mon May 23 19:39:45 2005 +0200 @@ -286,7 +286,7 @@ proof (cases n) case 0 then show ?thesis by simp next - case Suc then show ?thesis by (simp del: natsum_Suc add: natsum_Suc2) + case Suc then show ?thesis by (simp del: setsum_atMost_Suc add: natsum_Suc2) qed qed show "(p + q) * r = p * r + q * r" diff -r b6a945f205b7 -r 880b0e786c1b src/HOL/SetInterval.thy --- a/src/HOL/SetInterval.thy Mon May 23 19:14:16 2005 +0200 +++ b/src/HOL/SetInterval.thy Mon May 23 19:39:45 2005 +0200 @@ -555,26 +555,32 @@ syntax "_from_to_setsum" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(SUM _ = _.._./ _)" [0,0,0,10] 10) "_from_upto_setsum" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(SUM _ = _..<_./ _)" [0,0,0,10] 10) - "_upto_setsum" :: "idt \ 'a \ 'b \ 'b" ("(SUM _<_./ _)" [0,0,10] 10) + "_upt_setsum" :: "idt \ 'a \ 'b \ 'b" ("(SUM _<_./ _)" [0,0,10] 10) + "_upto_setsum" :: "idt \ 'a \ 'b \ 'b" ("(SUM _<=_./ _)" [0,0,10] 10) syntax (xsymbols) "_from_to_setsum" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _.._./ _)" [0,0,0,10] 10) "_from_upto_setsum" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _..<_./ _)" [0,0,0,10] 10) - "_upto_setsum" :: "idt \ 'a \ 'b \ 'b" ("(3\_<_./ _)" [0,0,10] 10) + "_upt_setsum" :: "idt \ 'a \ 'b \ 'b" ("(3\_<_./ _)" [0,0,10] 10) + "_upto_setsum" :: "idt \ 'a \ 'b \ 'b" ("(3\_\_./ _)" [0,0,10] 10) syntax (HTML output) "_from_to_setsum" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _.._./ _)" [0,0,0,10] 10) "_from_upto_setsum" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _..<_./ _)" [0,0,0,10] 10) - "_upto_setsum" :: "idt \ 'a \ 'b \ 'b" ("(3\_<_./ _)" [0,0,10] 10) + "_upt_setsum" :: "idt \ 'a \ 'b \ 'b" ("(3\_<_./ _)" [0,0,10] 10) + "_upto_setsum" :: "idt \ 'a \ 'b \ 'b" ("(3\_\_./ _)" [0,0,10] 10) syntax (latex_sum output) "_from_to_setsum" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\<^raw:$\sum_{>_ = _\<^raw:}^{>_\<^raw:}$> _)" [0,0,0,10] 10) "_from_upto_setsum" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\<^raw:$\sum_{>_ = _\<^raw:}^{<>_\<^raw:}$> _)" [0,0,0,10] 10) + "_upt_setsum" :: "idt \ 'a \ 'b \ 'b" + ("(3\<^raw:$\sum_{>_ < _\<^raw:}$> _)" [0,0,10] 10) "_upto_setsum" :: "idt \ 'a \ 'b \ 'b" - ("(3\<^raw:$\sum_{>_ < _\<^raw:}$> _)" [0,0,10] 10) + ("(3\<^raw:$\sum_{>_ \ _\<^raw:}$> _)" [0,0,10] 10) translations "\x=a..b. t" == "setsum (%x. t) {a..b}" "\x=a..i\n. t" == "setsum (\i. t) {..n}" "\ii. t) {..x\{a..b}. e"} & @{term"\x=a..b. e"} & @{term[mode=latex_sum]"\x=a..b. e"}\\ @{term[source]"\x\{a..x=a..x=a..x\{..b}. e"} & @{term"\x\b. e"} & @{term[mode=latex_sum]"\x\b. e"}\\ @{term[source]"\x\{..xxi \ Suc n. f i) = (\i \ n. f i) + f(Suc n)" +by (simp add:atMost_Suc add_ac) + lemma setsum_lessThan_Suc[simp]: "(\i < Suc n. f i) = (\i < n. f i) + f n" by (simp add:lessThan_Suc add_ac)