# HG changeset patch # User nipkow # Date 1476718387 -7200 # Node ID f76b6dda2e569fefa0a5117ccf34f88fe2ae16a5 # Parent c939cc16b605970a2f3ec7b47233ab40c9f20750 setprod -> prod diff -r c939cc16b605 -r f76b6dda2e56 src/Doc/Main/Main_Doc.thy --- a/src/Doc/Main/Main_Doc.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/Doc/Main/Main_Doc.thy Mon Oct 17 17:33:07 2016 +0200 @@ -409,7 +409,7 @@ @{const Finite_Set.card} & @{term_type_only Finite_Set.card "'a set \ nat"}\\ @{const Finite_Set.fold} & @{term_type_only Finite_Set.fold "('a \ 'b \ 'b) \ 'b \ 'a set \ 'b"}\\ @{const Groups_Big.sum} & @{term_type_only Groups_Big.sum "('a \ 'b) \ 'a set \ 'b::comm_monoid_add"}\\ -@{const Groups_Big.setprod} & @{term_type_only Groups_Big.setprod "('a \ 'b) \ 'a set \ 'b::comm_monoid_mult"}\\ +@{const Groups_Big.prod} & @{term_type_only Groups_Big.prod "('a \ 'b) \ 'a set \ 'b::comm_monoid_mult"}\\ \end{supertabular} diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Algebra/IntRing.thy --- a/src/HOL/Algebra/IntRing.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Algebra/IntRing.thy Mon Oct 17 17:33:07 2016 +0200 @@ -73,7 +73,7 @@ qed interpretation int: comm_monoid \ - rewrites "finprod \ f A = setprod f A" + rewrites "finprod \ f A = prod f A" proof - \ "Specification" show "comm_monoid \" by standard auto @@ -83,7 +83,7 @@ { fix x y have "mult \ x y = x * y" by simp } note mult = this have one: "one \ = 1" by simp - show "finprod \ f A = setprod f A" + show "finprod \ f A = prod f A" by (induct A rule: infinite_finite_induct, auto) qed diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Bochner_Integration.thy --- a/src/HOL/Analysis/Bochner_Integration.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Bochner_Integration.thy Mon Oct 17 17:33:07 2016 +0200 @@ -3003,7 +3003,7 @@ finally show ?thesis . qed -lemma (in product_sigma_finite) product_integrable_setprod: +lemma (in product_sigma_finite) product_integrable_prod: fixes f :: "'i \ 'a \ _::{real_normed_field,banach,second_countable_topology}" assumes [simp]: "finite I" and integrable: "\i. i \ I \ integrable (M i) (f i)" shows "integrable (Pi\<^sub>M I M) (\x. (\i\I. f i (x i)))" (is "integrable _ ?f") @@ -3014,15 +3014,15 @@ using assms by simp have "(\\<^sup>+ x. ennreal (norm (\i\I. f i (x i))) \Pi\<^sub>M I M) = (\\<^sup>+ x. (\i\I. ennreal (norm (f i (x i)))) \Pi\<^sub>M I M)" - by (simp add: setprod_norm setprod_ennreal) + by (simp add: prod_norm prod_ennreal) also have "\ = (\i\I. \\<^sup>+ x. ennreal (norm (f i x)) \M i)" - using assms by (intro product_nn_integral_setprod) auto + using assms by (intro product_nn_integral_prod) auto also have "\ < \" - using integrable by (simp add: less_top[symmetric] ennreal_setprod_eq_top integrable_iff_bounded) + using integrable by (simp add: less_top[symmetric] ennreal_prod_eq_top integrable_iff_bounded) finally show "(\\<^sup>+ x. ennreal (norm (\i\I. f i (x i))) \Pi\<^sub>M I M) < \" . qed -lemma (in product_sigma_finite) product_integral_setprod: +lemma (in product_sigma_finite) product_integral_prod: fixes f :: "'i \ 'a \ _::{real_normed_field,banach,second_countable_topology}" assumes "finite I" and integrable: "\i. i \ I \ integrable (M i) (f i)" shows "(\x. (\i\I. f i (x i)) \Pi\<^sub>M I M) = (\i\I. integral\<^sup>L (M i) (f i))" @@ -3036,10 +3036,10 @@ then have iI: "finite (insert i I)" by auto then have prod: "\J. J \ insert i I \ integrable (Pi\<^sub>M J M) (\x. (\i\J. f i (x i)))" - by (intro product_integrable_setprod insert(4)) (auto intro: finite_subset) + by (intro product_integrable_prod insert(4)) (auto intro: finite_subset) interpret I: finite_product_sigma_finite M I by standard fact have *: "\x y. (\j\I. f j (if j = i then y else x j)) = (\j\I. f j (x j))" - using \i \ I\ by (auto intro!: setprod.cong) + using \i \ I\ by (auto intro!: prod.cong) show ?case unfolding product_integral_insert[OF insert(1,2) prod[OF subset_refl]] by (simp add: * insert prod subset_insertI) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Borel_Space.thy --- a/src/HOL/Analysis/Borel_Space.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Borel_Space.thy Mon Oct 17 17:33:07 2016 +0200 @@ -1348,7 +1348,7 @@ shows "(\x. f x * g x) \ borel_measurable M" using f g by (rule borel_measurable_continuous_Pair) (intro continuous_intros) -lemma borel_measurable_setprod[measurable (raw)]: +lemma borel_measurable_prod[measurable (raw)]: fixes f :: "'c \ 'a \ 'b::{second_countable_topology, real_normed_field}" assumes "\i. i \ S \ f i \ borel_measurable M" shows "(\x. \i\S. f i x) \ borel_measurable M" @@ -1652,7 +1652,7 @@ shows "(\x. \i\S. f i x) \ borel_measurable M" using assms by (induction S rule: infinite_finite_induct) auto -lemma borel_measurable_ereal_setprod[measurable (raw)]: +lemma borel_measurable_ereal_prod[measurable (raw)]: fixes f :: "'c \ 'a \ ereal" assumes "\i. i \ S \ f i \ borel_measurable M" shows "(\x. \i\S. f i x) \ borel_measurable M" @@ -1728,7 +1728,7 @@ shows "f \ M \\<^sub>M borel \ g \ M \\<^sub>M borel \ (\x. f x - g x) \ M \\<^sub>M borel" unfolding is_borel_def[symmetric] by transfer simp -lemma borel_measurable_setprod_ennreal[measurable (raw)]: +lemma borel_measurable_prod_ennreal[measurable (raw)]: fixes f :: "'c \ 'a \ ennreal" assumes "\i. i \ S \ f i \ borel_measurable M" shows "(\x. \i\S. f i x) \ borel_measurable M" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Determinants.thy --- a/src/HOL/Analysis/Determinants.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Determinants.thy Mon Oct 17 17:33:07 2016 +0200 @@ -37,20 +37,20 @@ definition det:: "'a::comm_ring_1^'n^'n \ 'a" where "det A = - sum (\p. of_int (sign p) * setprod (\i. A$i$p i) (UNIV :: 'n set)) + sum (\p. of_int (sign p) * prod (\i. A$i$p i) (UNIV :: 'n set)) {p. p permutes (UNIV :: 'n set)}" text \A few general lemmas we need below.\ -lemma setprod_permute: +lemma prod_permute: assumes p: "p permutes S" - shows "setprod f S = setprod (f \ p) S" - using assms by (fact setprod.permute) + shows "prod f S = prod (f \ p) S" + using assms by (fact prod.permute) -lemma setproduct_permute_nat_interval: +lemma product_permute_nat_interval: fixes m n :: nat - shows "p permutes {m..n} \ setprod f {m..n} = setprod (f \ p) {m..n}" - by (blast intro!: setprod_permute) + shows "p permutes {m..n} \ prod f {m..n} = prod (f \ p) {m..n}" + by (blast intro!: prod_permute) text \Basic determinant properties.\ @@ -70,12 +70,12 @@ have pi: "inj_on p ?U" by (blast intro: subset_inj_on) from permutes_image[OF pU] - have "setprod (\i. ?di (transpose A) i (inv p i)) ?U = - setprod (\i. ?di (transpose A) i (inv p i)) (p ` ?U)" + have "prod (\i. ?di (transpose A) i (inv p i)) ?U = + prod (\i. ?di (transpose A) i (inv p i)) (p ` ?U)" by simp - also have "\ = setprod ((\i. ?di (transpose A) i (inv p i)) \ p) ?U" - unfolding setprod.reindex[OF pi] .. - also have "\ = setprod (\i. ?di A i (p i)) ?U" + also have "\ = prod ((\i. ?di (transpose A) i (inv p i)) \ p) ?U" + unfolding prod.reindex[OF pi] .. + also have "\ = prod (\i. ?di A i (p i)) ?U" proof - { fix i @@ -84,12 +84,12 @@ have "((\i. ?di (transpose A) i (inv p i)) \ p) i = ?di A i (p i)" unfolding transpose_def by (simp add: fun_eq_iff) } - then show "setprod ((\i. ?di (transpose A) i (inv p i)) \ p) ?U = - setprod (\i. ?di A i (p i)) ?U" - by (auto intro: setprod.cong) + then show "prod ((\i. ?di (transpose A) i (inv p i)) \ p) ?U = + prod (\i. ?di A i (p i)) ?U" + by (auto intro: prod.cong) qed - finally have "of_int (sign (inv p)) * (setprod (\i. ?di (transpose A) i (inv p i)) ?U) = - of_int (sign p) * (setprod (\i. ?di A i (p i)) ?U)" + finally have "of_int (sign (inv p)) * (prod (\i. ?di (transpose A) i (inv p i)) ?U) = + of_int (sign p) * (prod (\i. ?di A i (p i)) ?U)" using sth by simp } then show ?thesis @@ -104,11 +104,11 @@ lemma det_lowerdiagonal: fixes A :: "'a::comm_ring_1^('n::{finite,wellorder})^('n::{finite,wellorder})" assumes ld: "\i j. i < j \ A$i$j = 0" - shows "det A = setprod (\i. A$i$i) (UNIV:: 'n set)" + shows "det A = prod (\i. A$i$i) (UNIV:: 'n set)" proof - let ?U = "UNIV:: 'n set" let ?PU = "{p. p permutes ?U}" - let ?pp = "\p. of_int (sign p) * setprod (\i. A$i$p i) (UNIV :: 'n set)" + let ?pp = "\p. of_int (sign p) * prod (\i. A$i$p i) (UNIV :: 'n set)" have fU: "finite ?U" by simp from finite_permutations[OF fU] have fPU: "finite ?PU" . @@ -123,7 +123,7 @@ by (metis not_le) from ld[OF i] have ex:"\i \ ?U. A$i$p i = 0" by blast - from setprod_zero[OF fU ex] have "?pp p = 0" + from prod_zero[OF fU ex] have "?pp p = 0" by simp } then have p0: "\p \ ?PU - {id}. ?pp p = 0" @@ -135,11 +135,11 @@ lemma det_upperdiagonal: fixes A :: "'a::comm_ring_1^'n::{finite,wellorder}^'n::{finite,wellorder}" assumes ld: "\i j. i > j \ A$i$j = 0" - shows "det A = setprod (\i. A$i$i) (UNIV:: 'n set)" + shows "det A = prod (\i. A$i$i) (UNIV:: 'n set)" proof - let ?U = "UNIV:: 'n set" let ?PU = "{p. p permutes ?U}" - let ?pp = "(\p. of_int (sign p) * setprod (\i. A$i$p i) (UNIV :: 'n set))" + let ?pp = "(\p. of_int (sign p) * prod (\i. A$i$p i) (UNIV :: 'n set))" have fU: "finite ?U" by simp from finite_permutations[OF fU] have fPU: "finite ?PU" . @@ -154,7 +154,7 @@ by (metis not_le) from ld[OF i] have ex:"\i \ ?U. A$i$p i = 0" by blast - from setprod_zero[OF fU ex] have "?pp p = 0" + from prod_zero[OF fU ex] have "?pp p = 0" by simp } then have p0: "\p \ ?PU -{id}. ?pp p = 0" @@ -166,11 +166,11 @@ lemma det_diagonal: fixes A :: "'a::comm_ring_1^'n^'n" assumes ld: "\i j. i \ j \ A$i$j = 0" - shows "det A = setprod (\i. A$i$i) (UNIV::'n set)" + shows "det A = prod (\i. A$i$i) (UNIV::'n set)" proof - let ?U = "UNIV:: 'n set" let ?PU = "{p. p permutes ?U}" - let ?pp = "\p. of_int (sign p) * setprod (\i. A$i$p i) (UNIV :: 'n set)" + let ?pp = "\p. of_int (sign p) * prod (\i. A$i$p i) (UNIV :: 'n set)" have fU: "finite ?U" by simp from finite_permutations[OF fU] have fPU: "finite ?PU" . have id0: "{id} \ ?PU" @@ -184,7 +184,7 @@ unfolding fun_eq_iff by auto from ld [OF i [symmetric]] have ex:"\i \ ?U. A$i$p i = 0" by blast - from setprod_zero [OF fU ex] have "?pp p = 0" + from prod_zero [OF fU ex] have "?pp p = 0" by simp } then have p0: "\p \ ?PU - {id}. ?pp p = 0" @@ -204,23 +204,23 @@ have "?f i i = 1" using i by (vector mat_def) } - then have th: "setprod (\i. ?f i i) ?U = setprod (\x. 1) ?U" - by (auto intro: setprod.cong) + then have th: "prod (\i. ?f i i) ?U = prod (\x. 1) ?U" + by (auto intro: prod.cong) { fix i j assume i: "i \ ?U" and j: "j \ ?U" and ij: "i \ j" have "?f i j = 0" using i j ij by (vector mat_def) } - then have "det ?A = setprod (\i. ?f i i) ?U" + then have "det ?A = prod (\i. ?f i i) ?U" using det_diagonal by blast also have "\ = 1" - unfolding th setprod.neutral_const .. + unfolding th prod.neutral_const .. finally show ?thesis . qed lemma det_0: "det (mat 0 :: 'a::comm_ring_1^'n^'n) = 0" - by (simp add: det_def setprod_zero) + by (simp add: det_def prod_zero) lemma det_permute_rows: fixes A :: "'a::comm_ring_1^'n^'n" @@ -240,16 +240,16 @@ from p q have pp: "permutation p" and qp: "permutation q" by (metis fU permutation_permutes)+ from permutes_inv[OF p] have ip: "inv p permutes ?U" . - have "setprod (\i. A$p i$ (q \ p) i) ?U = setprod ((\i. A$p i$(q \ p) i) \ inv p) ?U" - by (simp only: setprod_permute[OF ip, symmetric]) - also have "\ = setprod (\i. A $ (p \ inv p) i $ (q \ (p \ inv p)) i) ?U" + have "prod (\i. A$p i$ (q \ p) i) ?U = prod ((\i. A$p i$(q \ p) i) \ inv p) ?U" + by (simp only: prod_permute[OF ip, symmetric]) + also have "\ = prod (\i. A $ (p \ inv p) i $ (q \ (p \ inv p)) i) ?U" by (simp only: o_def) - also have "\ = setprod (\i. A$i$q i) ?U" + also have "\ = prod (\i. A$i$q i) ?U" by (simp only: o_def permutes_inverses[OF p]) - finally have thp: "setprod (\i. A$p i$ (q \ p) i) ?U = setprod (\i. A$i$q i) ?U" + finally have thp: "prod (\i. A$p i$ (q \ p) i) ?U = prod (\i. A$i$q i) ?U" by blast - show "of_int (sign (q \ p)) * setprod (\i. A$ p i$ (q \ p) i) ?U = - of_int (sign p) * of_int (sign q) * setprod (\i. A$i$q i) ?U" + show "of_int (sign (q \ p)) * prod (\i. A$ p i$ (q \ p) i) ?U = + of_int (sign p) * of_int (sign q) * prod (\i. A$i$q i) ?U" by (simp only: thp sign_compose[OF qp pp] mult.commute of_int_mult) qed rule @@ -341,30 +341,30 @@ from j have "?f j $ p j = ?g j $ p j" and "?f j $ p j= ?h j $ p j" by simp_all } - then have th1: "setprod (\i. ?f i $ p i) ?Uk = setprod (\i. ?g i $ p i) ?Uk" - and th2: "setprod (\i. ?f i $ p i) ?Uk = setprod (\i. ?h i $ p i) ?Uk" + then have th1: "prod (\i. ?f i $ p i) ?Uk = prod (\i. ?g i $ p i) ?Uk" + and th2: "prod (\i. ?f i $ p i) ?Uk = prod (\i. ?h i $ p i) ?Uk" apply - - apply (rule setprod.cong, simp_all)+ + apply (rule prod.cong, simp_all)+ done have th3: "finite ?Uk" "k \ ?Uk" by auto - have "setprod (\i. ?f i $ p i) ?U = setprod (\i. ?f i $ p i) (insert k ?Uk)" + have "prod (\i. ?f i $ p i) ?U = prod (\i. ?f i $ p i) (insert k ?Uk)" unfolding kU[symmetric] .. - also have "\ = ?f k $ p k * setprod (\i. ?f i $ p i) ?Uk" - apply (rule setprod.insert) + also have "\ = ?f k $ p k * prod (\i. ?f i $ p i) ?Uk" + apply (rule prod.insert) apply simp apply blast done - also have "\ = (a k $ p k * setprod (\i. ?f i $ p i) ?Uk) + (b k$ p k * setprod (\i. ?f i $ p i) ?Uk)" + also have "\ = (a k $ p k * prod (\i. ?f i $ p i) ?Uk) + (b k$ p k * prod (\i. ?f i $ p i) ?Uk)" by (simp add: field_simps) - also have "\ = (a k $ p k * setprod (\i. ?g i $ p i) ?Uk) + (b k$ p k * setprod (\i. ?h i $ p i) ?Uk)" + also have "\ = (a k $ p k * prod (\i. ?g i $ p i) ?Uk) + (b k$ p k * prod (\i. ?h i $ p i) ?Uk)" by (metis th1 th2) - also have "\ = setprod (\i. ?g i $ p i) (insert k ?Uk) + setprod (\i. ?h i $ p i) (insert k ?Uk)" - unfolding setprod.insert[OF th3] by simp - finally have "setprod (\i. ?f i $ p i) ?U = setprod (\i. ?g i $ p i) ?U + setprod (\i. ?h i $ p i) ?U" + also have "\ = prod (\i. ?g i $ p i) (insert k ?Uk) + prod (\i. ?h i $ p i) (insert k ?Uk)" + unfolding prod.insert[OF th3] by simp + finally have "prod (\i. ?f i $ p i) ?U = prod (\i. ?g i $ p i) ?U + prod (\i. ?h i $ p i) ?U" unfolding kU[symmetric] . - then show "of_int (sign p) * setprod (\i. ?f i $ p i) ?U = - of_int (sign p) * setprod (\i. ?g i $ p i) ?U + of_int (sign p) * setprod (\i. ?h i $ p i) ?U" + then show "of_int (sign p) * prod (\i. ?f i $ p i) ?U = + of_int (sign p) * prod (\i. ?g i $ p i) ?U + of_int (sign p) * prod (\i. ?h i $ p i) ?U" by (simp add: field_simps) qed rule @@ -391,30 +391,30 @@ from j have "?f j $ p j = ?g j $ p j" by simp } - then have th1: "setprod (\i. ?f i $ p i) ?Uk = setprod (\i. ?g i $ p i) ?Uk" + then have th1: "prod (\i. ?f i $ p i) ?Uk = prod (\i. ?g i $ p i) ?Uk" apply - - apply (rule setprod.cong) + apply (rule prod.cong) apply simp_all done have th3: "finite ?Uk" "k \ ?Uk" by auto - have "setprod (\i. ?f i $ p i) ?U = setprod (\i. ?f i $ p i) (insert k ?Uk)" + have "prod (\i. ?f i $ p i) ?U = prod (\i. ?f i $ p i) (insert k ?Uk)" unfolding kU[symmetric] .. - also have "\ = ?f k $ p k * setprod (\i. ?f i $ p i) ?Uk" - apply (rule setprod.insert) + also have "\ = ?f k $ p k * prod (\i. ?f i $ p i) ?Uk" + apply (rule prod.insert) apply simp apply blast done - also have "\ = (c*s a k) $ p k * setprod (\i. ?f i $ p i) ?Uk" + also have "\ = (c*s a k) $ p k * prod (\i. ?f i $ p i) ?Uk" by (simp add: field_simps) - also have "\ = c* (a k $ p k * setprod (\i. ?g i $ p i) ?Uk)" + also have "\ = c* (a k $ p k * prod (\i. ?g i $ p i) ?Uk)" unfolding th1 by (simp add: ac_simps) - also have "\ = c* (setprod (\i. ?g i $ p i) (insert k ?Uk))" - unfolding setprod.insert[OF th3] by simp - finally have "setprod (\i. ?f i $ p i) ?U = c* (setprod (\i. ?g i $ p i) ?U)" + also have "\ = c* (prod (\i. ?g i $ p i) (insert k ?Uk))" + unfolding prod.insert[OF th3] by simp + finally have "prod (\i. ?f i $ p i) ?U = c* (prod (\i. ?g i $ p i) ?U)" unfolding kU[symmetric] . - then show "of_int (sign p) * setprod (\i. ?f i $ p i) ?U = - c * (of_int (sign p) * setprod (\i. ?g i $ p i) ?U)" + then show "of_int (sign p) * prod (\i. ?f i $ p i) ?U = + c * (of_int (sign p) * prod (\i. ?g i $ p i) ?U)" by (simp add: field_simps) qed rule @@ -644,8 +644,8 @@ lemma det_rows_mul: "det((\ i. c i *s a i)::'a::comm_ring_1^'n^'n) = - setprod (\i. c i) (UNIV:: 'n set) * det((\ i. a i)::'a^'n^'n)" -proof (simp add: det_def sum_distrib_left cong add: setprod.cong, rule sum.cong) + prod (\i. c i) (UNIV:: 'n set) * det((\ i. a i)::'a^'n^'n)" +proof (simp add: det_def sum_distrib_left cong add: prod.cong, rule sum.cong) let ?U = "UNIV :: 'n set" let ?PU = "{p. p permutes ?U}" fix p @@ -653,10 +653,10 @@ let ?s = "of_int (sign p)" from pU have p: "p permutes ?U" by blast - have "setprod (\i. c i * a i $ p i) ?U = setprod c ?U * setprod (\i. a i $ p i) ?U" - unfolding setprod.distrib .. + have "prod (\i. c i * a i $ p i) ?U = prod c ?U * prod (\i. a i $ p i) ?U" + unfolding prod.distrib .. then show "?s * (\xa\?U. c xa * a xa $ p xa) = - setprod c ?U * (?s* (\xa\?U. a xa $ p xa))" + prod c ?U * (?s* (\xa\?U. a xa $ p xa))" by (simp add: field_simps) qed rule @@ -754,17 +754,17 @@ have ths: "?s q = ?s p * ?s (q \ inv p)" using pp pq permutation_inverse[OF pp] sign_inverse[OF pp] by (simp add: th00 ac_simps sign_idempotent sign_compose) - have th001: "setprod (\i. B$i$ q (inv p i)) ?U = setprod ((\i. B$i$ q (inv p i)) \ p) ?U" - by (rule setprod_permute[OF p]) - have thp: "setprod (\i. (\ i. A$i$p i *s B$p i :: 'a^'n^'n) $i $ q i) ?U = - setprod (\i. A$i$p i) ?U * setprod (\i. B$i$ q (inv p i)) ?U" - unfolding th001 setprod.distrib[symmetric] o_def permutes_inverses[OF p] - apply (rule setprod.cong[OF refl]) + have th001: "prod (\i. B$i$ q (inv p i)) ?U = prod ((\i. B$i$ q (inv p i)) \ p) ?U" + by (rule prod_permute[OF p]) + have thp: "prod (\i. (\ i. A$i$p i *s B$p i :: 'a^'n^'n) $i $ q i) ?U = + prod (\i. A$i$p i) ?U * prod (\i. B$i$ q (inv p i)) ?U" + unfolding th001 prod.distrib[symmetric] o_def permutes_inverses[OF p] + apply (rule prod.cong[OF refl]) using permutes_in_image[OF q] apply vector done - show "?s q * setprod (\i. (((\ i. A$i$p i *s B$p i) :: 'a^'n^'n)$i$q i)) ?U = - ?s p * (setprod (\i. A$i$p i) ?U) * (?s (q \ inv p) * setprod (\i. B$i$(q \ inv p) i) ?U)" + show "?s q * prod (\i. (((\ i. A$i$p i *s B$p i) :: 'a^'n^'n)$i$q i)) ?U = + ?s p * (prod (\i. A$i$p i) ?U) * (?s (q \ inv p) * prod (\i. B$i$(q \ inv p) i) ?U)" using ths thp pp pq permutation_inverse[OF pp] sign_inverse[OF pp] by (simp add: sign_nz th00 field_simps sign_idempotent sign_compose) qed rule @@ -1202,13 +1202,13 @@ text \Explicit formulas for low dimensions.\ -lemma setprod_neutral_const: "setprod f {(1::nat)..1} = f 1" +lemma prod_neutral_const: "prod f {(1::nat)..1} = f 1" by simp -lemma setprod_2: "setprod f {(1::nat)..2} = f 1 * f 2" +lemma prod_2: "prod f {(1::nat)..2} = f 1 * f 2" by (simp add: eval_nat_numeral atLeastAtMostSuc_conv mult.commute) -lemma setprod_3: "setprod f {(1::nat)..3} = f 1 * f 2 * f 3" +lemma prod_3: "prod f {(1::nat)..3} = f 1 * f 2 * f 3" by (simp add: eval_nat_numeral atLeastAtMostSuc_conv mult.commute) lemma det_1: "det (A::'a::comm_ring_1^1^1) = A$1$1" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Equivalence_Lebesgue_Henstock_Integration.thy --- a/src/HOL/Analysis/Equivalence_Lebesgue_Henstock_Integration.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Equivalence_Lebesgue_Henstock_Integration.thy Mon Oct 17 17:33:07 2016 +0200 @@ -1129,7 +1129,7 @@ lemma negligible_interval: "negligible (cbox a b) \ box a b = {}" "negligible (box a b) \ box a b = {}" - by (auto simp: negligible_iff_null_sets null_sets_def setprod_nonneg inner_diff_left box_eq_empty + by (auto simp: negligible_iff_null_sets null_sets_def prod_nonneg inner_diff_left box_eq_empty not_le emeasure_lborel_cbox_eq emeasure_lborel_box_eq intro: eq_refl antisym less_imp_le) @@ -1254,9 +1254,9 @@ then have ufvf: "cbox (uf X) (vf X) = X" using uvz by blast have "prj1 (vf X - uf X) ^ DIM('M) = (\i::'M \ Basis. prj1 (vf X - uf X))" - by (rule setprod_constant [symmetric]) + by (rule prod_constant [symmetric]) also have "\ = (\i\Basis. vf X \ i - uf X \ i)" - using prj1_idem [OF \X \ \\] by (auto simp: algebra_simps intro: setprod.cong) + using prj1_idem [OF \X \ \\] by (auto simp: algebra_simps intro: prod.cong) finally have prj1_eq: "prj1 (vf X - uf X) ^ DIM('M) = (\i\Basis. vf X \ i - uf X \ i)" . have "uf X \ cbox (uf X) (vf X)" "vf X \ cbox (uf X) (vf X)" using uvz [OF \X \ \\] by (force simp: mem_box)+ @@ -1272,7 +1272,7 @@ have 0: "0 \ prj1 (vf X - uf X)" using \X \ \\ prj1_def vu_pos by fastforce have "(measure lebesgue \ fbx) X \ (2 * B * DIM('M)) ^ DIM('N) * content (cbox (uf X) (vf X))" - apply (simp add: fbx_def content_cbox_cases algebra_simps BM_ge0 \X \ \'\ setprod_constant) + apply (simp add: fbx_def content_cbox_cases algebra_simps BM_ge0 \X \ \'\ prod_constant) apply (simp add: power_mult_distrib \0 < B\ prj1_eq [symmetric]) using MleN 0 1 uvz \X \ \\ apply (fastforce simp add: box_ne_empty power_decreasing) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Finite_Product_Measure.thy --- a/src/HOL/Analysis/Finite_Product_Measure.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Finite_Product_Measure.thy Mon Oct 17 17:33:07 2016 +0200 @@ -202,7 +202,7 @@ next case (4 x) thus ?case using assms - by (auto intro!: setprod.cong split: if_split_asm) + by (auto intro!: prod.cong split: if_split_asm) qed @@ -926,12 +926,12 @@ by (auto simp: prod_emb_iff PiE_def Pi_iff split: if_split_asm) blast+ also have "emeasure (Pi\<^sub>M I M) (\\<^sub>E j\I. if j \ J-{i} then E j else space (M j)) = (\ j\I. if j \ J-{i} then emeasure (M j) (E j) else emeasure (M j) (space (M j)))" - using E by (subst insert) (auto intro!: setprod.cong) + using E by (subst insert) (auto intro!: prod.cong) also have "(\j\I. if j \ J - {i} then emeasure (M j) (E j) else emeasure (M j) (space (M j))) * emeasure (M i) (if i \ J then E i else space (M i)) = (\j\insert i I. ?f J E j)" - using insert by (auto simp: mult.commute intro!: arg_cong2[where f="op *"] setprod.cong) + using insert by (auto simp: mult.commute intro!: arg_cong2[where f="op *"] prod.cong) also have "\ = (\j\J \ ?I. ?f J E j)" - using insert(1,2) J E by (intro setprod.mono_neutral_right) auto + using insert(1,2) J E by (intro prod.mono_neutral_right) auto finally show "?\ ?p = \" . show "prod_emb (insert i I) M J (Pi\<^sub>E J E) \ Pow (\\<^sub>E i\insert i I. space (M i))" @@ -943,7 +943,7 @@ show "(insert i I \ {} \ insert i I = {}) \ finite (insert i I) \ insert i I \ insert i I \ A \ (\ j\insert i I. sets (M j))" using insert by auto - qed (auto intro!: setprod.cong) + qed (auto intro!: prod.cong) with insert show ?case by (subst (asm) prod_emb_PiE_same_index) (auto intro!: sets.sets_into_space) qed simp @@ -962,7 +962,7 @@ by (simp add: eq emeasure_PiM) define A where "A n = (\\<^sub>E i\I. C i n)" for n with C show "range A \ prod_algebra I M" "\i. emeasure (Pi\<^sub>M I M) (A i) \ \" "(\i. A i) = space (PiM I M)" - by (auto intro!: prod_algebraI_finite simp: emeasure_PiM subset_eq ennreal_setprod_eq_top) + by (auto intro!: prod_algebraI_finite simp: emeasure_PiM subset_eq ennreal_prod_eq_top) qed qed @@ -981,7 +981,7 @@ ultimately show "\A. countable A \ A \ sets (Pi\<^sub>M I M) \ \A = space (Pi\<^sub>M I M) \ (\a\A. emeasure (Pi\<^sub>M I M) a \ \)" by (intro exI[of _ "PiE I ` PiE I F"]) (auto intro!: countable_PiE sets_PiM_I_finite - simp: PiE_iff emeasure_PiM finite_index ennreal_setprod_eq_top) + simp: PiE_iff emeasure_PiM finite_index ennreal_prod_eq_top) qed sublocale finite_product_sigma_finite \ sigma_finite_measure "Pi\<^sub>M I M" @@ -1008,7 +1008,7 @@ from A fin show "emeasure (distr (Pi\<^sub>M I M \\<^sub>M Pi\<^sub>M J M) (Pi\<^sub>M (I \ J) M) (merge I J)) (Pi\<^sub>E (I \ J) A) = (\i\I \ J. emeasure (M i) (A i))" by (subst emeasure_distr) - (auto simp: * J.emeasure_pair_measure_Times I.measure_times J.measure_times setprod.union_disjoint) + (auto simp: * J.emeasure_pair_measure_Times I.measure_times J.measure_times prod.union_disjoint) qed (insert fin, simp_all) lemma (in product_sigma_finite) product_nn_integral_fold: @@ -1090,7 +1090,7 @@ apply measurable done -lemma (in product_sigma_finite) product_nn_integral_setprod: +lemma (in product_sigma_finite) product_nn_integral_prod: assumes "finite I" "\i. i \ I \ f i \ borel_measurable (M i)" shows "(\\<^sup>+ x. (\i\I. f i (x i)) \Pi\<^sub>M I M) = (\i\I. integral\<^sup>N (M i) (f i))" using assms proof (induction I) @@ -1099,10 +1099,10 @@ note \finite I\[intro, simp] interpret I: finite_product_sigma_finite M I by standard auto have *: "\x y. (\j\I. f j (if j = i then y else x j)) = (\j\I. f j (x j))" - using insert by (auto intro!: setprod.cong) + using insert by (auto intro!: prod.cong) have prod: "\J. J \ insert i I \ (\x. (\i\J. f i (x i))) \ borel_measurable (Pi\<^sub>M J M)" using sets.sets_into_space insert - by (intro borel_measurable_setprod_ennreal + by (intro borel_measurable_prod_ennreal measurable_comp[OF measurable_component_singleton, unfolded comp_def]) auto then show ?case diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Gamma_Function.thy --- a/src/HOL/Analysis/Gamma_Function.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Gamma_Function.thy Mon Oct 17 17:33:07 2016 +0200 @@ -510,15 +510,15 @@ (of_nat n) powr z / (z * (\k=1..n. exp (Ln (z / of_nat k + 1))))" unfolding ln_Gamma_series_def powr_def by (simp add: exp_diff exp_sum) also from assms have "(\k=1..n. exp (Ln (z / of_nat k + 1))) = (\k=1..n. z / of_nat k + 1)" - by (intro setprod.cong[OF refl], subst exp_Ln) (auto simp: field_simps plus_of_nat_eq_0_imp) + by (intro prod.cong[OF refl], subst exp_Ln) (auto simp: field_simps plus_of_nat_eq_0_imp) also have "... = (\k=1..n. z + k) / fact n" - by (simp add: fact_setprod) - (subst setprod_dividef [symmetric], simp_all add: field_simps) + by (simp add: fact_prod) + (subst prod_dividef [symmetric], simp_all add: field_simps) also from m have "z * ... = (\k=0..n. z + k) / fact n" - by (simp add: setprod.atLeast0_atMost_Suc_shift setprod.atLeast_Suc_atMost_Suc_shift) + by (simp add: prod.atLeast0_atMost_Suc_shift prod.atLeast_Suc_atMost_Suc_shift) also have "(\k=0..n. z + k) = pochhammer z (Suc n)" - unfolding pochhammer_setprod - by (simp add: setprod.atLeast0_atMost_Suc atLeastLessThanSuc_atLeastAtMost) + unfolding pochhammer_prod + by (simp add: prod.atLeast0_atMost_Suc atLeastLessThanSuc_atLeastAtMost) also have "of_nat n powr z / (pochhammer z (Suc n) / fact n) = Gamma_series z n" unfolding Gamma_series_def using assms by (simp add: divide_simps powr_def Ln_of_nat) finally show ?thesis . @@ -995,10 +995,10 @@ norm (y - z)) (nhds 0) (at z)" assumes differentiable_rGamma_aux2: "let z = - of_nat n - in filterlim (\y. (rGamma y - rGamma z - (-1)^n * (setprod of_nat {1..n}) * (y - z)) /\<^sub>R + in filterlim (\y. (rGamma y - rGamma z - (-1)^n * (prod of_nat {1..n}) * (y - z)) /\<^sub>R norm (y - z)) (nhds 0) (at z)" assumes rGamma_series_aux: "(\n. z \ - of_nat n) \ - let fact' = (\n. setprod of_nat {1..n}); + let fact' = (\n. prod of_nat {1..n}); exp = (\x. THE e. (\n. \kR fact k) \ e); pochhammer' = (\a n. (\n = 0..n. a + of_nat n)) in filterlim (\n. pochhammer' z n / (fact' n * exp (z * (ln (of_nat n) *\<^sub>R 1)))) @@ -1033,7 +1033,7 @@ case False hence "z \ - of_nat n" for n by auto from rGamma_series_aux[OF this] show ?thesis - by (simp add: rGamma_series_def[abs_def] fact_setprod pochhammer_Suc_setprod + by (simp add: rGamma_series_def[abs_def] fact_prod pochhammer_Suc_prod exp_def of_real_def[symmetric] suminf_def sums_def[abs_def] atLeast0AtMost) qed (insert rGamma_eq_zero_iff[of z], simp_all add: rGamma_series_nonpos_Ints_LIMSEQ) @@ -1183,7 +1183,7 @@ apply (rule has_field_derivative_at_within) using differentiable_rGamma_aux2[of n] unfolding Let_def has_field_derivative_def has_derivative_def netlimit_at - by (simp only: bounded_linear_mult_right mult_ac of_real_def [symmetric] fact_setprod) simp + by (simp only: bounded_linear_mult_right mult_ac of_real_def [symmetric] fact_prod) simp lemma has_field_derivative_rGamma [derivative_intros]: "(rGamma has_field_derivative (if z \ \\<^sub>\\<^sub>0 then (-1)^(nat \norm z\) * fact (nat \norm z\) @@ -1387,18 +1387,18 @@ next fix n :: nat from has_field_derivative_rGamma_complex_nonpos_Int[of n] - show "let z = - of_nat n in (\y. (rGamma y - rGamma z - (- 1) ^ n * setprod of_nat {1..n} * + show "let z = - of_nat n in (\y. (rGamma y - rGamma z - (- 1) ^ n * prod of_nat {1..n} * (y - z)) /\<^sub>R cmod (y - z)) \z\ 0" - by (simp add: has_field_derivative_def has_derivative_def fact_setprod netlimit_at Let_def) + by (simp add: has_field_derivative_def has_derivative_def fact_prod netlimit_at Let_def) next fix z :: complex from rGamma_series_complex_converges[of z] have "rGamma_series z \ rGamma z" by (simp add: convergent_LIMSEQ_iff rGamma_complex_def) - thus "let fact' = \n. setprod of_nat {1..n}; + thus "let fact' = \n. prod of_nat {1..n}; exp = \x. THE e. (\n. \kR fact k) \ e; pochhammer' = \a n. \n = 0..n. a + of_nat n in (\n. pochhammer' z n / (fact' n * exp (z * ln (real_of_nat n) *\<^sub>R 1))) \ rGamma z" - by (simp add: fact_setprod pochhammer_Suc_setprod rGamma_series_def [abs_def] exp_def + by (simp add: fact_prod pochhammer_Suc_prod rGamma_series_def [abs_def] exp_def of_real_def [symmetric] suminf_def sums_def [abs_def] atLeast0AtMost) qed @@ -1517,9 +1517,9 @@ have "(rGamma has_field_derivative (-1)^n * fact n) (at (- of_nat n :: real))" by (fastforce intro!: derivative_eq_intros has_vector_derivative_real_complex simp: Polygamma_of_real rGamma_real_def [abs_def]) - thus "let x = - of_nat n in (\y. (rGamma y - rGamma x - (- 1) ^ n * setprod of_nat {1..n} * + thus "let x = - of_nat n in (\y. (rGamma y - rGamma x - (- 1) ^ n * prod of_nat {1..n} * (y - x)) /\<^sub>R norm (y - x)) \x::real\ 0" - by (simp add: has_field_derivative_def has_derivative_def fact_setprod netlimit_at Let_def) + by (simp add: has_field_derivative_def has_derivative_def fact_prod netlimit_at Let_def) next fix x :: real have "rGamma_series x \ rGamma x" @@ -1527,11 +1527,11 @@ show "(\n. Re (rGamma_series (of_real x) n)) \ rGamma x" unfolding rGamma_real_def by (intro tendsto_intros) qed (insert rGamma_series_real, simp add: eq_commute) - thus "let fact' = \n. setprod of_nat {1..n}; + thus "let fact' = \n. prod of_nat {1..n}; exp = \x. THE e. (\n. \kR fact k) \ e; pochhammer' = \a n. \n = 0..n. a + of_nat n in (\n. pochhammer' x n / (fact' n * exp (x * ln (real_of_nat n) *\<^sub>R 1))) \ rGamma x" - by (simp add: fact_setprod pochhammer_Suc_setprod rGamma_series_def [abs_def] exp_def + by (simp add: fact_prod pochhammer_Suc_prod rGamma_series_def [abs_def] exp_def of_real_def [symmetric] suminf_def sums_def [abs_def] atLeast0AtMost) qed @@ -2575,11 +2575,11 @@ exp (z * of_real (\k = 1..n. ln (1 + 1 / real_of_nat k)))" by (subst exp_sum [symmetric]) (simp_all add: sum_distrib_left) also have "(\k=1..n. ln (1 + 1 / of_nat k) :: real) = ln (\k=1..n. 1 + 1 / real_of_nat k)" - by (subst ln_setprod [symmetric]) (auto intro!: add_pos_nonneg) + by (subst ln_prod [symmetric]) (auto intro!: add_pos_nonneg) also have "(\k=1..n. 1 + 1 / of_nat k :: real) = (\k=1..n. (of_nat k + 1) / of_nat k)" - by (intro setprod.cong) (simp_all add: divide_simps) + by (intro prod.cong) (simp_all add: divide_simps) also have "(\k=1..n. (of_nat k + 1) / of_nat k :: real) = of_nat n + 1" - by (induction n) (simp_all add: setprod_nat_ivl_Suc' divide_simps) + by (induction n) (simp_all add: prod_nat_ivl_Suc' divide_simps) finally show ?thesis .. qed @@ -2606,11 +2606,11 @@ from n z' have "Gamma_series_euler' z n = exp (z * of_real (ln (of_nat n + 1))) / (z * (\k=1..n. (1 + z / of_nat k)))" by (subst Gamma_euler'_aux1) - (simp_all add: Gamma_series_euler'_def setprod.distrib - setprod_inversef[symmetric] divide_inverse) + (simp_all add: Gamma_series_euler'_def prod.distrib + prod_inversef[symmetric] divide_inverse) also have "(\k=1..n. (1 + z / of_nat k)) = pochhammer (z + 1) n / fact n" - by (cases n) (simp_all add: pochhammer_setprod fact_setprod atLeastLessThanSuc_atLeastAtMost - setprod_dividef [symmetric] field_simps setprod.atLeast_Suc_atMost_Suc_shift) + by (cases n) (simp_all add: pochhammer_prod fact_prod atLeastLessThanSuc_atLeastAtMost + prod_dividef [symmetric] field_simps prod.atLeast_Suc_atMost_Suc_shift) also have "z * \ = pochhammer z (Suc n) / fact n" by (simp add: pochhammer_rec) finally show "?r n = Gamma_series_euler' z n / Gamma_series z n" by simp qed @@ -2681,7 +2681,7 @@ case False have "rGamma_series_weierstrass z = (\n. inverse (Gamma_series_weierstrass z n))" by (simp add: rGamma_series_weierstrass_def[abs_def] Gamma_series_weierstrass_def - exp_minus divide_inverse setprod_inversef[symmetric] mult_ac) + exp_minus divide_inverse prod_inversef[symmetric] mult_ac) also from False have "\ \ inverse (Gamma z)" by (intro tendsto_intros Gamma_weierstrass_complex) (simp add: Gamma_eq_zero_iff) finally show ?thesis by (simp add: Gamma_def) @@ -2865,7 +2865,7 @@ also have "?A = (\t. ?f t * ?g' t)" by (intro ext) (simp_all add: field_simps) also have "?B = - (of_nat (Suc n) * fact n / pochhammer z (n+2))" by (simp add: divide_simps pochhammer_rec - setprod_shift_bounds_cl_Suc_ivl del: of_nat_Suc) + prod_shift_bounds_cl_Suc_ivl del: of_nat_Suc) finally show "((\t. ?f t * ?g' t) has_integral (?f 1 * ?g 1 - ?f 0 * ?g 0 - ?I)) {0..1}" by simp qed (simp_all add: bounded_bilinear_mult) @@ -3024,10 +3024,10 @@ have "(- of_real pi * inverse z) * (?f z n * ?f (-z) n) = of_real pi * z * (\k=1..n. (of_nat k - z) * (of_nat k + z) / of_nat k ^ 2)" by (simp add: rGamma_series_weierstrass_def mult_ac exp_minus - divide_simps setprod.distrib[symmetric] power2_eq_square) + divide_simps prod.distrib[symmetric] power2_eq_square) also have "(\k=1..n. (of_nat k - z) * (of_nat k + z) / of_nat k ^ 2) = (\k=1..n. 1 - z^2 / of_nat k ^ 2)" - by (intro setprod.cong) (simp_all add: power2_eq_square field_simps) + by (intro prod.cong) (simp_all add: power2_eq_square field_simps) finally show "(- of_real pi * inverse z) * (?f z n * ?f (-z) n) = of_real pi * z * \" by (simp add: divide_simps) qed @@ -3058,10 +3058,10 @@ from tendsto_inverse[OF tendsto_mult[OF sin_product_formula_real[of "1/2"] tendsto_const[of "2/pi"]]] have "(\n. (\k=1..n. inverse (1 - (1 / 2)\<^sup>2 / (real k)\<^sup>2))) \ pi/2" - by (simp add: setprod_inversef [symmetric]) + by (simp add: prod_inversef [symmetric]) also have "(\n. (\k=1..n. inverse (1 - (1 / 2)\<^sup>2 / (real k)\<^sup>2))) = (\n. (\k=1..n. (4*real k^2)/(4*real k^2 - 1)))" - by (intro ext setprod.cong refl) (simp add: divide_simps) + by (intro ext prod.cong refl) (simp add: divide_simps) finally show ?thesis . qed @@ -3086,7 +3086,7 @@ have "(\n. P x n - P x (Suc n)) sums (P x 0 - sin (pi * x) / (pi * x))" unfolding P_def using x by (intro telescope_sums' sin_product_formula_real') also have "(\n. P x n - P x (Suc n)) = (\n. (x^2 / of_nat (Suc n)^2) * P x n)" - unfolding P_def by (simp add: setprod_nat_ivl_Suc' algebra_simps) + unfolding P_def by (simp add: prod_nat_ivl_Suc' algebra_simps) also have "P x 0 = 1" by (simp add: P_def) finally have "(\n. x\<^sup>2 / (of_nat (Suc n))\<^sup>2 * P x n) sums (1 - sin (pi * x) / (pi * x))" . from sums_divide[OF this, of "x^2"] x show ?thesis unfolding g_def by simp @@ -3104,9 +3104,9 @@ finally have "(1 - x^2 / of_nat k^2) \ {0..1}" using k by (simp_all add: field_simps del: of_nat_Suc) } - hence "(\k=1..n. abs (1 - x^2 / of_nat k^2)) \ (\k=1..n. 1)" by (intro setprod_mono) simp + hence "(\k=1..n. abs (1 - x^2 / of_nat k^2)) \ (\k=1..n. 1)" by (intro prod_mono) simp thus "norm (P x n / (of_nat (Suc n)^2)) \ 1 / of_nat (Suc n)^2" - unfolding P_def by (simp add: field_simps abs_setprod del: of_nat_Suc) + unfolding P_def by (simp add: field_simps abs_prod del: of_nat_Suc) qed (subst summable_Suc_iff, insert inverse_power_summable[of 2], simp add: inverse_eq_divide) qed (auto simp: P_def intro!: continuous_intros) hence "isCont f 0" by (subst (asm) continuous_on_eq_continuous_at) simp_all diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Generalised_Binomial_Theorem.thy --- a/src/HOL/Analysis/Generalised_Binomial_Theorem.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Generalised_Binomial_Theorem.thy Mon Oct 17 17:33:07 2016 +0200 @@ -31,9 +31,9 @@ let ?P = "\i=0..i=0..n. a - of_nat i))" - by (simp add: gbinomial_setprod_rev atLeastLessThanSuc_atLeastAtMost) + by (simp add: gbinomial_prod_rev atLeastLessThanSuc_atLeastAtMost) also from q have "(\i=0..n. a - of_nat i) = ?P * (a - of_nat n)" - by (simp add: setprod.atLeast0_atMost_Suc atLeastLessThanSuc_atLeastAtMost) + by (simp add: prod.atLeast0_atMost_Suc atLeastLessThanSuc_atLeastAtMost) also have "?P / \ = (?P / ?P) / (a - of_nat n)" by (rule divide_divide_eq_left[symmetric]) also from assms have "?P / ?P = 1" by auto also have "of_nat (Suc n) * (1 / (a - of_nat n)) = @@ -210,7 +210,7 @@ also have "(of_real (1 + z) :: complex) powr (of_real a) = of_real ((1 + z) powr a)" using assms by (subst powr_of_real) simp_all also have "(of_real a gchoose n :: complex) = of_real (a gchoose n)" for n - by (simp add: gbinomial_setprod_rev) + by (simp add: gbinomial_prod_rev) hence "(\n. (of_real a gchoose n :: complex) * of_real z ^ n) = (\n. of_real ((a gchoose n) * z ^ n))" by (intro ext) simp finally show ?thesis by (simp only: sums_of_real_iff) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Henstock_Kurzweil_Integration.thy --- a/src/HOL/Analysis/Henstock_Kurzweil_Integration.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Henstock_Kurzweil_Integration.thy Mon Oct 17 17:33:07 2016 +0200 @@ -56,7 +56,7 @@ where "content s \ measure lborel s" lemma content_cbox_cases: - "content (cbox a b) = (if \i\Basis. a\i \ b\i then setprod (\i. b\i - a\i) Basis else 0)" + "content (cbox a b) = (if \i\Basis. a\i \ b\i then prod (\i. b\i - a\i) Basis else 0)" by (simp add: measure_lborel_cbox_eq inner_diff) lemma content_cbox: "\i\Basis. a\i \ b\i \ content (cbox a b) = (\i\Basis. b\i - a\i)" @@ -84,7 +84,7 @@ using not_le by blast lemma content_pos_lt: "\i\Basis. a\i < b\i \ 0 < content (cbox a b)" - by (auto simp: less_imp_le inner_diff box_eq_empty intro!: setprod_pos) + by (auto simp: less_imp_le inner_diff box_eq_empty intro!: prod_pos) lemma content_eq_0: "content (cbox a b) = 0 \ (\i\Basis. b\i \ a\i)" by (auto simp: content_cbox_cases not_le intro: less_imp_le antisym eq_refl) @@ -93,7 +93,7 @@ unfolding content_eq_0 interior_cbox box_eq_empty by auto lemma content_pos_lt_eq: "0 < content (cbox a (b::'a::euclidean_space)) \ (\i\Basis. a\i < b\i)" - by (auto simp add: content_cbox_cases less_le setprod_nonneg) + by (auto simp add: content_cbox_cases less_le prod_nonneg) lemma content_empty [simp]: "content {} = 0" by simp @@ -110,9 +110,9 @@ lemma content_Pair: "content (cbox (a,c) (b,d)) = content (cbox a b) * content (cbox c d)" unfolding measure_lborel_cbox_eq Basis_prod_def - apply (subst setprod.union_disjoint) + apply (subst prod.union_disjoint) apply (auto simp: bex_Un ball_Un) - apply (subst (1 2) setprod.reindex_nontrivial) + apply (subst (1 2) prod.reindex_nontrivial) apply auto done @@ -138,7 +138,7 @@ apply (subst *(1)) defer apply (subst *(1)) - unfolding setprod.insert[OF *(2-)] + unfolding prod.insert[OF *(2-)] apply auto done assume as: "\i\Basis. a \ i \ b \ i" @@ -151,7 +151,7 @@ (\i\Basis. (if i = k then min (b \ k) c else b \ i) - a \ i)" "(\i\Basis. b \ i - ((\i\Basis. (if i = k then max (a \ k) c else a \ i) *\<^sub>R i) \ i)) = (\i\Basis. b \ i - (if i = k then max (a \ k) c else a \ i))" - by (auto intro!: setprod.cong) + by (auto intro!: prod.cong) have "\ a \ k \ c \ \ c \ b \ k \ False" unfolding not_le using as[unfolded ,rule_format,of k] assms @@ -1876,7 +1876,7 @@ by (auto simp: b'_def a'_def intro!: tendsto_min tendsto_max tendsto_eq_intros) also have "(\j\Basis. (b' 0 - a' 0) \ j) = 0" using k * - by (intro setprod_zero bexI[OF _ k]) + by (intro prod_zero bexI[OF _ k]) (auto simp: b'_def a'_def inner_diff inner_sum_left inner_not_same_Basis intro!: sum.cong) also have "((\d. \j\Basis. (b' d - a' d) \ j) \ 0) (at_right 0) = ((\d. content (cbox a b \ {x. \x\k - c\ \ d})) \ 0) (at_right 0)" @@ -3472,7 +3472,7 @@ also have "\ = (\j\Basis. emeasure lborel (if j = k then {c} else UNIV))" by (intro measure_times) auto also have "\ = 0" - by (intro setprod_zero bexI[OF _ k]) auto + by (intro prod_zero bexI[OF _ k]) auto finally show ?thesis by (subst AE_iff_measurable[OF _ refl]) auto qed @@ -3494,13 +3494,13 @@ show ?thesis using m unfolding eq measure_def by (subst lborel_affine_euclidean[where c=m and t=0]) - (simp_all add: emeasure_density measurable_sets_borel[OF s] abs_setprod nn_integral_cmult - s_def[symmetric] emeasure_distr vimage_comp s_comp_s enn2real_mult setprod_nonneg) + (simp_all add: emeasure_density measurable_sets_borel[OF s] abs_prod nn_integral_cmult + s_def[symmetric] emeasure_distr vimage_comp s_comp_s enn2real_mult prod_nonneg) next assume "\ (\k\Basis. m k \ 0)" then obtain k where k: "k \ Basis" "m k = 0" by auto then have [simp]: "(\k\Basis. m k) = 0" - by (intro setprod_zero) auto + by (intro prod_zero) auto have "emeasure lborel {x\space lborel. x \ s m ` cbox a b} = 0" proof (rule emeasure_eq_0_AE) show "AE x in lborel. x \ s m ` cbox a b" @@ -3539,7 +3539,7 @@ by (simp add: inner_simps field_simps) ultimately show ?thesis by (simp add: image_affinity_cbox True content_cbox' - setprod.distrib setprod_constant inner_diff_left) + prod.distrib prod_constant inner_diff_left) next case False with \cbox a b \ {}\ have "cbox (m *\<^sub>R b + c) (m *\<^sub>R a + c) \ {}" @@ -3552,7 +3552,7 @@ by (simp add: inner_simps field_simps) ultimately show ?thesis using False by (simp add: image_affinity_cbox content_cbox' - setprod.distrib[symmetric] setprod_constant[symmetric] inner_diff_left) + prod.distrib[symmetric] prod_constant[symmetric] inner_diff_left) qed qed @@ -3589,7 +3589,7 @@ assumes "(f has_integral i) (cbox a b)" and "\k\Basis. m k \ 0" shows "((\x. f (\k\Basis. (m k * (x\k))*\<^sub>R k)) has_integral - ((1/ \setprod m Basis\) *\<^sub>R i)) ((\x. (\k\Basis. (1 / m k * (x\k))*\<^sub>R k)) ` cbox a b)" + ((1/ \prod m Basis\) *\<^sub>R i)) ((\x. (\k\Basis. (1 / m k * (x\k))*\<^sub>R k)) ` cbox a b)" apply (rule has_integral_twiddle[where f=f]) unfolding zero_less_abs_iff content_image_stretch_interval unfolding image_stretch_interval empty_as_interval euclidean_eq_iff[where 'a='a] @@ -7371,7 +7371,8 @@ subsection \Integration by parts\ lemma integration_by_parts_interior_strong: - assumes bilinear: "bounded_bilinear (prod :: _ \ _ \ 'b :: banach)" + fixes prod :: "_ \ _ \ 'b :: banach" + assumes bilinear: "bounded_bilinear (prod)" assumes s: "finite s" and le: "a \ b" assumes cont [continuous_intros]: "continuous_on {a..b} f" "continuous_on {a..b} g" assumes deriv: "\x. x\{a<.. (f has_vector_derivative f' x) (at x)" @@ -7389,7 +7390,8 @@ qed lemma integration_by_parts_interior: - assumes "bounded_bilinear (prod :: _ \ _ \ 'b :: banach)" "a \ b" + fixes prod :: "_ \ _ \ 'b :: banach" + assumes "bounded_bilinear (prod)" "a \ b" "continuous_on {a..b} f" "continuous_on {a..b} g" assumes "\x. x\{a<.. (f has_vector_derivative f' x) (at x)" "\x. x\{a<.. (g has_vector_derivative g' x) (at x)" @@ -7398,7 +7400,8 @@ by (rule integration_by_parts_interior_strong[of _ "{}" _ _ f g f' g']) (insert assms, simp_all) lemma integration_by_parts: - assumes "bounded_bilinear (prod :: _ \ _ \ 'b :: banach)" "a \ b" + fixes prod :: "_ \ _ \ 'b :: banach" + assumes "bounded_bilinear (prod)" "a \ b" "continuous_on {a..b} f" "continuous_on {a..b} g" assumes "\x. x\{a..b} \ (f has_vector_derivative f' x) (at x)" "\x. x\{a..b} \ (g has_vector_derivative g' x) (at x)" @@ -7407,7 +7410,8 @@ by (rule integration_by_parts_interior[of _ _ _ f g f' g']) (insert assms, simp_all) lemma integrable_by_parts_interior_strong: - assumes bilinear: "bounded_bilinear (prod :: _ \ _ \ 'b :: banach)" + fixes prod :: "_ \ _ \ 'b :: banach" + assumes bilinear: "bounded_bilinear (prod)" assumes s: "finite s" and le: "a \ b" assumes cont [continuous_intros]: "continuous_on {a..b} f" "continuous_on {a..b} g" assumes deriv: "\x. x\{a<.. (f has_vector_derivative f' x) (at x)" @@ -7424,7 +7428,8 @@ qed lemma integrable_by_parts_interior: - assumes "bounded_bilinear (prod :: _ \ _ \ 'b :: banach)" "a \ b" + fixes prod :: "_ \ _ \ 'b :: banach" + assumes "bounded_bilinear (prod)" "a \ b" "continuous_on {a..b} f" "continuous_on {a..b} g" assumes "\x. x\{a<.. (f has_vector_derivative f' x) (at x)" "\x. x\{a<.. (g has_vector_derivative g' x) (at x)" @@ -7433,7 +7438,8 @@ by (rule integrable_by_parts_interior_strong[of _ "{}" _ _ f g f' g']) (insert assms, simp_all) lemma integrable_by_parts: - assumes "bounded_bilinear (prod :: _ \ _ \ 'b :: banach)" "a \ b" + fixes prod :: "_ \ _ \ 'b :: banach" + assumes "bounded_bilinear (prod)" "a \ b" "continuous_on {a..b} f" "continuous_on {a..b} g" assumes "\x. x\{a..b} \ (f has_vector_derivative f' x) (at x)" "\x. x\{a..b} \ (g has_vector_derivative g' x) (at x)" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Lebesgue_Measure.thy --- a/src/HOL/Analysis/Lebesgue_Measure.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Lebesgue_Measure.thy Mon Oct 17 17:33:07 2016 +0200 @@ -404,11 +404,11 @@ lemma lborel_eq: "lborel = distr (\\<^sub>M b\Basis. lborel) borel (\f. \b\Basis. f b *\<^sub>R b)" by (subst lborel_def) (simp add: lborel_eq_real) -lemma nn_integral_lborel_setprod: +lemma nn_integral_lborel_prod: assumes [measurable]: "\b. b \ Basis \ f b \ borel_measurable borel" assumes nn[simp]: "\b x. b \ Basis \ 0 \ f b x" shows "(\\<^sup>+x. (\b\Basis. f b (x \ b)) \lborel) = (\b\Basis. (\\<^sup>+x. f b x \lborel))" - by (simp add: lborel_def nn_integral_distr product_nn_integral_setprod + by (simp add: lborel_def nn_integral_distr product_nn_integral_prod product_nn_integral_singleton) lemma emeasure_lborel_Icc[simp]: @@ -434,13 +434,13 @@ then have "emeasure lborel (cbox l u) = (\\<^sup>+x. (\b\Basis. indicator {l\b .. u\b} (x \ b)) \lborel)" by simp also have "\ = (\b\Basis. (u - l) \ b)" - by (subst nn_integral_lborel_setprod) (simp_all add: setprod_ennreal inner_diff_left) + by (subst nn_integral_lborel_prod) (simp_all add: prod_ennreal inner_diff_left) finally show ?thesis . qed lemma AE_lborel_singleton: "AE x in lborel::'a::euclidean_space measure. x \ c" using SOME_Basis AE_discrete_difference [of "{c}" lborel] emeasure_lborel_cbox [of c c] - by (auto simp add: cbox_sing setprod_constant power_0_left) + by (auto simp add: cbox_sing prod_constant power_0_left) lemma emeasure_lborel_Ioo[simp]: assumes [simp]: "l \ u" @@ -481,7 +481,7 @@ then have "emeasure lborel (box l u) = (\\<^sup>+x. (\b\Basis. indicator {l\b <..< u\b} (x \ b)) \lborel)" by simp also have "\ = (\b\Basis. (u - l) \ b)" - by (subst nn_integral_lborel_setprod) (simp_all add: setprod_ennreal inner_diff_left) + by (subst nn_integral_lborel_prod) (simp_all add: prod_ennreal inner_diff_left) finally show ?thesis . qed @@ -495,7 +495,7 @@ lemma emeasure_lborel_singleton[simp]: "emeasure lborel {x} = 0" using emeasure_lborel_cbox[of x x] nonempty_Basis - by (auto simp del: emeasure_lborel_cbox nonempty_Basis simp add: cbox_sing setprod_constant) + by (auto simp del: emeasure_lborel_cbox nonempty_Basis simp add: cbox_sing prod_constant) lemma fixes l u :: real @@ -510,7 +510,7 @@ assumes [simp]: "\b. b \ Basis \ l \ b \ u \ b" shows measure_lborel_box[simp]: "measure lborel (box l u) = (\b\Basis. (u - l) \ b)" and measure_lborel_cbox[simp]: "measure lborel (cbox l u) = (\b\Basis. (u - l) \ b)" - by (simp_all add: measure_def inner_diff_left setprod_nonneg) + by (simp_all add: measure_def inner_diff_left prod_nonneg) lemma measure_lborel_cbox_eq: "measure lborel (cbox l u) = (if \b\Basis. l \ b \ u \ b then \b\Basis. (u - l) \ b else 0)" @@ -549,7 +549,7 @@ show ?thesis unfolding UN_box_eq_UNIV[symmetric] apply (subst SUP_emeasure_incseq[symmetric]) - apply (auto simp: incseq_def subset_box inner_add_left setprod_constant + apply (auto simp: incseq_def subset_box inner_add_left prod_constant simp del: Sup_eq_top_iff SUP_eq_top_iff intro!: ennreal_SUP_eq_top) done @@ -629,15 +629,15 @@ using c by (auto simp: box_def T_def field_simps inner_simps divide_less_eq) with le c show "emeasure ?D (box l u) = (\b\?B. (u - l) \ b)" by (auto simp: emeasure_density emeasure_distr nn_integral_multc emeasure_lborel_box_eq inner_simps - field_simps divide_simps ennreal_mult'[symmetric] setprod_nonneg setprod.distrib[symmetric] - intro!: setprod.cong) + field_simps divide_simps ennreal_mult'[symmetric] prod_nonneg prod.distrib[symmetric] + intro!: prod.cong) qed simp lemma lborel_affine: fixes t :: "'a::euclidean_space" shows "c \ 0 \ lborel = density (distr lborel borel (\x. t + c *\<^sub>R x)) (\_. \c\^DIM('a))" using lborel_affine_euclidean[where c="\_::'a. c" and t=t] - unfolding scaleR_scaleR[symmetric] scaleR_sum_right[symmetric] euclidean_representation setprod_constant by simp + unfolding scaleR_scaleR[symmetric] scaleR_sum_right[symmetric] euclidean_representation prod_constant by simp lemma lborel_real_affine: "c \ 0 \ lborel = density (distr lborel borel (\x. t + c * x)) (\_. ennreal (abs c))" @@ -696,7 +696,7 @@ then have "emeasure lborel A = 0 \ emeasure (density (distr lborel borel T) (\_. (\j\Basis. \c j\))) A = 0" unfolding T_def using c by (subst lborel_affine_euclidean[symmetric]) auto also have "\ \ emeasure (distr lebesgue lborel T) A = 0" - using A c by (simp add: distr_completion emeasure_density nn_integral_cmult setprod_nonneg cong: distr_cong) + using A c by (simp add: distr_completion emeasure_density nn_integral_cmult prod_nonneg cong: distr_cong) finally have "emeasure lborel A = 0 \ emeasure (distr lebesgue lborel T) A = 0" . } then have eq: "null_sets lborel = null_sets (distr lebesgue lborel T)" by (auto simp: null_sets_def) @@ -707,7 +707,7 @@ have "lebesgue = completion (density (distr lborel borel T) (\_. (\j\Basis. \c j\)))" using c by (subst lborel_affine_euclidean[of c t]) (simp_all add: T_def[abs_def]) also have "\ = density (completion (distr lebesgue lborel T)) (\_. (\j\Basis. \c j\))" - using c by (auto intro!: always_eventually setprod_pos completion_density_eq simp: distr_completion cong: distr_cong) + using c by (auto intro!: always_eventually prod_pos completion_density_eq simp: distr_completion cong: distr_cong) also have "\ = density (distr lebesgue lebesgue T) (\_. (\j\Basis. \c j\))" by (subst completion.completion_distr_eq) (auto simp: eq measurable_completion) finally show "lebesgue = density (distr lebesgue lebesgue T) (\_. (\j\Basis. \c j\))" . @@ -761,7 +761,7 @@ apply (subst lebesgue_affine_euclidean[of "\_. m" \]) apply (simp_all add: emeasure_density trans_eq_T nn_integral_cmult emeasure_distr del: space_completion emeasure_completion) - apply (simp add: vimage_comp s_comp_s setprod_constant) + apply (simp add: vimage_comp s_comp_s prod_constant) done next assume "S \ sets lebesgue" @@ -779,7 +779,7 @@ qed qed show ?m - unfolding measure_def \?e\ by (simp add: enn2real_mult setprod_nonneg) + unfolding measure_def \?e\ by (simp add: enn2real_mult prod_nonneg) qed lemma divideR_right: @@ -843,9 +843,9 @@ "box (la, lb) (ua, ub) = box la ua \ box lb ub" using lu[of _ 0] lu[of 0] by (auto intro!: inj_onI simp add: Basis_prod_def ball_Un box_def) show "emeasure (lborel \\<^sub>M lborel) (box (la, lb) (ua, ub)) = - ennreal (setprod (op \ ((ua, ub) - (la, lb))) Basis)" - by (simp add: lborel.emeasure_pair_measure_Times Basis_prod_def setprod.union_disjoint - setprod.reindex ennreal_mult inner_diff_left setprod_nonneg) + ennreal (prod (op \ ((ua, ub) - (la, lb))) Basis)" + by (simp add: lborel.emeasure_pair_measure_Times Basis_prod_def prod.union_disjoint + prod.reindex ennreal_mult inner_diff_left prod_nonneg) qed (simp add: borel_prod[symmetric]) (* FIXME: conversion in measurable prover *) @@ -860,7 +860,7 @@ then have "emeasure lborel A \ emeasure lborel (cbox a b)" by (intro emeasure_mono) auto then show ?thesis - by (auto simp: emeasure_lborel_cbox_eq setprod_nonneg less_top[symmetric] top_unique split: if_split_asm) + by (auto simp: emeasure_lborel_cbox_eq prod_nonneg less_top[symmetric] top_unique split: if_split_asm) qed lemma emeasure_compact_finite: "compact A \ emeasure lborel A < \" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/Weierstrass_Theorems.thy --- a/src/HOL/Analysis/Weierstrass_Theorems.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/Weierstrass_Theorems.thy Mon Oct 17 17:33:07 2016 +0200 @@ -192,7 +192,7 @@ lemma sum: "\finite I; \i. i \ I \ f i \ R\ \ (\x. \i \ I. f i x) \ R" by (induct I rule: finite_induct; simp add: const add) - lemma setprod: "\finite I; \i. i \ I \ f i \ R\ \ (\x. \i \ I. f i x) \ R" + lemma prod: "\finite I; \i. i \ I \ f i \ R\ \ (\x. \i \ I. f i x) \ R" by (induct I rule: finite_induct; simp add: const mult) definition normf :: "('a::t2_space \ real) \ real" @@ -467,19 +467,19 @@ by metis define pff where [abs_def]: "pff x = (\w \ subA. ff w x)" for x have pffR: "pff \ R" - unfolding pff_def using subA ff by (auto simp: intro: setprod) + unfolding pff_def using subA ff by (auto simp: intro: prod) moreover have pff01: "pff x \ {0..1}" if t: "x \ S" for x proof - have "0 \ pff x" using subA cardp t apply (simp add: pff_def divide_simps sum_nonneg) - apply (rule Groups_Big.linordered_semidom_class.setprod_nonneg) + apply (rule Groups_Big.linordered_semidom_class.prod_nonneg) using ff by fastforce moreover have "pff x \ 1" using subA cardp t apply (simp add: pff_def divide_simps sum_nonneg) - apply (rule setprod_mono [where g = "\x. 1", simplified]) + apply (rule prod_mono [where g = "\x. 1", simplified]) using ff by fastforce ultimately show ?thesis by auto @@ -488,10 +488,10 @@ { fix v x assume v: "v \ subA" and x: "x \ Vf v" "x \ S" from subA v have "pff x = ff v x * (\w \ subA - {v}. ff w x)" - unfolding pff_def by (metis setprod.remove) + unfolding pff_def by (metis prod.remove) also have "... \ ff v x * 1" apply (rule Rings.ordered_semiring_class.mult_left_mono) - apply (rule setprod_mono [where g = "\x. 1", simplified]) + apply (rule prod_mono [where g = "\x. 1", simplified]) using ff [THEN conjunct2, THEN conjunct1] v subA x apply auto apply (meson atLeastAtMost_iff contra_subsetD imageI) @@ -515,10 +515,10 @@ using Bernoulli_inequality [of "-e / card subA" "card subA"] e cardp by (auto simp: field_simps) also have "... = (\w \ subA. 1 - e / card subA)" - by (simp add: setprod_constant subA(2)) + by (simp add: prod_constant subA(2)) also have "... < pff x" apply (simp add: pff_def) - apply (rule setprod_mono_strict [where f = "\x. 1 - e / card subA", simplified]) + apply (rule prod_mono_strict [where f = "\x. 1 - e / card subA", simplified]) apply (simp_all add: subA(2)) apply (intro ballI conjI) using e apply (force simp: divide_simps) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Analysis/ex/Approximations.thy --- a/src/HOL/Analysis/ex/Approximations.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Analysis/ex/Approximations.thy Mon Oct 17 17:33:07 2016 +0200 @@ -185,12 +185,12 @@ also have "\ = (\k\n. 1 / fact k)" proof (intro sum.cong refl) fix k assume k: "k \ {..n}" - have "fact n = (\i=1..n. real i)" by (simp add: fact_setprod) + have "fact n = (\i=1..n. real i)" by (simp add: fact_prod) also from k have "{1..n} = {1..k} \ {k+1..n}" by auto - also have "setprod real \ / (\i=k+1..n. real i) = (\i=1..k. real i)" - by (subst nonzero_divide_eq_eq, simp, subst setprod.union_disjoint [symmetric]) auto - also have "\ = fact k" by (simp add: fact_setprod) - finally show "1 / (fact n / setprod real {k + 1..n}) = 1 / fact k" by simp + also have "prod real \ / (\i=k+1..n. real i) = (\i=1..k. real i)" + by (subst nonzero_divide_eq_eq, simp, subst prod.union_disjoint [symmetric]) auto + also have "\ = fact k" by (simp add: fact_prod) + finally show "1 / (fact n / prod real {k + 1..n}) = 1 / fact k" by simp qed also have "\ = euler_approx n" by (simp add: euler_approx_def field_simps) finally show ?thesis by (simp add: euler_approx_aux_def) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Binomial.thy --- a/src/HOL/Binomial.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Binomial.thy Mon Oct 17 17:33:07 2016 +0200 @@ -18,45 +18,45 @@ begin definition fact :: "nat \ 'a" - where fact_setprod: "fact n = of_nat (\{1..n})" + where fact_prod: "fact n = of_nat (\{1..n})" -lemma fact_setprod_Suc: "fact n = of_nat (setprod Suc {0..i = 0..i. i" 1 n] +lemma fact_prod_rev: "fact n = of_nat (\i = 0..i. i" 1 n] by (cases n) - (simp_all add: fact_setprod_Suc setprod.atLeast_Suc_atMost_Suc_shift + (simp_all add: fact_prod_Suc prod.atLeast_Suc_atMost_Suc_shift atLeastLessThanSuc_atLeastAtMost) lemma fact_0 [simp]: "fact 0 = 1" - by (simp add: fact_setprod) + by (simp add: fact_prod) lemma fact_1 [simp]: "fact 1 = 1" - by (simp add: fact_setprod) + by (simp add: fact_prod) lemma fact_Suc_0 [simp]: "fact (Suc 0) = 1" - by (simp add: fact_setprod) + by (simp add: fact_prod) lemma fact_Suc [simp]: "fact (Suc n) = of_nat (Suc n) * fact n" - by (simp add: fact_setprod atLeastAtMostSuc_conv algebra_simps) + by (simp add: fact_prod atLeastAtMostSuc_conv algebra_simps) lemma fact_2 [simp]: "fact 2 = 2" by (simp add: numeral_2_eq_2) -lemma fact_split: "k \ n \ fact n = of_nat (setprod Suc {n - k.. n \ fact n = of_nat (prod Suc {n - k.. 0 \ fact n = of_nat n * fact (n - 1)" by (cases n) auto @@ -170,7 +170,7 @@ shows "fact n div fact (n - r) \ n ^ r" proof - have "r \ n \ \{n - r..n} = (n - r) * \{Suc (n - r)..n}" for r - by (subst setprod.insert[symmetric]) (auto simp: atLeastAtMost_insertL) + by (subst prod.insert[symmetric]) (auto simp: atLeastAtMost_insertL) with assms show ?thesis by (induct r rule: nat.induct) (auto simp add: fact_div_fact Suc_diff_Suc mult_le_mono) qed @@ -434,7 +434,7 @@ with True have "n = m + 2" by simp then have "fact n = n * (n - 1) * fact (n - 2)" - by (simp add: fact_setprod_Suc atLeast0_lessThan_Suc algebra_simps) + by (simp add: fact_prod_Suc atLeast0_lessThan_Suc algebra_simps) with True show ?thesis by (simp add: binomial_fact') qed @@ -508,29 +508,29 @@ begin definition pochhammer :: "'a \ nat \ 'a" - where pochhammer_setprod: "pochhammer a n = setprod (\i. a + of_nat i) {0..i. a + of_nat i) {0..i. a + of_nat (n - i)) {1..n}" - using setprod.atLeast_lessThan_rev_at_least_Suc_atMost [of "\i. a + of_nat i" 0 n] - by (simp add: pochhammer_setprod) +lemma pochhammer_prod_rev: "pochhammer a n = prod (\i. a + of_nat (n - i)) {1..n}" + using prod.atLeast_lessThan_rev_at_least_Suc_atMost [of "\i. a + of_nat i" 0 n] + by (simp add: pochhammer_prod) -lemma pochhammer_Suc_setprod: "pochhammer a (Suc n) = setprod (\i. a + of_nat i) {0..n}" - by (simp add: pochhammer_setprod atLeastLessThanSuc_atLeastAtMost) +lemma pochhammer_Suc_prod: "pochhammer a (Suc n) = prod (\i. a + of_nat i) {0..n}" + by (simp add: pochhammer_prod atLeastLessThanSuc_atLeastAtMost) -lemma pochhammer_Suc_setprod_rev: "pochhammer a (Suc n) = setprod (\i. a + of_nat (n - i)) {0..n}" - by (simp add: pochhammer_setprod_rev setprod.atLeast_Suc_atMost_Suc_shift) +lemma pochhammer_Suc_prod_rev: "pochhammer a (Suc n) = prod (\i. a + of_nat (n - i)) {0..n}" + by (simp add: pochhammer_prod_rev prod.atLeast_Suc_atMost_Suc_shift) lemma pochhammer_0 [simp]: "pochhammer a 0 = 1" - by (simp add: pochhammer_setprod) + by (simp add: pochhammer_prod) lemma pochhammer_1 [simp]: "pochhammer a 1 = a" - by (simp add: pochhammer_setprod lessThan_Suc) + by (simp add: pochhammer_prod lessThan_Suc) lemma pochhammer_Suc0 [simp]: "pochhammer a (Suc 0) = a" - by (simp add: pochhammer_setprod lessThan_Suc) + by (simp add: pochhammer_prod lessThan_Suc) lemma pochhammer_Suc: "pochhammer a (Suc n) = pochhammer a n * (a + of_nat n)" - by (simp add: pochhammer_setprod atLeast0_lessThan_Suc ac_simps) + by (simp add: pochhammer_prod atLeast0_lessThan_Suc ac_simps) end @@ -545,22 +545,22 @@ by (induction n) (auto simp: pochhammer_Suc intro!: mult_pos_pos add_pos_nonneg) lemma pochhammer_of_nat: "pochhammer (of_nat x) n = of_nat (pochhammer x n)" - by (simp add: pochhammer_setprod) + by (simp add: pochhammer_prod) lemma pochhammer_of_int: "pochhammer (of_int x) n = of_int (pochhammer x n)" - by (simp add: pochhammer_setprod) + by (simp add: pochhammer_prod) lemma pochhammer_rec: "pochhammer a (Suc n) = a * pochhammer (a + 1) n" - by (simp add: pochhammer_setprod setprod.atLeast0_lessThan_Suc_shift ac_simps) + by (simp add: pochhammer_prod prod.atLeast0_lessThan_Suc_shift ac_simps) lemma pochhammer_rec': "pochhammer z (Suc n) = (z + of_nat n) * pochhammer z n" - by (simp add: pochhammer_setprod setprod.atLeast0_lessThan_Suc ac_simps) + by (simp add: pochhammer_prod prod.atLeast0_lessThan_Suc ac_simps) lemma pochhammer_fact: "fact n = pochhammer 1 n" - by (simp add: pochhammer_setprod fact_setprod_Suc) + by (simp add: pochhammer_prod fact_prod_Suc) lemma pochhammer_of_nat_eq_0_lemma: "k > n \ pochhammer (- (of_nat n :: 'a:: idom)) k = 0" - by (auto simp add: pochhammer_setprod) + by (auto simp add: pochhammer_prod) lemma pochhammer_of_nat_eq_0_lemma': assumes kn: "k \ n" @@ -571,7 +571,7 @@ next case (Suc h) then show ?thesis - apply (simp add: pochhammer_Suc_setprod) + apply (simp add: pochhammer_Suc_prod) using Suc kn apply (auto simp add: algebra_simps) done @@ -585,7 +585,7 @@ by (auto simp add: not_le[symmetric]) lemma pochhammer_eq_0_iff: "pochhammer a n = (0::'a::field_char_0) \ (\k < n. a = - of_nat k)" - by (auto simp add: pochhammer_setprod eq_neg_iff_add_eq_0) + by (auto simp add: pochhammer_prod eq_neg_iff_add_eq_0) lemma pochhammer_eq_0_mono: "pochhammer a n = (0::'a::field_char_0) \ m \ n \ pochhammer a m = 0" @@ -603,11 +603,11 @@ next case (Suc h) have eq: "((- 1) ^ Suc h :: 'a) = (\i = 0..h. - 1)" - using setprod_constant [where A="{0.. h}" and y="- 1 :: 'a"] + using prod_constant [where A="{0.. h}" and y="- 1 :: 'a"] by auto with Suc show ?thesis - using pochhammer_Suc_setprod_rev [of "b - of_nat k + 1"] - by (auto simp add: pochhammer_Suc_setprod setprod.distrib [symmetric] eq of_nat_diff) + using pochhammer_Suc_prod_rev [of "b - of_nat k + 1"] + by (auto simp add: pochhammer_Suc_prod prod.distrib [symmetric] eq of_nat_diff) qed lemma pochhammer_minus': @@ -705,19 +705,19 @@ subsection \Generalized binomial coefficients\ definition gbinomial :: "'a::{semidom_divide,semiring_char_0} \ nat \ 'a" (infixl "gchoose" 65) - where gbinomial_setprod_rev: "a gchoose n = setprod (\i. a - of_nat i) {0..i. a - of_nat i) {0..i. a - of_nat i) {0..k} div fact (Suc k)" - by (simp add: gbinomial_setprod_rev atLeastLessThanSuc_atLeastAtMost) +lemma gbinomial_Suc: "a gchoose (Suc k) = prod (\i. a - of_nat i) {0..k} div fact (Suc k)" + by (simp add: gbinomial_prod_rev atLeastLessThanSuc_atLeastAtMost) lemma gbinomial_mult_fact: "fact n * (a gchoose n) = (\i = 0..i = 0.. (op - n) ` {0..n < k\ show ?thesis - by (simp add: binomial_eq_0 gbinomial_setprod_rev setprod_zero) + by (simp add: binomial_eq_0 gbinomial_prod_rev prod_zero) next case True then have "inj_on (op - n) {0..(op - n ` {0..(op - n ` {0..q. n - q) {0..{Suc (n - k)..n}" .. + finally have *: "prod (\q. n - q) {0..{Suc (n - k)..n}" .. from True have "n choose k = fact n div (fact k * fact (n - k))" by (rule binomial_fact') with * show ?thesis - by (simp add: gbinomial_setprod_rev mult.commute [of "fact k"] div_mult2_eq fact_div_fact) + by (simp add: gbinomial_prod_rev mult.commute [of "fact k"] div_mult2_eq fact_div_fact) qed lemma of_nat_gbinomial: "of_nat (n gchoose k) = (of_nat n gchoose k :: 'a::field_char_0)" proof (cases "k \ n") case False then show ?thesis - by (simp add: not_le gbinomial_binomial binomial_eq_0 gbinomial_setprod_rev) + by (simp add: not_le gbinomial_binomial binomial_eq_0 gbinomial_prod_rev) next case True define m where "m = n - k" with True have n: "n = m + k" by arith from n have "fact n = ((\i = 0.. = ((\i\{0.. {k..i = 0..i. of_nat (m + k - i) :: 'a" 0 k m] - by (simp add: fact_setprod_rev [of m] setprod.union_disjoint of_nat_diff) + using prod_shift_bounds_nat_ivl [of "\i. of_nat (m + k - i) :: 'a" 0 k m] + by (simp add: fact_prod_rev [of m] prod.union_disjoint of_nat_diff) then have "fact n / fact (n - k) = ((\i = 0..Sign.add_const_constraint (@{const_name gbinomial}, SOME @{typ "'a::field_char_0 \ nat \ 'a"})\ lemma gbinomial_1[simp]: "a gchoose 1 = a" - by (simp add: gbinomial_setprod_rev lessThan_Suc) + by (simp add: gbinomial_prod_rev lessThan_Suc) lemma gbinomial_Suc0[simp]: "a gchoose (Suc 0) = a" - by (simp add: gbinomial_setprod_rev lessThan_Suc) + by (simp add: gbinomial_prod_rev lessThan_Suc) lemma gbinomial_mult_1: fixes a :: "'a::field_char_0" @@ -833,7 +833,7 @@ next case (Suc h) have eq0: "(\i\{1..k}. (a + 1) - of_nat i) = (\i\{0..h}. a - of_nat i)" - apply (rule setprod.reindex_cong [where l = Suc]) + apply (rule prod.reindex_cong [where l = Suc]) using Suc apply (auto simp add: image_Suc_atMost) done @@ -865,7 +865,7 @@ by (simp add: field_simps Suc atLeastLessThanSuc_atLeastAtMost) also have "\ = (\i\{0..k}. (a + 1) - of_nat i)" using eq0 - by (simp add: Suc setprod.atLeast0_atMost_Suc_shift) + by (simp add: Suc prod.atLeast0_atMost_Suc_shift) also have "\ = (fact (Suc k)) * ((a + 1) gchoose (Suc k))" by (simp only: gbinomial_mult_fact atLeastLessThanSuc_atLeastAtMost) finally show ?thesis @@ -1003,7 +1003,7 @@ Alternative definition of the binomial coefficient as @{term "\i lemma gbinomial_altdef_of_nat: "x gchoose k = (\i = 0.. x" using assms of_nat_0_le_iff order_trans by blast have "(x / of_nat k :: 'a) ^ k = (\i = 0.. \ x gchoose k" (* FIXME *) unfolding gbinomial_altdef_of_nat - apply (safe intro!: setprod_mono) + apply (safe intro!: prod_mono) apply simp_all prefer 2 subgoal premises for i @@ -1051,11 +1051,11 @@ next case (Suc b) then have "((a + 1) gchoose (Suc (Suc b))) = (\i = 0..Suc b. a + (1 - of_nat i)) / fact (b + 2)" - by (simp add: field_simps gbinomial_setprod_rev atLeastLessThanSuc_atLeastAtMost) + by (simp add: field_simps gbinomial_prod_rev atLeastLessThanSuc_atLeastAtMost) also have "(\i = 0..Suc b. a + (1 - of_nat i)) = (a + 1) * (\i = 0..b. a - of_nat i)" - by (simp add: setprod.atLeast0_atMost_Suc_shift) + by (simp add: prod.atLeast0_atMost_Suc_shift) also have "\ / fact (b + 2) = (a + 1) / of_nat (Suc (Suc b)) * (a gchoose Suc b)" - by (simp_all add: gbinomial_setprod_rev atLeastLessThanSuc_atLeastAtMost) + by (simp_all add: gbinomial_prod_rev atLeastLessThanSuc_atLeastAtMost) finally show ?thesis by (simp add: Suc field_simps del: of_nat_Suc) qed @@ -1066,11 +1066,11 @@ next case (Suc b) then have "((a + 1) gchoose (Suc (Suc b))) = (\i = 0 .. Suc b. a + (1 - of_nat i)) / fact (b + 2)" - by (simp add: field_simps gbinomial_setprod_rev atLeastLessThanSuc_atLeastAtMost) + by (simp add: field_simps gbinomial_prod_rev atLeastLessThanSuc_atLeastAtMost) also have "(\i = 0 .. Suc b. a + (1 - of_nat i)) = (a + 1) * (\i = 0..b. a - of_nat i)" - by (simp add: setprod.atLeast0_atMost_Suc_shift) + by (simp add: prod.atLeast0_atMost_Suc_shift) also have "\ / fact (b + 2) = (a + 1) / of_nat (Suc (Suc b)) * (a gchoose Suc b)" - by (simp_all add: gbinomial_setprod_rev atLeastLessThanSuc_atLeastAtMost atLeast0AtMost) + by (simp_all add: gbinomial_prod_rev atLeastLessThanSuc_atLeastAtMost atLeast0AtMost) finally show ?thesis by (simp add: Suc) qed @@ -1647,11 +1647,11 @@ "fact n = (of_nat (fold_atLeastAtMost_nat (op *) 2 n 1) :: 'a::semiring_char_0)" proof - have "fact n = (of_nat (\{1..n}) :: 'a)" - by (simp add: fact_setprod) + by (simp add: fact_prod) also have "\{1..n} = \{2..n}" - by (intro setprod.mono_neutral_right) auto + by (intro prod.mono_neutral_right) auto also have "\ = fold_atLeastAtMost_nat (op *) 2 n 1" - by (simp add: setprod_atLeastAtMost_code) + by (simp add: prod_atLeastAtMost_code) finally show ?thesis . qed @@ -1660,7 +1660,7 @@ (if n = 0 then 1 else fold_atLeastAtMost_nat (\n acc. (a + of_nat n) * acc) 0 (n - 1) 1)" by (cases n) - (simp_all add: pochhammer_setprod setprod_atLeastAtMost_code [symmetric] + (simp_all add: pochhammer_prod prod_atLeastAtMost_code [symmetric] atLeastLessThanSuc_atLeastAtMost) lemma gbinomial_code [code]: @@ -1668,7 +1668,7 @@ (if n = 0 then 1 else fold_atLeastAtMost_nat (\n acc. (a - of_nat n) * acc) 0 (n - 1) 1 / fact n)" by (cases n) - (simp_all add: gbinomial_setprod_rev setprod_atLeastAtMost_code [symmetric] + (simp_all add: gbinomial_prod_rev prod_atLeastAtMost_code [symmetric] atLeastLessThanSuc_atLeastAtMost) (* FIXME *) @@ -1685,9 +1685,9 @@ assume "k \ n" then have "{1..n} = {1..n-k} \ {n-k+1..n}" by auto then have "(fact n :: nat) = fact (n-k) * \{n-k+1..n}" - by (simp add: setprod.union_disjoint fact_altdef_nat) + by (simp add: prod.union_disjoint fact_altdef_nat) } - then show ?thesis by (auto simp: binomial_altdef_nat mult_ac setprod_atLeastAtMost_code) + then show ?thesis by (auto simp: binomial_altdef_nat mult_ac prod_atLeastAtMost_code) qed *) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Complex.thy --- a/src/HOL/Complex.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Complex.thy Mon Oct 17 17:33:07 2016 +0200 @@ -486,7 +486,7 @@ lemma complex_cnj_mult [simp]: "cnj (x * y) = cnj x * cnj y" by (simp add: complex_eq_iff) -lemma cnj_setprod [simp]: "cnj (setprod f s) = (\x\s. cnj (f x))" +lemma cnj_prod [simp]: "cnj (prod f s) = (\x\s. cnj (f x))" by (induct s rule: infinite_finite_induct) auto lemma complex_cnj_inverse [simp]: "cnj (inverse x) = inverse (cnj x)" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Decision_Procs/Approximation.thy --- a/src/HOL/Decision_Procs/Approximation.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Decision_Procs/Approximation.thy Mon Oct 17 17:33:07 2016 +0200 @@ -3972,7 +3972,7 @@ qed have "\k i. k < i \ {k ..< i} = insert k {Suc k ..< i}" by auto - hence setprod_head_Suc: "\k i. \{k ..< k + Suc i} = k * \{Suc k ..< Suc k + i}" + hence prod_head_Suc: "\k i. \{k ..< k + Suc i} = k * \{Suc k ..< Suc k + i}" by auto have sum_move0: "\k F. sum F {0.. k. F (Suc k)) {0.. i = 0.. j \ {k.. j \ {k.. {l .. u}" . @@ -4003,8 +4003,8 @@ qed qed -lemma setprod_fact: "real (\ {1..<1 + k}) = fact (k :: nat)" - by (simp add: fact_setprod atLeastLessThanSuc_atLeastAtMost) +lemma prod_fact: "real (\ {1..<1 + k}) = fact (k :: nat)" + by (simp add: fact_prod atLeastLessThanSuc_atLeastAtMost) lemma approx_tse: assumes "bounded_by xs vs" @@ -4029,7 +4029,7 @@ (\ j = 0.. {l .. u}" (is "\ t. _ \ ?taylor t \ _") - unfolding F_def atLeastAtMost_iff[symmetric] setprod_fact + unfolding F_def atLeastAtMost_iff[symmetric] prod_fact by blast have bnd_xs: "xs ! x \ { lx .. ux }" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Deriv.thy --- a/src/HOL/Deriv.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Deriv.thy Mon Oct 17 17:33:07 2016 +0200 @@ -351,7 +351,7 @@ lemmas has_derivative_mult[simp, derivative_intros] = bounded_bilinear.FDERIV[OF bounded_bilinear_mult] lemmas has_derivative_scaleR[simp, derivative_intros] = bounded_bilinear.FDERIV[OF bounded_bilinear_scaleR] -lemma has_derivative_setprod[simp, derivative_intros]: +lemma has_derivative_prod[simp, derivative_intros]: fixes f :: "'i \ 'a::real_normed_vector \ 'b::real_normed_field" shows "(\i. i \ I \ (f i has_derivative f' i) (at x within s)) \ ((\x. \i\I. f i x) has_derivative (\y. \i\I. f' i y * (\j\I - {i}. f j x))) (at x within s)" @@ -377,7 +377,7 @@ fixes f :: "'a :: real_normed_vector \ 'b :: real_normed_field" assumes f: "(f has_derivative f') (at x within s)" shows "((\x. f x^n) has_derivative (\y. of_nat n * f' y * f x^(n - 1))) (at x within s)" - using has_derivative_setprod[OF f, of "{..< n}"] by (simp add: setprod_constant ac_simps) + using has_derivative_prod[OF f, of "{..< n}"] by (simp add: prod_constant ac_simps) lemma has_derivative_inverse': fixes x :: "'a::real_normed_div_algebra" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/GCD.thy --- a/src/HOL/GCD.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/GCD.thy Mon Oct 17 17:33:07 2016 +0200 @@ -859,7 +859,7 @@ lemma coprime_plus_one [simp]: "gcd (n + 1) n = 1" by (subst add_commute) simp -lemma setprod_coprime [rule_format]: "(\i\A. gcd (f i) a = 1) \ gcd (\i\A. f i) a = 1" +lemma prod_coprime [rule_format]: "(\i\A. gcd (f i) a = 1) \ gcd (\i\A. f i) a = 1" by (induct A rule: infinite_finite_induct) (auto simp add: gcd_mult_cancel) lemma prod_list_coprime: "(\x. x \ set xs \ coprime x y) \ coprime (prod_list xs) y" @@ -1373,7 +1373,7 @@ also have "lcm a \ = lcm a (\A)" by (cases "\A = 0") (simp_all add: lcm_div_unit2) also from insert have "gcd a (\A) = 1" - by (subst gcd.commute, intro setprod_coprime) auto + by (subst gcd.commute, intro prod_coprime) auto with insert have "lcm a (\A) = normalize (\(insert a A))" by (simp add: lcm_coprime) finally show ?case . diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Groups_Big.thy --- a/src/HOL/Groups_Big.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Groups_Big.thy Mon Oct 17 17:33:07 2016 +0200 @@ -1051,34 +1051,34 @@ context comm_monoid_mult begin -sublocale setprod: comm_monoid_set times 1 - defines setprod = setprod.F .. +sublocale prod: comm_monoid_set times 1 + defines prod = prod.F .. -abbreviation Setprod ("\_" [1000] 999) - where "\A \ setprod (\x. x) A" +abbreviation Prod ("\_" [1000] 999) + where "\A \ prod (\x. x) A" end syntax (ASCII) - "_setprod" :: "pttrn => 'a set => 'b => 'b::comm_monoid_mult" ("(4PROD _:_./ _)" [0, 51, 10] 10) + "_prod" :: "pttrn => 'a set => 'b => 'b::comm_monoid_mult" ("(4PROD _:_./ _)" [0, 51, 10] 10) syntax - "_setprod" :: "pttrn => 'a set => 'b => 'b::comm_monoid_mult" ("(2\_\_./ _)" [0, 51, 10] 10) + "_prod" :: "pttrn => 'a set => 'b => 'b::comm_monoid_mult" ("(2\_\_./ _)" [0, 51, 10] 10) translations \ \Beware of argument permutation!\ - "\i\A. b" == "CONST setprod (\i. b) A" + "\i\A. b" == "CONST prod (\i. b) A" text \Instead of @{term"\x\{x. P}. e"} we introduce the shorter \\x|P. e\.\ syntax (ASCII) - "_qsetprod" :: "pttrn \ bool \ 'a \ 'a" ("(4PROD _ |/ _./ _)" [0, 0, 10] 10) + "_qprod" :: "pttrn \ bool \ 'a \ 'a" ("(4PROD _ |/ _./ _)" [0, 0, 10] 10) syntax - "_qsetprod" :: "pttrn \ bool \ 'a \ 'a" ("(2\_ | (_)./ _)" [0, 0, 10] 10) + "_qprod" :: "pttrn \ bool \ 'a \ 'a" ("(2\_ | (_)./ _)" [0, 0, 10] 10) translations - "\x|P. t" => "CONST setprod (\x. t) {x. P}" + "\x|P. t" => "CONST prod (\x. t) {x. P}" context comm_monoid_mult begin -lemma setprod_dvd_setprod: "(\a. a \ A \ f a dvd g a) \ setprod f A dvd setprod g A" +lemma prod_dvd_prod: "(\a. a \ A \ f a dvd g a) \ prod f A dvd prod g A" proof (induct A rule: infinite_finite_induct) case infinite then show ?case by (auto intro: dvdI) @@ -1087,18 +1087,18 @@ then show ?case by (auto intro: dvdI) next case (insert a A) - then have "f a dvd g a" and "setprod f A dvd setprod g A" + then have "f a dvd g a" and "prod f A dvd prod g A" by simp_all - then obtain r s where "g a = f a * r" and "setprod g A = setprod f A * s" + then obtain r s where "g a = f a * r" and "prod g A = prod f A * s" by (auto elim!: dvdE) - then have "g a * setprod g A = f a * setprod f A * (r * s)" + then have "g a * prod g A = f a * prod f A * (r * s)" by (simp add: ac_simps) with insert.hyps show ?case by (auto intro: dvdI) qed -lemma setprod_dvd_setprod_subset: "finite B \ A \ B \ setprod f A dvd setprod f B" - by (auto simp add: setprod.subset_diff ac_simps intro: dvdI) +lemma prod_dvd_prod_subset: "finite B \ A \ B \ prod f A dvd prod f B" + by (auto simp add: prod.subset_diff ac_simps intro: dvdI) end @@ -1108,25 +1108,25 @@ context comm_semiring_1 begin -lemma dvd_setprod_eqI [intro]: +lemma dvd_prod_eqI [intro]: assumes "finite A" and "a \ A" and "b = f a" - shows "b dvd setprod f A" + shows "b dvd prod f A" proof - - from \finite A\ have "setprod f (insert a (A - {a})) = f a * setprod f (A - {a})" - by (intro setprod.insert) auto + from \finite A\ have "prod f (insert a (A - {a})) = f a * prod f (A - {a})" + by (intro prod.insert) auto also from \a \ A\ have "insert a (A - {a}) = A" by blast - finally have "setprod f A = f a * setprod f (A - {a})" . + finally have "prod f A = f a * prod f (A - {a})" . with \b = f a\ show ?thesis by simp qed -lemma dvd_setprodI [intro]: "finite A \ a \ A \ f a dvd setprod f A" +lemma dvd_prodI [intro]: "finite A \ a \ A \ f a dvd prod f A" by auto -lemma setprod_zero: +lemma prod_zero: assumes "finite A" and "\a\A. f a = 0" - shows "setprod f A = 0" + shows "prod f A = 0" using assms proof (induct A) case empty @@ -1134,32 +1134,32 @@ next case (insert a A) then have "f a = 0 \ (\a\A. f a = 0)" by simp - then have "f a * setprod f A = 0" by rule (simp_all add: insert) + then have "f a * prod f A = 0" by rule (simp_all add: insert) with insert show ?case by simp qed -lemma setprod_dvd_setprod_subset2: +lemma prod_dvd_prod_subset2: assumes "finite B" and "A \ B" and "\a. a \ A \ f a dvd g a" - shows "setprod f A dvd setprod g B" + shows "prod f A dvd prod g B" proof - - from assms have "setprod f A dvd setprod g A" - by (auto intro: setprod_dvd_setprod) - moreover from assms have "setprod g A dvd setprod g B" - by (auto intro: setprod_dvd_setprod_subset) + from assms have "prod f A dvd prod g A" + by (auto intro: prod_dvd_prod) + moreover from assms have "prod g A dvd prod g B" + by (auto intro: prod_dvd_prod_subset) ultimately show ?thesis by (rule dvd_trans) qed end -lemma (in semidom) setprod_zero_iff [simp]: +lemma (in semidom) prod_zero_iff [simp]: fixes f :: "'b \ 'a" assumes "finite A" - shows "setprod f A = 0 \ (\a\A. f a = 0)" + shows "prod f A = 0 \ (\a\A. f a = 0)" using assms by (induct A) (auto simp: no_zero_divisors) -lemma (in semidom_divide) setprod_diff1: +lemma (in semidom_divide) prod_diff1: assumes "finite A" and "f a \ 0" - shows "setprod f (A - {a}) = (if a \ A then setprod f A div f a else setprod f A)" + shows "prod f (A - {a}) = (if a \ A then prod f A div f a else prod f A)" proof (cases "a \ A") case True then show ?thesis by simp @@ -1196,73 +1196,73 @@ for c :: "nat \ 'a::field" using sum_zero_power [of "\i. c i / d i" A] by auto -lemma (in field) setprod_inversef: - "finite A \ setprod (inverse \ f) A = inverse (setprod f A)" +lemma (in field) prod_inversef: + "finite A \ prod (inverse \ f) A = inverse (prod f A)" by (induct A rule: finite_induct) simp_all -lemma (in field) setprod_dividef: "finite A \ (\x\A. f x / g x) = setprod f A / setprod g A" - using setprod_inversef [of A g] by (simp add: divide_inverse setprod.distrib) +lemma (in field) prod_dividef: "finite A \ (\x\A. f x / g x) = prod f A / prod g A" + using prod_inversef [of A g] by (simp add: divide_inverse prod.distrib) -lemma setprod_Un: +lemma prod_Un: fixes f :: "'b \ 'a :: field" assumes "finite A" and "finite B" and "\x\A \ B. f x \ 0" - shows "setprod f (A \ B) = setprod f A * setprod f B / setprod f (A \ B)" + shows "prod f (A \ B) = prod f A * prod f B / prod f (A \ B)" proof - - from assms have "setprod f A * setprod f B = setprod f (A \ B) * setprod f (A \ B)" - by (simp add: setprod.union_inter [symmetric, of A B]) + from assms have "prod f A * prod f B = prod f (A \ B) * prod f (A \ B)" + by (simp add: prod.union_inter [symmetric, of A B]) with assms show ?thesis by simp qed -lemma (in linordered_semidom) setprod_nonneg: "(\a\A. 0 \ f a) \ 0 \ setprod f A" +lemma (in linordered_semidom) prod_nonneg: "(\a\A. 0 \ f a) \ 0 \ prod f A" by (induct A rule: infinite_finite_induct) simp_all -lemma (in linordered_semidom) setprod_pos: "(\a\A. 0 < f a) \ 0 < setprod f A" +lemma (in linordered_semidom) prod_pos: "(\a\A. 0 < f a) \ 0 < prod f A" by (induct A rule: infinite_finite_induct) simp_all -lemma (in linordered_semidom) setprod_mono: - "\i\A. 0 \ f i \ f i \ g i \ setprod f A \ setprod g A" - by (induct A rule: infinite_finite_induct) (auto intro!: setprod_nonneg mult_mono) +lemma (in linordered_semidom) prod_mono: + "\i\A. 0 \ f i \ f i \ g i \ prod f A \ prod g A" + by (induct A rule: infinite_finite_induct) (auto intro!: prod_nonneg mult_mono) -lemma (in linordered_semidom) setprod_mono_strict: +lemma (in linordered_semidom) prod_mono_strict: assumes "finite A" "\i\A. 0 \ f i \ f i < g i" "A \ {}" - shows "setprod f A < setprod g A" + shows "prod f A < prod g A" using assms proof (induct A rule: finite_induct) case empty then show ?case by simp next case insert - then show ?case by (force intro: mult_strict_mono' setprod_nonneg) + then show ?case by (force intro: mult_strict_mono' prod_nonneg) qed -lemma (in linordered_field) abs_setprod: "\setprod f A\ = (\x\A. \f x\)" +lemma (in linordered_field) abs_prod: "\prod f A\ = (\x\A. \f x\)" by (induct A rule: infinite_finite_induct) (simp_all add: abs_mult) -lemma setprod_eq_1_iff [simp]: "finite A \ setprod f A = 1 \ (\a\A. f a = 1)" +lemma prod_eq_1_iff [simp]: "finite A \ prod f A = 1 \ (\a\A. f a = 1)" for f :: "'a \ nat" by (induct A rule: finite_induct) simp_all -lemma setprod_pos_nat_iff [simp]: "finite A \ setprod f A > 0 \ (\a\A. f a > 0)" +lemma prod_pos_nat_iff [simp]: "finite A \ prod f A > 0 \ (\a\A. f a > 0)" for f :: "'a \ nat" - using setprod_zero_iff by (simp del: neq0_conv add: zero_less_iff_neq_zero) + using prod_zero_iff by (simp del: neq0_conv add: zero_less_iff_neq_zero) -lemma setprod_constant: "(\x\ A. y) = y ^ card A" +lemma prod_constant: "(\x\ A. y) = y ^ card A" for y :: "'a::comm_monoid_mult" by (induct A rule: infinite_finite_induct) simp_all -lemma setprod_power_distrib: "setprod f A ^ n = setprod (\x. (f x) ^ n) A" +lemma prod_power_distrib: "prod f A ^ n = prod (\x. (f x) ^ n) A" for f :: "'a \ 'b::comm_semiring_1" by (induct A rule: infinite_finite_induct) (auto simp add: power_mult_distrib) lemma power_sum: "c ^ (\a\A. f a) = (\a\A. c ^ f a)" by (induct A rule: infinite_finite_induct) (simp_all add: power_add) -lemma setprod_gen_delta: +lemma prod_gen_delta: fixes b :: "'b \ 'a::comm_monoid_mult" assumes fin: "finite S" - shows "setprod (\k. if k = a then b k else c) S = + shows "prod (\k. if k = a then b k else c) S = (if a \ S then b a * c ^ (card S - 1) else c ^ card S)" proof - let ?f = "(\k. if k=a then b k else c)" @@ -1270,7 +1270,7 @@ proof (cases "a \ S") case False then have "\ k\ S. ?f k = c" by simp - with False show ?thesis by (simp add: setprod_constant) + with False show ?thesis by (simp add: prod_constant) next case True let ?A = "S - {a}" @@ -1278,16 +1278,16 @@ from True have eq: "S = ?A \ ?B" by blast have disjoint: "?A \ ?B = {}" by simp from fin have fin': "finite ?A" "finite ?B" by auto - have f_A0: "setprod ?f ?A = setprod (\i. c) ?A" - by (rule setprod.cong) auto + have f_A0: "prod ?f ?A = prod (\i. c) ?A" + by (rule prod.cong) auto from fin True have card_A: "card ?A = card S - 1" by auto - have f_A1: "setprod ?f ?A = c ^ card ?A" - unfolding f_A0 by (rule setprod_constant) - have "setprod ?f ?A * setprod ?f ?B = setprod ?f S" - using setprod.union_disjoint[OF fin' disjoint, of ?f, unfolded eq[symmetric]] + have f_A1: "prod ?f ?A = c ^ card ?A" + unfolding f_A0 by (rule prod_constant) + have "prod ?f ?A * prod ?f ?B = prod ?f S" + using prod.union_disjoint[OF fin' disjoint, of ?f, unfolded eq[symmetric]] by simp with True card_A show ?thesis - by (simp add: f_A1 field_simps cong add: setprod.cong cong del: if_weak_cong) + by (simp add: f_A1 field_simps cong add: prod.cong cong del: if_weak_cong) qed qed diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Groups_List.thy --- a/src/HOL/Groups_List.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Groups_List.thy Mon Oct 17 17:33:07 2016 +0200 @@ -340,15 +340,15 @@ from prod_list_def show "monoid_list.F times 1 = prod_list" by simp qed -sublocale setprod: comm_monoid_list_set times 1 +sublocale prod: comm_monoid_list_set times 1 rewrites "monoid_list.F times 1 = prod_list" - and "comm_monoid_set.F times 1 = setprod" + and "comm_monoid_set.F times 1 = prod" proof - show "comm_monoid_list_set times 1" .. - then interpret setprod: comm_monoid_list_set times 1 . + then interpret prod: comm_monoid_list_set times 1 . from prod_list_def show "monoid_list.F times 1 = prod_list" by simp - from setprod_def show "comm_monoid_set.F times 1 = setprod" by (auto intro: sym) + from prod_def show "comm_monoid_set.F times 1 = prod" by (auto intro: sym) qed end diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Int.thy --- a/src/HOL/Int.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Int.thy Mon Oct 17 17:33:07 2016 +0200 @@ -866,7 +866,7 @@ qed -subsection \@{term sum} and @{term setprod}\ +subsection \@{term sum} and @{term prod}\ lemma of_nat_sum [simp]: "of_nat (sum f A) = (\x\A. of_nat(f x))" by (induct A rule: infinite_finite_induct) auto @@ -874,14 +874,14 @@ lemma of_int_sum [simp]: "of_int (sum f A) = (\x\A. of_int(f x))" by (induct A rule: infinite_finite_induct) auto -lemma of_nat_setprod [simp]: "of_nat (setprod f A) = (\x\A. of_nat(f x))" +lemma of_nat_prod [simp]: "of_nat (prod f A) = (\x\A. of_nat(f x))" by (induct A rule: infinite_finite_induct) auto -lemma of_int_setprod [simp]: "of_int (setprod f A) = (\x\A. of_int(f x))" +lemma of_int_prod [simp]: "of_int (prod f A) = (\x\A. of_int(f x))" by (induct A rule: infinite_finite_induct) auto lemmas int_sum = of_nat_sum [where 'a=int] -lemmas int_setprod = of_nat_setprod [where 'a=int] +lemmas int_prod = of_nat_prod [where 'a=int] text \Legacy theorems\ diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Library/Extended_Nonnegative_Real.thy --- a/src/HOL/Library/Extended_Nonnegative_Real.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Library/Extended_Nonnegative_Real.thy Mon Oct 17 17:33:07 2016 +0200 @@ -550,12 +550,12 @@ lemma top_power_ennreal: "top ^ n = (if n = 0 then 1 else top :: ennreal)" by (induction n) (simp_all add: ennreal_mult_eq_top_iff) -lemma ennreal_setprod_eq_0[simp]: +lemma ennreal_prod_eq_0[simp]: fixes f :: "'a \ ennreal" - shows "(setprod f A = 0) = (finite A \ (\i\A. f i = 0))" + shows "(prod f A = 0) = (finite A \ (\i\A. f i = 0))" by (induction A rule: infinite_finite_induct) auto -lemma ennreal_setprod_eq_top: +lemma ennreal_prod_eq_top: fixes f :: "'a \ ennreal" shows "(\i\I. f i) = top \ (finite I \ ((\i\I. f i \ 0) \ (\i\I. f i = top)))" by (induction I rule: infinite_finite_induct) (auto simp: ennreal_mult_eq_top_iff) @@ -1047,9 +1047,9 @@ lemma ennreal_divide_numeral: "0 \ x \ ennreal x / numeral b = ennreal (x / numeral b)" by (subst divide_ennreal[symmetric]) auto -lemma setprod_ennreal: "(\i. i \ A \ 0 \ f i) \ (\i\A. ennreal (f i)) = ennreal (setprod f A)" +lemma prod_ennreal: "(\i. i \ A \ 0 \ f i) \ (\i\A. ennreal (f i)) = ennreal (prod f A)" by (induction A rule: infinite_finite_induct) - (auto simp: ennreal_mult setprod_nonneg) + (auto simp: ennreal_mult prod_nonneg) lemma mult_right_ennreal_cancel: "a * ennreal c = b * ennreal c \ (a = b \ c \ 0)" apply (cases "0 \ c") diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Library/Extended_Real.thy --- a/src/HOL/Library/Extended_Real.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Library/Extended_Real.thy Mon Oct 17 17:33:07 2016 +0200 @@ -1180,7 +1180,7 @@ shows "y \ x" by (metis assms ereal_bot ereal_cases ereal_infty_less_eq(2) ereal_less_eq(1) linorder_le_cases) -lemma setprod_ereal_0: +lemma prod_ereal_0: fixes f :: "'a \ ereal" shows "(\i\A. f i) = 0 \ finite A \ (\i\A. f i = 0)" proof (cases "finite A") @@ -1191,7 +1191,7 @@ then show ?thesis by auto qed -lemma setprod_ereal_pos: +lemma prod_ereal_pos: fixes f :: "'a \ ereal" assumes pos: "\i. i \ I \ 0 \ f i" shows "0 \ (\i\I. f i)" @@ -1204,7 +1204,7 @@ then show ?thesis by simp qed -lemma setprod_PInf: +lemma prod_PInf: fixes f :: "'a \ ereal" assumes "\i. i \ I \ 0 \ f i" shows "(\i\I. f i) = \ \ finite I \ (\i\I. f i = \) \ (\i\I. f i \ 0)" @@ -1213,15 +1213,15 @@ from this assms show ?thesis proof (induct I) case (insert i I) - then have pos: "0 \ f i" "0 \ setprod f I" - by (auto intro!: setprod_ereal_pos) - from insert have "(\j\insert i I. f j) = \ \ setprod f I * f i = \" + then have pos: "0 \ f i" "0 \ prod f I" + by (auto intro!: prod_ereal_pos) + from insert have "(\j\insert i I. f j) = \ \ prod f I * f i = \" by auto - also have "\ \ (setprod f I = \ \ f i = \) \ f i \ 0 \ setprod f I \ 0" - using setprod_ereal_pos[of I f] pos - by (cases rule: ereal2_cases[of "f i" "setprod f I"]) auto + also have "\ \ (prod f I = \ \ f i = \) \ f i \ 0 \ prod f I \ 0" + using prod_ereal_pos[of I f] pos + by (cases rule: ereal2_cases[of "f i" "prod f I"]) auto also have "\ \ finite (insert i I) \ (\j\insert i I. f j = \) \ (\j\insert i I. f j \ 0)" - using insert by (auto simp: setprod_ereal_0) + using insert by (auto simp: prod_ereal_0) finally show ?case . qed simp next @@ -1229,7 +1229,7 @@ then show ?thesis by simp qed -lemma setprod_ereal: "(\i\A. ereal (f i)) = ereal (setprod f A)" +lemma prod_ereal: "(\i\A. ereal (f i)) = ereal (prod f A)" proof (cases "finite A") case True then show ?thesis diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Library/Formal_Power_Series.thy --- a/src/HOL/Library/Formal_Power_Series.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Library/Formal_Power_Series.thy Mon Oct 17 17:33:07 2016 +0200 @@ -2278,11 +2278,11 @@ qed text \The general form.\ -lemma fps_setprod_nth: +lemma fps_prod_nth: fixes m :: nat and a :: "nat \ 'a::comm_ring_1 fps" - shows "(setprod a {0 .. m}) $ n = - sum (\v. setprod (\j. (a j) $ (v!j)) {0..m}) (natpermute n (m+1))" + shows "(prod a {0 .. m}) $ n = + sum (\v. prod (\j. (a j) $ (v!j)) {0..m}) (natpermute n (m+1))" (is "?P m n") proof (induct m arbitrary: n rule: nat_less_induct) fix m n assume H: "\m' < m. \n. ?P m' n" @@ -2301,8 +2301,8 @@ using Suc by (simp add: set_eq_iff) presburger have f0: "finite {0 .. k}" "finite {m}" by auto have d0: "{0 .. k} \ {m} = {}" using Suc by auto - have "(setprod a {0 .. m}) $ n = (setprod a {0 .. k} * a m) $ n" - unfolding setprod.union_disjoint[OF f0 d0, unfolded u0] by simp + have "(prod a {0 .. m}) $ n = (prod a {0 .. k} * a m) $ n" + unfolding prod.union_disjoint[OF f0 d0, unfolded u0] by simp also have "\ = (\i = 0..n. (\v\natpermute i (k + 1). \j\{0..k}. a j $ v ! j) * a m $ (n - i))" unfolding fps_mult_nth H[rule_format, OF km] .. also have "\ = (\v\natpermute n (m + 1). \j\{0..m}. a j $ v ! j)" @@ -2325,7 +2325,7 @@ apply (rule_tac l = "\xs. xs @ [n - x]" in sum.reindex_cong) apply (simp add: inj_on_def) apply auto - unfolding setprod.union_disjoint[OF f0 d0, unfolded u0, unfolded Suc] + unfolding prod.union_disjoint[OF f0 d0, unfolded u0, unfolded Suc] apply (clarsimp simp add: natpermute_def nth_append) done finally show ?thesis . @@ -2336,18 +2336,18 @@ lemma fps_power_nth_Suc: fixes m :: nat and a :: "'a::comm_ring_1 fps" - shows "(a ^ Suc m)$n = sum (\v. setprod (\j. a $ (v!j)) {0..m}) (natpermute n (m+1))" + shows "(a ^ Suc m)$n = sum (\v. prod (\j. a $ (v!j)) {0..m}) (natpermute n (m+1))" proof - - have th0: "a^Suc m = setprod (\i. a) {0..m}" - by (simp add: setprod_constant) - show ?thesis unfolding th0 fps_setprod_nth .. + have th0: "a^Suc m = prod (\i. a) {0..m}" + by (simp add: prod_constant) + show ?thesis unfolding th0 fps_prod_nth .. qed lemma fps_power_nth: fixes m :: nat and a :: "'a::comm_ring_1 fps" shows "(a ^m)$n = - (if m=0 then 1$n else sum (\v. setprod (\j. a $ (v!j)) {0..m - 1}) (natpermute n m))" + (if m=0 then 1$n else sum (\v. prod (\j. a $ (v!j)) {0..m - 1}) (natpermute n m))" by (cases m) (simp_all add: fps_power_nth_Suc del: power_Suc) lemma fps_nth_power_0: @@ -2360,10 +2360,10 @@ next case (Suc n) then have c: "m = card {0..n}" by simp - have "(a ^m)$0 = setprod (\i. a$0) {0..n}" + have "(a ^m)$0 = prod (\i. a$0) {0..n}" by (simp add: Suc fps_power_nth del: replicate.simps power_Suc) also have "\ = (a$0) ^ m" - unfolding c by (rule setprod_constant) + unfolding c by (rule prod_constant) finally show ?thesis . qed @@ -2433,10 +2433,10 @@ from j have "{0..m} = insert j ({0..m} - {j})" by auto also from j have "(\i\\. f $ (v ! i)) = f $ k * (\i\{0..m} - {j}. f $ (v ! i))" - by (subst setprod.insert) auto + by (subst prod.insert) auto also have "(\i\{0..m} - {j}. f $ (v ! i)) = (\i\{0..m} - {j}. f $ 0)" - by (intro setprod.cong) (simp_all add: zero) - also from j have "\ = (f $ 0) ^ m" by (subst setprod_constant) simp_all + by (intro prod.cong) (simp_all add: zero) + also from j have "\ = (f $ 0) ^ m" by (subst prod_constant) simp_all finally have "(\j = 0..m. f $ (v ! j)) = f $ k * (f $ 0) ^ m" . } note A = this @@ -2472,7 +2472,7 @@ using that elem_le_sum_list_nat[of i v] unfolding natpermute_def by (auto simp: set_conv_nth dest!: spec[of _ i]) hence "?h f = ?h g" - by (intro sum.cong refl setprod.cong less lessI) (auto simp: natpermute_def) + by (intro sum.cong refl prod.cong less lessI) (auto simp: natpermute_def) finally have "f $ k * (of_nat (Suc m) * (f $ 0) ^ m) = g $ k * (of_nat (Suc m) * (f $ 0) ^ m)" by simp with assms show "f $ k = g $ k" @@ -2567,7 +2567,7 @@ subsection \Radicals\ -declare setprod.cong [fundef_cong] +declare prod.cong [fundef_cong] function radical :: "(nat \ 'a \ 'a) \ nat \ 'a::field fps \ nat \ 'a" where @@ -2575,7 +2575,7 @@ | "radical r 0 a (Suc n) = 0" | "radical r (Suc k) a 0 = r (Suc k) (a$0)" | "radical r (Suc k) a (Suc n) = - (a$ Suc n - sum (\xs. setprod (\j. radical r (Suc k) a (xs ! j)) {0..k}) + (a$ Suc n - sum (\xs. prod (\j. radical r (Suc k) a (xs ! j)) {0..k}) {xs. xs \ natpermute (Suc n) (Suc k) \ Suc n \ set xs}) / (of_nat (Suc k) * (radical r (Suc k) a 0)^k)" by pat_completeness auto @@ -2641,14 +2641,14 @@ have eq1: "fps_radical r k a ^ k $ 0 = (\j\{0..h}. fps_radical r k a $ (replicate k 0) ! j)" unfolding fps_power_nth Suc by simp also have "\ = (\j\{0..h}. r k (a$0))" - apply (rule setprod.cong) + apply (rule prod.cong) apply simp using Suc apply (subgoal_tac "replicate k 0 ! x = 0") apply (auto intro: nth_replicate simp del: replicate.simps) done also have "\ = a$0" - using r Suc by (simp add: setprod_constant) + using r Suc by (simp add: prod_constant) finally show ?thesis using Suc by simp qed @@ -2693,12 +2693,12 @@ unfolding natpermute_contain_maximal by auto have "(\j\{0..k}. fps_radical r (Suc k) a $ v ! j) = (\j\{0..k}. if j = i then fps_radical r (Suc k) a $ n else r (Suc k) (a$0))" - apply (rule setprod.cong, simp) + apply (rule prod.cong, simp) using i r0 apply (simp del: replicate.simps) done also have "\ = (fps_radical r (Suc k) a $ n) * r (Suc k) (a$0) ^ k" - using i r0 by (simp add: setprod_gen_delta) + using i r0 by (simp add: prod_gen_delta) finally show ?ths . qed rule then have "sum ?f ?Pnkn = of_nat (k+1) * ?r $ n * r (Suc k) (a $ 0) ^ k" @@ -2720,7 +2720,7 @@ by simp then show ?thesis unfolding fps_power_nth_Suc - by (simp add: setprod_constant del: replicate.simps) + by (simp add: prod_constant del: replicate.simps) qed qed @@ -2757,10 +2757,10 @@ from v obtain i where i: "i \ {0..k}" "v = replicate (k+1) 0 [i:= n]" unfolding natpermute_contain_maximal by auto have "(\j\{0..k}. fps_radical r (Suc k) a $ v ! j) = (\j\{0..k}. if j = i then fps_radical r (Suc k) a $ n else r (Suc k) (a$0))" - apply (rule setprod.cong, simp) + apply (rule prod.cong, simp) using i r0 by (simp del: replicate.simps) also have "\ = (fps_radical r (Suc k) a $ n) * r (Suc k) (a$0) ^ k" - unfolding setprod_gen_delta[OF fK] using i r0 by simp + unfolding prod_gen_delta[OF fK] using i r0 by simp finally show ?ths . qed then have "sum ?f ?Pnkn = of_nat (k+1) * ?r $ n * r (Suc k) (a $ 0) ^ k" @@ -2828,18 +2828,18 @@ unfolding Suc_eq_plus1 natpermute_contain_maximal by (auto simp del: replicate.simps) have "(\j\{0..k}. a $ v ! j) = (\j\{0..k}. if j = i then a $ n else r (Suc k) (b$0))" - apply (rule setprod.cong, simp) + apply (rule prod.cong, simp) using i a0 apply (simp del: replicate.simps) done also have "\ = a $ n * (?r $ 0)^k" - using i by (simp add: setprod_gen_delta) + using i by (simp add: prod_gen_delta) finally show ?ths . qed rule then have th0: "sum ?g ?Pnkn = of_nat (k+1) * a $ n * (?r $ 0)^k" by (simp add: natpermute_max_card[OF nz, simplified]) have th1: "sum ?g ?Pnknn = sum ?f ?Pnknn" - proof (rule sum.cong, rule refl, rule setprod.cong, simp) + proof (rule sum.cong, rule refl, rule prod.cong, simp) fix xs i assume xs: "xs \ ?Pnknn" and i: "i \ {0..k}" have False if c: "n \ xs ! i" @@ -3380,9 +3380,9 @@ apply (simp add: fps_compose_nth fps_mult_nth sum_distrib_right) done -lemma fps_compose_setprod_distrib: +lemma fps_compose_prod_distrib: assumes c0: "c$0 = (0::'a::idom)" - shows "setprod a S oo c = setprod (\k. a k oo c) S" + shows "prod a S oo c = prod (\k. a k oo c) S" apply (cases "finite S") apply simp_all apply (induct S rule: finite_induct) @@ -3413,10 +3413,10 @@ then show ?thesis by simp next case (Suc m) - have th0: "a^n = setprod (\k. a) {0..m}" "(a oo c) ^ n = setprod (\k. a oo c) {0..m}" - by (simp_all add: setprod_constant Suc) + have th0: "a^n = prod (\k. a) {0..m}" "(a oo c) ^ n = prod (\k. a oo c) {0..m}" + by (simp_all add: prod_constant Suc) then show ?thesis - by (simp add: fps_compose_setprod_distrib[OF c0]) + by (simp add: fps_compose_prod_distrib[OF c0]) qed lemma fps_compose_uminus: "- (a::'a::ring_1 fps) oo c = - (a oo c)" @@ -4155,8 +4155,8 @@ case False with kn have kn': "k < n" by simp - have m1nk: "?m1 n = setprod (\i. - 1) {..m}" "?m1 k = setprod (\i. - 1) {0..h}" - by (simp_all add: setprod_constant m h) + have m1nk: "?m1 n = prod (\i. - 1) {..m}" "?m1 k = prod (\i. - 1) {0..h}" + by (simp_all add: prod_constant m h) have bnz0: "pochhammer (b - of_nat n + 1) k \ 0" using bn0 kn unfolding pochhammer_eq_0_iff @@ -4164,37 +4164,37 @@ apply (erule_tac x= "n - ka - 1" in allE) apply (auto simp add: algebra_simps of_nat_diff) done - have eq1: "setprod (\k. (1::'a) + of_nat m - of_nat k) {..h} = - setprod of_nat {Suc (m - h) .. Suc m}" + have eq1: "prod (\k. (1::'a) + of_nat m - of_nat k) {..h} = + prod of_nat {Suc (m - h) .. Suc m}" using kn' h m - by (intro setprod.reindex_bij_witness[where i="\k. Suc m - k" and j="\k. Suc m - k"]) + by (intro prod.reindex_bij_witness[where i="\k. Suc m - k" and j="\k. Suc m - k"]) (auto simp: of_nat_diff) have th1: "(?m1 k * ?p (of_nat n) k) / ?f n = 1 / of_nat(fact (n - k))" apply (simp add: pochhammer_minus field_simps) using \k \ n\ apply (simp add: fact_split [of k n]) - apply (simp add: pochhammer_setprod) - using setprod.atLeast_lessThan_shift_bounds [where ?'a = 'a, of "\i. 1 + of_nat i" 0 "n - k" k] + apply (simp add: pochhammer_prod) + using prod.atLeast_lessThan_shift_bounds [where ?'a = 'a, of "\i. 1 + of_nat i" 0 "n - k" k] apply (auto simp add: of_nat_diff field_simps) done - have th20: "?m1 n * ?p b n = setprod (\i. b - of_nat i) {0..m}" + have th20: "?m1 n * ?p b n = prod (\i. b - of_nat i) {0..m}" apply (simp add: pochhammer_minus field_simps m) - apply (auto simp add: pochhammer_setprod_rev of_nat_diff setprod.atLeast_Suc_atMost_Suc_shift) + apply (auto simp add: pochhammer_prod_rev of_nat_diff prod.atLeast_Suc_atMost_Suc_shift) done - have th21:"pochhammer (b - of_nat n + 1) k = setprod (\i. b - of_nat i) {n - k .. n - 1}" - using kn apply (simp add: pochhammer_setprod_rev m h setprod.atLeast_Suc_atMost_Suc_shift) - using setprod.atLeast_atMost_shift_0 [of "m - h" m, where ?'a = 'a] + have th21:"pochhammer (b - of_nat n + 1) k = prod (\i. b - of_nat i) {n - k .. n - 1}" + using kn apply (simp add: pochhammer_prod_rev m h prod.atLeast_Suc_atMost_Suc_shift) + using prod.atLeast_atMost_shift_0 [of "m - h" m, where ?'a = 'a] apply (auto simp add: of_nat_diff field_simps) done have "?m1 n * ?p b n = - setprod (\i. b - of_nat i) {0.. n - k - 1} * pochhammer (b - of_nat n + 1) k" + prod (\i. b - of_nat i) {0.. n - k - 1} * pochhammer (b - of_nat n + 1) k" using kn' m h unfolding th20 th21 apply simp - apply (subst setprod.union_disjoint [symmetric]) + apply (subst prod.union_disjoint [symmetric]) apply auto - apply (rule setprod.cong) + apply (rule prod.cong) apply auto done then have th2: "(?m1 n * ?p b n)/pochhammer (b - of_nat n + 1) k = - setprod (\i. b - of_nat i) {0.. n - k - 1}" + prod (\i. b - of_nat i) {0.. n - k - 1}" using nz' by (simp add: field_simps) have "(?m1 n * ?p b n * ?m1 k * ?p (of_nat n) k) / (?f n * pochhammer (b - of_nat n + 1) k) = ((?m1 k * ?p (of_nat n) k) / ?f n) * ((?m1 n * ?p b n)/pochhammer (b - of_nat n + 1) k)" @@ -4204,7 +4204,7 @@ unfolding th1 th2 using kn' m h apply (simp add: field_simps gbinomial_mult_fact) - apply (rule setprod.cong) + apply (rule prod.cong) apply auto done finally show ?thesis by simp diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Library/Groups_Big_Fun.thy --- a/src/HOL/Library/Groups_Big_Fun.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Library/Groups_Big_Fun.thy Mon Oct 17 17:33:07 2016 +0200 @@ -283,11 +283,11 @@ sublocale Prod_any: comm_monoid_fun times 1 defines Prod_any = Prod_any.G - rewrites "comm_monoid_set.F times 1 = setprod" + rewrites "comm_monoid_set.F times 1 = prod" proof - show "comm_monoid_fun times 1" .. then interpret Prod_any: comm_monoid_fun times 1 . - from setprod_def show "comm_monoid_set.F times 1 = setprod" by (auto intro: sym) + from prod_def show "comm_monoid_set.F times 1 = prod" by (auto intro: sym) qed end @@ -308,7 +308,7 @@ from \f a = 0\ have "f a \ 1" by simp with \f a = 0\ have "\a. f a \ 1 \ f a = 0" by blast with \finite {a. f a \ 1}\ show ?thesis - by (simp add: Prod_any.expand_set setprod_zero) + by (simp add: Prod_any.expand_set prod_zero) qed lemma Prod_any_not_zero: diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Library/Multiset.thy --- a/src/HOL/Library/Multiset.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Library/Multiset.thy Mon Oct 17 17:33:07 2016 +0200 @@ -2269,13 +2269,13 @@ "prod_mset (replicate_mset n a) = a ^ n" by (induct n) simp_all -lemma setprod_unfold_prod_mset: - "setprod f A = prod_mset (image_mset f (mset_set A))" +lemma prod_unfold_prod_mset: + "prod f A = prod_mset (image_mset f (mset_set A))" by (cases "finite A") (induct A rule: finite_induct, simp_all) lemma prod_mset_multiplicity: - "prod_mset M = setprod (\x. x ^ count M x) (set_mset M)" - by (simp add: fold_mset_def setprod.eq_fold prod_mset.eq_fold funpow_times_power comp_def) + "prod_mset M = prod (\x. x ^ count M x) (set_mset M)" + by (simp add: fold_mset_def prod.eq_fold prod_mset.eq_fold funpow_times_power comp_def) lemma prod_mset_delta: "prod_mset (image_mset (\x. if x = y then c else 1) A) = c ^ count A y" by (induction A) simp_all diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Library/Multiset_Permutations.thy --- a/src/HOL/Library/Multiset_Permutations.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Library/Multiset_Permutations.thy Mon Oct 17 17:33:07 2016 +0200 @@ -161,24 +161,24 @@ context begin -private lemma multiset_setprod_fact_insert: +private lemma multiset_prod_fact_insert: "(\y\set_mset (A+{#x#}). fact (count (A+{#x#}) y)) = (count A x + 1) * (\y\set_mset A. fact (count A y))" proof - have "(\y\set_mset (A+{#x#}). fact (count (A+{#x#}) y)) = (\y\set_mset (A+{#x#}). (if y = x then count A x + 1 else 1) * fact (count A y))" - by (intro setprod.cong) simp_all + by (intro prod.cong) simp_all also have "\ = (count A x + 1) * (\y\set_mset (A+{#x#}). fact (count A y))" - by (simp add: setprod.distrib setprod.delta) + by (simp add: prod.distrib prod.delta) also have "(\y\set_mset (A+{#x#}). fact (count A y)) = (\y\set_mset A. fact (count A y))" - by (intro setprod.mono_neutral_right) (auto simp: not_in_iff) + by (intro prod.mono_neutral_right) (auto simp: not_in_iff) finally show ?thesis . qed -private lemma multiset_setprod_fact_remove: +private lemma multiset_prod_fact_remove: "x \# A \ (\y\set_mset A. fact (count A y)) = count A x * (\y\set_mset (A-{#x#}). fact (count (A-{#x#}) y))" - using multiset_setprod_fact_insert[of "A - {#x#}" x] by simp + using multiset_prod_fact_insert[of "A - {#x#}" x] by simp lemma card_permutations_of_multiset_aux: "card (permutations_of_multiset A) * (\x\set_mset A. fact (count A x)) = fact (size A)" @@ -199,7 +199,7 @@ have "card (permutations_of_multiset (A - {#x#})) * (\y\set_mset A. fact (count A y)) = count A x * (card (permutations_of_multiset (A - {#x#})) * (\y\set_mset (A - {#x#}). fact (count (A - {#x#}) y)))" (is "?lhs = _") - by (subst multiset_setprod_fact_remove[OF x]) simp_all + by (subst multiset_prod_fact_remove[OF x]) simp_all also note remove.IH[OF x] also from x have "size (A - {#x#}) = size A - 1" by (simp add: size_Diff_submset) finally show "?lhs = count A x * fact (size A - 1)" . @@ -223,7 +223,7 @@ proof - note card_permutations_of_multiset_aux[of "A + {#x#}"] also have "fact (size (A + {#x#})) = (size A + 1) * fact (size A)" by simp - also note multiset_setprod_fact_insert[of A x] + also note multiset_prod_fact_insert[of A x] also note card_permutations_of_multiset_aux[of A, symmetric] finally have "card (permutations_of_multiset (A + {#x#})) * (count A x + 1) * (\y\set_mset A. fact (count A y)) = diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Library/Polynomial.thy --- a/src/HOL/Library/Polynomial.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Library/Polynomial.thy Mon Oct 17 17:33:07 2016 +0200 @@ -1054,13 +1054,13 @@ shows "poly (p ^ n) x = poly p x ^ n" by (induct n) simp_all -lemma poly_setprod: "poly (\k\A. p k) x = (\k\A. poly (p k) x)" +lemma poly_prod: "poly (\k\A. p k) x = (\k\A. poly (p k) x)" by (induct A rule: infinite_finite_induct) simp_all -lemma degree_setprod_sum_le: "finite S \ degree (setprod f S) \ sum (degree o f) S" +lemma degree_prod_sum_le: "finite S \ degree (prod f S) \ sum (degree o f) S" proof (induct S rule: finite_induct) case (insert a S) - show ?case unfolding setprod.insert[OF insert(1-2)] sum.insert[OF insert(1-2)] + show ?case unfolding prod.insert[OF insert(1-2)] sum.insert[OF insert(1-2)] by (rule le_trans[OF degree_mult_le], insert insert, auto) qed simp @@ -2856,7 +2856,7 @@ by (cases "finite A", induction rule: finite_induct) (simp_all add: pcompose_1 pcompose_add) -lemma pcompose_setprod: "pcompose (setprod f A) p = setprod (\i. pcompose (f i) p) A" +lemma pcompose_prod: "pcompose (prod f A) p = prod (\i. pcompose (f i) p) A" by (cases "finite A", induction rule: finite_induct) (simp_all add: pcompose_1 pcompose_mult) @@ -3209,9 +3209,9 @@ reflect_poly p ^ n" by (induction n) (simp_all add: reflect_poly_mult) -lemma reflect_poly_setprod: - "reflect_poly (setprod (f :: _ \ _ :: {comm_semiring_0,semiring_no_zero_divisors} poly) A) = - setprod (\x. reflect_poly (f x)) A" +lemma reflect_poly_prod: + "reflect_poly (prod (f :: _ \ _ :: {comm_semiring_0,semiring_no_zero_divisors} poly) A) = + prod (\x. reflect_poly (f x)) A" by (cases "finite A", induction rule: finite_induct) (simp_all add: reflect_poly_mult) lemma reflect_poly_prod_list: @@ -3225,7 +3225,7 @@ lemmas reflect_poly_simps = reflect_poly_0 reflect_poly_1 reflect_poly_const reflect_poly_smult reflect_poly_mult - reflect_poly_power reflect_poly_setprod reflect_poly_prod_list + reflect_poly_power reflect_poly_prod reflect_poly_prod_list subsection \Derivatives of univariate polynomials\ @@ -3395,11 +3395,11 @@ apply (simp add: algebra_simps) done -lemma pderiv_setprod: "pderiv (setprod f (as)) = - (\a \ as. setprod f (as - {a}) * pderiv (f a))" +lemma pderiv_prod: "pderiv (prod f (as)) = + (\a \ as. prod f (as - {a}) * pderiv (f a))" proof (induct as rule: infinite_finite_induct) case (insert a as) - hence id: "setprod f (insert a as) = f a * setprod f as" + hence id: "prod f (insert a as) = f a * prod f as" "\ g. sum g (insert a as) = g a + sum g as" "insert a as - {a} = as" by auto @@ -3407,9 +3407,9 @@ fix b assume "b \ as" hence id2: "insert a as - {b} = insert a (as - {b})" using \a \ as\ by auto - have "setprod f (insert a as - {b}) = f a * setprod f (as - {b})" + have "prod f (insert a as - {b}) = f a * prod f (as - {b})" unfolding id2 - by (subst setprod.insert, insert insert, auto) + by (subst prod.insert, insert insert, auto) } note id2 = this show ?case unfolding id pderiv_mult insert(3) sum_distrib_left diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Library/Polynomial_FPS.thy --- a/src/HOL/Library/Polynomial_FPS.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Library/Polynomial_FPS.thy Mon Oct 17 17:33:07 2016 +0200 @@ -67,7 +67,7 @@ lemma fps_of_poly_sum_list: "fps_of_poly (sum_list xs) = sum_list (map fps_of_poly xs)" by (induction xs) (simp_all add: fps_of_poly_add) -lemma fps_of_poly_setprod: "fps_of_poly (setprod f A) = setprod (\x. fps_of_poly (f x)) A" +lemma fps_of_poly_prod: "fps_of_poly (prod f A) = prod (\x. fps_of_poly (f x)) A" by (cases "finite A", induction rule: finite_induct) (simp_all add: fps_of_poly_mult) lemma fps_of_poly_prod_list: "fps_of_poly (prod_list xs) = prod_list (map fps_of_poly xs)" @@ -144,7 +144,7 @@ lemmas fps_of_poly_simps = fps_of_poly_0 fps_of_poly_1 fps_of_poly_numeral fps_of_poly_const fps_of_poly_X fps_of_poly_add fps_of_poly_diff fps_of_poly_uminus fps_of_poly_mult fps_of_poly_smult - fps_of_poly_sum fps_of_poly_sum_list fps_of_poly_setprod fps_of_poly_prod_list + fps_of_poly_sum fps_of_poly_sum_list fps_of_poly_prod fps_of_poly_prod_list fps_of_poly_pCons fps_of_poly_pderiv fps_of_poly_power fps_of_poly_monom fps_of_poly_divide_numeral diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Library/RBT_Set.thy --- a/src/HOL/Library/RBT_Set.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Library/RBT_Set.thy Mon Oct 17 17:33:07 2016 +0200 @@ -88,7 +88,7 @@ "sum = sum" .. lemma [code, code del]: - "setprod = setprod" .. + "prod = prod" .. lemma [code, code del]: "Product_Type.product = Product_Type.product" .. diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Lifting_Set.thy --- a/src/HOL/Lifting_Set.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Lifting_Set.thy Mon Oct 17 17:33:07 2016 +0200 @@ -286,7 +286,7 @@ qed lemmas sum_parametric = sum.F_parametric -lemmas setprod_parametric = setprod.F_parametric +lemmas prod_parametric = prod.F_parametric lemma rel_set_UNION: assumes [transfer_rule]: "rel_set Q A B" "rel_fun Q (rel_set R) f g" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Limits.thy --- a/src/HOL/Limits.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Limits.thy Mon Oct 17 17:33:07 2016 +0200 @@ -833,20 +833,20 @@ shows "continuous_on s f \ continuous_on s (\x. (f x)^n)" unfolding continuous_on_def by (auto intro: tendsto_power) -lemma tendsto_setprod [tendsto_intros]: +lemma tendsto_prod [tendsto_intros]: fixes f :: "'a \ 'b \ 'c::{real_normed_algebra,comm_ring_1}" shows "(\i. i \ S \ (f i \ L i) F) \ ((\x. \i\S. f i x) \ (\i\S. L i)) F" by (induct S rule: infinite_finite_induct) (simp_all add: tendsto_mult) -lemma continuous_setprod [continuous_intros]: +lemma continuous_prod [continuous_intros]: fixes f :: "'a \ 'b::t2_space \ 'c::{real_normed_algebra,comm_ring_1}" shows "(\i. i \ S \ continuous F (f i)) \ continuous F (\x. \i\S. f i x)" - unfolding continuous_def by (rule tendsto_setprod) - -lemma continuous_on_setprod [continuous_intros]: + unfolding continuous_def by (rule tendsto_prod) + +lemma continuous_on_prod [continuous_intros]: fixes f :: "'a \ _ \ 'c::{real_normed_algebra,comm_ring_1}" shows "(\i. i \ S \ continuous_on s (f i)) \ continuous_on s (\x. \i\S. f i x)" - unfolding continuous_on_def by (auto intro: tendsto_setprod) + unfolding continuous_on_def by (auto intro: tendsto_prod) lemma tendsto_of_real_iff: "((\x. of_real (f x) :: 'a::real_normed_div_algebra) \ of_real c) F \ (f \ c) F" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/List.thy --- a/src/HOL/List.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/List.thy Mon Oct 17 17:33:07 2016 +0200 @@ -4672,7 +4672,7 @@ moreover have "Suc (card A - Suc k) = card A - k" using Suc.prems by simp then have "(card A - k) * \{Suc (card A - k)..card A} = \{Suc (card A - Suc k)..card A}" - by (subst setprod.insert[symmetric]) (simp add: atLeastAtMost_insertL)+ + by (subst prod.insert[symmetric]) (simp add: atLeastAtMost_insertL)+ ultimately show ?case by (simp add: card_image inj_Cons card_UN_disjoint Suc.hyps algebra_simps) qed diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Nat_Transfer.thy --- a/src/HOL/Nat_Transfer.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Nat_Transfer.thy Mon Oct 17 17:33:07 2016 +0200 @@ -186,33 +186,33 @@ ] -text \sum and setprod\ +text \sum and prod\ (* this handles the case where the *domain* of f is nat *) lemma transfer_nat_int_sum_prod: "sum f A = sum (%x. f (nat x)) (int ` A)" - "setprod f A = setprod (%x. f (nat x)) (int ` A)" + "prod f A = prod (%x. f (nat x)) (int ` A)" apply (subst sum.reindex) apply (unfold inj_on_def, auto) - apply (subst setprod.reindex) + apply (subst prod.reindex) apply (unfold inj_on_def o_def, auto) done (* this handles the case where the *range* of f is nat *) lemma transfer_nat_int_sum_prod2: "sum f A = nat(sum (%x. int (f x)) A)" - "setprod f A = nat(setprod (%x. int (f x)) A)" + "prod f A = nat(prod (%x. int (f x)) A)" apply (simp only: int_sum [symmetric] nat_int) - apply (simp only: int_setprod [symmetric] nat_int) + apply (simp only: int_prod [symmetric] nat_int) done lemma transfer_nat_int_sum_prod_closure: "nat_set A \ (!!x. x >= 0 \ f x >= (0::int)) \ sum f A >= 0" - "nat_set A \ (!!x. x >= 0 \ f x >= (0::int)) \ setprod f A >= 0" + "nat_set A \ (!!x. x >= 0 \ f x >= (0::int)) \ prod f A >= 0" unfolding nat_set_def apply (rule sum_nonneg) apply auto - apply (rule setprod_nonneg) + apply (rule prod_nonneg) apply auto done @@ -223,28 +223,28 @@ lemma transfer_nat_int_sum_prod_closure: "(!!x. x : A ==> f x >= (0::int)) \ sum f A >= 0" - "(!!x. x : A ==> f x >= (0::int)) \ setprod f A >= 0" + "(!!x. x : A ==> f x >= (0::int)) \ prod f A >= 0" unfolding nat_set_def simp_implies_def apply (rule sum_nonneg) apply auto - apply (rule setprod_nonneg) + apply (rule prod_nonneg) apply auto done *) (* Making A = B in this lemma doesn't work. Why not? - Also, why aren't sum.cong and setprod.cong enough, + Also, why aren't sum.cong and prod.cong enough, with the previously mentioned rule turned on? *) lemma transfer_nat_int_sum_prod_cong: "A = B \ nat_set B \ (!!x. x >= 0 \ f x = g x) \ sum f A = sum g B" "A = B \ nat_set B \ (!!x. x >= 0 \ f x = g x) \ - setprod f A = setprod g B" + prod f A = prod g B" unfolding nat_set_def apply (subst sum.cong, assumption) apply auto [2] - apply (subst setprod.cong, assumption, auto) + apply (subst prod.cong, assumption, auto) done declare transfer_morphism_nat_int [transfer add @@ -389,29 +389,29 @@ ] -text \sum and setprod\ +text \sum and prod\ (* this handles the case where the *domain* of f is int *) lemma transfer_int_nat_sum_prod: "nat_set A \ sum f A = sum (%x. f (int x)) (nat ` A)" - "nat_set A \ setprod f A = setprod (%x. f (int x)) (nat ` A)" + "nat_set A \ prod f A = prod (%x. f (int x)) (nat ` A)" apply (subst sum.reindex) apply (unfold inj_on_def nat_set_def, auto simp add: eq_nat_nat_iff) - apply (subst setprod.reindex) + apply (subst prod.reindex) apply (unfold inj_on_def nat_set_def o_def, auto simp add: eq_nat_nat_iff - cong: setprod.cong) + cong: prod.cong) done (* this handles the case where the *range* of f is int *) lemma transfer_int_nat_sum_prod2: "(!!x. x:A \ is_nat (f x)) \ sum f A = int(sum (%x. nat (f x)) A)" "(!!x. x:A \ is_nat (f x)) \ - setprod f A = int(setprod (%x. nat (f x)) A)" + prod f A = int(prod (%x. nat (f x)) A)" unfolding is_nat_def by (subst int_sum) auto declare transfer_morphism_int_nat [transfer add return: transfer_int_nat_sum_prod transfer_int_nat_sum_prod2 - cong: sum.cong setprod.cong] + cong: sum.cong prod.cong] end diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Number_Theory/Cong.thy --- a/src/HOL/Number_Theory/Cong.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Number_Theory/Cong.thy Mon Oct 17 17:33:07 2016 +0200 @@ -193,7 +193,7 @@ apply (auto intro: cong_add_int) done -lemma cong_setprod_nat [rule_format]: +lemma cong_prod_nat [rule_format]: "(\x\A. [((f x)::nat) = g x] (mod m)) \ [(\x\A. f x) = (\x\A. g x)] (mod m)" apply (cases "finite A") @@ -201,7 +201,7 @@ apply (auto intro: cong_mult_nat) done -lemma cong_setprod_int [rule_format]: +lemma cong_prod_int [rule_format]: "(\x\A. [((f x)::int) = g x] (mod m)) \ [(\x\A. f x) = (\x\A. g x)] (mod m)" apply (cases "finite A") @@ -562,22 +562,22 @@ [x = y] (mod b) \ [x = y] (mod lcm a b)" by (auto simp add: cong_altdef_int lcm_least) [1] -lemma cong_cong_setprod_coprime_nat [rule_format]: "finite A \ +lemma cong_cong_prod_coprime_nat [rule_format]: "finite A \ (\i\A. (\j\A. i \ j \ coprime (m i) (m j))) \ (\i\A. [(x::nat) = y] (mod m i)) \ [x = y] (mod (\i\A. m i))" apply (induct set: finite) apply auto - apply (metis One_nat_def coprime_cong_mult_nat gcd.commute setprod_coprime) + apply (metis One_nat_def coprime_cong_mult_nat gcd.commute prod_coprime) done -lemma cong_cong_setprod_coprime_int [rule_format]: "finite A \ +lemma cong_cong_prod_coprime_int [rule_format]: "finite A \ (\i\A. (\j\A. i \ j \ coprime (m i) (m j))) \ (\i\A. [(x::int) = y] (mod m i)) \ [x = y] (mod (\i\A. m i))" apply (induct set: finite) apply auto - apply (metis coprime_cong_mult_int gcd.commute setprod_coprime) + apply (metis coprime_cong_mult_int gcd.commute prod_coprime) done lemma binary_chinese_remainder_aux_nat: @@ -760,7 +760,7 @@ fix i assume "i : A" with cop have "coprime (\j \ A - {i}. m j) (m i)" - by (intro setprod_coprime, auto) + by (intro prod_coprime, auto) then have "EX x. [(\j \ A - {i}. m j) * x = 1] (mod m i)" by (elim cong_solve_coprime_nat) then obtain x where "[(\j \ A - {i}. m j) * x = 1] (mod m i)" @@ -769,7 +769,7 @@ (mod (\j \ A - {i}. m j))" by (subst mult.commute, rule cong_mult_self_nat) ultimately show "\a. [a = 1] (mod m i) \ [a = 0] - (mod setprod m (A - {i}))" + (mod prod m (A - {i}))" by blast qed @@ -824,7 +824,7 @@ [x = y] (mod (\i\A. m i))" apply (induct set: finite) apply auto - apply (metis One_nat_def coprime_cong_mult_nat gcd.commute setprod_coprime) + apply (metis One_nat_def coprime_cong_mult_nat gcd.commute prod_coprime) done lemma chinese_remainder_unique_nat: diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Number_Theory/Factorial_Ring.thy --- a/src/HOL/Number_Theory/Factorial_Ring.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Number_Theory/Factorial_Ring.thy Mon Oct 17 17:33:07 2016 +0200 @@ -1294,12 +1294,12 @@ using assms prime_elem_multiplicity_prod_mset_distrib [of p "replicate_mset n x"] by simp -lemma prime_elem_multiplicity_setprod_distrib: +lemma prime_elem_multiplicity_prod_distrib: assumes "prime_elem p" "0 \ f ` A" "finite A" - shows "multiplicity p (setprod f A) = (\x\A. multiplicity p (f x))" + shows "multiplicity p (prod f A) = (\x\A. multiplicity p (f x))" proof - - have "multiplicity p (setprod f A) = (\x\#mset_set A. multiplicity p (f x))" - using assms by (subst setprod_unfold_prod_mset) + have "multiplicity p (prod f A) = (\x\#mset_set A. multiplicity p (f x))" + using assms by (subst prod_unfold_prod_mset) (simp_all add: prime_elem_multiplicity_prod_mset_distrib sum_unfold_sum_mset multiset.map_comp o_def) also from \finite A\ have "\ = (\x\A. multiplicity p (f x))" @@ -1352,7 +1352,7 @@ "prime p \ prime_factors p = {p}" by (drule prime_factorization_prime) simp -lemma setprod_prime_factors: +lemma prod_prime_factors: assumes "x \ 0" shows "(\p \ prime_factors x. p ^ multiplicity p x) = normalize x" proof - @@ -1361,7 +1361,7 @@ also have "\ = (\p \ prime_factors x. p ^ count (prime_factorization x) p)" by (subst prod_mset_multiplicity) simp_all also have "\ = (\p \ prime_factors x. p ^ multiplicity p x)" - by (intro setprod.cong) + by (intro prod.cong) (simp_all add: assms count_prime_factorization_prime in_prime_factors_imp_prime) finally show ?thesis .. qed @@ -1751,12 +1751,12 @@ have "gcd x y = gcd_factorial x y" by (rule gcd_eq_gcd_factorial) also have "\ = ?rhs1" by (auto simp: gcd_factorial_def assms prod_mset_multiplicity - count_prime_factorization_prime dest: in_prime_factors_imp_prime intro!: setprod.cong) + count_prime_factorization_prime dest: in_prime_factors_imp_prime intro!: prod.cong) finally show "gcd x y = ?rhs1" . have "lcm x y = lcm_factorial x y" by (rule lcm_eq_lcm_factorial) also have "\ = ?rhs2" by (auto simp: lcm_factorial_def assms prod_mset_multiplicity - count_prime_factorization_prime dest: in_prime_factors_imp_prime intro!: setprod.cong) + count_prime_factorization_prime dest: in_prime_factors_imp_prime intro!: prod.cong) finally show "lcm x y = ?rhs2" . qed diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Number_Theory/Gauss.thy --- a/src/HOL/Number_Theory/Gauss.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Number_Theory/Gauss.thy Mon Oct 17 17:33:07 2016 +0200 @@ -209,8 +209,8 @@ using p_prime A_ncong_p [OF assms] by (auto simp: cong_altdef_int gcd.commute[of _ "int p"] intro!: prime_imp_coprime) -lemma A_prod_relprime: "gcd (setprod id A) p = 1" - by (metis id_def all_A_relprime setprod_coprime) +lemma A_prod_relprime: "gcd (prod id A) p = 1" + by (metis id_def all_A_relprime prod_coprime) subsection \Relationships Between Gauss Sets\ @@ -242,15 +242,15 @@ lemma C_card_eq_D_plus_E: "card C = card D + card E" by (auto simp add: C_eq card_Un_disjoint D_E_disj finite_D finite_E) -lemma C_prod_eq_D_times_E: "setprod id E * setprod id D = setprod id C" - by (metis C_eq D_E_disj finite_D finite_E inf_commute setprod.union_disjoint sup_commute) +lemma C_prod_eq_D_times_E: "prod id E * prod id D = prod id C" + by (metis C_eq D_E_disj finite_D finite_E inf_commute prod.union_disjoint sup_commute) -lemma C_B_zcong_prod: "[setprod id C = setprod id B] (mod p)" +lemma C_B_zcong_prod: "[prod id C = prod id B] (mod p)" apply (auto simp add: C_def) apply (insert finite_B SR_B_inj) - apply (drule setprod.reindex [of "\x. x mod int p" B id]) + apply (drule prod.reindex [of "\x. x mod int p" B id]) apply auto - apply (rule cong_setprod_int) + apply (rule cong_prod_int) apply (auto simp add: cong_int_def) done @@ -295,25 +295,25 @@ using finite_A F_Un_D_subset A_card_eq F_Un_D_card by (auto simp add: card_seteq) -lemma prod_D_F_eq_prod_A: "(setprod id D) * (setprod id F) = setprod id A" - by (metis F_D_disj F_Un_D_eq_A Int_commute Un_commute finite_D finite_F setprod.union_disjoint) +lemma prod_D_F_eq_prod_A: "(prod id D) * (prod id F) = prod id A" + by (metis F_D_disj F_Un_D_eq_A Int_commute Un_commute finite_D finite_F prod.union_disjoint) -lemma prod_F_zcong: "[setprod id F = ((-1) ^ (card E)) * (setprod id E)] (mod p)" +lemma prod_F_zcong: "[prod id F = ((-1) ^ (card E)) * (prod id E)] (mod p)" proof - - have FE: "setprod id F = setprod (op - p) E" + have FE: "prod id F = prod (op - p) E" apply (auto simp add: F_def) apply (insert finite_E inj_on_pminusx_E) - apply (drule setprod.reindex, auto) + apply (drule prod.reindex, auto) done then have "\x \ E. [(p-x) mod p = - x](mod p)" by (metis cong_int_def minus_mod_self1 mod_mod_trivial) - then have "[setprod ((\x. x mod p) o (op - p)) E = setprod (uminus) E](mod p)" + then have "[prod ((\x. x mod p) o (op - p)) E = prod (uminus) E](mod p)" using finite_E p_ge_2 - cong_setprod_int [of E "(\x. x mod p) o (op - p)" uminus p] + cong_prod_int [of E "(\x. x mod p) o (op - p)" uminus p] by auto - then have two: "[setprod id F = setprod (uminus) E](mod p)" - by (metis FE cong_cong_mod_int cong_refl_int cong_setprod_int minus_mod_self1) - have "setprod uminus E = (-1) ^ (card E) * (setprod id E)" + then have two: "[prod id F = prod (uminus) E](mod p)" + by (metis FE cong_cong_mod_int cong_refl_int cong_prod_int minus_mod_self1) + have "prod uminus E = (-1) ^ (card E) * (prod id E)" using finite_E by (induct set: finite) auto with two show ?thesis by simp @@ -322,50 +322,50 @@ subsection \Gauss' Lemma\ -lemma aux: "setprod id A * (- 1) ^ card E * a ^ card A * (- 1) ^ card E = setprod id A * a ^ card A" +lemma aux: "prod id A * (- 1) ^ card E * a ^ card A * (- 1) ^ card E = prod id A * a ^ card A" by (metis (no_types) minus_minus mult.commute mult.left_commute power_minus power_one) theorem pre_gauss_lemma: "[a ^ nat((int p - 1) div 2) = (-1) ^ (card E)] (mod p)" proof - - have "[setprod id A = setprod id F * setprod id D](mod p)" - by (auto simp add: prod_D_F_eq_prod_A mult.commute cong del: setprod.strong_cong) - then have "[setprod id A = ((-1)^(card E) * setprod id E) * setprod id D] (mod p)" + have "[prod id A = prod id F * prod id D](mod p)" + by (auto simp add: prod_D_F_eq_prod_A mult.commute cong del: prod.strong_cong) + then have "[prod id A = ((-1)^(card E) * prod id E) * prod id D] (mod p)" apply (rule cong_trans_int) apply (metis cong_scalar_int prod_F_zcong) done - then have "[setprod id A = ((-1)^(card E) * setprod id C)] (mod p)" + then have "[prod id A = ((-1)^(card E) * prod id C)] (mod p)" by (metis C_prod_eq_D_times_E mult.commute mult.left_commute) - then have "[setprod id A = ((-1)^(card E) * setprod id B)] (mod p)" + then have "[prod id A = ((-1)^(card E) * prod id B)] (mod p)" by (rule cong_trans_int) (metis C_B_zcong_prod cong_scalar2_int) - then have "[setprod id A = ((-1)^(card E) * - (setprod id ((\x. x * a) ` A)))] (mod p)" + then have "[prod id A = ((-1)^(card E) * + (prod id ((\x. x * a) ` A)))] (mod p)" by (simp add: B_def) - then have "[setprod id A = ((-1)^(card E) * (setprod (\x. x * a) A))] + then have "[prod id A = ((-1)^(card E) * (prod (\x. x * a) A))] (mod p)" - by (simp add: inj_on_xa_A setprod.reindex) - moreover have "setprod (\x. x * a) A = - setprod (\x. a) A * setprod id A" + by (simp add: inj_on_xa_A prod.reindex) + moreover have "prod (\x. x * a) A = + prod (\x. a) A * prod id A" using finite_A by (induct set: finite) auto - ultimately have "[setprod id A = ((-1)^(card E) * (setprod (\x. a) A * - setprod id A))] (mod p)" + ultimately have "[prod id A = ((-1)^(card E) * (prod (\x. a) A * + prod id A))] (mod p)" by simp - then have "[setprod id A = ((-1)^(card E) * a^(card A) * - setprod id A)](mod p)" + then have "[prod id A = ((-1)^(card E) * a^(card A) * + prod id A)](mod p)" apply (rule cong_trans_int) - apply (simp add: cong_scalar2_int cong_scalar_int finite_A setprod_constant mult.assoc) + apply (simp add: cong_scalar2_int cong_scalar_int finite_A prod_constant mult.assoc) done - then have a: "[setprod id A * (-1)^(card E) = - ((-1)^(card E) * a^(card A) * setprod id A * (-1)^(card E))](mod p)" + then have a: "[prod id A * (-1)^(card E) = + ((-1)^(card E) * a^(card A) * prod id A * (-1)^(card E))](mod p)" by (rule cong_scalar_int) - then have "[setprod id A * (-1)^(card E) = setprod id A * + then have "[prod id A * (-1)^(card E) = prod id A * (-1)^(card E) * a^(card A) * (-1)^(card E)](mod p)" apply (rule cong_trans_int) apply (simp add: a mult.commute mult.left_commute) done - then have "[setprod id A * (-1)^(card E) = setprod id A * a^(card A)](mod p)" + then have "[prod id A * (-1)^(card E) = prod id A * a^(card A)](mod p)" apply (rule cong_trans_int) - apply (simp add: aux cong del: setprod.strong_cong) + apply (simp add: aux cong del: prod.strong_cong) done with A_prod_relprime have "[(- 1) ^ card E = a ^ card A](mod p)" by (metis cong_mult_lcancel_int) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Number_Theory/Primes.thy --- a/src/HOL/Number_Theory/Primes.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Number_Theory/Primes.thy Mon Oct 17 17:33:07 2016 +0200 @@ -485,11 +485,11 @@ lemma prime_factorization_nat: "n > (0::nat) \ n = (\p \ prime_factors n. p ^ multiplicity p n)" - by (simp add: setprod_prime_factors) + by (simp add: prod_prime_factors) lemma prime_factorization_int: "n > (0::int) \ n = (\p \ prime_factors n. p ^ multiplicity p n)" - by (simp add: setprod_prime_factors) + by (simp add: prod_prime_factors) lemma prime_factorization_unique_nat: fixes f :: "nat \ _" @@ -524,13 +524,13 @@ by (rule prime_factorization_unique_int [THEN conjunct1, symmetric]) (* TODO Move *) -lemma abs_setprod: "abs (setprod f A :: 'a :: linordered_idom) = setprod (\x. abs (f x)) A" +lemma abs_prod: "abs (prod f A :: 'a :: linordered_idom) = prod (\x. abs (f x)) A" by (cases "finite A", induction A rule: finite_induct) (simp_all add: abs_mult) lemma primes_characterization'_int [rule_format]: "finite {p. p \ 0 \ 0 < f (p::int)} \ \p. 0 < f p \ prime p \ prime_factors (\p | p \ 0 \ 0 < f p. p ^ f p) = {p. p \ 0 \ 0 < f p}" - by (rule prime_factors_characterization_int) (auto simp: abs_setprod prime_ge_0_int) + by (rule prime_factors_characterization_int) (auto simp: abs_prod prime_ge_0_int) lemma multiplicity_characterization_nat: "S = {p. 0 < f (p::nat)} \ finite S \ \p\S. prime p \ prime p \ @@ -545,7 +545,7 @@ lemma multiplicity_characterization_int: "S = {p. 0 < f (p::int)} \ finite S \ \p\S. prime p \ prime p \ n = (\p\S. p ^ f p) \ multiplicity p n = f p" by (frule prime_factorization_unique_int [of S f n, THEN conjunct2, rule_format, symmetric]) - (auto simp: abs_setprod power_abs prime_ge_0_int intro!: setprod.cong) + (auto simp: abs_prod power_abs prime_ge_0_int intro!: prod.cong) lemma multiplicity_characterization'_int [rule_format]: "finite {p. p \ 0 \ 0 < f (p::int)} \ @@ -583,11 +583,11 @@ unfolding set_mset_def count_A by (auto simp: g_def) with assms have prime: "prime x" if "x \# A" for x using that by auto from set_mset_A assms have "(\p \ S. p ^ f p) = (\p \ S. p ^ g p) " - by (intro setprod.cong) (auto simp: g_def) + by (intro prod.cong) (auto simp: g_def) also from set_mset_A assms have "\ = (\p \ set_mset A. p ^ g p)" - by (intro setprod.mono_neutral_right) (auto simp: g_def set_mset_A) + by (intro prod.mono_neutral_right) (auto simp: g_def set_mset_A) also have "\ = prod_mset A" - by (auto simp: prod_mset_multiplicity count_A set_mset_A intro!: setprod.cong) + by (auto simp: prod_mset_multiplicity count_A set_mset_A intro!: prod.cong) also from assms have "multiplicity p \ = sum_mset (image_mset (multiplicity p) A)" by (subst prime_elem_multiplicity_prod_mset_distrib) (auto dest: prime) also from assms have "image_mset (multiplicity p) A = image_mset (\x. if x = p then 1 else 0) A" @@ -601,10 +601,10 @@ shows "prime_factorization (prod_mset A) = \#(image_mset prime_factorization A)" using assms by (induct A) (auto simp add: prime_factorization_mult) -lemma prime_factors_setprod: +lemma prime_factors_prod: assumes "finite A" and "0 \ f ` A" - shows "prime_factors (setprod f A) = UNION A (prime_factors \ f)" - using assms by (simp add: setprod_unfold_prod_mset prime_factorization_prod_mset) + shows "prime_factors (prod f A) = UNION A (prime_factors \ f)" + using assms by (simp add: prod_unfold_prod_mset prime_factorization_prod_mset) lemma prime_factors_fact: "prime_factors (fact n) = {p \ {2..n}. prime p}" (is "?M = ?N") @@ -621,7 +621,7 @@ by (auto intro: order_trans) } note * = this show "p \ ?M \ p \ ?N" - by (auto simp add: fact_setprod prime_factors_setprod Suc_le_eq dest!: prime_prime_factors intro: *) + by (auto simp add: fact_prod prime_factors_prod Suc_le_eq dest!: prime_prime_factors intro: *) qed lemma prime_dvd_fact_iff: diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Number_Theory/Residues.thy --- a/src/HOL/Number_Theory/Residues.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Number_Theory/Residues.thy Mon Oct 17 17:33:07 2016 +0200 @@ -428,10 +428,10 @@ apply auto done also have "\ = fact (p - 1) mod p" - apply (simp add: fact_setprod) + apply (simp add: fact_prod) apply (insert assms) apply (subst res_prime_units_eq) - apply (simp add: int_setprod zmod_int setprod_int_eq) + apply (simp add: int_prod zmod_int prod_int_eq) done finally have "fact (p - 1) mod p = \ \" . then show ?thesis @@ -445,7 +445,7 @@ proof (cases "p = 2") case True then show ?thesis - by (simp add: cong_int_def fact_setprod) + by (simp add: cong_int_def fact_prod) next case False then show ?thesis diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Old_Number_Theory/Euler.thy --- a/src/HOL/Old_Number_Theory/Euler.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Old_Number_Theory/Euler.thy Mon Oct 17 17:33:07 2016 +0200 @@ -133,7 +133,7 @@ then show ?thesis by auto qed -lemma SetS_setprod_prop: "[| zprime p; 2 < p; ~([a = 0] (mod p)); +lemma SetS_prod_prop: "[| zprime p; 2 < p; ~([a = 0] (mod p)); ~(QuadRes p a); x \ (SetS a p) |] ==> [\x = a] (mod p)" apply (auto simp add: SetS_def MultInvPair_def) @@ -174,21 +174,21 @@ apply (frule d22set_g_1, auto) done -lemma Union_SetS_setprod_prop1: +lemma Union_SetS_prod_prop1: assumes "zprime p" and "2 < p" and "~([a = 0] (mod p))" and "~(QuadRes p a)" shows "[\(\(SetS a p)) = a ^ nat ((p - 1) div 2)] (mod p)" proof - - from assms have "[\(\(SetS a p)) = setprod (setprod (%x. x)) (SetS a p)] (mod p)" + from assms have "[\(\(SetS a p)) = prod (prod (%x. x)) (SetS a p)] (mod p)" by (auto simp add: SetS_finite SetS_elems_finite - MultInvPair_prop1c setprod.Union_disjoint) - also have "[setprod (setprod (%x. x)) (SetS a p) = - setprod (%x. a) (SetS a p)] (mod p)" - by (rule setprod_same_function_zcong) - (auto simp add: assms SetS_setprod_prop SetS_finite) - also (zcong_trans) have "[setprod (%x. a) (SetS a p) = + MultInvPair_prop1c prod.Union_disjoint) + also have "[prod (prod (%x. x)) (SetS a p) = + prod (%x. a) (SetS a p)] (mod p)" + by (rule prod_same_function_zcong) + (auto simp add: assms SetS_prod_prop SetS_finite) + also (zcong_trans) have "[prod (%x. a) (SetS a p) = a^(card (SetS a p))] (mod p)" - by (auto simp add: assms SetS_finite setprod_constant) + by (auto simp add: assms SetS_finite prod_constant) finally (zcong_trans) show ?thesis apply (rule zcong_trans) apply (subgoal_tac "card(SetS a p) = nat((p - 1) div 2)", auto) @@ -197,7 +197,7 @@ done qed -lemma Union_SetS_setprod_prop2: +lemma Union_SetS_prod_prop2: assumes "zprime p" and "2 < p" and "~([a = 0](mod p))" shows "\(\(SetS a p)) = zfact (p - 1)" proof - @@ -219,8 +219,8 @@ lemma zfact_prop: "[| zprime p; 2 < p; ~([a = 0] (mod p)); ~(QuadRes p a) |] ==> [zfact (p - 1) = a ^ nat ((p - 1) div 2)] (mod p)" - apply (frule Union_SetS_setprod_prop1) - apply (auto simp add: Union_SetS_setprod_prop2) + apply (frule Union_SetS_prod_prop1) + apply (auto simp add: Union_SetS_prod_prop2) done text \\medskip Prove the first part of Euler's Criterion:\ diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Old_Number_Theory/EulerFermat.thy --- a/src/HOL/Old_Number_Theory/EulerFermat.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Old_Number_Theory/EulerFermat.thy Mon Oct 17 17:33:07 2016 +0200 @@ -252,7 +252,7 @@ apply (simplesubst BnorRset.simps) \\multiple redexes\ apply (unfold Let_def, auto) apply (simp add: Bnor_fin Bnor_mem_zle_swap) - apply (subst setprod.insert) + apply (subst prod.insert) apply (rule_tac [2] Bnor_prod_power_aux) apply (unfold inj_on_def) apply (simp_all add: ac_simps Bnor_fin Bnor_mem_zle_swap) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Old_Number_Theory/Finite2.thy --- a/src/HOL/Old_Number_Theory/Finite2.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Old_Number_Theory/Finite2.thy Mon Oct 17 17:33:07 2016 +0200 @@ -26,9 +26,9 @@ assume "infinite S" thus ?thesis by simp qed -lemma setprod_same_function_zcong: +lemma prod_same_function_zcong: assumes a: "\x \ S. [f x = g x](mod m)" - shows "[setprod f S = setprod g S] (mod m)" + shows "[prod f S = prod g S] (mod m)" proof cases assume "finite S" thus ?thesis using a by induct (simp_all add: zcong_zmult) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Old_Number_Theory/Gauss.thy --- a/src/HOL/Old_Number_Theory/Gauss.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Old_Number_Theory/Gauss.thy Mon Oct 17 17:33:07 2016 +0200 @@ -263,7 +263,7 @@ lemma all_A_relprime: "\x \ A. zgcd x p = 1" using p_prime p_minus_one_l by (auto simp add: A_def zless_zprime_imp_zrelprime) -lemma A_prod_relprime: "zgcd (setprod id A) p = 1" +lemma A_prod_relprime: "zgcd (prod id A) p = 1" by(rule all_relprime_prod_relprime[OF finite_A all_A_relprime]) @@ -292,18 +292,18 @@ lemma C_card_eq_D_plus_E: "card C = card D + card E" by (auto simp add: C_eq card_Un_disjoint D_E_disj finite_D finite_E) -lemma C_prod_eq_D_times_E: "setprod id E * setprod id D = setprod id C" +lemma C_prod_eq_D_times_E: "prod id E * prod id D = prod id C" apply (insert D_E_disj finite_D finite_E C_eq) - apply (frule setprod.union_disjoint [of D E id]) + apply (frule prod.union_disjoint [of D E id]) apply auto done -lemma C_B_zcong_prod: "[setprod id C = setprod id B] (mod p)" +lemma C_B_zcong_prod: "[prod id C = prod id B] (mod p)" apply (auto simp add: C_def) apply (insert finite_B SR_B_inj) - apply (frule setprod.reindex [of "StandardRes p" B id]) + apply (frule prod.reindex [of "StandardRes p" B id]) apply auto - apply (rule setprod_same_function_zcong) + apply (rule prod_same_function_zcong) apply (auto simp add: StandardRes_prop1 zcong_sym p_g_0) done @@ -372,25 +372,25 @@ using finite_A F_Un_D_subset A_card_eq F_Un_D_card by (auto simp add: card_seteq) lemma prod_D_F_eq_prod_A: - "(setprod id D) * (setprod id F) = setprod id A" + "(prod id D) * (prod id F) = prod id A" apply (insert F_D_disj finite_D finite_F) - apply (frule setprod.union_disjoint [of F D id]) + apply (frule prod.union_disjoint [of F D id]) apply (auto simp add: F_Un_D_eq_A) done lemma prod_F_zcong: - "[setprod id F = ((-1) ^ (card E)) * (setprod id E)] (mod p)" + "[prod id F = ((-1) ^ (card E)) * (prod id E)] (mod p)" proof - - have "setprod id F = setprod id (op - p ` E)" + have "prod id F = prod id (op - p ` E)" by (auto simp add: F_def) - then have "setprod id F = setprod (op - p) E" + then have "prod id F = prod (op - p) E" apply simp apply (insert finite_E inj_on_pminusx_E) - apply (frule setprod.reindex [of "minus p" E id]) + apply (frule prod.reindex [of "minus p" E id]) apply auto done then have one: - "[setprod id F = setprod (StandardRes p o (op - p)) E] (mod p)" + "[prod id F = prod (StandardRes p o (op - p)) E] (mod p)" apply simp apply (insert p_g_0 finite_E StandardRes_prod) by (auto) @@ -409,20 +409,20 @@ apply (rule_tac b = "p - x" in zcong_trans, auto) done ultimately have c: - "[setprod (StandardRes p o (op - p)) E = setprod (uminus) E](mod p)" + "[prod (StandardRes p o (op - p)) E = prod (uminus) E](mod p)" apply simp using finite_E p_g_0 - setprod_same_function_zcong [of E "StandardRes p o (op - p)" uminus p] + prod_same_function_zcong [of E "StandardRes p o (op - p)" uminus p] by auto - then have two: "[setprod id F = setprod (uminus) E](mod p)" + then have two: "[prod id F = prod (uminus) E](mod p)" apply (insert one c) - apply (rule zcong_trans [of "setprod id F" - "setprod (StandardRes p o op - p) E" p - "setprod uminus E"], auto) + apply (rule zcong_trans [of "prod id F" + "prod (StandardRes p o op - p) E" p + "prod uminus E"], auto) done - also have "setprod uminus E = (setprod id E) * (-1)^(card E)" + also have "prod uminus E = (prod id E) * (-1)^(card E)" using finite_E by (induct set: finite) auto - then have "setprod uminus E = (-1) ^ (card E) * (setprod id E)" + then have "prod uminus E = (-1) ^ (card E) * (prod id E)" by (simp add: mult.commute) with two show ?thesis by simp @@ -431,52 +431,52 @@ subsection \Gauss' Lemma\ -lemma aux: "setprod id A * (- 1) ^ card E * a ^ card A * (- 1) ^ card E = setprod id A * a ^ card A" +lemma aux: "prod id A * (- 1) ^ card E * a ^ card A * (- 1) ^ card E = prod id A * a ^ card A" by (auto simp add: finite_E neg_one_special) theorem pre_gauss_lemma: "[a ^ nat((p - 1) div 2) = (-1) ^ (card E)] (mod p)" proof - - have "[setprod id A = setprod id F * setprod id D](mod p)" - by (auto simp add: prod_D_F_eq_prod_A mult.commute cong del: setprod.strong_cong) - then have "[setprod id A = ((-1)^(card E) * setprod id E) * - setprod id D] (mod p)" - by (rule zcong_trans) (auto simp add: prod_F_zcong zcong_scalar cong del: setprod.strong_cong) - then have "[setprod id A = ((-1)^(card E) * setprod id C)] (mod p)" + have "[prod id A = prod id F * prod id D](mod p)" + by (auto simp add: prod_D_F_eq_prod_A mult.commute cong del: prod.strong_cong) + then have "[prod id A = ((-1)^(card E) * prod id E) * + prod id D] (mod p)" + by (rule zcong_trans) (auto simp add: prod_F_zcong zcong_scalar cong del: prod.strong_cong) + then have "[prod id A = ((-1)^(card E) * prod id C)] (mod p)" apply (rule zcong_trans) apply (insert C_prod_eq_D_times_E, erule subst) apply (subst mult.assoc) apply auto done - then have "[setprod id A = ((-1)^(card E) * setprod id B)] (mod p)" + then have "[prod id A = ((-1)^(card E) * prod id B)] (mod p)" apply (rule zcong_trans) - apply (simp add: C_B_zcong_prod zcong_scalar2 cong del: setprod.strong_cong) + apply (simp add: C_B_zcong_prod zcong_scalar2 cong del: prod.strong_cong) done - then have "[setprod id A = ((-1)^(card E) * - (setprod id ((%x. x * a) ` A)))] (mod p)" + then have "[prod id A = ((-1)^(card E) * + (prod id ((%x. x * a) ` A)))] (mod p)" by (simp add: B_def) - then have "[setprod id A = ((-1)^(card E) * (setprod (%x. x * a) A))] + then have "[prod id A = ((-1)^(card E) * (prod (%x. x * a) A))] (mod p)" - by (simp add:finite_A inj_on_xa_A setprod.reindex cong del: setprod.strong_cong) - moreover have "setprod (%x. x * a) A = - setprod (%x. a) A * setprod id A" + by (simp add:finite_A inj_on_xa_A prod.reindex cong del: prod.strong_cong) + moreover have "prod (%x. x * a) A = + prod (%x. a) A * prod id A" using finite_A by (induct set: finite) auto - ultimately have "[setprod id A = ((-1)^(card E) * (setprod (%x. a) A * - setprod id A))] (mod p)" + ultimately have "[prod id A = ((-1)^(card E) * (prod (%x. a) A * + prod id A))] (mod p)" by simp - then have "[setprod id A = ((-1)^(card E) * a^(card A) * - setprod id A)](mod p)" - by (rule zcong_trans) (simp add: zcong_scalar2 zcong_scalar finite_A setprod_constant mult.assoc) - then have a: "[setprod id A * (-1)^(card E) = - ((-1)^(card E) * a^(card A) * setprod id A * (-1)^(card E))](mod p)" + then have "[prod id A = ((-1)^(card E) * a^(card A) * + prod id A)](mod p)" + by (rule zcong_trans) (simp add: zcong_scalar2 zcong_scalar finite_A prod_constant mult.assoc) + then have a: "[prod id A * (-1)^(card E) = + ((-1)^(card E) * a^(card A) * prod id A * (-1)^(card E))](mod p)" by (rule zcong_scalar) - then have "[setprod id A * (-1)^(card E) = setprod id A * + then have "[prod id A * (-1)^(card E) = prod id A * (-1)^(card E) * a^(card A) * (-1)^(card E)](mod p)" by (rule zcong_trans) (simp add: a mult.commute mult.left_commute) - then have "[setprod id A * (-1)^(card E) = setprod id A * + then have "[prod id A * (-1)^(card E) = prod id A * a^(card A)](mod p)" - by (rule zcong_trans) (simp add: aux cong del: setprod.strong_cong) - with this zcong_cancel2 [of p "setprod id A" "(- 1) ^ card E" "a ^ card A"] + by (rule zcong_trans) (simp add: aux cong del: prod.strong_cong) + with this zcong_cancel2 [of p "prod id A" "(- 1) ^ card E" "a ^ card A"] p_g_0 A_prod_relprime have "[(- 1) ^ card E = a ^ card A](mod p)" by (simp add: order_less_imp_le) from this show ?thesis diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Old_Number_Theory/Int2.thy --- a/src/HOL/Old_Number_Theory/Int2.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Old_Number_Theory/Int2.thy Mon Oct 17 17:33:07 2016 +0200 @@ -170,7 +170,7 @@ done lemma all_relprime_prod_relprime: "[| finite A; \x \ A. zgcd x y = 1 |] - ==> zgcd (setprod id A) y = 1" + ==> zgcd (prod id A) y = 1" by (induct set: finite) (auto simp add: zgcd_zgcd_zmult) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Old_Number_Theory/Pocklington.thy --- a/src/HOL/Old_Number_Theory/Pocklington.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Old_Number_Theory/Pocklington.thy Mon Oct 17 17:33:07 2016 +0200 @@ -561,7 +561,7 @@ lemma nproduct_mod: assumes fS: "finite S" and n0: "n \ 0" - shows "[setprod (\m. a(m) mod n) S = setprod a S] (mod n)" + shows "[prod (\m. a(m) mod n) S = prod a S] (mod n)" proof- have th1:"[1 = 1] (mod n)" by (simp add: modeq_def) from cong_mult @@ -569,17 +569,17 @@ [x1 = x2] (mod n) \ [y1 = y2] (mod n) \ [x1 * y1 = x2 * y2] (mod n)" by blast have th4:"\x\S. [a x mod n = a x] (mod n)" by (simp add: modeq_def) - from setprod.related [where h="(\m. a(m) mod n)" and g=a, OF th1 th3 fS, OF th4] show ?thesis by (simp add: fS) + from prod.related [where h="(\m. a(m) mod n)" and g=a, OF th1 th3 fS, OF th4] show ?thesis by (simp add: fS) qed lemma nproduct_cmul: assumes fS:"finite S" - shows "setprod (\m. (c::'a::{comm_monoid_mult})* a(m)) S = c ^ (card S) * setprod a S" -unfolding setprod.distrib setprod_constant [of c] .. + shows "prod (\m. (c::'a::{comm_monoid_mult})* a(m)) S = c ^ (card S) * prod a S" +unfolding prod.distrib prod_constant [of c] .. lemma coprime_nproduct: assumes fS: "finite S" and Sn: "\x\S. coprime n (a x)" - shows "coprime n (setprod a S)" + shows "coprime n (prod a S)" using fS by (rule finite_subset_induct) (insert Sn, auto simp add: coprime_mul) @@ -607,7 +607,7 @@ let ?h = "\m. (a * m) mod n" have eq0: "(\i\?S. ?h i) = (\i\?S. i)" - proof (rule setprod.reindex_bij_betw) + proof (rule prod.reindex_bij_betw) have "inj_on (\i. ?h i) ?S" proof (rule inj_onI) fix x y assume "?h x = ?h y" @@ -636,7 +636,7 @@ have "[(\i\?S. a * i) = (\i\?S. ?h i)] (mod n)" by (simp add: cong_commute) also have "[(\i\?S. ?h i) = ?P] (mod n)" - using eq0 fS an by (simp add: setprod_def modeq_def) + using eq0 fS an by (simp add: prod_def modeq_def) finally show "[?P*a^ (\ n) = ?P*1] (mod n)" unfolding cardfS mult.commute[of ?P "a^ (card ?S)"] nproduct_cmul[OF fS, symmetric] mult_1_right by simp diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Old_Number_Theory/Residues.thy --- a/src/HOL/Old_Number_Theory/Residues.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Old_Number_Theory/Residues.thy Mon Oct 17 17:33:07 2016 +0200 @@ -147,7 +147,7 @@ by (auto simp add: zcong_zmod) lemma StandardRes_prod: "[| finite X; 0 < m |] - ==> [setprod f X = setprod (StandardRes m o f) X] (mod m)" + ==> [prod f X = prod (StandardRes m o f) X] (mod m)" apply (rule_tac F = X in finite_induct) apply (auto intro!: zcong_zmult simp add: StandardRes_prop1) done diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Old_Number_Theory/WilsonBij.thy --- a/src/HOL/Old_Number_Theory/WilsonBij.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Old_Number_Theory/WilsonBij.thy Mon Oct 17 17:33:07 2016 +0200 @@ -229,9 +229,9 @@ apply (subgoal_tac [2] "a = 1 \ a = p - 1") apply (rule_tac [3] zcong_square_zless) apply auto - apply (subst setprod.insert) + apply (subst prod.insert) prefer 3 - apply (subst setprod.insert) + apply (subst prod.insert) apply (auto simp add: fin_bijER) apply (subgoal_tac "zcong ((a * b) * \A) (1 * 1) p") apply (simp add: mult.assoc) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Old_Number_Theory/WilsonRuss.thy --- a/src/HOL/Old_Number_Theory/WilsonRuss.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Old_Number_Theory/WilsonRuss.thy Mon Oct 17 17:33:07 2016 +0200 @@ -247,8 +247,8 @@ prefer 2 apply (subst wset.simps) apply (auto, unfold Let_def, auto) - apply (subst setprod.insert) - apply (tactic \stac @{context} @{thm setprod.insert} 3\) + apply (subst prod.insert) + apply (tactic \stac @{context} @{thm prod.insert} 3\) apply (subgoal_tac [5] "zcong (a * inv p a * (\x\wset (a - 1) p. x)) (1 * 1) p") prefer 5 diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Probability/Central_Limit_Theorem.thy --- a/src/HOL/Probability/Central_Limit_Theorem.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Probability/Central_Limit_Theorem.thy Mon Oct 17 17:33:07 2016 +0200 @@ -64,7 +64,7 @@ apply auto done also have "\ = (\ n t)^n" - by (auto simp add: * setprod_constant) + by (auto simp add: * prod_constant) finally have \_eq: "\ n t =(\ n t)^n" . have "norm (\ n t - (1 - ?t^2 * \\<^sup>2 / 2)) \ ?t\<^sup>2 / 6 * (LINT x|\. min (6 * x\<^sup>2) (\?t\ * \x\ ^ 3))" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Probability/Independent_Family.thy --- a/src/HOL/Probability/Independent_Family.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Probability/Independent_Family.thy Mon Oct 17 17:33:07 2016 +0200 @@ -166,7 +166,7 @@ also have "\ = prob (A j) * (\i\J-{j}. prob (A i))" using \A j = X\ by simp also have "\ = (\i\J. prob (A i))" - unfolding setprod.insert_remove[OF \finite J\, symmetric, of "\i. prob (A i)"] + unfolding prod.insert_remove[OF \finite J\, symmetric, of "\i. prob (A i)"] using \j \ J\ by (simp add: insert_absorb) finally show ?thesis . qed @@ -207,7 +207,7 @@ have "prob (\i\insert j J. (A(j := X)) i) = (\i\insert j J. prob ((A(j := X)) i))" using J A \j \ K\ by (intro indep_setsD[OF G']) auto then have "prob (\i\insert j J. (A(j := X)) i) = prob X * (\i\J. prob (A i))" - using \finite J\ \j \ J\ by (auto intro!: setprod.cong) } + using \finite J\ \j \ J\ by (auto intro!: prod.cong) } ultimately have "prob ((\j\J. A j) \ (space M - X)) = (prob (space M) - prob X) * (\i\J. prob (A i))" by (simp add: field_simps) also have "\ = prob (space M - X) * (\i\J. prob (A i))" @@ -233,7 +233,7 @@ qed moreover { fix k from J A \j \ K\ have "prob (\i\insert j J. (A(j := F k)) i) = prob (F k) * (\i\J. prob (A i))" - by (subst indep_setsD[OF F(2)]) (auto intro!: setprod.cong split: if_split_asm) + by (subst indep_setsD[OF F(2)]) (auto intro!: prod.cong split: if_split_asm) also have "\ = prob (F k) * prob (\i\J. A i)" using J A \j \ K\ by (subst indep_setsD[OF G(1)]) auto finally have "prob (\i\insert j J. (A(j := F k)) i) = prob (F k) * prob (\i\J. A i)" . } @@ -478,9 +478,9 @@ also have "\ = (\l\(\k\K. L k). prob (?E' l))" using L K E' by (intro indep_setsD[OF indep]) (simp_all add: UN_mono) also have "\ = (\j\K. \l\L j. prob (E' j l))" - using K L L_inj by (subst setprod.UNION_disjoint) auto + using K L L_inj by (subst prod.UNION_disjoint) auto also have "\ = (\j\K. prob (A j))" - using K L E' by (auto simp add: A intro!: setprod.cong indep_setsD[OF indep, symmetric]) blast + using K L E' by (auto simp add: A intro!: prod.cong indep_setsD[OF indep, symmetric]) blast finally show "prob (\j\K. A j) = (\j\K. prob (A j))" . qed next @@ -849,8 +849,8 @@ with indep have "prob (\j\I. ?A j) = (\j\I. prob (?A j))" by auto also have "\ = (\j\J. prob (A j))" - unfolding if_distrib setprod.If_cases[OF \finite I\] - using prob_space \J \ I\ by (simp add: Int_absorb1 setprod.neutral_const) + unfolding if_distrib prod.If_cases[OF \finite I\] + using prob_space \J \ I\ by (simp add: Int_absorb1 prod.neutral_const) finally show "prob (\j\J. A j) = (\j\J. prob (A j))" .. qed qed @@ -1007,7 +1007,7 @@ finally show ?thesis . qed -lemma (in prob_space) indep_vars_setprod: +lemma (in prob_space) indep_vars_prod: fixes X :: "'i \ 'a \ real" assumes I: "finite I" "i \ I" and indep: "indep_vars (\_. borel) X (insert i I)" shows "indep_var borel (X i) borel (\\. \i\I. X i \)" @@ -1092,7 +1092,7 @@ using J \I \ {}\ measurable_space[OF rv] by (auto simp: prod_emb_def PiE_iff split: if_split_asm) also have "emeasure M (\i\J. X i -` Y i \ space M) = (\ i\J. emeasure M (X i -` Y i \ space M))" using \indep_vars M' X I\ J \I \ {}\ using indep_varsD[of M' X I J] - by (auto simp: emeasure_eq_measure setprod_ennreal measure_nonneg setprod_nonneg) + by (auto simp: emeasure_eq_measure prod_ennreal measure_nonneg prod_nonneg) also have "\ = (\ i\J. emeasure (?D' i) (Y i))" using rv J by (simp add: emeasure_distr) also have "\ = emeasure ?P' E" @@ -1133,7 +1133,7 @@ using rv J Y by (simp add: emeasure_distr) finally have "emeasure M (\j\J. Y' j) = (\ i\J. emeasure M (Y' i))" . then show "prob (\j\J. Y' j) = (\ i\J. prob (Y' i))" - by (auto simp: emeasure_eq_measure setprod_ennreal measure_nonneg setprod_nonneg) + by (auto simp: emeasure_eq_measure prod_ennreal measure_nonneg prod_nonneg) qed qed qed @@ -1283,15 +1283,15 @@ by (rule indep_vars_cong[THEN iffD1, OF _ _ _ I(2)]) (auto simp: Y_def) have "(\\<^sup>+\. (\i\I. X i \) \M) = (\\<^sup>+\. (\i\I. Y i \) \M)" - using I(3) by (auto intro!: nn_integral_cong setprod.cong simp add: Y_def max_def) + using I(3) by (auto intro!: nn_integral_cong prod.cong simp add: Y_def max_def) also have "\ = (\\<^sup>+\. (\i\I. \ i) \distr M (Pi\<^sub>M I (\i. borel)) (\x. \i\I. Y i x))" by (subst nn_integral_distr) auto also have "\ = (\\<^sup>+\. (\i\I. \ i) \Pi\<^sub>M I (\i. distr M borel (Y i)))" unfolding indep_vars_iff_distr_eq_PiM[THEN iffD1, OF \I \ {}\ rv_Y indep_Y] .. also have "\ = (\i\I. (\\<^sup>+\. \ \distr M borel (Y i)))" - by (rule product_nn_integral_setprod) (auto intro: \finite I\) + by (rule product_nn_integral_prod) (auto intro: \finite I\) also have "\ = (\i\I. \\<^sup>+\. X i \ \M)" - by (intro setprod.cong nn_integral_cong) (auto simp: nn_integral_distr Y_def rv_X) + by (intro prod.cong nn_integral_cong) (auto simp: nn_integral_distr Y_def rv_X) finally show ?thesis . qed (simp add: emeasure_space_1) @@ -1330,15 +1330,15 @@ also have "\ = (\\. (\i\I. \ i) \Pi\<^sub>M I (\i. distr M borel (Y i)))" unfolding indep_vars_iff_distr_eq_PiM[THEN iffD1, OF \I \ {}\ rv_Y indep_Y] .. also have "\ = (\i\I. (\\. \ \distr M borel (Y i)))" - by (rule product_integral_setprod) (auto intro: \finite I\ simp: integrable_distr_eq int_Y) + by (rule product_integral_prod) (auto intro: \finite I\ simp: integrable_distr_eq int_Y) also have "\ = (\i\I. \\. X i \ \M)" - by (intro setprod.cong integral_cong) + by (intro prod.cong integral_cong) (auto simp: integral_distr Y_def rv_X) finally show ?eq . have "integrable (distr M (Pi\<^sub>M I (\i. borel)) (\x. \i\I. Y i x)) (\\. (\i\I. \ i))" unfolding indep_vars_iff_distr_eq_PiM[THEN iffD1, OF \I \ {}\ rv_Y indep_Y] - by (intro product_integrable_setprod[OF \finite I\]) + by (intro product_integrable_prod[OF \finite I\]) (simp add: integrable_distr_eq int_Y) then show ?int by (simp add: integrable_distr_eq Y_def) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Probability/Infinite_Product_Measure.thy --- a/src/HOL/Probability/Infinite_Product_Measure.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Probability/Infinite_Product_Measure.thy Mon Oct 17 17:33:07 2016 +0200 @@ -98,7 +98,7 @@ shows "measure (PiM I M) (emb I J (Pi\<^sub>E J X)) = (\ i\J. measure (M i) (X i))" using emeasure_PiM_emb[OF assms] unfolding emeasure_eq_measure M.emeasure_eq_measure - by (simp add: setprod_ennreal measure_nonneg setprod_nonneg) + by (simp add: prod_ennreal measure_nonneg prod_nonneg) lemma sets_Collect_single': "i \ I \ {x\space (M i). P x} \ sets (M i) \ {x\space (PiM I M). P (x i)} \ sets (PiM I M)" @@ -151,7 +151,7 @@ have "emeasure (Pi\<^sub>M I M) (prod_emb I M J (Pi\<^sub>E J A)) = emeasure (Pi\<^sub>M I ?M) (P.emb I J (Pi\<^sub>E J A))" by (auto simp: prod_emb_def PiE_iff intro!: arg_cong2[where f=emeasure] PiM_cong) also have "\ = (\i\J. emeasure (M i) (A i))" - using J A by (subst P.emeasure_PiM_emb[OF J]) (auto intro!: setprod.cong) + using J A by (subst P.emeasure_PiM_emb[OF J]) (auto intro!: prod.cong) finally show ?thesis . qed @@ -173,7 +173,7 @@ have "Pi\<^sub>M (insert i' I) M ?X = (\i\J. M i (A i))" using M J A by (intro emeasure_PiM_emb) auto also have "\ = M i' (if i' \ J then (A i') else space (M i')) * (\i\J-{i'}. M i (A i))" - using setprod.insert_remove[of J "\i. M i (A i)" i'] J M'.emeasure_space_1 + using prod.insert_remove[of J "\i. M i (A i)" i'] J M'.emeasure_space_1 by (cases "i' \ J") (auto simp: insert_absorb) also have "(\i\J-{i'}. M i (A i)) = Pi\<^sub>M I M (prod_emb I M (J - {i'}) (Pi\<^sub>E (J - {i'}) A))" using M J A by (intro emeasure_PiM_emb[symmetric]) auto @@ -205,7 +205,7 @@ have "?I (prod_emb I (\i. M (f i)) J (Pi\<^sub>E J A)) = (\j\J. M (f j) (A j))" using f J A by (intro emeasure_PiM_emb M) auto also have "\ = (\j\f`J. M j (A (the_inv_into I f j)))" - using f J by (subst setprod.reindex) (auto intro!: setprod.cong intro: inj_on_subset simp: the_inv_into_f_f) + using f J by (subst prod.reindex) (auto intro!: prod.cong intro: inj_on_subset simp: the_inv_into_f_f) also have "\ = ?K (prod_emb K M (f`J) (\\<^sub>E j\f`J. A (the_inv_into I f j)))" using f J A by (intro emeasure_PiM_emb[symmetric] M) (auto simp: the_inv_into_f_f) also have "prod_emb K M (f`J) (\\<^sub>E j\f`J. A (the_inv_into I f j)) = ?t -` prod_emb I (\i. M (f i)) J (Pi\<^sub>E J A) \ space ?K" @@ -352,12 +352,12 @@ also have "emeasure S ?F = (\j\(op + i) -` J. emeasure M (E (i + j)))" using J by (intro emeasure_PiM_emb) (simp_all add: finite_vimageI inj_on_def) also have "\ = (\j\J - (J \ {..x. x - i"]) + by (rule prod.reindex_cong [of "\x. x - i"]) (auto simp: image_iff Bex_def not_less nat_eq_diff_eq ac_simps cong: conj_cong intro!: inj_onI) also have "emeasure S ?E = (\j\J \ {..j\J \ {..j\J - (J \ {..j\J. emeasure M (E j))" - by (subst mult.commute) (auto simp: J setprod.subset_diff[symmetric]) + by (subst mult.commute) (auto simp: J prod.subset_diff[symmetric]) finally show "emeasure ?D ?X = (\j\J. emeasure M (E j))" . qed simp_all @@ -383,10 +383,10 @@ also have "emeasure S ?F = (\j\Suc -` J. emeasure M (E (Suc j)))" using J by (intro emeasure_PiM_emb) (simp_all add: finite_vimageI) also have "\ = (\j\J - {0}. emeasure M (E j))" - by (rule setprod.reindex_cong [of "\x. x - 1"]) + by (rule prod.reindex_cong [of "\x. x - 1"]) (auto simp: image_iff Bex_def not_less nat_eq_diff_eq ac_simps cong: conj_cong intro!: inj_onI) also have "emeasure M ?E * (\j\J - {0}. emeasure M (E j)) = (\j\J. emeasure M (E j))" - by (auto simp: M.emeasure_space_1 setprod.remove J) + by (auto simp: M.emeasure_space_1 prod.remove J) finally show "emeasure ?D ?X = (\j\J. emeasure M (E j))" . qed simp_all diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Probability/Probability_Measure.thy --- a/src/HOL/Probability/Probability_Measure.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Probability/Probability_Measure.thy Mon Oct 17 17:33:07 2016 +0200 @@ -485,7 +485,7 @@ sublocale finite_product_prob_space \ prob_space "\\<^sub>M i\I. M i" proof show "emeasure (\\<^sub>M i\I. M i) (space (\\<^sub>M i\I. M i)) = 1" - by (simp add: measure_times M.emeasure_space_1 setprod.neutral_const space_PiM) + by (simp add: measure_times M.emeasure_space_1 prod.neutral_const space_PiM) qed lemma (in finite_product_prob_space) prob_times: @@ -497,8 +497,8 @@ also have "\ = (\i\I. emeasure (M i) (X i))" using measure_times X by simp also have "\ = ennreal (\i\I. measure (M i) (X i))" - using X by (simp add: M.emeasure_eq_measure setprod_ennreal measure_nonneg) - finally show ?thesis by (simp add: measure_nonneg setprod_nonneg) + using X by (simp add: M.emeasure_eq_measure prod_ennreal measure_nonneg) + finally show ?thesis by (simp add: measure_nonneg prod_nonneg) qed subsection \Distributions\ @@ -1201,8 +1201,8 @@ apply (subst emeasure_distr) apply (auto intro!: sets_PiM_I_finite simp: Pi_iff) apply (subst emeasure_PiM) - apply (auto simp: the_inv_into_f_f \inj_on t J\ setprod.reindex[OF \inj_on t J\] - if_distrib[where f="emeasure (M _)"] setprod.If_cases emeasure_space_1 Int_absorb1 \t`J \ K\) + apply (auto simp: the_inv_into_f_f \inj_on t J\ prod.reindex[OF \inj_on t J\] + if_distrib[where f="emeasure (M _)"] prod.If_cases emeasure_space_1 Int_absorb1 \t`J \ K\) done qed simp diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Probability/ex/Koepf_Duermuth_Countermeasure.thy --- a/src/HOL/Probability/ex/Koepf_Duermuth_Countermeasure.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Probability/ex/Koepf_Duermuth_Countermeasure.thy Mon Oct 17 17:33:07 2016 +0200 @@ -83,7 +83,7 @@ lemma zero_notin_Suc_image[simp]: "0 \ Suc ` A" by auto -lemma setprod_sum_distrib_lists: +lemma prod_sum_distrib_lists: fixes P and S :: "'a set" and f :: "'a \ _::semiring_0" assumes "finite S" shows "(\ms\{ms. set ms \ S \ length ms = n \ (\ixim\{m\S. P i m}. f m)" @@ -100,7 +100,7 @@ show ?case unfolding * using Suc[of "\i. P (Suc i)"] by (simp add: sum.reindex split_conv sum_cartesian_product' - lessThan_Suc_eq_insert_0 setprod.reindex sum_distrib_right[symmetric] sum_distrib_left[symmetric]) + lessThan_Suc_eq_insert_0 prod.reindex sum_distrib_right[symmetric] sum_distrib_left[symmetric]) qed declare space_point_measure[simp] @@ -169,12 +169,12 @@ case (Suc n) then show ?case by (simp add: lists_length_Suc_eq lessThan_Suc_eq_insert_0 - sum.reindex setprod.reindex) + sum.reindex prod.reindex) qed then show "sum P msgs = 1" unfolding msgs_def P_def by simp fix x - have "\ A f. 0 \ (\x\A. M (f x))" by (auto simp: setprod_nonneg) + have "\ A f. 0 \ (\x\A. M (f x))" by (auto simp: prod_nonneg) then show "0 \ P x" unfolding P_def by (auto split: prod.split simp: zero_le_mult_iff) qed auto @@ -255,8 +255,8 @@ apply (simp add: \'_eq) apply (simp add: * P_def) apply (simp add: sum_cartesian_product') - using setprod_sum_distrib_lists[OF M.finite_space, of M n "\x x. True"] \k \ keys\ - by (auto simp add: sum_distrib_left[symmetric] subset_eq setprod.neutral_const) + using prod_sum_distrib_lists[OF M.finite_space, of M n "\x x. True"] \k \ keys\ + by (auto simp add: sum_distrib_left[symmetric] subset_eq prod.neutral_const) qed lemma fst_image_msgs[simp]: "fst`msgs = keys" @@ -352,14 +352,14 @@ (\im\{m\messages. observe k m = obs ! i}. M m)" unfolding P_def using \K k \ 0\ \k \ keys\ apply (simp add: sum_cartesian_product' sum_divide_distrib msgs_def ** cong: conj_cong) - apply (subst setprod_sum_distrib_lists[OF M.finite_space]) .. + apply (subst prod_sum_distrib_lists[OF M.finite_space]) .. finally have "(\

