# HG changeset patch # User paulson # Date 1529333763 -3600 # Node ID 3d8241f4198b9abee5d009e882faa532dcd78913 # Parent e699ca8e22b78c12686137c9e830a3540018a929 corrections to markup diff -r e699ca8e22b7 -r 3d8241f4198b CONTRIBUTORS --- a/CONTRIBUTORS Mon Jun 18 14:22:26 2018 +0100 +++ b/CONTRIBUTORS Mon Jun 18 15:56:03 2018 +0100 @@ -6,6 +6,9 @@ Contributions to Isabelle2018 ----------------------------- +* June 2018: Martin Baillon and Paulo Emílio de Vilhena + A variety of contributions to HOL-Algebra. + * May 2018: Manuel Eberl Landau symbols and asymptotic equivalence (moved from the AFP). diff -r e699ca8e22b7 -r 3d8241f4198b NEWS --- a/NEWS Mon Jun 18 14:22:26 2018 +0100 +++ b/NEWS Mon Jun 18 15:56:03 2018 +0100 @@ -375,6 +375,10 @@ * Session HOL-Algebra: renamed (^) to [^] to avoid conflict with new infix/prefix notation. +* Session HOL-Algebra: Revamped with much new material. +The set of isomorphisms between two groups is now denoted iso rather than iso_set. +INCOMPATIBILITY. + * Session HOL-Analysis: infinite products, Moebius functions, the Riemann mapping theorem, the Vitali covering theorem, change-of-variables results for integration and measures. diff -r e699ca8e22b7 -r 3d8241f4198b src/HOL/Algebra/Zassenhaus.thy --- a/src/HOL/Algebra/Zassenhaus.thy Mon Jun 18 14:22:26 2018 +0100 +++ b/src/HOL/Algebra/Zassenhaus.thy Mon Jun 18 15:56:03 2018 +0100 @@ -1,12 +1,18 @@ +(* Title: HOL/Algebra/Zassenhaus.thy + Author: Martin Baillon +*) + +section \The Zassenhaus Lemma\ + theory Zassenhaus imports Coset Group_Action begin - -subsubsection \Lemmas about normalizer\ +text \Proves the second isomorphism theorem and the Zassenhaus lemma.\ +subsection \Lemmas about normalizer\ -lemma (in group) subgroup_in_normalizer: +lemma (in group) subgroup_in_normalizer: assumes "subgroup H G" shows "normal H (G\carrier:= (normalizer G H)\)" proof(intro group.normal_invI) @@ -19,7 +25,7 @@ have "x <# H = H" by (metis \x \ H\ assms group.lcos_mult_one is_group l_repr_independence one_closed subgroup.subset) - moreover have "H #> inv x = H" + moreover have "H #> inv x = H" by (simp add: xH assms is_group subgroup.rcos_const subgroup.m_inv_closed) ultimately have "x <# H #> (inv x) = H" by simp thus " x \ stabilizer G (\g. \H\{H. H \ carrier G}. g <# H #> inv g) H" @@ -58,7 +64,7 @@ lemma (in group) normal_imp_subgroup_normalizer: assumes "subgroup H G" and "N \ (G\carrier := H\)" - shows "subgroup H (G\carrier := normalizer G N\)" + shows "subgroup H (G\carrier := normalizer G N\)" proof- have N_carrierG : "N \ carrier(G)" using assms normal_imp_subgroup subgroup.subset @@ -72,7 +78,7 @@ hence "x <# N #> inv x =(N #> x) #> inv x" by simp also have "... = N #> \" - using assms r_inv xcarrierG coset_mult_assoc[OF N_carrierG] by simp + using assms r_inv xcarrierG coset_mult_assoc[OF N_carrierG] by simp finally have "x <# N #> inv x = N" by (simp add: N_carrierG) thus "x \ {g \ carrier G. (\H\{H. H \ carrier G}. g <# H #> inv g) N = N}" using xcarrierG by (simp add : N_carrierG) @@ -103,10 +109,10 @@ using set_mult_def B1b by (metis (no_types, lifting) UN_E singletonD) have "N #> h1 = h1 <# N" using normalI B2 assms normal.coset_eq subgroup.subset by blast - hence "h1\n2 \ N #> h1" + hence "h1\n2 \ N #> h1" using B2 B3 assms l_coset_def by fastforce - from this obtain y2 where y2_def:"y2 \ N" and y2_prop:"y2\h1 = h1\n2" - using singletonD by (metis (no_types, lifting) UN_E r_coset_def) + from this obtain y2 where y2_def:"y2 \ N" and y2_prop:"y2\h1 = h1\n2" + using singletonD by (metis (no_types, lifting) UN_E r_coset_def) have " x\y = n1 \ y2 \ h1 \ h2" using y2_def B2 B3 by (smt assms y2_prop m_assoc m_closed normal_imp_subgroup subgroup.mem_carrier) moreover have B4 :"n1 \ y2 \N" @@ -129,10 +135,10 @@ hence "... \h \ N" using assms C2 by (meson normal.inv_op_closed1 normal_def subgroup.m_inv_closed subgroup.mem_carrier) - hence C4:"(inv h \ inv n \ h) \ inv h \ (N<#>H)" + hence C4:"(inv h \ inv n \ h) \ inv h \ (N<#>H)" using C2 assms subgroup.m_inv_closed[of H G h] unfolding set_mult_def by auto have "inv h \ inv n \ h \ inv h = inv h \ inv n" - using subgroup.subset[OF assms(2)] + using subgroup.subset[OF assms(2)] by (metis A C1 C2 C3 inv_closed inv_solve_right m_closed subsetCE) thus "inv(x)\N<#>H" using C4 C2 C3 by simp qed @@ -149,7 +155,7 @@ thus "(N <#> H \ carrier G \ (\x y. x \ N <#> H \ y \ N <#> H \ x \ y \ N <#> H)) \ \ \ N <#> H \ (\x. x \ N <#> H \ inv x \ N <#> H)" using A B C D assms by blast qed - + lemma (in group) mult_norm_sub_in_sub: assumes "normal N (G\carrier:=K\)" @@ -201,7 +207,7 @@ proposition (in group) weak_snd_iso_thme: - assumes "subgroup H G" + assumes "subgroup H G" and "N\G" shows "(G\carrier := N<#>H\ Mod N \ G\carrier:=H\ Mod (N\H))" proof- @@ -325,8 +331,8 @@ carrier := N <#>\<^bsub>G\carrier := normalizer G N\\<^esub> H\ Mod N \ G\carrier := normalizer G N, carrier := H\ Mod N \ H = (G\carrier:= N<#>H\ Mod N) \ - G\carrier := normalizer G N, carrier := H\ Mod N \ H" - using subgroup_set_mult_equality[OF normalizer_imp_subgroup[OF subgroup.subset[OF assms(2)]], of N H] + G\carrier := normalizer G N, carrier := H\ Mod N \ H" + using subgroup_set_mult_equality[OF normalizer_imp_subgroup[OF subgroup.subset[OF assms(2)]], of N H] subgroup.subset[OF assms(3)] subgroup.subset[OF normal_imp_subgroup[OF subgroup_in_normalizer[OF assms(2)]]] by simp @@ -343,7 +349,7 @@ moreover have "H\N = N\H" using assms by auto ultimately show "(G\carrier:= N<#>H\ Mod N) \ G\carrier := H\ Mod H \ N" by auto qed - + corollary (in group) snd_iso_thme_recip : assumes "subgroup H G" @@ -358,9 +364,9 @@ lemma (in group) distinc: - assumes "subgroup H G" - and "H1\G\carrier := H\" - and "subgroup K G" + assumes "subgroup H G" + and "H1\G\carrier := H\" + and "subgroup K G" and "K1\G\carrier:=K\" shows "subgroup (H\K) (G\carrier:=(normalizer G (H1<#>(H\K1))) \)" proof (intro subgroup_incl[OF subgroups_Inter_pair[OF assms(1) assms(3)]]) @@ -401,7 +407,7 @@ by auto also have "... = {x} <#> (H1 <#> H \ K1) <#> {inv x}" using allG xG set_mult_assoc setmult_subset_G by (metis inf.coboundedI2) - finally have "H1 <#> H \ K1 = x <# (H1 <#> H \ K1) #> inv x" + finally have "H1 <#> H \ K1 = x <# (H1 <#> H \ K1) #> inv x" using xG setmult_subset_G allG by (simp add: l_coset_eq_set_mult r_coset_eq_set_mult) thus "x \ {g \ carrier G. (\H\{H. H \ carrier G}. g <# H #> inv g) (H1 <#> H \ K1) = H1 <#> H \ K1}" @@ -411,9 +417,9 @@ qed lemma (in group) preliminary1: - assumes "subgroup H G" - and "H1\G\carrier := H\" - and "subgroup K G" + assumes "subgroup H G" + and "H1\G\carrier := H\" + and "subgroup K G" and "K1\G\carrier:=K\" shows " (H\K) \ (H1<#>(H\K1)) = (H1\K)<#>(H\K1)" proof @@ -452,15 +458,15 @@ qed lemma (in group) preliminary2: - assumes "subgroup H G" + assumes "subgroup H G" and "H1\G\carrier := H\" - and "subgroup K G" + and "subgroup K G" and "K1\G\carrier:=K\" shows "(H1<#>(H\K1)) \ G\carrier:=(H1<#>(H\K))\" proof- have all_inclG : "H \ carrier G" "H1 \ carrier G" "K \ carrier G" "K1 \ carrier G" using assms subgroup.subset normal_imp_subgroup incl_subgroup apply blast+. - have subH1:"subgroup (H1 <#> H \ K) (G\carrier := H\)" + have subH1:"subgroup (H1 <#> H \ K) (G\carrier := H\)" using mult_norm_sub_in_sub[OF assms(2)subgroup_incl[OF subgroups_Inter_pair[OF assms(1)assms(3)] assms(1)]] assms by auto have "Group.group (G\carrier:=(H1<#>(H\K))\)" @@ -541,7 +547,7 @@ finally have "H1 <#> H \ K1 #>\<^bsub>G\carrier := H1 <#> H \ K\\<^esub> x =H1 <#> H \ K1 #> hk" using commut_normal_subgroup[OF assms(1)assms(2)subgroup_incl[OF subgroups_Inter_pair[OF assms(1)incl_subgroup[OF assms(3)normal_imp_subgroup[OF assms(4)]]]assms(1)]] by simp - thus " H1 <#> H \ K1 #>\<^bsub>G\carrier := H1 <#> H \ K\\<^esub> x = + thus " H1 <#> H \ K1 #>\<^bsub>G\carrier := H1 <#> H \ K\\<^esub> x = x <#\<^bsub>G\carrier := H1 <#> H \ K\\<^esub> (H1 <#> H \ K1)" using eq1 by simp qed ultimately show "H1 <#> H \ K1 \ G\carrier := H1 <#> H \ K\" @@ -550,9 +556,9 @@ proposition (in group) Zassenhaus_1: - assumes "subgroup H G" - and "H1\G\carrier := H\" - and "subgroup K G" + assumes "subgroup H G" + and "H1\G\carrier := H\" + and "subgroup K G" and "K1\G\carrier:=K\" shows "(G\carrier:= H1 <#> (H\K)\ Mod (H1<#>H\K1)) \ (G\carrier:= (H\K)\ Mod ((H1\K)<#>(H\K1)))" proof- @@ -572,7 +578,7 @@ also have "... = ((H\K)<#>H1) <#>(H\K1)" using set_mult_assoc[where ?M = "H\K"] K1_incl_G H1_incl_G assms by (simp add: inf.coboundedI2 subgroup.subset) - also have "... = (H1<#>(H\K))<#>(H\K1)" + also have "... = (H1<#>(H\K))<#>(H\K1)" using commut_normal_subgroup assms subgroup_incl subgroups_Inter_pair by auto also have "... = H1 <#> ((H\K)<#>(H\K1))" using set_mult_assoc K1_incl_G H1_incl_G assms @@ -585,25 +591,25 @@ incl_subgroup[OF assms(3) normal_imp_subgroup]] subgroups_Inter_pair] assms normal_imp_subgroup by (metis inf_commute normal_inter) qed - hence " H1 <#> ((H\K)<#>(H\K1)) = H1 <#> ((H\K))" + hence " H1 <#> ((H\K)<#>(H\K1)) = H1 <#> ((H\K))" by simp thus "N <#> N1 = H1 <#> H \ K" by (simp add: calculation) qed - have "N\N1 = (H1\K)<#>(H\K1)" - using preliminary1 assms N_def N1_def by simp + have "N\N1 = (H1\K)<#>(H\K1)" + using preliminary1 assms N_def N1_def by simp thus "(G\carrier:= H1 <#> (H\K)\ Mod N1) \ (G\carrier:= N\ Mod ((H1\K)<#>(H\K1)))" using H_simp Hp by auto qed theorem (in group) Zassenhaus: - assumes "subgroup H G" - and "H1\G\carrier := H\" - and "subgroup K G" + assumes "subgroup H G" + and "H1\G\carrier := H\" + and "subgroup K G" and "K1\G\carrier:=K\" - shows "(G\carrier:= H1 <#> (H\K)\ Mod (H1<#>(H\K1))) \ + shows "(G\carrier:= H1 <#> (H\K)\ Mod (H1<#>(H\K1))) \ (G\carrier:= K1 <#> (H\K)\ Mod (K1<#>(K\H1)))" proof- define Gmod1 Gmod2 Gmod3 Gmod4 @@ -620,8 +626,8 @@ show "K1 \ H \ G\carrier := H \ K\" using normal_inter[OF assms(3)assms(1)assms(4)] by (simp add: inf_commute) next - show "subgroup (K \ H1) (G\carrier := H \ K\)" - using subgroup_incl by (simp add: assms inf_commute normal_imp_subgroup normal_inter) + show "subgroup (K \ H1) (G\carrier := H \ K\)" + using subgroup_incl by (simp add: assms inf_commute normal_imp_subgroup normal_inter) qed hence "Gmod3 = Gmod4" using Hp Gmod4_def by simp hence "Gmod1 \ Gmod2" diff -r e699ca8e22b7 -r 3d8241f4198b src/HOL/Analysis/Cross3.thy --- a/src/HOL/Analysis/Cross3.thy Mon Jun 18 14:22:26 2018 +0100 +++ b/src/HOL/Analysis/Cross3.thy Mon Jun 18 15:56:03 2018 +0100 @@ -1,16 +1,22 @@ +(* Title: HOL/Analysis/Cross3.thy + Author: L C Paulson, University of Cambridge + +Ported from HOL Light +*) + +section\Vector Cross Products in 3 Dimensions.\ + theory "Cross3" imports Determinants begin -subsection\Vector Cross products in real^3. \ - definition cross3 :: "[real^3, real^3] \ real^3" (infixr "\" 80) where "a \ b \ vector [a$2 * b$3 - a$3 * b$2, a$3 * b$1 - a$1 * b$3, a$1 * b$2 - a$2 * b$1]" -subsubsection\ Basic lemmas.\ +subsection\ Basic lemmas.\ lemmas cross3_simps = cross3_def inner_vec_def sum_3 det_3 vec_eq_iff vector_def algebra_simps