diff -r 179ff9cb160b -r 5b25fee0362c src/HOL/SetInterval.thy --- a/src/HOL/SetInterval.thy Wed Mar 04 10:43:39 2009 +0100 +++ b/src/HOL/SetInterval.thy Wed Mar 04 10:45:52 2009 +0100 @@ -66,10 +66,10 @@ "@INTER_less" :: "nat => nat => 'b set => 'b set" ("(3\ _<_./ _)" 10) syntax (xsymbols) - "@UNION_le" :: "nat \ nat => 'b set => 'b set" ("(3\(00\<^bsub>_ \ _\<^esub>)/ _)" 10) - "@UNION_less" :: "nat \ nat => 'b set => 'b set" ("(3\(00\<^bsub>_ < _\<^esub>)/ _)" 10) - "@INTER_le" :: "nat \ nat => 'b set => 'b set" ("(3\(00\<^bsub>_ \ _\<^esub>)/ _)" 10) - "@INTER_less" :: "nat \ nat => 'b set => 'b set" ("(3\(00\<^bsub>_ < _\<^esub>)/ _)" 10) + "@UNION_le" :: "nat \ nat => 'b set => 'b set" ("(3\(00_ \ _)/ _)" 10) + "@UNION_less" :: "nat \ nat => 'b set => 'b set" ("(3\(00_ < _)/ _)" 10) + "@INTER_le" :: "nat \ nat => 'b set => 'b set" ("(3\(00_ \ _)/ _)" 10) + "@INTER_less" :: "nat \ nat => 'b set => 'b set" ("(3\(00_ < _)/ _)" 10) translations "UN i<=n. A" == "UN i:{..n}. A" @@ -352,11 +352,11 @@ corollary image_Suc_atLeastAtMost[simp]: "Suc ` {i..j} = {Suc i..Suc j}" -using image_add_atLeastAtMost[where k=1] by simp +using image_add_atLeastAtMost[where k="Suc 0"] by simp corollary image_Suc_atLeastLessThan[simp]: "Suc ` {i.. M \ card {k. Suc k \ M \ k < i} = card {k \ M. k < Suc i}" -apply (rule card_bij_eq [of "Suc" _ _ "\x. x - 1"]) +apply (rule card_bij_eq [of "Suc" _ _ "\x. x - Suc 0"]) apply simp apply fastsimp apply auto @@ -803,7 +803,7 @@ lemma setsum_head_upt_Suc: "m < n \ setsum f {m.. setsum f {Suc 0..k} = setsum f {0..k}" @@ -883,6 +883,7 @@ by (rule setsum_addf) also from ngt1 have "\ = ?n*a + (\i\{.. = (?n*a + d*(\i\{1.. = (1+1)*?n*a + d*(1+1)*(\i\{1..i\{1..n - 1}. ?I i) = ((1+1)*?n*a + d*?I (n - 1)*?I n)" - by (simp only: mult_ac gauss_sum [of "n - 1"]) + by (simp only: mult_ac gauss_sum [of "n - 1"], unfold One_nat_def) (simp add: mult_ac trans [OF add_commute of_nat_Suc [symmetric]]) finally show ?thesis by (simp add: algebra_simps) next @@ -906,7 +907,8 @@ "((1::nat) + 1) * (\i\{.. 'a \ 'a \ 'b \ 'b" ("(PROD _ = _.._./ _)" [0,0,0,10] 10) + "_from_upto_setprod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(PROD _ = _..<_./ _)" [0,0,0,10] 10) + "_upt_setprod" :: "idt \ 'a \ 'b \ 'b" ("(PROD _<_./ _)" [0,0,10] 10) + "_upto_setprod" :: "idt \ 'a \ 'b \ 'b" ("(PROD _<=_./ _)" [0,0,10] 10) +syntax (xsymbols) + "_from_to_setprod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _.._./ _)" [0,0,0,10] 10) + "_from_upto_setprod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _..<_./ _)" [0,0,0,10] 10) + "_upt_setprod" :: "idt \ 'a \ 'b \ 'b" ("(3\_<_./ _)" [0,0,10] 10) + "_upto_setprod" :: "idt \ 'a \ 'b \ 'b" ("(3\_\_./ _)" [0,0,10] 10) +syntax (HTML output) + "_from_to_setprod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _.._./ _)" [0,0,0,10] 10) + "_from_upto_setprod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _..<_./ _)" [0,0,0,10] 10) + "_upt_setprod" :: "idt \ 'a \ 'b \ 'b" ("(3\_<_./ _)" [0,0,10] 10) + "_upto_setprod" :: "idt \ 'a \ 'b \ 'b" ("(3\_\_./ _)" [0,0,10] 10) +syntax (latex_prod output) + "_from_to_setprod" :: "idt \ 'a \ 'a \ 'b \ 'b" + ("(3\<^raw:$\prod_{>_ = _\<^raw:}^{>_\<^raw:}$> _)" [0,0,0,10] 10) + "_from_upto_setprod" :: "idt \ 'a \ 'a \ 'b \ 'b" + ("(3\<^raw:$\prod_{>_ = _\<^raw:}^{<>_\<^raw:}$> _)" [0,0,0,10] 10) + "_upt_setprod" :: "idt \ 'a \ 'b \ 'b" + ("(3\<^raw:$\prod_{>_ < _\<^raw:}$> _)" [0,0,10] 10) + "_upto_setprod" :: "idt \ 'a \ 'b \ 'b" + ("(3\<^raw:$\prod_{>_ \ _\<^raw:}$> _)" [0,0,10] 10) + +translations + "\x=a..b. t" == "CONST setprod (%x. t) {a..b}" + "\x=a..i\n. t" == "CONST setprod (\i. t) {..n}" + "\ii. t) {..