# HG changeset patch # User wenzelm # Date 1552256583 -3600 # Node ID 6b03a8cf092ded842282e85af71a8c6f37383d6d # Parent 2eade8651b93e43dc19711596e037206c91ef49d more formal contributors (with the help of the history); diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Algebra/Congruence.thy --- a/src/HOL/Algebra/Congruence.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Algebra/Congruence.thy Sun Mar 10 23:23:03 2019 +0100 @@ -270,9 +270,7 @@ using assms by (meson closure_of_memE elemE) -(* Lemmas by Paulo Emílio de Vilhena *) - -lemma (in partition) equivalence_from_partition: +lemma (in partition) equivalence_from_partition: \<^marker>\contributor \Paulo Emílio de Vilhena\\ "equivalence \ carrier = A, eq = (\x y. y \ (THE b. b \ B \ x \ b))\" unfolding partition_def equivalence_def proof (auto) @@ -285,10 +283,10 @@ using unique_class by (metis (mono_tags, lifting) the_equality) qed -lemma (in partition) partition_coverture: "\B = A" +lemma (in partition) partition_coverture: "\B = A" \<^marker>\contributor \Paulo Emílio de Vilhena\\ by (meson Sup_le_iff UnionI unique_class incl subsetI subset_antisym) -lemma (in partition) disjoint_union: +lemma (in partition) disjoint_union: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "b1 \ B" "b2 \ B" and "b1 \ b2 \ {}" shows "b1 = b2" @@ -299,7 +297,7 @@ thus False using unique_class \b1 \ b2\ assms(1) assms(2) by blast qed -lemma partitionI: +lemma partitionI: \<^marker>\contributor \Paulo Emílio de Vilhena\\ fixes A :: "'a set" and B :: "('a set) set" assumes "\B = A" and "\b1 b2. \ b1 \ B; b2 \ B \ \ b1 \ b2 \ {} \ b1 = b2" @@ -316,7 +314,7 @@ show "\b. b \ B \ b \ A" using assms(1) by blast qed -lemma (in partition) remove_elem: +lemma (in partition) remove_elem: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "b \ B" shows "partition (A - b) (B - {b})" proof @@ -327,7 +325,7 @@ using assms unique_class incl partition_axioms partition_coverture by fastforce qed -lemma disjoint_sum: +lemma disjoint_sum: \<^marker>\contributor \Paulo Emílio de Vilhena\\ "\ finite B; finite A; partition A B\ \ (\b\B. \a\b. f a) = (\a\A. f a)" proof (induct arbitrary: A set: finite) case empty thus ?case using partition.unique_class by fastforce @@ -343,7 +341,7 @@ by (metis add.commute insert_iff partition.incl sum.subset_diff) qed -lemma (in partition) disjoint_sum: +lemma (in partition) disjoint_sum: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "finite A" shows "(\b\B. \a\b. f a) = (\a\A. f a)" proof - @@ -352,20 +350,20 @@ thus ?thesis using disjoint_sum assms partition_axioms by blast qed -lemma (in equivalence) set_eq_insert_aux: +lemma (in equivalence) set_eq_insert_aux: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "A \ carrier S" and "x \ carrier S" "x' \ carrier S" "x .= x'" and "y \ insert x A" shows "y .\ insert x' A" by (metis assms(1) assms(4) assms(5) contra_subsetD elemI elem_exact insert_iff) -corollary (in equivalence) set_eq_insert: +corollary (in equivalence) set_eq_insert: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "A \ carrier S" and "x \ carrier S" "x' \ carrier S" "x .= x'" shows "insert x A {.=} insert x' A" by (meson set_eqI assms set_eq_insert_aux sym equivalence_axioms) -lemma (in equivalence) set_eq_pairI: +lemma (in equivalence) set_eq_pairI: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes xx': "x .= x'" and carr: "x \ carrier S" "x' \ carrier S" "y \ carrier S" shows "{x, y} {.=} {x', y}" diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Algebra/Coset.thy --- a/src/HOL/Algebra/Coset.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Algebra/Coset.thy Sun Mar 10 23:23:03 2019 +0100 @@ -41,21 +41,17 @@ lemma (in comm_group) subgroup_imp_normal: "subgroup A G \ A \ G" by (simp add: normal_def normal_axioms_def is_group l_coset_def r_coset_def m_comm subgroup.mem_carrier) -(*Next two lemmas contributed by Martin Baillon.*) - -lemma l_coset_eq_set_mult: +lemma l_coset_eq_set_mult: \<^marker>\contributor \Martin Baillon\\ fixes G (structure) shows "x <# H = {x} <#> H" unfolding l_coset_def set_mult_def by simp -lemma r_coset_eq_set_mult: +lemma r_coset_eq_set_mult: \<^marker>\contributor \Martin Baillon\\ fixes G (structure) shows "H #> x = H <#> {x}" unfolding r_coset_def set_mult_def by simp -(* Next five lemmas contributed by Paulo Emílio de Vilhena. *) - -lemma (in subgroup) rcosets_non_empty: +lemma (in subgroup) rcosets_non_empty: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "R \ rcosets H" shows "R \ {}" proof - @@ -66,7 +62,7 @@ thus ?thesis by blast qed -lemma (in group) diff_neutralizes: +lemma (in group) diff_neutralizes: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "subgroup H G" "R \ rcosets H" shows "\r1 r2. \ r1 \ R; r2 \ R \ \ r1 \ (inv r2) \ H" proof - @@ -94,24 +90,25 @@ thus "r1 \ inv r2 \ H" by (metis assms(1) h1(1) h2(1) subgroup_def) qed -lemma mono_set_mult: "\ H \ H'; K \ K' \ \ H <#>\<^bsub>G\<^esub> K \ H' <#>\<^bsub>G\<^esub> K'" +lemma mono_set_mult: "\ H \ H'; K \ K' \ \ H <#>\<^bsub>G\<^esub> K \ H' <#>\<^bsub>G\<^esub> K'" \<^marker>\contributor \Paulo Emílio de Vilhena\\ unfolding set_mult_def by (simp add: UN_mono) subsection \Stable Operations for Subgroups\ -lemma set_mult_consistent [simp]: +lemma set_mult_consistent [simp]: \<^marker>\contributor \Paulo Emílio de Vilhena\\ "N <#>\<^bsub>(G \ carrier := H \)\<^esub> K = N <#>\<^bsub>G\<^esub> K" unfolding set_mult_def by simp -lemma r_coset_consistent [simp]: +lemma r_coset_consistent [simp]: \<^marker>\contributor \Paulo Emílio de Vilhena\\ "I #>\<^bsub>G \ carrier := H \\<^esub> h = I #>\<^bsub>G\<^esub> h" unfolding r_coset_def by simp -lemma l_coset_consistent [simp]: +lemma l_coset_consistent [simp]: \<^marker>\contributor \Paulo Emílio de Vilhena\\ "h <#\<^bsub>G \ carrier := H \\<^esub> I = h <#\<^bsub>G\<^esub> I" unfolding l_coset_def by simp + subsection \Basic Properties of set multiplication\ lemma (in group) setmult_subset_G: @@ -124,8 +121,7 @@ shows "H <#> K \ carrier G" using assms by (auto simp add: set_mult_def subsetD) -(* Next lemma contributed by Martin Baillon.*) -lemma (in group) set_mult_assoc: +lemma (in group) set_mult_assoc: \<^marker>\contributor \Martin Baillon\\ assumes "M \ carrier G" "H \ carrier G" "K \ carrier G" shows "(M <#> H) <#> K = M <#> (H <#> K)" proof @@ -1094,13 +1090,11 @@ using FactGroup_iso_set unfolding is_iso_def by auto -(* Next two lemmas contributed by Paulo Emílio de Vilhena. *) - -lemma (in group_hom) trivial_hom_iff: +lemma (in group_hom) trivial_hom_iff: \<^marker>\contributor \Paulo Emílio de Vilhena\\ "h ` (carrier G) = { \\<^bsub>H\<^esub> } \ kernel G H h = carrier G" unfolding kernel_def using one_closed by force -lemma (in group_hom) trivial_ker_imp_inj: +lemma (in group_hom) trivial_ker_imp_inj: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "kernel G H h = { \ }" shows "inj_on h (carrier G)" proof (rule inj_onI) @@ -1197,11 +1191,9 @@ qed -(* Next subsection contributed by Martin Baillon. *) - subsection \Theorems about Factor Groups and Direct product\ -lemma (in group) DirProd_normal : +lemma (in group) DirProd_normal : \<^marker>\contributor \Martin Baillon\\ assumes "group K" and "H \ G" and "N \ K" @@ -1231,7 +1223,7 @@ qed qed -lemma (in group) FactGroup_DirProd_multiplication_iso_set : +lemma (in group) FactGroup_DirProd_multiplication_iso_set : \<^marker>\contributor \Martin Baillon\\ assumes "group K" and "H \ G" and "N \ K" @@ -1261,14 +1253,14 @@ unfolding iso_def hom_def bij_betw_def inj_on_def by simp qed -corollary (in group) FactGroup_DirProd_multiplication_iso_1 : +corollary (in group) FactGroup_DirProd_multiplication_iso_1 : \<^marker>\contributor \Martin Baillon\\ assumes "group K" and "H \ G" and "N \ K" shows " ((G Mod H) \\ (K Mod N)) \ (G \\ K Mod H \ N)" unfolding is_iso_def using FactGroup_DirProd_multiplication_iso_set assms by auto -corollary (in group) FactGroup_DirProd_multiplication_iso_2 : +corollary (in group) FactGroup_DirProd_multiplication_iso_2 : \<^marker>\contributor \Martin Baillon\\ assumes "group K" and "H \ G" and "N \ K" diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Algebra/Divisibility.thy --- a/src/HOL/Algebra/Divisibility.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Algebra/Divisibility.thy Sun Mar 10 23:23:03 2019 +0100 @@ -755,8 +755,7 @@ using assms by (auto simp: prime_def assoc_unit_l) (metis pp' associated_sym divides_cong_l) -(*by Paulo Emílio de Vilhena*) -lemma (in comm_monoid_cancel) prime_irreducible: +lemma (in comm_monoid_cancel) prime_irreducible: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "prime G p" shows "irreducible G p" proof (rule irreducibleI) diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Algebra/FiniteProduct.thy --- a/src/HOL/Algebra/FiniteProduct.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Algebra/FiniteProduct.thy Sun Mar 10 23:23:03 2019 +0100 @@ -517,9 +517,7 @@ using finprod_Suc[of f k] assms atMost_Suc lessThan_Suc_atMost by simp qed -(* The following two were contributed by Jeremy Avigad. *) - -lemma finprod_reindex: +lemma finprod_reindex: \<^marker>\contributor \Jeremy Avigad\\ "f \ (h ` A) \ carrier G \ inj_on h A \ finprod G f (h ` A) = finprod G (\x. f (h x)) A" proof (induct A rule: infinite_finite_induct) @@ -529,7 +527,7 @@ with \\ finite A\ show ?case by simp qed (auto simp add: Pi_def) -lemma finprod_const: +lemma finprod_const: \<^marker>\contributor \Jeremy Avigad\\ assumes a [simp]: "a \ carrier G" shows "finprod G (\x. a) A = a [^] card A" proof (induct A rule: infinite_finite_induct) @@ -541,9 +539,7 @@ qed auto qed auto -(* The following lemma was contributed by Jesus Aransay. *) - -lemma finprod_singleton: +lemma finprod_singleton: \<^marker>\contributor \Jesus Aransay\\ assumes i_in_A: "i \ A" and fin_A: "finite A" and f_Pi: "f \ A \ carrier G" shows "(\j\A. if i = j then f j else \) = f i" using i_in_A finprod_insert [of "A - {i}" i "(\j. if i = j then f j else \)"] diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Algebra/Group.thy --- a/src/HOL/Algebra/Group.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Algebra/Group.thy Sun Mar 10 23:23:03 2019 +0100 @@ -501,23 +501,23 @@ lemma (in group) inj_on_cmult: "c \ carrier G \ inj_on (\x. c \ x) (carrier G)" by(simp add: inj_on_def) -(*Following subsection contributed by Martin Baillon*) + subsection \Submonoids\ -locale submonoid = +locale submonoid = \<^marker>\contributor \Martin Baillon\\ fixes H and G (structure) assumes subset: "H \ carrier G" and m_closed [intro, simp]: "\x \ H; y \ H\ \ x \ y \ H" and one_closed [simp]: "\ \ H" -lemma (in submonoid) is_submonoid: +lemma (in submonoid) is_submonoid: \<^marker>\contributor \Martin Baillon\\ "submonoid H G" by (rule submonoid_axioms) -lemma (in submonoid) mem_carrier [simp]: +lemma (in submonoid) mem_carrier [simp]: \<^marker>\contributor \Martin Baillon\\ "x \ H \ x \ carrier G" using subset by blast -lemma (in submonoid) submonoid_is_monoid [intro]: +lemma (in submonoid) submonoid_is_monoid [intro]: \<^marker>\contributor \Martin Baillon\\ assumes "monoid G" shows "monoid (G\carrier := H\)" proof - @@ -526,11 +526,11 @@ by (simp add: monoid_def m_assoc) qed -lemma submonoid_nonempty: +lemma submonoid_nonempty: \<^marker>\contributor \Martin Baillon\\ "~ submonoid {} G" by (blast dest: submonoid.one_closed) -lemma (in submonoid) finite_monoid_imp_card_positive: +lemma (in submonoid) finite_monoid_imp_card_positive: \<^marker>\contributor \Martin Baillon\\ "finite (carrier G) ==> 0 < card H" proof (rule classical) assume "finite (carrier G)" and a: "~ 0 < card H" @@ -540,7 +540,7 @@ qed -lemma (in monoid) monoid_incl_imp_submonoid : +lemma (in monoid) monoid_incl_imp_submonoid : \<^marker>\contributor \Martin Baillon\\ assumes "H \ carrier G" and "monoid (G\carrier := H\)" shows "submonoid H G" @@ -552,7 +552,7 @@ show "\ \ H " using monoid.one_closed[OF assms(2)] assms by simp qed -lemma (in monoid) inv_unique': +lemma (in monoid) inv_unique': \<^marker>\contributor \Martin Baillon\\ assumes "x \ carrier G" "y \ carrier G" shows "\ x \ y = \; y \ x = \ \ \ y = inv x" proof - @@ -563,7 +563,7 @@ using inv_unique[OF l_inv Units_r_inv[OF unit] assms Units_inv_closed[OF unit]] . qed -lemma (in monoid) m_inv_monoid_consistent: (* contributed by Paulo *) +lemma (in monoid) m_inv_monoid_consistent: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "x \ Units (G \ carrier := H \)" and "submonoid H G" shows "inv\<^bsub>(G \ carrier := H \)\<^esub> x = inv x" proof - @@ -620,7 +620,7 @@ shows "inv\<^bsub>(G \ carrier := H \)\<^esub> x = inv x" using assms m_inv_monoid_consistent[OF _ subgroup_is_submonoid] subgroup_Units[of H] by auto -lemma (in group) int_pow_consistent: (* by Paulo *) +lemma (in group) int_pow_consistent: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "subgroup H G" "x \ H" shows "x [^] (n :: int) = x [^]\<^bsub>(G \ carrier := H \)\<^esub> n" proof (cases) @@ -687,19 +687,17 @@ lemma (in subgroup) finite_imp_card_positive: "finite (carrier G) \ 0 < card H" using subset one_closed card_gt_0_iff finite_subset by blast -(*Following 3 lemmas contributed by Martin Baillon*) - -lemma (in subgroup) subgroup_is_submonoid : +lemma (in subgroup) subgroup_is_submonoid : \<^marker>\contributor \Martin Baillon\\ "submonoid H G" by (simp add: submonoid.intro subset) -lemma (in group) submonoid_subgroupI : +lemma (in group) submonoid_subgroupI : \<^marker>\contributor \Martin Baillon\\ assumes "submonoid H G" and "\a. a \ H \ inv a \ H" shows "subgroup H G" by (metis assms subgroup_def submonoid_def) -lemma (in group) group_incl_imp_subgroup: +lemma (in group) group_incl_imp_subgroup: \<^marker>\contributor \Martin Baillon\\ assumes "H \ carrier G" and "group (G\carrier := H\)" shows "subgroup H G" @@ -914,9 +912,7 @@ using bij_betw_same_card unfolding is_iso_def iso_def by auto -(* Next four lemmas contributed by Paulo. *) - -lemma (in monoid) hom_imp_img_monoid: +lemma (in monoid) hom_imp_img_monoid: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "h \ hom G H" shows "monoid (H \ carrier := h ` (carrier G), one := h \\<^bsub>G\<^esub> \)" (is "monoid ?h_img") proof (rule monoidI) @@ -953,7 +949,7 @@ finally show "(x \\<^bsub>(?h_img)\<^esub> y) \\<^bsub>(?h_img)\<^esub> z = x \\<^bsub>(?h_img)\<^esub> (y \\<^bsub>(?h_img)\<^esub> z)" . qed -lemma (in group) hom_imp_img_group: +lemma (in group) hom_imp_img_group: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "h \ hom G H" shows "group (H \ carrier := h ` (carrier G), one := h \\<^bsub>G\<^esub> \)" (is "group ?h_img") proof - @@ -977,7 +973,7 @@ qed qed -lemma (in group) iso_imp_group: +lemma (in group) iso_imp_group: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "G \ H" and "monoid H" shows "group H" proof - @@ -1027,7 +1023,7 @@ thus ?thesis unfolding group_def group_axioms_def using assms(2) by simp qed -corollary (in group) iso_imp_img_group: +corollary (in group) iso_imp_img_group: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "h \ iso G H" shows "group (H \ one := h \ \)" proof - @@ -1131,20 +1127,17 @@ with assms show ?thesis by (simp del: H.r_inv H.Units_r_inv) qed -(* Contributed by Joachim Breitner *) -lemma (in group) int_pow_is_hom: +lemma (in group) int_pow_is_hom: \<^marker>\contributor \Joachim Breitner\\ "x \ carrier G \ (([^]) x) \ hom \ carrier = UNIV, mult = (+), one = 0::int \ G " unfolding hom_def by (simp add: int_pow_mult) -(* Next six lemmas contributed by Paulo. *) - -lemma (in group_hom) img_is_subgroup: "subgroup (h ` (carrier G)) H" +lemma (in group_hom) img_is_subgroup: "subgroup (h ` (carrier G)) H" \<^marker>\contributor \Paulo Emílio de Vilhena\\ apply (rule subgroupI) apply (auto simp add: image_subsetI) apply (metis G.inv_closed hom_inv image_iff) by (metis G.monoid_axioms hom_mult image_eqI monoid.m_closed) -lemma (in group_hom) subgroup_img_is_subgroup: +lemma (in group_hom) subgroup_img_is_subgroup: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "subgroup I G" shows "subgroup (h ` I) H" proof - @@ -1158,7 +1151,7 @@ using group_hom.img_is_subgroup[of "G \ carrier := I \" H h] by simp qed -lemma (in group_hom) induced_group_hom: +lemma (in group_hom) induced_group_hom: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "subgroup I G" shows "group_hom (G \ carrier := I \) (H \ carrier := h ` I \) h" proof - @@ -1170,18 +1163,18 @@ subgroup.subgroup_is_group[OF subgroup_img_is_subgroup[OF assms] is_group] by simp qed -lemma (in group) canonical_inj_is_hom: +lemma (in group) canonical_inj_is_hom: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "subgroup H G" shows "group_hom (G \ carrier := H \) G id" unfolding group_hom_def group_hom_axioms_def hom_def using subgroup.subgroup_is_group[OF assms is_group] is_group subgroup.subset[OF assms] by auto -lemma (in group_hom) nat_pow_hom: +lemma (in group_hom) nat_pow_hom: \<^marker>\contributor \Paulo Emílio de Vilhena\\ "x \ carrier G \ h (x [^] (n :: nat)) = (h x) [^]\<^bsub>H\<^esub> n" by (induction n) auto -lemma (in group_hom) int_pow_hom: +lemma (in group_hom) int_pow_hom: \<^marker>\contributor \Paulo Emílio de Vilhena\\ "x \ carrier G \ h (x [^] (n :: int)) = (h x) [^]\<^bsub>H\<^esub> n" using nat_pow_hom by (simp add: int_pow_def2) @@ -1286,9 +1279,7 @@ "[| x \ carrier G; y \ carrier G |] ==> inv (x \ y) = inv x \ inv y" by (simp add: m_ac inv_mult_group) -(* Next three lemmas contributed by Paulo. *) - -lemma (in comm_monoid) hom_imp_img_comm_monoid: +lemma (in comm_monoid) hom_imp_img_comm_monoid: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "h \ hom G H" shows "comm_monoid (H \ carrier := h ` (carrier G), one := h \\<^bsub>G\<^esub> \)" (is "comm_monoid ?h_img") proof (rule monoid.monoid_comm_monoidI) @@ -1309,13 +1300,13 @@ finally show "x \\<^bsub>(?h_img)\<^esub> y = y \\<^bsub>(?h_img)\<^esub> x" . qed -lemma (in comm_group) hom_imp_img_comm_group: +lemma (in comm_group) hom_imp_img_comm_group: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "h \ hom G H" shows "comm_group (H \ carrier := h ` (carrier G), one := h \\<^bsub>G\<^esub> \)" unfolding comm_group_def using hom_imp_img_group[OF assms] hom_imp_img_comm_monoid[OF assms] by simp -lemma (in comm_group) iso_imp_img_comm_group: +lemma (in comm_group) iso_imp_img_comm_group: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "h \ iso G H" shows "comm_group (H \ one := h \\<^bsub>G\<^esub> \)" proof - @@ -1329,7 +1320,7 @@ ultimately show ?thesis by simp qed -lemma (in comm_group) iso_imp_comm_group: +lemma (in comm_group) iso_imp_comm_group: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "G \ H" "monoid H" shows "comm_group H" proof - diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Algebra/Ideal.thy --- a/src/HOL/Algebra/Ideal.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Algebra/Ideal.thy Sun Mar 10 23:23:03 2019 +0100 @@ -513,13 +513,11 @@ qed -(* Next lemma contributed by Paulo Emílio de Vilhena. *) - text \This next lemma would be trivial if placed in a theory that imports QuotRing, but it makes more sense to have it here (easier to find and coherent with the previous developments).\ -lemma (in cring) cgenideal_prod: +lemma (in cring) cgenideal_prod: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "a \ carrier R" "b \ carrier R" shows "(PIdl a) <#> (PIdl b) = PIdl (a \ b)" proof - diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Algebra/Multiplicative_Group.thy --- a/src/HOL/Algebra/Multiplicative_Group.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Algebra/Multiplicative_Group.thy Sun Mar 10 23:23:03 2019 +0100 @@ -425,8 +425,7 @@ thus "?L \ ?R" by auto qed -(* Next three lemmas contributed by Paulo Emílio de Vilhena*) -lemma generate_pow_on_finite_carrier: +lemma generate_pow_on_finite_carrier: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "finite (carrier G)" and "a \ carrier G" shows "generate G { a } = { a [^] k | k. k \ (UNIV :: nat set) }" proof @@ -469,7 +468,7 @@ qed qed -lemma generate_pow_card: +lemma generate_pow_card: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "finite (carrier G)" and "a \ carrier G" shows "ord a = card (generate G { a })" proof - @@ -481,7 +480,7 @@ (* This lemma was a suggestion of generalization given by Jeremy Avigad at the end of the theory FiniteProduct. *) -corollary power_order_eq_one_group_version: +corollary power_order_eq_one_group_version: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "finite (carrier G)" and "a \ carrier G" shows "a [^] (order G) = \" proof - diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Algebra/Ring.thy --- a/src/HOL/Algebra/Ring.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Algebra/Ring.thy Sun Mar 10 23:23:03 2019 +0100 @@ -532,18 +532,16 @@ case (insert x F) then show ?case by (simp add: Pi_def r_distr) qed -(* ************************************************************************** *) -(* Contributed by Paulo E. de Vilhena. *) text \A quick detour\ -lemma add_pow_int_ge: "(k :: int) \ 0 \ [ k ] \\<^bsub>R\<^esub> a = [ nat k ] \\<^bsub>R\<^esub> a" +lemma add_pow_int_ge: "(k :: int) \ 0 \ [ k ] \\<^bsub>R\<^esub> a = [ nat k ] \\<^bsub>R\<^esub> a" \<^marker>\contributor \Paulo Emílio de Vilhena\\ by (simp add: add_pow_def int_pow_def nat_pow_def) -lemma add_pow_int_lt: "(k :: int) < 0 \ [ k ] \\<^bsub>R\<^esub> a = \\<^bsub>R\<^esub> ([ nat (- k) ] \\<^bsub>R\<^esub> a)" +lemma add_pow_int_lt: "(k :: int) < 0 \ [ k ] \\<^bsub>R\<^esub> a = \\<^bsub>R\<^esub> ([ nat (- k) ] \\<^bsub>R\<^esub> a)" \<^marker>\contributor \Paulo Emílio de Vilhena\\ by (simp add: int_pow_def nat_pow_def a_inv_def add_pow_def) -corollary (in semiring) add_pow_ldistr: +corollary (in semiring) add_pow_ldistr: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "a \ carrier R" "b \ carrier R" shows "([(k :: nat)] \ a) \ b = [k] \ (a \ b)" proof - @@ -556,7 +554,7 @@ finally show ?thesis . qed -corollary (in semiring) add_pow_rdistr: +corollary (in semiring) add_pow_rdistr: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "a \ carrier R" "b \ carrier R" shows "a \ ([(k :: nat)] \ b) = [k] \ (a \ b)" proof - @@ -570,7 +568,7 @@ qed (* For integers, we need the uniqueness of the additive inverse *) -lemma (in ring) add_pow_ldistr_int: +lemma (in ring) add_pow_ldistr_int: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "a \ carrier R" "b \ carrier R" shows "([(k :: int)] \ a) \ b = [k] \ (a \ b)" proof (cases "k \ 0") @@ -582,7 +580,7 @@ add_pow_ldistr[OF assms, of "nat (- k)"] assms l_minus by auto qed -lemma (in ring) add_pow_rdistr_int: +lemma (in ring) add_pow_rdistr_int: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "a \ carrier R" "b \ carrier R" shows "a \ ([(k :: int)] \ b) = [k] \ (a \ b)" proof (cases "k \ 0") @@ -801,9 +799,7 @@ lemma id_ring_hom [simp]: "id \ ring_hom R R" by (auto intro!: ring_hom_memI) -(* Next lemma contributed by Paulo Emílio de Vilhena. *) - -lemma ring_hom_trans: +lemma ring_hom_trans: \<^marker>\contributor \Paulo Emílio de Vilhena\\ "\ f \ ring_hom R S; g \ ring_hom S T \ \ g \ f \ ring_hom R T" by (rule ring_hom_memI) (auto simp add: ring_hom_closed ring_hom_mult ring_hom_add ring_hom_one) diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Algebra/RingHom.thy --- a/src/HOL/Algebra/RingHom.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Algebra/RingHom.thy Sun Mar 10 23:23:03 2019 +0100 @@ -181,8 +181,7 @@ by (induct n) (auto) -(*contributed by Paulo Emílio de Vilhena*) -lemma (in ring_hom_ring) inj_on_domain: +lemma (in ring_hom_ring) inj_on_domain: \<^marker>\contributor \Paulo Emílio de Vilhena\\ assumes "inj_on h (carrier R)" shows "domain S \ domain R" proof - diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Library/Multiset.thy --- a/src/HOL/Library/Multiset.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Library/Multiset.thy Sun Mar 10 23:23:03 2019 +0100 @@ -2099,8 +2099,7 @@ shows "mset_set A = mset_set B \ A = B" using assms by (fastforce dest: finite_set_mset_mset_set) -(* Contributed by Lukas Bulwahn *) -lemma image_mset_mset_set: +lemma image_mset_mset_set: \<^marker>\contributor \Lukas Bulwahn\\ assumes "inj_on f A" shows "image_mset f (mset_set A) = mset_set (f ` A)" proof cases diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Library/Permutations.thy --- a/src/HOL/Library/Permutations.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Library/Permutations.thy Sun Mar 10 23:23:03 2019 +0100 @@ -112,8 +112,7 @@ lemma permutes_superset: "p permutes S \ (\x \ S - T. p x = x) \ p permutes T" by (simp add: Ball_def permutes_def) metis -(* Next three lemmas contributed by Lukas Bulwahn *) -lemma permutes_bij_inv_into: +lemma permutes_bij_inv_into: \<^marker>\contributor \Lukas Bulwahn\\ fixes A :: "'a set" and B :: "'b set" assumes "p permutes A" @@ -132,12 +131,12 @@ then show "(if x \ B then f (p (inv_into A f x)) else x) = x" by auto qed -lemma permutes_image_mset: +lemma permutes_image_mset: \<^marker>\contributor \Lukas Bulwahn\\ assumes "p permutes A" shows "image_mset p (mset_set A) = mset_set A" using assms by (metis image_mset_mset_set bij_betw_imp_inj_on permutes_imp_bij permutes_image) -lemma permutes_implies_image_mset_eq: +lemma permutes_implies_image_mset_eq: \<^marker>\contributor \Lukas Bulwahn\\ assumes "p permutes A" "\x. x \ A \ f x = f' (p x)" shows "image_mset f' (mset_set A) = image_mset f (mset_set A)" proof - diff -r 2eade8651b93 -r 6b03a8cf092d src/HOL/Library/Product_Order.thy --- a/src/HOL/Library/Product_Order.thy Sun Mar 10 22:38:00 2019 +0100 +++ b/src/HOL/Library/Product_Order.thy Sun Mar 10 23:23:03 2019 +0100 @@ -219,20 +219,18 @@ text \Alternative formulations for set infima and suprema over the product of two complete lattices:\ -lemma INF_prod_alt_def: +lemma INF_prod_alt_def: \<^marker>\contributor \Alessandro Coglio\\ "Inf (f ` A) = (Inf ((fst \ f) ` A), Inf ((snd \ f) ` A))" by (simp add: Inf_prod_def image_image) -lemma SUP_prod_alt_def: +lemma SUP_prod_alt_def: \<^marker>\contributor \Alessandro Coglio\\ "Sup (f ` A) = (Sup ((fst \ f) ` A), Sup((snd \ f) ` A))" by (simp add: Sup_prod_def image_image) subsection \Complete distributive lattices\ -(* Contribution: Alessandro Coglio *) - -instance prod :: (complete_distrib_lattice, complete_distrib_lattice) complete_distrib_lattice +instance prod :: (complete_distrib_lattice, complete_distrib_lattice) complete_distrib_lattice \<^marker>\contributor \Alessandro Coglio\\ proof fix A::"('a\'b) set set" show "Inf (Sup ` A) \ Sup (Inf ` {f ` A |f. \Y\A. f Y \ Y})"