(OB ; fst) {(obs, k)}) / K k = (\im\{m\messages. observe k m = obs ! i}. M m)" . } note * = this have "(\

(OB ; fst) {(obs, k)}) / K k = (\

(OB ; fst) {(obs', k)}) / K k" unfolding *[OF obs] *[OF obs'] - using t_f(1) obs_t_f by (subst (2) t_f(2)) (simp add: setprod.reindex) + using t_f(1) obs_t_f by (subst (2) t_f(2)) (simp add: prod.reindex) then have "(\

(OB ; fst) {(obs, k)}) = (\

(OB ; fst) {(obs', k)})" using \K k \ 0\ by auto } note t_eq_imp = this diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Rat.thy --- a/src/HOL/Rat.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Rat.thy Mon Oct 17 17:33:07 2016 +0200 @@ -701,7 +701,7 @@ lemma of_rat_sum: "of_rat (\a\A. f a) = (\a\A. of_rat (f a))" by (induct rule: infinite_finite_induct) (auto simp: of_rat_add) -lemma of_rat_setprod: "of_rat (\a\A. f a) = (\a\A. of_rat (f a))" +lemma of_rat_prod: "of_rat (\a\A. f a) = (\a\A. of_rat (f a))" by (induct rule: infinite_finite_induct) (auto simp: of_rat_mult) lemma nonzero_of_rat_inverse: "a \ 0 \ of_rat (inverse a) = inverse (of_rat a)" diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Real_Vector_Spaces.thy --- a/src/HOL/Real_Vector_Spaces.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Real_Vector_Spaces.thy Mon Oct 17 17:33:07 2016 +0200 @@ -319,7 +319,7 @@ lemma of_real_sum[simp]: "of_real (sum f s) = (\x\s. of_real (f x))" by (induct s rule: infinite_finite_induct) auto -lemma of_real_setprod[simp]: "of_real (setprod f s) = (\x\s. of_real (f x))" +lemma of_real_prod[simp]: "of_real (prod f s) = (\x\s. of_real (f x))" by (induct s rule: infinite_finite_induct) auto lemma nonzero_of_real_inverse: @@ -501,10 +501,10 @@ then show ?case by (metis Reals_0 sum.infinite) qed simp_all -lemma setprod_in_Reals [intro,simp]: "(\i. i \ s \ f i \ \) \ setprod f s \ \" +lemma prod_in_Reals [intro,simp]: "(\i. i \ s \ f i \ \) \ prod f s \ \" proof (induct s rule: infinite_finite_induct) case infinite - then show ?case by (metis Reals_1 setprod.infinite) + then show ?case by (metis Reals_1 prod.infinite) qed simp_all lemma Reals_induct [case_names of_real, induct set: Reals]: @@ -978,20 +978,20 @@ by simp qed -lemma setprod_norm: "setprod (\x. norm (f x)) A = norm (setprod f A)" +lemma prod_norm: "prod (\x. norm (f x)) A = norm (prod f A)" for f :: "'a \ 'b::{comm_semiring_1,real_normed_div_algebra}" by (induct A rule: infinite_finite_induct) (auto simp: norm_mult) -lemma norm_setprod_le: - "norm (setprod f A) \ (\a\A. norm (f a :: 'a :: {real_normed_algebra_1,comm_monoid_mult}))" +lemma norm_prod_le: + "norm (prod f A) \ (\a\A. norm (f a :: 'a :: {real_normed_algebra_1,comm_monoid_mult}))" proof (induct A rule: infinite_finite_induct) case empty then show ?case by simp next case (insert a A) - then have "norm (setprod f (insert a A)) \ norm (f a) * norm (setprod f A)" + then have "norm (prod f (insert a A)) \ norm (f a) * norm (prod f A)" by (simp add: norm_mult_ineq) - also have "norm (setprod f A) \ (\a\A. norm (f a))" + also have "norm (prod f A) \ (\a\A. norm (f a))" by (rule insert) finally show ?case by (simp add: insert mult_left_mono) @@ -1000,7 +1000,7 @@ then show ?case by simp qed -lemma norm_setprod_diff: +lemma norm_prod_diff: fixes z w :: "'i \ 'a::{real_normed_algebra_1, comm_monoid_mult}" shows "(\i. i \ I \ norm (z i) \ 1) \ (\i. i \ I \ norm (w i) \ 1) \ norm ((\i\I. z i) - (\i\I. w i)) \ (\i\I. norm (z i - w i))" @@ -1020,9 +1020,9 @@ also have "norm ?t1 \ norm (\i\I. z i) * norm (z i - w i)" by (rule norm_mult_ineq) also have "\ \ (\i\I. norm (z i)) * norm(z i - w i)" - by (rule mult_right_mono) (auto intro: norm_setprod_le) + by (rule mult_right_mono) (auto intro: norm_prod_le) also have "(\i\I. norm (z i)) \ (\i\I. 1)" - by (intro setprod_mono) (auto intro!: insert) + by (intro prod_mono) (auto intro!: insert) also have "norm ?t2 \ norm ((\i\I. z i) - (\i\I. w i)) * norm (w i)" by (rule norm_mult_ineq) also have "norm (w i) \ 1" @@ -1042,9 +1042,9 @@ shows "norm (z^m - w^m) \ m * norm (z - w)" proof - have "norm (z^m - w^m) = norm ((\ i < m. z) - (\ i < m. w))" - by (simp add: setprod_constant) + by (simp add: prod_constant) also have "\ \ (\i = m * norm (z - w)" by simp finally show ?thesis . diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Set_Interval.thy --- a/src/HOL/Set_Interval.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Set_Interval.thy Mon Oct 17 17:33:07 2016 +0200 @@ -2018,41 +2018,41 @@ subsection \Products indexed over intervals\ syntax (ASCII) - "_from_to_setprod" :: "idt \ '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) + "_from_to_prod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(PROD _ = _.._./ _)" [0,0,0,10] 10) + "_from_upto_prod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(PROD _ = _..<_./ _)" [0,0,0,10] 10) + "_upt_prod" :: "idt \ 'a \ 'b \ 'b" ("(PROD _<_./ _)" [0,0,10] 10) + "_upto_prod" :: "idt \ 'a \ 'b \ 'b" ("(PROD _<=_./ _)" [0,0,10] 10) syntax (latex_prod output) - "_from_to_setprod" :: "idt \ 'a \ 'a \ 'b \ 'b" + "_from_to_prod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\<^latex>\$\\prod_{\_ = _\<^latex>\}^{\_\<^latex>\}$\ _)" [0,0,0,10] 10) - "_from_upto_setprod" :: "idt \ 'a \ 'a \ 'b \ 'b" + "_from_upto_prod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\<^latex>\$\\prod_{\_ = _\<^latex>\}^{<\_\<^latex>\}$\ _)" [0,0,0,10] 10) - "_upt_setprod" :: "idt \ 'a \ 'b \ 'b" + "_upt_prod" :: "idt \ 'a \ 'b \ 'b" ("(3\<^latex>\$\\prod_{\_ < _\<^latex>\}$\ _)" [0,0,10] 10) - "_upto_setprod" :: "idt \ 'a \ 'b \ 'b" + "_upto_prod" :: "idt \ 'a \ 'b \ 'b" ("(3\<^latex>\$\\prod_{\_ \ _\<^latex>\}$\ _)" [0,0,10] 10) syntax - "_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) + "_from_to_prod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _.._./ _)" [0,0,0,10] 10) + "_from_upto_prod" :: "idt \ 'a \ 'a \ 'b \ 'b" ("(3\_ = _..<_./ _)" [0,0,0,10] 10) + "_upt_prod" :: "idt \ 'a \ 'b \ 'b" ("(3\_<_./ _)" [0,0,10] 10) + "_upto_prod" :: "idt \ 'a \ 'b \ 'b" ("(3\_\_./ _)" [0,0,10] 10) translations - "\x=a..b. t" \ "CONST setprod (\x. t) {a..b}" - "\x=a.. "CONST setprod (\x. t) {a..i\n. t" \ "CONST setprod (\i. t) {..n}" - "\i "CONST setprod (\i. t) {..{int i..int (i+j)}" + "\x=a..b. t" \ "CONST prod (\x. t) {a..b}" + "\x=a.. "CONST prod (\x. t) {a..i\n. t" \ "CONST prod (\i. t) {..n}" + "\i "CONST prod (\i. t) {..{int i..int (i+j)}" by (induct j) (auto simp add: atLeastAtMostSuc_conv atLeastAtMostPlus1_int_conv) -lemma setprod_int_eq: "setprod int {i..j} = \{int i..int j}" +lemma prod_int_eq: "prod int {i..j} = \{int i..int j}" proof (cases "i \ j") case True then show ?thesis - by (metis le_iff_add setprod_int_plus_eq) + by (metis le_iff_add prod_int_plus_eq) next case False then show ?thesis @@ -2062,37 +2062,37 @@ subsubsection \Shifting bounds\ -lemma setprod_shift_bounds_nat_ivl: - "setprod f {m+k..iiii b \ setprod f {a.. b \ prod f {a.. Suc n" - shows "setprod f {m..Suc n} = f (Suc n) * setprod f {m..n}" + shows "prod f {m..Suc n} = f (Suc n) * prod f {m..n}" proof - from assms have "{m..Suc n} = insert (Suc n) {m..n}" by auto - also have "setprod f \ = f (Suc n) * setprod f {m..n}" by simp + also have "prod f \ = f (Suc n) * prod f {m..n}" by simp finally show ?thesis . qed @@ -2133,13 +2133,13 @@ by (simp add: sum.eq_fold fold_atLeastAtMost_nat o_def) qed -lemma setprod_atLeastAtMost_code: - "setprod f {a..b} = fold_atLeastAtMost_nat (\a acc. f a * acc) a b 1" +lemma prod_atLeastAtMost_code: + "prod f {a..b} = fold_atLeastAtMost_nat (\a acc. f a * acc) a b 1" proof - have "comp_fun_commute (\a. op * (f a))" by unfold_locales (auto simp: o_def mult_ac) thus ?thesis - by (simp add: setprod.eq_fold fold_atLeastAtMost_nat o_def) + by (simp add: prod.eq_fold fold_atLeastAtMost_nat o_def) qed (* TODO: Add support for more kinds of intervals here *) diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/Transcendental.thy --- a/src/HOL/Transcendental.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/Transcendental.thy Mon Oct 17 17:33:07 2016 +0200 @@ -35,7 +35,7 @@ by (metis of_nat_fact of_real_of_nat_eq) lemma pochhammer_of_real: "pochhammer (of_real x) n = of_real (pochhammer x n)" - by (simp add: pochhammer_setprod) + by (simp add: pochhammer_prod) lemma norm_fact [simp]: "norm (fact n :: 'a::real_normed_algebra_1) = fact n" proof - @@ -1522,7 +1522,7 @@ corollary exp_real_of_nat_mult: "exp (real n * x) = exp x ^ n" by (simp add: exp_of_nat_mult) -lemma exp_sum: "finite I \ exp (sum f I) = setprod (\x. exp (f x)) I" +lemma exp_sum: "finite I \ exp (sum f I) = prod (\x. exp (f x)) I" by (induct I rule: finite_induct) (auto simp: exp_add_commuting mult.commute) lemma exp_divide_power_eq: @@ -1744,9 +1744,9 @@ for x :: real by (rule ln_unique) (simp add: exp_add) -lemma ln_setprod: "finite I \ (\i. i \ I \ f i > 0) \ ln (setprod f I) = sum (\x. ln(f x)) I" +lemma ln_prod: "finite I \ (\i. i \ I \ f i > 0) \ ln (prod f I) = sum (\x. ln(f x)) I" for f :: "'a \ real" - by (induct I rule: finite_induct) (auto simp: ln_mult setprod_pos) + by (induct I rule: finite_induct) (auto simp: ln_mult prod_pos) lemma ln_inverse: "0 < x \ ln (inverse x) = - ln x" for x :: real diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/ex/Birthday_Paradox.thy --- a/src/HOL/ex/Birthday_Paradox.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/ex/Birthday_Paradox.thy Mon Oct 17 17:33:07 2016 +0200 @@ -64,11 +64,11 @@ by (auto intro!: finite_PiE) have "{f \ extensional_funcset S T. \ inj_on f S} = extensional_funcset S T - {f \ extensional_funcset S T. inj_on f S}" by auto from assms this finite subset show ?thesis - by (simp add: card_Diff_subset card_PiE card_extensional_funcset_inj_on setprod_constant) + by (simp add: card_Diff_subset card_PiE card_extensional_funcset_inj_on prod_constant) qed -lemma setprod_upto_nat_unfold: - "setprod f {m..(n::nat)} = (if n < m then 1 else (if n = 0 then f 0 else f n * setprod f {m..(n - 1)}))" +lemma prod_upto_nat_unfold: + "prod f {m..(n::nat)} = (if n < m then 1 else (if n = 0 then f 0 else f n * prod f {m..(n - 1)}))" by auto (auto simp add: gr0_conv_Suc atLeastAtMostSuc_conv) section \Birthday paradox\ @@ -81,7 +81,7 @@ from assms show ?thesis using card_PiE[OF \finite S\, of "\i. T"] \finite S\ card_extensional_funcset_not_inj_on[OF \finite S\ \finite T\ \card S <= card T\] - by (simp add: fact_div_fact setprod_upto_nat_unfold setprod_constant) + by (simp add: fact_div_fact prod_upto_nat_unfold prod_constant) qed end diff -r c939cc16b605 -r f76b6dda2e56 src/HOL/ex/Sum_of_Powers.thy --- a/src/HOL/ex/Sum_of_Powers.thy Mon Oct 17 14:37:32 2016 +0200 +++ b/src/HOL/ex/Sum_of_Powers.thy Mon Oct 17 17:33:07 2016 +0200 @@ -23,8 +23,8 @@ next case (Suc l) have "of_nat (n + 1) * (\i=0.. 'a)) (n + 1 - k) * (\i=0..i=0.. 'a)) (n + 1 - k) * (\i=0..i=0.. 'a)) (n + 1 - k) / of_nat (n + 1) * (\i=0..