| author | wenzelm | 
| Fri, 24 Nov 2023 20:58:12 +0100 | |
| changeset 79053 | badb3da19ac6 | 
| parent 77407 | 02af8a1b97f6 | 
| child 80067 | c40bdfc84640 | 
| permissions | -rw-r--r-- | 
| 14706 | 1 | (* Title: HOL/Algebra/Coset.thy | 
| 68582 | 2 | Authors: Florian Kammueller, L C Paulson, Stephan Hohe | 
| 3 | ||
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 4 | With additional contributions from Martin Baillon and Paulo Emílio de Vilhena. | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 5 | *) | 
| 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 6 | |
| 35849 | 7 | theory Coset | 
| 8 | imports Group | |
| 9 | begin | |
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 10 | |
| 61382 | 11 | section \<open>Cosets and Quotient Groups\<close> | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 12 | |
| 35847 | 13 | definition | 
| 14963 | 14 | r_coset :: "[_, 'a set, 'a] \<Rightarrow> 'a set" (infixl "#>\<index>" 60) | 
| 35848 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 15 |   where "H #>\<^bsub>G\<^esub> a = (\<Union>h\<in>H. {h \<otimes>\<^bsub>G\<^esub> a})"
 | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 16 | |
| 35847 | 17 | definition | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 18 | l_coset :: "[_, 'a, 'a set] \<Rightarrow> 'a set" (infixl "<#\<index>" 60) | 
| 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 19 |   where "a <#\<^bsub>G\<^esub> H = (\<Union>h\<in>H. {a \<otimes>\<^bsub>G\<^esub> h})"
 | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 20 | |
| 35847 | 21 | definition | 
| 14963 | 22 |   RCOSETS  :: "[_, 'a set] \<Rightarrow> ('a set)set"   ("rcosets\<index> _" [81] 80)
 | 
| 35848 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 23 |   where "rcosets\<^bsub>G\<^esub> H = (\<Union>a\<in>carrier G. {H #>\<^bsub>G\<^esub> a})"
 | 
| 14963 | 24 | |
| 35847 | 25 | definition | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 26 | set_mult :: "[_, 'a set ,'a set] \<Rightarrow> 'a set" (infixl "<#>\<index>" 60) | 
| 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 27 |   where "H <#>\<^bsub>G\<^esub> K = (\<Union>h\<in>H. \<Union>k\<in>K. {h \<otimes>\<^bsub>G\<^esub> k})"
 | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 28 | |
| 35847 | 29 | definition | 
| 14963 | 30 |   SET_INV :: "[_,'a set] \<Rightarrow> 'a set"  ("set'_inv\<index> _" [81] 80)
 | 
| 35848 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 31 |   where "set_inv\<^bsub>G\<^esub> H = (\<Union>h\<in>H. {inv\<^bsub>G\<^esub> h})"
 | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 32 | |
| 14963 | 33 | |
| 34 | locale normal = subgroup + group + | |
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 35 | assumes coset_eq: "(\<forall>x \<in> carrier G. H #> x = x <# H)" | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 36 | |
| 19380 | 37 | abbreviation | 
| 21404 
eb85850d3eb7
more robust syntax for definition/abbreviation/notation;
 wenzelm parents: 
20318diff
changeset | 38 |   normal_rel :: "['a set, ('a, 'b) monoid_scheme] \<Rightarrow> bool"  (infixl "\<lhd>" 60) where
 | 
| 19380 | 39 | "H \<lhd> G \<equiv> normal H G" | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 40 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 41 | lemma (in comm_group) subgroup_imp_normal: "subgroup A G \<Longrightarrow> A \<lhd> G" | 
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 42 | by (simp add: normal_def normal_axioms_def l_coset_def r_coset_def m_comm subgroup.mem_carrier) | 
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 43 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 44 | lemma l_coset_eq_set_mult: \<^marker>\<open>contributor \<open>Martin Baillon\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 45 | fixes G (structure) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 46 |   shows "x <# H = {x} <#> H"
 | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 47 | unfolding l_coset_def set_mult_def by simp | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 48 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 49 | lemma r_coset_eq_set_mult: \<^marker>\<open>contributor \<open>Martin Baillon\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 50 | fixes G (structure) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 51 |   shows "H #> x = H <#> {x}"
 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 52 | unfolding r_coset_def set_mult_def by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 53 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 54 | lemma (in subgroup) rcosets_non_empty: \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 55 | assumes "R \<in> rcosets H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 56 |   shows "R \<noteq> {}"
 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 57 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 58 | obtain g where "g \<in> carrier G" "R = H #> g" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 59 | using assms unfolding RCOSETS_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 60 | hence "\<one> \<otimes> g \<in> R" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 61 | using one_closed unfolding r_coset_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 62 | thus ?thesis by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 63 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 64 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 65 | lemma (in group) diff_neutralizes: \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 66 | assumes "subgroup H G" "R \<in> rcosets H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 67 | shows "\<And>r1 r2. \<lbrakk> r1 \<in> R; r2 \<in> R \<rbrakk> \<Longrightarrow> r1 \<otimes> (inv r2) \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 68 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 69 | fix r1 r2 assume r1: "r1 \<in> R" and r2: "r2 \<in> R" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 70 | obtain g where g: "g \<in> carrier G" "R = H #> g" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 71 | using assms unfolding RCOSETS_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 72 | then obtain h1 h2 where h1: "h1 \<in> H" "r1 = h1 \<otimes> g" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 73 | and h2: "h2 \<in> H" "r2 = h2 \<otimes> g" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 74 | using r1 r2 unfolding r_coset_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 75 | hence "r1 \<otimes> (inv r2) = (h1 \<otimes> g) \<otimes> ((inv g) \<otimes> (inv h2))" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 76 | using inv_mult_group is_group assms(1) g(1) subgroup.mem_carrier by fastforce | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 77 | also have " ... = (h1 \<otimes> (g \<otimes> inv g) \<otimes> inv h2)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 78 | using h1 h2 assms(1) g(1) inv_closed m_closed monoid.m_assoc | 
| 68604 | 79 | monoid_axioms subgroup.mem_carrier | 
| 80 | proof - | |
| 81 | have "h1 \<in> carrier G" | |
| 82 | by (meson subgroup.mem_carrier assms(1) h1(1)) | |
| 83 | moreover have "h2 \<in> carrier G" | |
| 84 | by (meson subgroup.mem_carrier assms(1) h2(1)) | |
| 85 | ultimately show ?thesis | |
| 86 | using g(1) inv_closed m_assoc m_closed by presburger | |
| 87 | qed | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 88 | finally have "r1 \<otimes> inv r2 = h1 \<otimes> inv h2" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 89 | using assms(1) g(1) h1(1) subgroup.mem_carrier by fastforce | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 90 | thus "r1 \<otimes> inv r2 \<in> H" by (metis assms(1) h1(1) h2(1) subgroup_def) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 91 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 92 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 93 | lemma mono_set_mult: "\<lbrakk> H \<subseteq> H'; K \<subseteq> K' \<rbrakk> \<Longrightarrow> H <#>\<^bsub>G\<^esub> K \<subseteq> H' <#>\<^bsub>G\<^esub> K'" \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 68517 | 94 | unfolding set_mult_def by (simp add: UN_mono) | 
| 95 | ||
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 96 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 97 | subsection \<open>Stable Operations for Subgroups\<close> | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 98 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 99 | lemma set_mult_consistent [simp]: \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 68517 | 100 | "N <#>\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> K = N <#>\<^bsub>G\<^esub> K" | 
| 101 | unfolding set_mult_def by simp | |
| 102 | ||
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 103 | lemma r_coset_consistent [simp]: \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 68517 | 104 | "I #>\<^bsub>G \<lparr> carrier := H \<rparr>\<^esub> h = I #>\<^bsub>G\<^esub> h" | 
| 105 | unfolding r_coset_def by simp | |
| 106 | ||
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 107 | lemma l_coset_consistent [simp]: \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 68517 | 108 | "h <#\<^bsub>G \<lparr> carrier := H \<rparr>\<^esub> I = h <#\<^bsub>G\<^esub> I" | 
| 109 | unfolding l_coset_def by simp | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 110 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 111 | |
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 112 | subsection \<open>Basic Properties of set multiplication\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 113 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 114 | lemma (in group) setmult_subset_G: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 115 | assumes "H \<subseteq> carrier G" "K \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 116 | shows "H <#> K \<subseteq> carrier G" using assms | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 117 | by (auto simp add: set_mult_def subsetD) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 118 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 119 | lemma (in monoid) set_mult_closed: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 120 | assumes "H \<subseteq> carrier G" "K \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 121 | shows "H <#> K \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 122 | using assms by (auto simp add: set_mult_def subsetD) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 123 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 124 | lemma (in group) set_mult_assoc: \<^marker>\<open>contributor \<open>Martin Baillon\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 125 | assumes "M \<subseteq> carrier G" "H \<subseteq> carrier G" "K \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 126 | shows "(M <#> H) <#> K = M <#> (H <#> K)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 127 | proof | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 128 | show "(M <#> H) <#> K \<subseteq> M <#> (H <#> K)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 129 | proof | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 130 | fix x assume "x \<in> (M <#> H) <#> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 131 | then obtain m h k where x: "m \<in> M" "h \<in> H" "k \<in> K" "x = (m \<otimes> h) \<otimes> k" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 132 | unfolding set_mult_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 133 | hence "x = m \<otimes> (h \<otimes> k)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 134 | using assms m_assoc by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 135 | thus "x \<in> M <#> (H <#> K)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 136 | unfolding set_mult_def using x by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 137 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 138 | next | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 139 | show "M <#> (H <#> K) \<subseteq> (M <#> H) <#> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 140 | proof | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 141 | fix x assume "x \<in> M <#> (H <#> K)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 142 | then obtain m h k where x: "m \<in> M" "h \<in> H" "k \<in> K" "x = m \<otimes> (h \<otimes> k)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 143 | unfolding set_mult_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 144 | hence "x = (m \<otimes> h) \<otimes> k" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 145 | using assms m_assoc rev_subsetD by metis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 146 | thus "x \<in> (M <#> H) <#> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 147 | unfolding set_mult_def using x by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 148 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 149 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 150 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 151 | |
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 152 | |
| 61382 | 153 | subsection \<open>Basic Properties of Cosets\<close> | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 154 | |
| 14747 | 155 | lemma (in group) coset_mult_assoc: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 156 | assumes "M \<subseteq> carrier G" "g \<in> carrier G" "h \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 157 | shows "(M #> g) #> h = M #> (g \<otimes> h)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 158 | using assms by (force simp add: r_coset_def m_assoc) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 159 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 160 | lemma (in group) coset_assoc: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 161 | assumes "x \<in> carrier G" "y \<in> carrier G" "H \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 162 | shows "x <# (H #> y) = (x <# H) #> y" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 163 |   using set_mult_assoc[of "{x}" H "{y}"]
 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 164 | by (simp add: l_coset_eq_set_mult r_coset_eq_set_mult assms) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 165 | |
| 14747 | 166 | lemma (in group) coset_mult_one [simp]: "M \<subseteq> carrier G ==> M #> \<one> = M" | 
| 167 | by (force simp add: r_coset_def) | |
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 168 | |
| 14747 | 169 | lemma (in group) coset_mult_inv1: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 170 | assumes "M #> (x \<otimes> (inv y)) = M" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 171 | and "x \<in> carrier G" "y \<in> carrier G" "M \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 172 | shows "M #> x = M #> y" using assms | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 173 | by (metis coset_mult_assoc group.inv_solve_right is_group subgroup_def subgroup_self) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 174 | |
| 14747 | 175 | lemma (in group) coset_mult_inv2: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 176 | assumes "M #> x = M #> y" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 177 | and "x \<in> carrier G" "y \<in> carrier G" "M \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 178 | shows "M #> (x \<otimes> (inv y)) = M " using assms | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 179 | by (metis group.coset_mult_assoc group.coset_mult_one inv_closed is_group r_inv) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 180 | |
| 14747 | 181 | lemma (in group) coset_join1: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 182 | assumes "H #> x = H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 183 | and "x \<in> carrier G" "subgroup H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 184 | shows "x \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 185 | using assms r_coset_def l_one subgroup.one_closed sym by fastforce | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 186 | |
| 14747 | 187 | lemma (in group) solve_equation: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 188 | assumes "subgroup H G" "x \<in> H" "y \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 189 | shows "\<exists>h \<in> H. y = h \<otimes> x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 190 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 191 | have "y = (y \<otimes> (inv x)) \<otimes> x" using assms | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 192 | by (simp add: m_assoc subgroup.mem_carrier) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 193 | moreover have "y \<otimes> (inv x) \<in> H" using assms | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 194 | by (simp add: subgroup_def) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 195 | ultimately show ?thesis by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 196 | qed | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 197 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 198 | lemma (in group_hom) inj_on_one_iff: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 199 | "inj_on h (carrier G) \<longleftrightarrow> (\<forall>x. x \<in> carrier G \<longrightarrow> h x = one H \<longrightarrow> x = one G)" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 200 | using G.solve_equation G.subgroup_self by (force simp: inj_on_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 201 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 202 | lemma inj_on_one_iff': | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 203 | "\<lbrakk>h \<in> hom G H; group G; group H\<rbrakk> \<Longrightarrow> inj_on h (carrier G) \<longleftrightarrow> (\<forall>x. x \<in> carrier G \<longrightarrow> h x = one H \<longrightarrow> x = one G)" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 204 | using group_hom.inj_on_one_iff group_hom.intro group_hom_axioms.intro by blast | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 205 | |
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 206 | lemma mon_iff_hom_one: | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 207 | "\<lbrakk>group G; group H\<rbrakk> \<Longrightarrow> f \<in> mon G H \<longleftrightarrow> f \<in> hom G H \<and> (\<forall>x. x \<in> carrier G \<and> f x = \<one>\<^bsub>H\<^esub> \<longrightarrow> x = \<one>\<^bsub>G\<^esub>)" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 208 | by (auto simp: mon_def inj_on_one_iff') | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 209 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 210 | lemma (in group_hom) iso_iff: "h \<in> iso G H \<longleftrightarrow> carrier H \<subseteq> h ` carrier G \<and> (\<forall>x\<in>carrier G. h x = \<one>\<^bsub>H\<^esub> \<longrightarrow> x = \<one>)" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 211 | by (auto simp: iso_def bij_betw_def inj_on_one_iff) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 212 | |
| 14963 | 213 | lemma (in group) repr_independence: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 214 | assumes "y \<in> H #> x" "x \<in> carrier G" "subgroup H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 215 | shows "H #> x = H #> y" using assms | 
| 14963 | 216 | by (auto simp add: r_coset_def m_assoc [symmetric] | 
| 217 | subgroup.subset [THEN subsetD] | |
| 218 | subgroup.m_closed solve_equation) | |
| 219 | ||
| 14747 | 220 | lemma (in group) coset_join2: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 221 | assumes "x \<in> carrier G" "subgroup H G" "x \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 222 | shows "H #> x = H" using assms | 
| 69597 | 223 | \<comment> \<open>Alternative proof is to put \<^term>\<open>x=\<one>\<close> in \<open>repr_independence\<close>.\<close> | 
| 14963 | 224 | by (force simp add: subgroup.m_closed r_coset_def solve_equation) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 225 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 226 | lemma (in group) coset_join3: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 227 | assumes "x \<in> carrier G" "subgroup H G" "x \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 228 | shows "x <# H = H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 229 | proof | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 230 | have "\<And>h. h \<in> H \<Longrightarrow> x \<otimes> h \<in> H" using assms | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 231 | by (simp add: subgroup.m_closed) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 232 | thus "x <# H \<subseteq> H" unfolding l_coset_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 233 | next | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 234 | have "\<And>h. h \<in> H \<Longrightarrow> x \<otimes> ((inv x) \<otimes> h) = h" | 
| 68604 | 235 | by (metis (no_types, lifting) assms group.inv_closed group.inv_solve_left is_group | 
| 236 | monoid.m_closed monoid_axioms subgroup.mem_carrier) | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 237 | moreover have "\<And>h. h \<in> H \<Longrightarrow> (inv x) \<otimes> h \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 238 | by (simp add: assms subgroup.m_closed subgroup.m_inv_closed) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 239 | ultimately show "H \<subseteq> x <# H" unfolding l_coset_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 240 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 241 | |
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 242 | lemma (in monoid) r_coset_subset_G: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 243 | "\<lbrakk> H \<subseteq> carrier G; x \<in> carrier G \<rbrakk> \<Longrightarrow> H #> x \<subseteq> carrier G" | 
| 14747 | 244 | by (auto simp add: r_coset_def) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 245 | |
| 14747 | 246 | lemma (in group) rcosI: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 247 | "\<lbrakk> h \<in> H; H \<subseteq> carrier G; x \<in> carrier G \<rbrakk> \<Longrightarrow> h \<otimes> x \<in> H #> x" | 
| 14747 | 248 | by (auto simp add: r_coset_def) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 249 | |
| 14963 | 250 | lemma (in group) rcosetsI: | 
| 251 | "\<lbrakk>H \<subseteq> carrier G; x \<in> carrier G\<rbrakk> \<Longrightarrow> H #> x \<in> rcosets H" | |
| 252 | by (auto simp add: RCOSETS_def) | |
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 253 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 254 | lemma (in group) rcos_self: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 255 | "\<lbrakk> x \<in> carrier G; subgroup H G \<rbrakk> \<Longrightarrow> x \<in> H #> x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 256 | by (metis l_one rcosI subgroup_def) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 257 | |
| 61382 | 258 | text (in group) \<open>Opposite of @{thm [source] "repr_independence"}\<close>
 | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 259 | lemma (in group) repr_independenceD: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 260 | assumes "subgroup H G" "y \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 261 | and "H #> x = H #> y" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 262 | shows "y \<in> H #> x" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 263 | using assms by (simp add: rcos_self) | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 264 | |
| 61382 | 265 | text \<open>Elements of a right coset are in the carrier\<close> | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 266 | lemma (in subgroup) elemrcos_carrier: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 267 | assumes "group G" "a \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 268 | and "a' \<in> H #> a" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 269 | shows "a' \<in> carrier G" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 270 | by (meson assms group.is_monoid monoid.r_coset_subset_G subset subsetCE) | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 271 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 272 | lemma (in subgroup) rcos_const: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 273 | assumes "group G" "h \<in> H" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 274 | shows "H #> h = H" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 275 | using group.coset_join2[OF assms(1), of h H] | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 276 | by (simp add: assms(2) subgroup_axioms) | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 277 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 278 | lemma (in subgroup) rcos_module_imp: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 279 | assumes "group G" "x \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 280 | and "x' \<in> H #> x" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 281 | shows "(x' \<otimes> inv x) \<in> H" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 282 | proof - | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 283 | obtain h where h: "h \<in> H" "x' = h \<otimes> x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 284 | using assms(3) unfolding r_coset_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 285 | hence "x' \<otimes> inv x = h" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 286 | by (metis assms elemrcos_carrier group.inv_solve_right mem_carrier) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 287 | thus ?thesis using h by blast | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 288 | qed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 289 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 290 | lemma (in subgroup) rcos_module_rev: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 291 | assumes "group G" "x \<in> carrier G" "x' \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 292 | and "(x' \<otimes> inv x) \<in> H" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 293 | shows "x' \<in> H #> x" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 294 | proof - | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 295 | obtain h where h: "h \<in> H" "x' \<otimes> inv x = h" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 296 | using assms(4) unfolding r_coset_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 297 | hence "x' = h \<otimes> x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 298 | by (metis assms group.inv_solve_right mem_carrier) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 299 | thus ?thesis using h unfolding r_coset_def by blast | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 300 | qed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 301 | |
| 61382 | 302 | text \<open>Module property of right cosets\<close> | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 303 | lemma (in subgroup) rcos_module: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 304 | assumes "group G" "x \<in> carrier G" "x' \<in> carrier G" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 305 | shows "(x' \<in> H #> x) = (x' \<otimes> inv x \<in> H)" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 306 | using rcos_module_rev rcos_module_imp assms by blast | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 307 | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 308 | text \<open>Right cosets are subsets of the carrier.\<close> | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 309 | lemma (in subgroup) rcosets_carrier: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 310 | assumes "group G" "X \<in> rcosets H" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 311 | shows "X \<subseteq> carrier G" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 312 | using assms elemrcos_carrier singletonD | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 313 | subset_eq unfolding RCOSETS_def by force | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 314 | |
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 315 | |
| 61382 | 316 | text \<open>Multiplication of general subsets\<close> | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 317 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 318 | lemma (in comm_group) mult_subgroups: | 
| 68604 | 319 | assumes HG: "subgroup H G" and KG: "subgroup K G" | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 320 | shows "subgroup (H <#> K) G" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 321 | proof (rule subgroup.intro) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 322 | show "H <#> K \<subseteq> carrier G" | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 323 | by (simp add: setmult_subset_G assms subgroup.subset) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 324 | next | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 325 | have "\<one> \<otimes> \<one> \<in> H <#> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 326 | unfolding set_mult_def using assms subgroup.one_closed by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 327 | thus "\<one> \<in> H <#> K" by simp | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 328 | next | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 329 | show "\<And>x. x \<in> H <#> K \<Longrightarrow> inv x \<in> H <#> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 330 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 331 | fix x assume "x \<in> H <#> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 332 | then obtain h k where hk: "h \<in> H" "k \<in> K" "x = h \<otimes> k" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 333 | unfolding set_mult_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 334 | hence "inv x = (inv k) \<otimes> (inv h)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 335 | by (meson inv_mult_group assms subgroup.mem_carrier) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 336 | hence "inv x = (inv h) \<otimes> (inv k)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 337 | by (metis hk inv_mult assms subgroup.mem_carrier) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 338 | thus "inv x \<in> H <#> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 339 | unfolding set_mult_def using hk assms | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 340 | by (metis (no_types, lifting) UN_iff singletonI subgroup_def) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 341 | qed | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 342 | next | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 343 | show "\<And>x y. x \<in> H <#> K \<Longrightarrow> y \<in> H <#> K \<Longrightarrow> x \<otimes> y \<in> H <#> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 344 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 345 | fix x y assume "x \<in> H <#> K" "y \<in> H <#> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 346 | then obtain h1 k1 h2 k2 where h1k1: "h1 \<in> H" "k1 \<in> K" "x = h1 \<otimes> k1" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 347 | and h2k2: "h2 \<in> H" "k2 \<in> K" "y = h2 \<otimes> k2" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 348 | unfolding set_mult_def by blast | 
| 68604 | 349 | with KG HG have carr: "k1 \<in> carrier G" "h1 \<in> carrier G" "k2 \<in> carrier G" "h2 \<in> carrier G" | 
| 350 | by (meson subgroup.mem_carrier)+ | |
| 351 | have "x \<otimes> y = (h1 \<otimes> k1) \<otimes> (h2 \<otimes> k2)" | |
| 352 | using h1k1 h2k2 by simp | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 353 | also have " ... = h1 \<otimes> (k1 \<otimes> h2) \<otimes> k2" | 
| 68604 | 354 | by (simp add: carr comm_groupE(3) comm_group_axioms) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 355 | also have " ... = h1 \<otimes> (h2 \<otimes> k1) \<otimes> k2" | 
| 68604 | 356 | by (simp add: carr m_comm) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 357 | finally have "x \<otimes> y = (h1 \<otimes> h2) \<otimes> (k1 \<otimes> k2)" | 
| 68604 | 358 | by (simp add: carr comm_groupE(3) comm_group_axioms) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 359 | thus "x \<otimes> y \<in> H <#> K" unfolding set_mult_def | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 360 | using subgroup.m_closed[OF assms(1) h1k1(1) h2k2(1)] | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 361 | subgroup.m_closed[OF assms(2) h1k1(2) h2k2(2)] by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 362 | qed | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 363 | qed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 364 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 365 | lemma (in subgroup) lcos_module_rev: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 366 | assumes "group G" "x \<in> carrier G" "x' \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 367 | and "(inv x \<otimes> x') \<in> H" | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 368 | shows "x' \<in> x <# H" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 369 | proof - | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 370 | obtain h where h: "h \<in> H" "inv x \<otimes> x' = h" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 371 | using assms(4) unfolding l_coset_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 372 | hence "x' = x \<otimes> h" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 373 | by (metis assms group.inv_solve_left mem_carrier) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 374 | thus ?thesis using h unfolding l_coset_def by blast | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 375 | qed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 376 | |
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 377 | |
| 61382 | 378 | subsection \<open>Normal subgroups\<close> | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 379 | |
| 14963 | 380 | lemma normal_imp_subgroup: "H \<lhd> G \<Longrightarrow> subgroup H G" | 
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 381 | by (rule normal.axioms(1)) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 382 | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 383 | lemma (in group) normalI: | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 384 | "subgroup H G \<Longrightarrow> (\<forall>x \<in> carrier G. H #> x = x <# H) \<Longrightarrow> H \<lhd> G" | 
| 41528 | 385 | by (simp add: normal_def normal_axioms_def is_group) | 
| 14963 | 386 | |
| 387 | lemma (in normal) inv_op_closed1: | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 388 | assumes "x \<in> carrier G" and "h \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 389 | shows "(inv x) \<otimes> h \<otimes> x \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 390 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 391 | have "h \<otimes> x \<in> x <# H" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 392 | using assms coset_eq assms(1) unfolding r_coset_def by blast | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 393 | then obtain h' where "h' \<in> H" "h \<otimes> x = x \<otimes> h'" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 394 | unfolding l_coset_def by blast | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 395 | thus ?thesis by (metis assms inv_closed l_inv l_one m_assoc mem_carrier) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 396 | qed | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 397 | |
| 14963 | 398 | lemma (in normal) inv_op_closed2: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 399 | assumes "x \<in> carrier G" and "h \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 400 | shows "x \<otimes> h \<otimes> (inv x) \<in> H" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 401 | using assms inv_op_closed1 by (metis inv_closed inv_inv) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 402 | |
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 403 | lemma (in comm_group) normal_iff_subgroup: | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 404 | "N \<lhd> G \<longleftrightarrow> subgroup N G" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 405 | proof | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 406 | assume "subgroup N G" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 407 | then show "N \<lhd> G" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 408 | by unfold_locales (auto simp: subgroupE subgroup.one_closed l_coset_def r_coset_def m_comm subgroup.mem_carrier) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 409 | qed (simp add: normal_imp_subgroup) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 410 | |
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 411 | |
| 61382 | 412 | text\<open>Alternative characterization of normal subgroups\<close> | 
| 14747 | 413 | lemma (in group) normal_inv_iff: | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 414 | "(N \<lhd> G) = | 
| 67091 | 415 | (subgroup N G \<and> (\<forall>x \<in> carrier G. \<forall>h \<in> N. x \<otimes> h \<otimes> (inv x) \<in> N))" | 
| 14747 | 416 | (is "_ = ?rhs") | 
| 417 | proof | |
| 418 | assume N: "N \<lhd> G" | |
| 419 | show ?rhs | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 420 | by (blast intro: N normal.inv_op_closed2 normal_imp_subgroup) | 
| 14747 | 421 | next | 
| 422 | assume ?rhs | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 423 | hence sg: "subgroup N G" | 
| 14963 | 424 | and closed: "\<And>x. x\<in>carrier G \<Longrightarrow> \<forall>h\<in>N. x \<otimes> h \<otimes> inv x \<in> N" by auto | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 425 | hence sb: "N \<subseteq> carrier G" by (simp add: subgroup.subset) | 
| 14747 | 426 | show "N \<lhd> G" | 
| 14963 | 427 | proof (intro normalI [OF sg], simp add: l_coset_def r_coset_def, clarify) | 
| 14747 | 428 | fix x | 
| 429 | assume x: "x \<in> carrier G" | |
| 15120 | 430 |     show "(\<Union>h\<in>N. {h \<otimes> x}) = (\<Union>h\<in>N. {x \<otimes> h})"
 | 
| 14747 | 431 | proof | 
| 15120 | 432 |       show "(\<Union>h\<in>N. {h \<otimes> x}) \<subseteq> (\<Union>h\<in>N. {x \<otimes> h})"
 | 
| 14747 | 433 | proof clarify | 
| 434 | fix n | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 435 | assume n: "n \<in> N" | 
| 15120 | 436 |         show "n \<otimes> x \<in> (\<Union>h\<in>N. {x \<otimes> h})"
 | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 437 | proof | 
| 14963 | 438 | from closed [of "inv x"] | 
| 439 | show "inv x \<otimes> n \<otimes> x \<in> N" by (simp add: x n) | |
| 440 |           show "n \<otimes> x \<in> {x \<otimes> (inv x \<otimes> n \<otimes> x)}"
 | |
| 14747 | 441 | by (simp add: x n m_assoc [symmetric] sb [THEN subsetD]) | 
| 442 | qed | |
| 443 | qed | |
| 444 | next | |
| 15120 | 445 |       show "(\<Union>h\<in>N. {x \<otimes> h}) \<subseteq> (\<Union>h\<in>N. {h \<otimes> x})"
 | 
| 14747 | 446 | proof clarify | 
| 447 | fix n | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 448 | assume n: "n \<in> N" | 
| 15120 | 449 |         show "x \<otimes> n \<in> (\<Union>h\<in>N. {h \<otimes> x})"
 | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 450 | proof | 
| 14963 | 451 | show "x \<otimes> n \<otimes> inv x \<in> N" by (simp add: x n closed) | 
| 452 |           show "x \<otimes> n \<in> {x \<otimes> n \<otimes> inv x \<otimes> x}"
 | |
| 14747 | 453 | by (simp add: x n m_assoc sb [THEN subsetD]) | 
| 454 | qed | |
| 455 | qed | |
| 456 | qed | |
| 457 | qed | |
| 458 | qed | |
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 459 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 460 | corollary (in group) normal_invI: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 461 | assumes "subgroup N G" and "\<And>x h. \<lbrakk> x \<in> carrier G; h \<in> N \<rbrakk> \<Longrightarrow> x \<otimes> h \<otimes> inv x \<in> N" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 462 | shows "N \<lhd> G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 463 | using assms normal_inv_iff by blast | 
| 14963 | 464 | |
| 69122 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 465 | corollary (in group) normal_invE: | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 466 | assumes "N \<lhd> G" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 467 | shows "subgroup N G" and "\<And>x h. \<lbrakk> x \<in> carrier G; h \<in> N \<rbrakk> \<Longrightarrow> x \<otimes> h \<otimes> inv x \<in> N" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 468 | using assms normal_inv_iff apply blast | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 469 | by (simp add: assms normal.inv_op_closed2) | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 470 | |
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 471 | lemma (in group) one_is_normal: "{\<one>} \<lhd> G"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 472 | using normal_invI triv_subgroup by force | 
| 69122 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 473 | |
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 474 | text \<open>The intersection of two normal subgroups is, again, a normal subgroup.\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 475 | lemma (in group) normal_subgroup_intersect: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 476 | assumes "M \<lhd> G" and "N \<lhd> G" shows "M \<inter> N \<lhd> G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 477 | using assms normal_inv_iff subgroups_Inter_pair by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 478 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 479 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 480 | text \<open>Being a normal subgroup is preserved by surjective homomorphisms.\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 481 | |
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 482 | lemma (in normal) surj_hom_normal_subgroup: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 483 | assumes \<phi>: "group_hom G F \<phi>" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 484 | assumes \<phi>surj: "\<phi> ` (carrier G) = carrier F" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 485 | shows "(\<phi> ` H) \<lhd> F" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 486 | proof (rule group.normalI) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 487 | show "group F" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 488 | using \<phi> group_hom.axioms(2) by blast | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 489 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 490 | show "subgroup (\<phi> ` H) F" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 491 | using \<phi> group_hom.subgroup_img_is_subgroup subgroup_axioms by blast | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 492 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 493 | show "\<forall>x\<in>carrier F. \<phi> ` H #>\<^bsub>F\<^esub> x = x <#\<^bsub>F\<^esub> \<phi> ` H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 494 | proof | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 495 | fix f | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 496 | assume f: "f \<in> carrier F" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 497 | with \<phi>surj obtain g where g: "g \<in> carrier G" "f = \<phi> g" by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 498 | hence "\<phi> ` H #>\<^bsub>F\<^esub> f = \<phi> ` H #>\<^bsub>F\<^esub> \<phi> g" by simp | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 499 | also have "... = (\<lambda>x. (\<phi> x) \<otimes>\<^bsub>F\<^esub> (\<phi> g)) ` H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 500 | unfolding r_coset_def image_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 501 | also have "... = (\<lambda>x. \<phi> (x \<otimes> g)) ` H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 502 | using subset g \<phi> group_hom.hom_mult unfolding image_def by fastforce | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 503 | also have "... = \<phi> ` (H #> g)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 504 | using \<phi> unfolding r_coset_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 505 | also have "... = \<phi> ` (g <# H)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 506 | by (metis coset_eq g(1)) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 507 | also have "... = (\<lambda>x. \<phi> (g \<otimes> x)) ` H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 508 | using \<phi> unfolding l_coset_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 509 | also have "... = (\<lambda>x. (\<phi> g) \<otimes>\<^bsub>F\<^esub> (\<phi> x)) ` H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 510 | using subset g \<phi> group_hom.hom_mult by fastforce | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 511 | also have "... = \<phi> g <#\<^bsub>F\<^esub> \<phi> ` H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 512 | unfolding l_coset_def image_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 513 | also have "... = f <#\<^bsub>F\<^esub> \<phi> ` H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 514 | using g by simp | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 515 | finally show "\<phi> ` H #>\<^bsub>F\<^esub> f = f <#\<^bsub>F\<^esub> \<phi> ` H". | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 516 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 517 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 518 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 519 | text \<open>Being a normal subgroup is preserved by group isomorphisms.\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 520 | lemma iso_normal_subgroup: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 521 | assumes \<phi>: "\<phi> \<in> iso G F" "group G" "group F" "H \<lhd> G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 522 | shows "(\<phi> ` H) \<lhd> F" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 523 | by (meson assms Group.iso_iff group_hom_axioms_def group_hom_def normal.surj_hom_normal_subgroup) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 524 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 525 | text \<open>The set product of two normal subgroups is a normal subgroup.\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 526 | lemma (in group) setmult_lcos_assoc: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 527 | "\<lbrakk>H \<subseteq> carrier G; K \<subseteq> carrier G; x \<in> carrier G\<rbrakk> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 528 | \<Longrightarrow> (x <# H) <#> K = x <# (H <#> K)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 529 | by (force simp add: l_coset_def set_mult_def m_assoc) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 530 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 531 | subsection\<open>More Properties of Left Cosets\<close> | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 532 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 533 | lemma (in group) l_repr_independence: | 
| 68687 | 534 | assumes "y \<in> x <# H" "x \<in> carrier G" and HG: "subgroup H G" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 535 | shows "x <# H = y <# H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 536 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 537 | obtain h' where h': "h' \<in> H" "y = x \<otimes> h'" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 538 | using assms(1) unfolding l_coset_def by blast | 
| 68604 | 539 | hence "x \<otimes> h = y \<otimes> ((inv h') \<otimes> h)" if "h \<in> H" for h | 
| 540 | proof - | |
| 68687 | 541 | have "h' \<in> carrier G" | 
| 542 | by (meson HG h'(1) subgroup.mem_carrier) | |
| 543 | moreover have "h \<in> carrier G" | |
| 544 | by (meson HG subgroup.mem_carrier that) | |
| 545 | ultimately show ?thesis | |
| 546 | by (metis assms(2) h'(2) inv_closed inv_solve_right m_assoc m_closed) | |
| 68604 | 547 | qed | 
| 68687 | 548 | hence "\<And>xh. xh \<in> x <# H \<Longrightarrow> xh \<in> y <# H" | 
| 549 | unfolding l_coset_def by (metis (no_types, lifting) UN_iff HG h'(1) subgroup_def) | |
| 550 | moreover have "\<And>h. h \<in> H \<Longrightarrow> y \<otimes> h = x \<otimes> (h' \<otimes> h)" | |
| 551 | using h' by (meson assms(2) HG m_assoc subgroup.mem_carrier) | |
| 552 | hence "\<And>yh. yh \<in> y <# H \<Longrightarrow> yh \<in> x <# H" | |
| 553 | unfolding l_coset_def using subgroup.m_closed[OF HG h'(1)] by blast | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 554 | ultimately show ?thesis by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 555 | qed | 
| 14803 | 556 | |
| 14747 | 557 | lemma (in group) lcos_m_assoc: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 558 | "\<lbrakk> M \<subseteq> carrier G; g \<in> carrier G; h \<in> carrier G \<rbrakk> \<Longrightarrow> g <# (h <# M) = (g \<otimes> h) <# M" | 
| 14747 | 559 | by (force simp add: l_coset_def m_assoc) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 560 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 561 | lemma (in group) lcos_mult_one: "M \<subseteq> carrier G \<Longrightarrow> \<one> <# M = M" | 
| 14747 | 562 | by (force simp add: l_coset_def) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 563 | |
| 14747 | 564 | lemma (in group) l_coset_subset_G: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 565 | "\<lbrakk> H \<subseteq> carrier G; x \<in> carrier G \<rbrakk> \<Longrightarrow> x <# H \<subseteq> carrier G" | 
| 14747 | 566 | by (auto simp add: l_coset_def subsetD) | 
| 567 | ||
| 568 | lemma (in group) l_coset_carrier: | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 569 | "\<lbrakk> y \<in> x <# H; x \<in> carrier G; subgroup H G \<rbrakk> \<Longrightarrow> y \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 570 | by (auto simp add: l_coset_def m_assoc subgroup.subset [THEN subsetD] subgroup.m_closed) | 
| 14530 | 571 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 572 | lemma (in group) l_coset_swap: | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 573 | assumes "y \<in> x <# H" "x \<in> carrier G" "subgroup H G" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 574 | shows "x \<in> y <# H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 575 | using assms(2) l_repr_independence[OF assms] subgroup.one_closed[OF assms(3)] | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 576 | unfolding l_coset_def by fastforce | 
| 14530 | 577 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 578 | lemma (in group) subgroup_mult_id: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 579 | assumes "subgroup H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 580 | shows "H <#> H = H" | 
| 14666 | 581 | proof | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 582 | show "H <#> H \<subseteq> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 583 | unfolding set_mult_def using subgroup.m_closed[OF assms] by (simp add: UN_subset_iff) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 584 | show "H \<subseteq> H <#> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 585 | proof | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 586 | fix x assume x: "x \<in> H" thus "x \<in> H <#> H" unfolding set_mult_def | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 587 | using subgroup.m_closed[OF assms subgroup.one_closed[OF assms] x] subgroup.one_closed[OF assms] | 
| 68604 | 588 | using assms subgroup.mem_carrier by force | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 589 | qed | 
| 14530 | 590 | qed | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 591 | |
| 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 592 | |
| 63167 | 593 | subsubsection \<open>Set of Inverses of an \<open>r_coset\<close>.\<close> | 
| 14666 | 594 | |
| 14963 | 595 | lemma (in normal) rcos_inv: | 
| 596 | assumes x: "x \<in> carrier G" | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 597 | shows "set_inv (H #> x) = H #> (inv x)" | 
| 14963 | 598 | proof (simp add: r_coset_def SET_INV_def x inv_mult_group, safe) | 
| 599 | fix h | |
| 41528 | 600 | assume h: "h \<in> H" | 
| 15120 | 601 |   show "inv x \<otimes> inv h \<in> (\<Union>j\<in>H. {j \<otimes> inv x})"
 | 
| 14963 | 602 | proof | 
| 603 | show "inv x \<otimes> inv h \<otimes> x \<in> H" | |
| 41528 | 604 | by (simp add: inv_op_closed1 h x) | 
| 14963 | 605 |     show "inv x \<otimes> inv h \<in> {inv x \<otimes> inv h \<otimes> x \<otimes> inv x}"
 | 
| 41528 | 606 | by (simp add: h x m_assoc) | 
| 14963 | 607 | qed | 
| 15120 | 608 |   show "h \<otimes> inv x \<in> (\<Union>j\<in>H. {inv x \<otimes> inv j})"
 | 
| 14963 | 609 | proof | 
| 610 | show "x \<otimes> inv h \<otimes> inv x \<in> H" | |
| 41528 | 611 | by (simp add: inv_op_closed2 h x) | 
| 14963 | 612 |     show "h \<otimes> inv x \<in> {inv x \<otimes> inv (x \<otimes> inv h \<otimes> inv x)}"
 | 
| 41528 | 613 | by (simp add: h x m_assoc [symmetric] inv_mult_group) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 614 | qed | 
| 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 615 | qed | 
| 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 616 | |
| 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 617 | |
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 618 | subsubsection \<open>Theorems for \<open><#>\<close> with \<open>#>\<close> or \<open><#\<close>.\<close> | 
| 14666 | 619 | |
| 14747 | 620 | lemma (in group) setmult_rcos_assoc: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 621 | "\<lbrakk>H \<subseteq> carrier G; K \<subseteq> carrier G; x \<in> carrier G\<rbrakk> \<Longrightarrow> | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 622 | H <#> (K #> x) = (H <#> K) #> x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 623 |   using set_mult_assoc[of H K "{x}"] by (simp add: r_coset_eq_set_mult)
 | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 624 | |
| 14747 | 625 | lemma (in group) rcos_assoc_lcos: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 626 | "\<lbrakk>H \<subseteq> carrier G; K \<subseteq> carrier G; x \<in> carrier G\<rbrakk> \<Longrightarrow> | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 627 | (H #> x) <#> K = H <#> (x <# K)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 628 |   using set_mult_assoc[of H "{x}" K]
 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 629 | by (simp add: l_coset_eq_set_mult r_coset_eq_set_mult) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 630 | |
| 14963 | 631 | lemma (in normal) rcos_mult_step1: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 632 | "\<lbrakk>x \<in> carrier G; y \<in> carrier G\<rbrakk> \<Longrightarrow> | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 633 | (H #> x) <#> (H #> y) = (H <#> (x <# H)) #> y" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 634 | by (simp add: setmult_rcos_assoc r_coset_subset_G | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 635 | subset l_coset_subset_G rcos_assoc_lcos) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 636 | |
| 14963 | 637 | lemma (in normal) rcos_mult_step2: | 
| 638 | "\<lbrakk>x \<in> carrier G; y \<in> carrier G\<rbrakk> | |
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 639 | \<Longrightarrow> (H <#> (x <# H)) #> y = (H <#> (H #> x)) #> y" | 
| 14963 | 640 | by (insert coset_eq, simp add: normal_def) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 641 | |
| 14963 | 642 | lemma (in normal) rcos_mult_step3: | 
| 643 | "\<lbrakk>x \<in> carrier G; y \<in> carrier G\<rbrakk> | |
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 644 | \<Longrightarrow> (H <#> (H #> x)) #> y = H #> (x \<otimes> y)" | 
| 14963 | 645 | by (simp add: setmult_rcos_assoc coset_mult_assoc | 
| 41528 | 646 | subgroup_mult_id normal.axioms subset normal_axioms) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 647 | |
| 14963 | 648 | lemma (in normal) rcos_sum: | 
| 649 | "\<lbrakk>x \<in> carrier G; y \<in> carrier G\<rbrakk> | |
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 650 | \<Longrightarrow> (H #> x) <#> (H #> y) = H #> (x \<otimes> y)" | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 651 | by (simp add: rcos_mult_step1 rcos_mult_step2 rcos_mult_step3) | 
| 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 652 | |
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 653 | lemma (in normal) rcosets_mult_eq: "M \<in> rcosets H \<Longrightarrow> H <#> M = M" | 
| 63167 | 654 | \<comment> \<open>generalizes \<open>subgroup_mult_id\<close>\<close> | 
| 14963 | 655 | by (auto simp add: RCOSETS_def subset | 
| 41528 | 656 | setmult_rcos_assoc subgroup_mult_id normal.axioms normal_axioms) | 
| 14963 | 657 | |
| 658 | ||
| 61382 | 659 | subsubsection\<open>An Equivalence Relation\<close> | 
| 14963 | 660 | |
| 35847 | 661 | definition | 
| 662 |   r_congruent :: "[('a,'b)monoid_scheme, 'a set] \<Rightarrow> ('a*'a)set"  ("rcong\<index> _")
 | |
| 67091 | 663 |   where "rcong\<^bsub>G\<^esub> H = {(x,y). x \<in> carrier G \<and> y \<in> carrier G \<and> inv\<^bsub>G\<^esub> x \<otimes>\<^bsub>G\<^esub> y \<in> H}"
 | 
| 14963 | 664 | |
| 665 | ||
| 666 | lemma (in subgroup) equiv_rcong: | |
| 27611 | 667 | assumes "group G" | 
| 14963 | 668 | shows "equiv (carrier G) (rcong H)" | 
| 27611 | 669 | proof - | 
| 29237 | 670 | interpret group G by fact | 
| 27611 | 671 | show ?thesis | 
| 40815 | 672 | proof (intro equivI) | 
| 30198 | 673 | show "refl_on (carrier G) (rcong H)" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 674 | by (auto simp add: r_congruent_def refl_on_def) | 
| 27611 | 675 | next | 
| 676 | show "sym (rcong H)" | |
| 677 | proof (simp add: r_congruent_def sym_def, clarify) | |
| 678 | fix x y | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 679 | assume [simp]: "x \<in> carrier G" "y \<in> carrier G" | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31727diff
changeset | 680 | and "inv x \<otimes> y \<in> H" | 
| 46721 | 681 | hence "inv (inv x \<otimes> y) \<in> H" by simp | 
| 27611 | 682 | thus "inv y \<otimes> x \<in> H" by (simp add: inv_mult_group) | 
| 683 | qed | |
| 684 | next | |
| 685 | show "trans (rcong H)" | |
| 686 | proof (simp add: r_congruent_def trans_def, clarify) | |
| 687 | fix x y z | |
| 688 | assume [simp]: "x \<in> carrier G" "y \<in> carrier G" "z \<in> carrier G" | |
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
31727diff
changeset | 689 | and "inv x \<otimes> y \<in> H" and "inv y \<otimes> z \<in> H" | 
| 27611 | 690 | hence "(inv x \<otimes> y) \<otimes> (inv y \<otimes> z) \<in> H" by simp | 
| 27698 | 691 | hence "inv x \<otimes> (y \<otimes> inv y) \<otimes> z \<in> H" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 692 | by (simp add: m_assoc del: r_inv Units_r_inv) | 
| 27611 | 693 | thus "inv x \<otimes> z \<in> H" by simp | 
| 694 | qed | |
| 14963 | 695 | qed | 
| 696 | qed | |
| 697 | ||
| 63167 | 698 | text\<open>Equivalence classes of \<open>rcong\<close> correspond to left cosets. | 
| 14963 | 699 | Was there a mistake in the definitions? I'd have expected them to | 
| 61382 | 700 | correspond to right cosets.\<close> | 
| 14963 | 701 | |
| 702 | (* CB: This is correct, but subtle. | |
| 703 | We call H #> a the right coset of a relative to H. According to | |
| 704 | Jacobson, this is what the majority of group theory literature does. | |
| 705 | He then defines the notion of congruence relation ~ over monoids as | |
| 706 | equivalence relation with a ~ a' & b ~ b' \<Longrightarrow> a*b ~ a'*b'. | |
| 707 | Our notion of right congruence induced by K: rcong K appears only in | |
| 708 | the context where K is a normal subgroup. Jacobson doesn't name it. | |
| 709 | But in this context left and right cosets are identical. | |
| 710 | *) | |
| 711 | ||
| 712 | lemma (in subgroup) l_coset_eq_rcong: | |
| 27611 | 713 | assumes "group G" | 
| 14963 | 714 | assumes a: "a \<in> carrier G" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 715 |   shows "a <# H = (rcong H) `` {a}"
 | 
| 27611 | 716 | proof - | 
| 29237 | 717 | interpret group G by fact | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 718 | show ?thesis by (force simp add: r_congruent_def l_coset_def m_assoc [symmetric] a ) | 
| 27611 | 719 | qed | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 720 | |
| 35849 | 721 | |
| 61382 | 722 | subsubsection\<open>Two Distinct Right Cosets are Disjoint\<close> | 
| 14803 | 723 | |
| 724 | lemma (in group) rcos_equation: | |
| 27611 | 725 | assumes "subgroup H G" | 
| 726 | assumes p: "ha \<otimes> a = h \<otimes> b" "a \<in> carrier G" "b \<in> carrier G" "h \<in> H" "ha \<in> H" "hb \<in> H" | |
| 727 |   shows "hb \<otimes> a \<in> (\<Union>h\<in>H. {h \<otimes> b})"
 | |
| 728 | proof - | |
| 29237 | 729 | interpret subgroup H G by fact | 
| 68687 | 730 | from p show ?thesis | 
| 731 | by (rule_tac UN_I [of "hb \<otimes> ((inv ha) \<otimes> h)"]) (auto simp: inv_solve_left m_assoc) | |
| 27611 | 732 | qed | 
| 14803 | 733 | |
| 734 | lemma (in group) rcos_disjoint: | |
| 27611 | 735 | assumes "subgroup H G" | 
| 68975 
5ce4d117cea7
A few new results, elimination of duplicates and more use of "pairwise"
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 736 | shows "pairwise disjnt (rcosets H)" | 
| 27611 | 737 | proof - | 
| 29237 | 738 | interpret subgroup H G by fact | 
| 68975 
5ce4d117cea7
A few new results, elimination of duplicates and more use of "pairwise"
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 739 | show ?thesis | 
| 
5ce4d117cea7
A few new results, elimination of duplicates and more use of "pairwise"
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 740 | unfolding RCOSETS_def r_coset_def pairwise_def disjnt_def | 
| 68687 | 741 | by (blast intro: rcos_equation assms sym) | 
| 27611 | 742 | qed | 
| 14803 | 743 | |
| 35849 | 744 | |
| 63167 | 745 | subsection \<open>Further lemmas for \<open>r_congruent\<close>\<close> | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 746 | |
| 61382 | 747 | text \<open>The relation is a congruence\<close> | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 748 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 749 | lemma (in normal) congruent_rcong: | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 750 | shows "congruent2 (rcong H) (rcong H) (\<lambda>a b. a \<otimes> b <# H)" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 751 | proof (intro congruent2I[of "carrier G" _ "carrier G" _] equiv_rcong is_group) | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 752 | fix a b c | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 753 | assume abrcong: "(a, b) \<in> rcong H" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 754 | and ccarr: "c \<in> carrier G" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 755 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 756 | from abrcong | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 757 | have acarr: "a \<in> carrier G" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 758 | and bcarr: "b \<in> carrier G" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 759 | and abH: "inv a \<otimes> b \<in> H" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 760 | unfolding r_congruent_def | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 761 | by fast+ | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 762 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 763 | note carr = acarr bcarr ccarr | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 764 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 765 | from ccarr and abH | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 766 | have "inv c \<otimes> (inv a \<otimes> b) \<otimes> c \<in> H" by (rule inv_op_closed1) | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 767 | moreover | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 768 | from carr and inv_closed | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 769 | have "inv c \<otimes> (inv a \<otimes> b) \<otimes> c = (inv c \<otimes> inv a) \<otimes> (b \<otimes> c)" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 770 | by (force cong: m_assoc) | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 771 | moreover | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 772 | from carr and inv_closed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 773 | have "\<dots> = (inv (a \<otimes> c)) \<otimes> (b \<otimes> c)" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 774 | by (simp add: inv_mult_group) | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 775 | ultimately | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 776 | have "(inv (a \<otimes> c)) \<otimes> (b \<otimes> c) \<in> H" by simp | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 777 | from carr and this | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 778 | have "(b \<otimes> c) \<in> (a \<otimes> c) <# H" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 779 | by (simp add: lcos_module_rev[OF is_group]) | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 780 | from carr and this and is_subgroup | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 781 | show "(a \<otimes> c) <# H = (b \<otimes> c) <# H" by (intro l_repr_independence, simp+) | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 782 | next | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 783 | fix a b c | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 784 | assume abrcong: "(a, b) \<in> rcong H" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 785 | and ccarr: "c \<in> carrier G" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 786 | |
| 46721 | 787 | from ccarr have "c \<in> Units G" by simp | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 788 | hence cinvc_one: "inv c \<otimes> c = \<one>" by (rule Units_l_inv) | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 789 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 790 | from abrcong | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 791 | have acarr: "a \<in> carrier G" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 792 | and bcarr: "b \<in> carrier G" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 793 | and abH: "inv a \<otimes> b \<in> H" | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 794 | by (unfold r_congruent_def, fast+) | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 795 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 796 | note carr = acarr bcarr ccarr | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 797 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 798 | from carr and inv_closed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 799 | have "inv a \<otimes> b = inv a \<otimes> (\<one> \<otimes> b)" by simp | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 800 | also from carr and inv_closed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 801 | have "\<dots> = inv a \<otimes> (inv c \<otimes> c) \<otimes> b" by simp | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 802 | also from carr and inv_closed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 803 | have "\<dots> = (inv a \<otimes> inv c) \<otimes> (c \<otimes> b)" by (force cong: m_assoc) | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 804 | also from carr and inv_closed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 805 | have "\<dots> = inv (c \<otimes> a) \<otimes> (c \<otimes> b)" by (simp add: inv_mult_group) | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 806 | finally | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 807 | have "inv a \<otimes> b = inv (c \<otimes> a) \<otimes> (c \<otimes> b)" . | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 808 | from abH and this | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 809 | have "inv (c \<otimes> a) \<otimes> (c \<otimes> b) \<in> H" by simp | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 810 | |
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 811 | from carr and this | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 812 | have "(c \<otimes> b) \<in> (c \<otimes> a) <# H" | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 813 | by (simp add: lcos_module_rev[OF is_group]) | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 814 | from carr and this and is_subgroup | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 815 | show "(c \<otimes> a) <# H = (c \<otimes> b) <# H" by (intro l_repr_independence, simp+) | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 816 | qed | 
| 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19931diff
changeset | 817 | |
| 14803 | 818 | |
| 61382 | 819 | subsection \<open>Order of a Group and Lagrange's Theorem\<close> | 
| 14803 | 820 | |
| 35848 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 821 | definition | 
| 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 822 |   order :: "('a, 'b) monoid_scheme \<Rightarrow> nat"
 | 
| 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 823 | where "order S = card (carrier S)" | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 824 | |
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 825 | lemma iso_same_order: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 826 | assumes "\<phi> \<in> iso G H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 827 | shows "order G = order H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 828 | by (metis assms is_isoI iso_same_card order_def order_def) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 829 | |
| 61628 | 830 | lemma (in monoid) order_gt_0_iff_finite: "0 < order G \<longleftrightarrow> finite (carrier G)" | 
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 831 | by(auto simp add: order_def card_gt_0_iff) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 832 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 833 | lemma (in group) order_one_triv_iff: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 834 |   shows "(order G = 1) = (carrier G = {\<one>})"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 835 | by (metis One_nat_def card.empty card_Suc_eq empty_iff one_closed order_def singleton_iff) | 
| 61628 | 836 | |
| 14963 | 837 | lemma (in group) rcosets_part_G: | 
| 27611 | 838 | assumes "subgroup H G" | 
| 14963 | 839 | shows "\<Union>(rcosets H) = carrier G" | 
| 27611 | 840 | proof - | 
| 29237 | 841 | interpret subgroup H G by fact | 
| 27611 | 842 | show ?thesis | 
| 68687 | 843 | unfolding RCOSETS_def r_coset_def by auto | 
| 27611 | 844 | qed | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 845 | |
| 14747 | 846 | lemma (in group) cosets_finite: | 
| 14963 | 847 | "\<lbrakk>c \<in> rcosets H; H \<subseteq> carrier G; finite (carrier G)\<rbrakk> \<Longrightarrow> finite c" | 
| 68687 | 848 | unfolding RCOSETS_def | 
| 849 | by (auto simp add: r_coset_subset_G [THEN finite_subset]) | |
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 850 | |
| 63167 | 851 | text\<open>The next two lemmas support the proof of \<open>card_cosets_equal\<close>.\<close> | 
| 14747 | 852 | lemma (in group) inj_on_f: | 
| 68687 | 853 | assumes "H \<subseteq> carrier G" and a: "a \<in> carrier G" | 
| 854 | shows "inj_on (\<lambda>y. y \<otimes> inv a) (H #> a)" | |
| 855 | proof | |
| 856 | fix x y | |
| 857 | assume "x \<in> H #> a" "y \<in> H #> a" and xy: "x \<otimes> inv a = y \<otimes> inv a" | |
| 858 | then have "x \<in> carrier G" "y \<in> carrier G" | |
| 859 | using assms r_coset_subset_G by blast+ | |
| 860 | with xy a show "x = y" | |
| 861 | by auto | |
| 862 | qed | |
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 863 | |
| 14747 | 864 | lemma (in group) inj_on_g: | 
| 14963 | 865 | "\<lbrakk>H \<subseteq> carrier G; a \<in> carrier G\<rbrakk> \<Longrightarrow> inj_on (\<lambda>y. y \<otimes> a) H" | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 866 | by (force simp add: inj_on_def subsetD) | 
| 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 867 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 868 | (* ************************************************************************** *) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 869 | |
| 14747 | 870 | lemma (in group) card_cosets_equal: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 871 | assumes "R \<in> rcosets H" "H \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 872 | shows "\<exists>f. bij_betw f H R" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 873 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 874 | obtain g where g: "g \<in> carrier G" "R = H #> g" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 875 | using assms(1) unfolding RCOSETS_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 876 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 877 | let ?f = "\<lambda>h. h \<otimes> g" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 878 | have "\<And>r. r \<in> R \<Longrightarrow> \<exists>h \<in> H. ?f h = r" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 879 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 880 | fix r assume "r \<in> R" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 881 | then obtain h where "h \<in> H" "r = h \<otimes> g" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 882 | using g unfolding r_coset_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 883 | thus "\<exists>h \<in> H. ?f h = r" by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 884 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 885 | hence "R \<subseteq> ?f ` H" by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 886 | moreover have "?f ` H \<subseteq> R" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 887 | using g unfolding r_coset_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 888 | ultimately show ?thesis using inj_on_g unfolding bij_betw_def | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 889 | using assms(2) g(1) by auto | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 890 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 891 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 892 | corollary (in group) card_rcosets_equal: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 893 | assumes "R \<in> rcosets H" "H \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 894 | shows "card H = card R" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 895 | using card_cosets_equal assms bij_betw_same_card by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 896 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 897 | corollary (in group) rcosets_finite: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 898 | assumes "R \<in> rcosets H" "H \<subseteq> carrier G" "finite H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 899 | shows "finite R" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 900 | using card_cosets_equal assms bij_betw_finite is_group by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 901 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 902 | (* ************************************************************************** *) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 903 | |
| 14963 | 904 | lemma (in group) rcosets_subset_PowG: | 
| 905 | "subgroup H G \<Longrightarrow> rcosets H \<subseteq> Pow(carrier G)" | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 906 | using rcosets_part_G by auto | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 907 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 908 | proposition (in group) lagrange_finite: | 
| 68687 | 909 | assumes "finite(carrier G)" and HG: "subgroup H G" | 
| 910 | shows "card(rcosets H) * card(H) = order(G)" | |
| 911 | proof - | |
| 912 | have "card H * card (rcosets H) = card (\<Union>(rcosets H))" | |
| 913 | proof (rule card_partition) | |
| 914 |     show "\<And>c1 c2. \<lbrakk>c1 \<in> rcosets H; c2 \<in> rcosets H; c1 \<noteq> c2\<rbrakk> \<Longrightarrow> c1 \<inter> c2 = {}"
 | |
| 68975 
5ce4d117cea7
A few new results, elimination of duplicates and more use of "pairwise"
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 915 | using HG rcos_disjoint by (auto simp: pairwise_def disjnt_def) | 
| 68687 | 916 | qed (auto simp: assms finite_UnionD rcosets_part_G card_rcosets_equal subgroup.subset) | 
| 917 | then show ?thesis | |
| 918 | by (simp add: HG mult.commute order_def rcosets_part_G) | |
| 919 | qed | |
| 14803 | 920 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 921 | theorem (in group) lagrange: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 922 | assumes "subgroup H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 923 | shows "card (rcosets H) * card H = order G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 924 | proof (cases "finite (carrier G)") | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 925 | case True thus ?thesis using lagrange_finite assms by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 926 | next | 
| 68687 | 927 | case False | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 928 | thus ?thesis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 929 | proof (cases "finite H") | 
| 68687 | 930 | case False thus ?thesis using \<open>infinite (carrier G)\<close> by (simp add: order_def) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 931 | next | 
| 68687 | 932 | case True | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 933 | have "infinite (rcosets H)" | 
| 68687 | 934 | proof | 
| 935 | assume "finite (rcosets H)" | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 936 | hence finite_rcos: "finite (rcosets H)" by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 937 | hence "card (\<Union>(rcosets H)) = (\<Sum>R\<in>(rcosets H). card R)" | 
| 68687 | 938 | using card_Union_disjoint[of "rcosets H"] \<open>finite H\<close> rcos_disjoint[OF assms(1)] | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 939 | rcosets_finite[where ?H = H] by (simp add: assms subgroup.subset) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 940 | hence "order G = (\<Sum>R\<in>(rcosets H). card R)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 941 | by (simp add: assms order_def rcosets_part_G) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 942 | hence "order G = (\<Sum>R\<in>(rcosets H). card H)" | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 943 | using card_rcosets_equal by (simp add: assms subgroup.subset) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 944 | hence "order G = (card H) * (card (rcosets H))" by simp | 
| 68687 | 945 | hence "order G \<noteq> 0" using finite_rcos \<open>finite H\<close> assms ex_in_conv | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 946 | rcosets_part_G subgroup.one_closed by fastforce | 
| 68687 | 947 | thus False using \<open>infinite (carrier G)\<close> order_gt_0_iff_finite by blast | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 948 | qed | 
| 68687 | 949 | thus ?thesis using \<open>infinite (carrier G)\<close> by (simp add: order_def) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 950 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 951 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 952 | |
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 953 | text \<open>The cardinality of the right cosets of the trivial subgroup is the cardinality of the group itself:\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 954 | corollary (in group) card_rcosets_triv: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 955 | assumes "finite (carrier G)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 956 |   shows "card (rcosets {\<one>}) = order G"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 957 | using lagrange triv_subgroup by fastforce | 
| 14803 | 958 | |
| 61382 | 959 | subsection \<open>Quotient Groups: Factorization of a Group\<close> | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 960 | |
| 35848 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 961 | definition | 
| 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 962 |   FactGroup :: "[('a,'b) monoid_scheme, 'a set] \<Rightarrow> ('a set) monoid" (infixl "Mod" 65)
 | 
| 67443 
3abf6a722518
standardized towards new-style formal comments: isabelle update_comments;
 wenzelm parents: 
67091diff
changeset | 963 | \<comment> \<open>Actually defined for groups rather than monoids\<close> | 
| 35848 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 964 | where "FactGroup G H = \<lparr>carrier = rcosets\<^bsub>G\<^esub> H, mult = set_mult G, one = H\<rparr>" | 
| 14747 | 965 | |
| 14963 | 966 | lemma (in normal) setmult_closed: | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 967 | "\<lbrakk>K1 \<in> rcosets H; K2 \<in> rcosets H\<rbrakk> \<Longrightarrow> K1 <#> K2 \<in> rcosets H" | 
| 14963 | 968 | by (auto simp add: rcos_sum RCOSETS_def) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 969 | |
| 14963 | 970 | lemma (in normal) setinv_closed: | 
| 971 | "K \<in> rcosets H \<Longrightarrow> set_inv K \<in> rcosets H" | |
| 972 | by (auto simp add: rcos_inv RCOSETS_def) | |
| 13889 
6676ac2527fa
Fixed Coset.thy (proved theorem factorgroup_is_group).
 ballarin parents: 
13870diff
changeset | 973 | |
| 14963 | 974 | lemma (in normal) rcosets_assoc: | 
| 975 | "\<lbrakk>M1 \<in> rcosets H; M2 \<in> rcosets H; M3 \<in> rcosets H\<rbrakk> | |
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 976 | \<Longrightarrow> M1 <#> M2 <#> M3 = M1 <#> (M2 <#> M3)" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 977 | by (simp add: group.set_mult_assoc is_group rcosets_carrier) | 
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 978 | |
| 14963 | 979 | lemma (in subgroup) subgroup_in_rcosets: | 
| 27611 | 980 | assumes "group G" | 
| 14963 | 981 | shows "H \<in> rcosets H" | 
| 13889 
6676ac2527fa
Fixed Coset.thy (proved theorem factorgroup_is_group).
 ballarin parents: 
13870diff
changeset | 982 | proof - | 
| 29237 | 983 | interpret group G by fact | 
| 26203 | 984 | from _ subgroup_axioms have "H #> \<one> = H" | 
| 23350 | 985 | by (rule coset_join2) auto | 
| 13889 
6676ac2527fa
Fixed Coset.thy (proved theorem factorgroup_is_group).
 ballarin parents: 
13870diff
changeset | 986 | then show ?thesis | 
| 14963 | 987 | by (auto simp add: RCOSETS_def) | 
| 13889 
6676ac2527fa
Fixed Coset.thy (proved theorem factorgroup_is_group).
 ballarin parents: 
13870diff
changeset | 988 | qed | 
| 
6676ac2527fa
Fixed Coset.thy (proved theorem factorgroup_is_group).
 ballarin parents: 
13870diff
changeset | 989 | |
| 14963 | 990 | lemma (in normal) rcosets_inv_mult_group_eq: | 
| 65035 
b46fe5138cb0
backed out unintended effects of 8355a6e2df79 in src/HOL/Algebra
 haftmann parents: 
64587diff
changeset | 991 | "M \<in> rcosets H \<Longrightarrow> set_inv M <#> M = H" | 
| 41528 | 992 | by (auto simp add: RCOSETS_def rcos_inv rcos_sum subgroup.subset normal.axioms normal_axioms) | 
| 13889 
6676ac2527fa
Fixed Coset.thy (proved theorem factorgroup_is_group).
 ballarin parents: 
13870diff
changeset | 993 | |
| 77362 | 994 | theorem (in normal) factorgroup_is_group: "group (G Mod H)" | 
| 995 | proof - | |
| 996 | have "\<And>x. x \<in> rcosets H \<Longrightarrow> \<exists>y\<in>rcosets H. y <#> x = H" | |
| 997 | using rcosets_inv_mult_group_eq setinv_closed by blast | |
| 998 | then show ?thesis | |
| 999 | unfolding FactGroup_def | |
| 1000 | by (intro groupI) | |
| 1001 | (auto simp: setmult_closed subgroup_in_rcosets rcosets_assoc rcosets_mult_eq) | |
| 1002 | qed | |
| 13889 
6676ac2527fa
Fixed Coset.thy (proved theorem factorgroup_is_group).
 ballarin parents: 
13870diff
changeset | 1003 | |
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1004 | lemma carrier_FactGroup: "carrier(G Mod N) = (\<lambda>x. r_coset G N x) ` carrier G" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1005 | by (auto simp: FactGroup_def RCOSETS_def) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1006 | |
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1007 | lemma one_FactGroup [simp]: "one(G Mod N) = N" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1008 | by (auto simp: FactGroup_def) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1009 | |
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1010 | lemma mult_FactGroup [simp]: "monoid.mult (G Mod N) = set_mult G" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1011 | by (auto simp: FactGroup_def) | 
| 14803 | 1012 | |
| 14963 | 1013 | lemma (in normal) inv_FactGroup: | 
| 68687 | 1014 | assumes "X \<in> carrier (G Mod H)" | 
| 1015 | shows "inv\<^bsub>G Mod H\<^esub> X = set_inv X" | |
| 1016 | proof - | |
| 1017 | have X: "X \<in> rcosets H" | |
| 1018 | using assms by (simp add: FactGroup_def) | |
| 1019 | moreover have "set_inv X <#> X = H" | |
| 1020 | using X by (simp add: normal.rcosets_inv_mult_group_eq normal_axioms) | |
| 1021 | moreover have "Group.group (G Mod H)" | |
| 1022 | using normal.factorgroup_is_group normal_axioms by blast | |
| 1023 | ultimately show ?thesis | |
| 77362 | 1024 | by (simp add: FactGroup_def group.inv_equality normal.setinv_closed normal_axioms) | 
| 68687 | 1025 | qed | 
| 14747 | 1026 | |
| 69597 | 1027 | text\<open>The coset map is a homomorphism from \<^term>\<open>G\<close> to the quotient group | 
| 1028 | \<^term>\<open>G Mod H\<close>\<close> | |
| 14963 | 1029 | lemma (in normal) r_coset_hom_Mod: | 
| 1030 | "(\<lambda>a. H #> a) \<in> hom G (G Mod H)" | |
| 1031 | by (auto simp add: FactGroup_def RCOSETS_def Pi_def hom_def rcos_sum) | |
| 14747 | 1032 | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1033 | |
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1034 | lemma (in comm_group) set_mult_commute: | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1035 | assumes "N \<subseteq> carrier G" "x \<in> rcosets N" "y \<in> rcosets N" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1036 | shows "x <#> y = y <#> x" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1037 | using assms unfolding set_mult_def RCOSETS_def | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1038 | by auto (metis m_comm r_coset_subset_G subsetCE)+ | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1039 | |
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1040 | lemma (in comm_group) abelian_FactGroup: | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1041 | assumes "subgroup N G" shows "comm_group(G Mod N)" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1042 | proof (rule group.group_comm_groupI) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1043 | have "N \<lhd> G" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1044 | by (simp add: assms normal_iff_subgroup) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1045 | then show "Group.group (G Mod N)" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1046 | by (simp add: normal.factorgroup_is_group) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1047 | fix x :: "'a set" and y :: "'a set" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1048 | assume "x \<in> carrier (G Mod N)" "y \<in> carrier (G Mod N)" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1049 | then show "x \<otimes>\<^bsub>G Mod N\<^esub> y = y \<otimes>\<^bsub>G Mod N\<^esub> x" | 
| 77362 | 1050 | by (metis FactGroup_def assms mult_FactGroup partial_object.simps(1) set_mult_commute subgroup_def) | 
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1051 | qed | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1052 | |
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1053 | |
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1054 | lemma FactGroup_universal: | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1055 | assumes "h \<in> hom G H" "N \<lhd> G" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1056 | and h: "\<And>x y. \<lbrakk>x \<in> carrier G; y \<in> carrier G; r_coset G N x = r_coset G N y\<rbrakk> \<Longrightarrow> h x = h y" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1057 | obtains g | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1058 | where "g \<in> hom (G Mod N) H" "\<And>x. x \<in> carrier G \<Longrightarrow> g(r_coset G N x) = h x" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1059 | proof - | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1060 | obtain g where g: "\<And>x. x \<in> carrier G \<Longrightarrow> h x = g(r_coset G N x)" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1061 | using h function_factors_left_gen [of "\<lambda>x. x \<in> carrier G" "r_coset G N" h] by blast | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1062 | show thesis | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1063 | proof | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1064 | show "g \<in> hom (G Mod N) H" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1065 | proof (rule homI) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1066 | show "g (u \<otimes>\<^bsub>G Mod N\<^esub> v) = g u \<otimes>\<^bsub>H\<^esub> g v" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1067 | if "u \<in> carrier (G Mod N)" "v \<in> carrier (G Mod N)" for u v | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1068 | proof - | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1069 | from that | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1070 | obtain x y where xy: "x \<in> carrier G" "u = r_coset G N x" "y \<in> carrier G" "v = r_coset G N y" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1071 | by (auto simp: carrier_FactGroup) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1072 | then have "h (x \<otimes>\<^bsub>G\<^esub> y) = h x \<otimes>\<^bsub>H\<^esub> h y" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1073 | by (metis hom_mult [OF \<open>h \<in> hom G H\<close>]) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1074 | then show ?thesis | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1075 | by (metis Coset.mult_FactGroup xy \<open>N \<lhd> G\<close> g group.subgroup_self normal.axioms(2) normal.rcos_sum subgroup_def) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1076 | qed | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1077 | qed (use \<open>h \<in> hom G H\<close> in \<open>auto simp: carrier_FactGroup Pi_iff hom_def simp flip: g\<close>) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1078 | qed (auto simp flip: g) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1079 | qed | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1080 | |
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1081 | |
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1082 | lemma (in normal) FactGroup_pow: | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1083 | fixes k::nat | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1084 | assumes "a \<in> carrier G" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1085 | shows "pow (FactGroup G H) (r_coset G H a) k = r_coset G H (pow G a k)" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1086 | proof (induction k) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1087 | case 0 | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1088 | then show ?case | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1089 | by (simp add: r_coset_def) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1090 | next | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1091 | case (Suc k) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1092 | then show ?case | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1093 | by (simp add: assms rcos_sum) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1094 | qed | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1095 | |
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1096 | lemma (in normal) FactGroup_int_pow: | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1097 | fixes k::int | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1098 | assumes "a \<in> carrier G" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1099 | shows "pow (FactGroup G H) (r_coset G H a) k = r_coset G H (pow G a k)" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1100 | by (metis Group.group.axioms(1) image_eqI is_group monoid.nat_pow_closed int_pow_def2 assms | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1101 | FactGroup_pow carrier_FactGroup inv_FactGroup rcos_inv) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1102 | |
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1103 | |
| 61382 | 1104 | subsection\<open>The First Isomorphism Theorem\<close> | 
| 14803 | 1105 | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1106 | text\<open>The quotient by the kernel of a homomorphism is isomorphic to the | 
| 61382 | 1107 | range of that homomorphism.\<close> | 
| 14803 | 1108 | |
| 35848 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 1109 | definition | 
| 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 1110 |   kernel :: "('a, 'm) monoid_scheme \<Rightarrow> ('b, 'n) monoid_scheme \<Rightarrow>  ('a \<Rightarrow> 'b) \<Rightarrow> 'a set"
 | 
| 67443 
3abf6a722518
standardized towards new-style formal comments: isabelle update_comments;
 wenzelm parents: 
67091diff
changeset | 1111 | \<comment> \<open>the kernel of a homomorphism\<close> | 
| 67091 | 1112 |   where "kernel G H h = {x. x \<in> carrier G \<and> h x = \<one>\<^bsub>H\<^esub>}"
 | 
| 14803 | 1113 | |
| 1114 | lemma (in group_hom) subgroup_kernel: "subgroup (kernel G H h) G" | |
| 77362 | 1115 | by (auto simp add: kernel_def group.intro intro: subgroup.intro) | 
| 14803 | 1116 | |
| 61382 | 1117 | text\<open>The kernel of a homomorphism is a normal subgroup\<close> | 
| 14963 | 1118 | lemma (in group_hom) normal_kernel: "(kernel G H h) \<lhd> G" | 
| 68687 | 1119 | apply (simp only: G.normal_inv_iff subgroup_kernel) | 
| 1120 | apply (simp add: kernel_def) | |
| 1121 | done | |
| 14803 | 1122 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1123 | lemma iso_kernel_image: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1124 | assumes "group G" "group H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1125 |   shows "f \<in> iso G H \<longleftrightarrow> f \<in> hom G H \<and> kernel G H f = {\<one>\<^bsub>G\<^esub>} \<and> f ` carrier G = carrier H"
 | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1126 | (is "?lhs = ?rhs") | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1127 | proof (intro iffI conjI) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1128 | assume f: ?lhs | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1129 | show "f \<in> hom G H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1130 | using Group.iso_iff f by blast | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1131 |   show "kernel G H f = {\<one>\<^bsub>G\<^esub>}"
 | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1132 | using assms f Group.group_def hom_one | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1133 | by (fastforce simp add: kernel_def iso_iff_mon_epi mon_iff_hom_one set_eq_iff) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1134 | show "f ` carrier G = carrier H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1135 | by (meson Group.iso_iff f) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1136 | next | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1137 | assume ?rhs | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1138 | with assms show ?lhs | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1139 | by (auto simp: kernel_def iso_def bij_betw_def inj_on_one_iff') | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1140 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1141 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1142 | |
| 14803 | 1143 | lemma (in group_hom) FactGroup_nonempty: | 
| 77362 | 1144 | assumes "X \<in> carrier (G Mod kernel G H h)" | 
| 14803 | 1145 |   shows "X \<noteq> {}"
 | 
| 77362 | 1146 | using assms unfolding FactGroup_def | 
| 1147 | by (metis group_hom.subgroup_kernel group_hom_axioms partial_object.simps(1) subgroup.rcosets_non_empty) | |
| 14803 | 1148 | |
| 1149 | ||
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1150 | lemma (in group_hom) FactGroup_universal_kernel: | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1151 | assumes "N \<lhd> G" and h: "N \<subseteq> kernel G H h" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1152 | obtains g where "g \<in> hom (G Mod N) H" "\<And>x. x \<in> carrier G \<Longrightarrow> g(r_coset G N x) = h x" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1153 | proof - | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1154 | have "h x = h y" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1155 | if "x \<in> carrier G" "y \<in> carrier G" "r_coset G N x = r_coset G N y" for x y | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1156 | proof - | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1157 | have "x \<otimes>\<^bsub>G\<^esub> inv\<^bsub>G\<^esub> y \<in> N" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1158 | using \<open>N \<lhd> G\<close> group.rcos_self normal.axioms(2) normal_imp_subgroup | 
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1159 | subgroup.rcos_module_imp that by metis | 
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1160 | with h have xy: "x \<otimes>\<^bsub>G\<^esub> inv\<^bsub>G\<^esub> y \<in> kernel G H h" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1161 | by blast | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1162 | have "h x \<otimes>\<^bsub>H\<^esub> inv\<^bsub>H\<^esub>(h y) = h (x \<otimes>\<^bsub>G\<^esub> inv\<^bsub>G\<^esub> y)" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1163 | by (simp add: that) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1164 | also have "\<dots> = \<one>\<^bsub>H\<^esub>" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1165 | using xy by (simp add: kernel_def) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1166 | finally have "h x \<otimes>\<^bsub>H\<^esub> inv\<^bsub>H\<^esub>(h y) = \<one>\<^bsub>H\<^esub>" . | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1167 | then show ?thesis | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1168 | using H.inv_equality that by fastforce | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1169 | qed | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1170 | with FactGroup_universal [OF homh \<open>N \<lhd> G\<close>] that show thesis | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1171 | by metis | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1172 | qed | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1173 | |
| 39910 | 1174 | lemma (in group_hom) FactGroup_the_elem_mem: | 
| 14803 | 1175 | assumes X: "X \<in> carrier (G Mod (kernel G H h))" | 
| 39910 | 1176 | shows "the_elem (h`X) \<in> carrier H" | 
| 14803 | 1177 | proof - | 
| 1178 | from X | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1179 | obtain g where g: "g \<in> carrier G" | 
| 14803 | 1180 | and "X = kernel G H h #> g" | 
| 14963 | 1181 | by (auto simp add: FactGroup_def RCOSETS_def) | 
| 62343 
24106dc44def
prefer abbreviations for compound operators INFIMUM and SUPREMUM
 haftmann parents: 
61628diff
changeset | 1182 |   hence "h ` X = {h g}" by (auto simp add: kernel_def r_coset_def g intro!: imageI)
 | 
| 14803 | 1183 | thus ?thesis by (auto simp add: g) | 
| 1184 | qed | |
| 1185 | ||
| 1186 | lemma (in group_hom) FactGroup_hom: | |
| 39910 | 1187 | "(\<lambda>X. the_elem (h`X)) \<in> hom (G Mod (kernel G H h)) H" | 
| 68687 | 1188 | proof - | 
| 1189 | have "the_elem (h ` (X <#> X')) = the_elem (h ` X) \<otimes>\<^bsub>H\<^esub> the_elem (h ` X')" | |
| 1190 | if X: "X \<in> carrier (G Mod kernel G H h)" and X': "X' \<in> carrier (G Mod kernel G H h)" for X X' | |
| 1191 | proof - | |
| 1192 | obtain g and g' | |
| 1193 | where "g \<in> carrier G" and "g' \<in> carrier G" | |
| 1194 | and "X = kernel G H h #> g" and "X' = kernel G H h #> g'" | |
| 1195 | using X X' by (auto simp add: FactGroup_def RCOSETS_def) | |
| 1196 | hence all: "\<forall>x\<in>X. h x = h g" "\<forall>x\<in>X'. h x = h g'" | |
| 1197 | and Xsub: "X \<subseteq> carrier G" and X'sub: "X' \<subseteq> carrier G" | |
| 1198 | by (force simp add: kernel_def r_coset_def image_def)+ | |
| 1199 |     hence "h ` (X <#> X') = {h g \<otimes>\<^bsub>H\<^esub> h g'}" using X X'
 | |
| 1200 | by (auto dest!: FactGroup_nonempty intro!: image_eqI | |
| 1201 | simp add: set_mult_def | |
| 1202 | subsetD [OF Xsub] subsetD [OF X'sub]) | |
| 1203 | then show "the_elem (h ` (X <#> X')) = the_elem (h ` X) \<otimes>\<^bsub>H\<^esub> the_elem (h ` X')" | |
| 1204 | by (auto simp add: all FactGroup_nonempty X X' the_elem_image_unique) | |
| 1205 | qed | |
| 1206 | then show ?thesis | |
| 1207 | by (simp add: hom_def FactGroup_the_elem_mem normal.factorgroup_is_group [OF normal_kernel] group.axioms monoid.m_closed) | |
| 14803 | 1208 | qed | 
| 1209 | ||
| 14963 | 1210 | |
| 61382 | 1211 | text\<open>Lemma for the following injectivity result\<close> | 
| 14803 | 1212 | lemma (in group_hom) FactGroup_subset: | 
| 68687 | 1213 | assumes "g \<in> carrier G" "g' \<in> carrier G" "h g = h g'" | 
| 1214 | shows "kernel G H h #> g \<subseteq> kernel G H h #> g'" | |
| 1215 | unfolding kernel_def r_coset_def | |
| 1216 | proof clarsimp | |
| 1217 | fix y | |
| 1218 | assume "y \<in> carrier G" "h y = \<one>\<^bsub>H\<^esub>" | |
| 1219 | with assms show "\<exists>x. x \<in> carrier G \<and> h x = \<one>\<^bsub>H\<^esub> \<and> y \<otimes> g = x \<otimes> g'" | |
| 1220 | by (rule_tac x="y \<otimes> g \<otimes> inv g'" in exI) (auto simp: G.m_assoc) | |
| 1221 | qed | |
| 14803 | 1222 | |
| 1223 | lemma (in group_hom) FactGroup_inj_on: | |
| 39910 | 1224 | "inj_on (\<lambda>X. the_elem (h ` X)) (carrier (G Mod kernel G H h))" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1225 | proof (simp add: inj_on_def, clarify) | 
| 14803 | 1226 | fix X and X' | 
| 1227 | assume X: "X \<in> carrier (G Mod kernel G H h)" | |
| 1228 | and X': "X' \<in> carrier (G Mod kernel G H h)" | |
| 1229 | then | |
| 1230 | obtain g and g' | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1231 | where gX: "g \<in> carrier G" "g' \<in> carrier G" | 
| 14803 | 1232 | "X = kernel G H h #> g" "X' = kernel G H h #> g'" | 
| 14963 | 1233 | by (auto simp add: FactGroup_def RCOSETS_def) | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1234 | hence all: "\<forall>x\<in>X. h x = h g" "\<forall>x\<in>X'. h x = h g'" | 
| 14803 | 1235 | by (force simp add: kernel_def r_coset_def image_def)+ | 
| 39910 | 1236 | assume "the_elem (h ` X) = the_elem (h ` X')" | 
| 14803 | 1237 | hence h: "h g = h g'" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1238 | by (simp add: all FactGroup_nonempty X X' the_elem_image_unique) | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1239 | show "X=X'" by (rule equalityI) (simp_all add: FactGroup_subset h gX) | 
| 14803 | 1240 | qed | 
| 1241 | ||
| 69597 | 1242 | text\<open>If the homomorphism \<^term>\<open>h\<close> is onto \<^term>\<open>H\<close>, then so is the | 
| 61382 | 1243 | homomorphism from the quotient group\<close> | 
| 14803 | 1244 | lemma (in group_hom) FactGroup_onto: | 
| 1245 | assumes h: "h ` carrier G = carrier H" | |
| 39910 | 1246 | shows "(\<lambda>X. the_elem (h ` X)) ` carrier (G Mod kernel G H h) = carrier H" | 
| 14803 | 1247 | proof | 
| 39910 | 1248 | show "(\<lambda>X. the_elem (h ` X)) ` carrier (G Mod kernel G H h) \<subseteq> carrier H" | 
| 1249 | by (auto simp add: FactGroup_the_elem_mem) | |
| 1250 | show "carrier H \<subseteq> (\<lambda>X. the_elem (h ` X)) ` carrier (G Mod kernel G H h)" | |
| 14803 | 1251 | proof | 
| 1252 | fix y | |
| 1253 | assume y: "y \<in> carrier H" | |
| 1254 | with h obtain g where g: "g \<in> carrier G" "h g = y" | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1255 | by (blast elim: equalityE) | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1256 |     hence "(\<Union>x\<in>kernel G H h #> g. {h x}) = {y}"
 | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1257 | by (auto simp add: y kernel_def r_coset_def) | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1258 | with g show "y \<in> (\<lambda>X. the_elem (h ` X)) ` carrier (G Mod kernel G H h)" | 
| 62343 
24106dc44def
prefer abbreviations for compound operators INFIMUM and SUPREMUM
 haftmann parents: 
61628diff
changeset | 1259 | apply (auto intro!: bexI image_eqI simp add: FactGroup_def RCOSETS_def) | 
| 
24106dc44def
prefer abbreviations for compound operators INFIMUM and SUPREMUM
 haftmann parents: 
61628diff
changeset | 1260 | apply (subst the_elem_image_unique) | 
| 
24106dc44def
prefer abbreviations for compound operators INFIMUM and SUPREMUM
 haftmann parents: 
61628diff
changeset | 1261 | apply auto | 
| 
24106dc44def
prefer abbreviations for compound operators INFIMUM and SUPREMUM
 haftmann parents: 
61628diff
changeset | 1262 | done | 
| 14803 | 1263 | qed | 
| 1264 | qed | |
| 1265 | ||
| 1266 | ||
| 69597 | 1267 | text\<open>If \<^term>\<open>h\<close> is a homomorphism from \<^term>\<open>G\<close> onto \<^term>\<open>H\<close>, then the | 
| 1268 | quotient group \<^term>\<open>G Mod (kernel G H h)\<close> is isomorphic to \<^term>\<open>H\<close>.\<close> | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1269 | theorem (in group_hom) FactGroup_iso_set: | 
| 14803 | 1270 | "h ` carrier G = carrier H | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1271 | \<Longrightarrow> (\<lambda>X. the_elem (h`X)) \<in> iso (G Mod (kernel G H h)) H" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1272 | by (simp add: iso_def FactGroup_hom FactGroup_inj_on bij_betw_def | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1273 | FactGroup_onto) | 
| 14803 | 1274 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1275 | corollary (in group_hom) FactGroup_iso : | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1276 | "h ` carrier G = carrier H | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1277 | \<Longrightarrow> (G Mod (kernel G H h))\<cong> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1278 | using FactGroup_iso_set unfolding is_iso_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1279 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1280 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1281 | lemma (in group_hom) trivial_hom_iff: \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 69122 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1282 |   "h ` (carrier G) = { \<one>\<^bsub>H\<^esub> } \<longleftrightarrow> kernel G H h = carrier G"
 | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1283 | unfolding kernel_def using one_closed by force | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1284 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1285 | lemma (in group_hom) trivial_ker_imp_inj: \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1286 |   assumes "kernel G H h = { \<one> }"
 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1287 | shows "inj_on h (carrier G)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1288 | proof (rule inj_onI) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1289 | fix g1 g2 assume A: "g1 \<in> carrier G" "g2 \<in> carrier G" "h g1 = h g2" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1290 | hence "h (g1 \<otimes> (inv g2)) = \<one>\<^bsub>H\<^esub>" by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1291 | hence "g1 \<otimes> (inv g2) = \<one>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1292 | using A assms unfolding kernel_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1293 | thus "g1 = g2" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1294 | using A G.inv_equality G.inv_inv by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1295 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1296 | |
| 69122 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1297 | lemma (in group_hom) inj_iff_trivial_ker: | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1298 |   shows "inj_on h (carrier G) \<longleftrightarrow> kernel G H h = { \<one> }"
 | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1299 | proof | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1300 |   assume inj: "inj_on h (carrier G)" show "kernel G H h = { \<one> }"
 | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1301 | unfolding kernel_def | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1302 | proof (auto) | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1303 | fix a assume "a \<in> carrier G" "h a = \<one>\<^bsub>H\<^esub>" thus "a = \<one>" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1304 | using inj hom_one unfolding inj_on_def by force | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1305 | qed | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1306 | next | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1307 |   show "kernel G H h = { \<one> } \<Longrightarrow> inj_on h (carrier G)"
 | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1308 | using trivial_ker_imp_inj by simp | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1309 | qed | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1310 | |
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1311 | lemma (in group_hom) induced_group_hom': | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1312 | assumes "subgroup I G" shows "group_hom (G \<lparr> carrier := I \<rparr>) H h" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1313 | proof - | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1314 | have "h \<in> hom (G \<lparr> carrier := I \<rparr>) H" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1315 | using homh subgroup.subset[OF assms] unfolding hom_def by (auto, meson hom_mult subsetCE) | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1316 | thus ?thesis | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1317 | using subgroup.subgroup_is_group[OF assms G.group_axioms] group_axioms | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1318 | unfolding group_hom_def group_hom_axioms_def by auto | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1319 | qed | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1320 | |
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1321 | lemma (in group_hom) inj_on_subgroup_iff_trivial_ker: | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1322 | assumes "subgroup I G" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1323 |   shows "inj_on h I \<longleftrightarrow> kernel (G \<lparr> carrier := I \<rparr>) H h = { \<one> }"
 | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1324 | using group_hom.inj_iff_trivial_ker[OF induced_group_hom'[OF assms]] by simp | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1325 | |
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1326 | lemma set_mult_hom: | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1327 | assumes "h \<in> hom G H" "I \<subseteq> carrier G" and "J \<subseteq> carrier G" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1328 | shows "h ` (I <#>\<^bsub>G\<^esub> J) = (h ` I) <#>\<^bsub>H\<^esub> (h ` J)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1329 | proof | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1330 | show "h ` (I <#>\<^bsub>G\<^esub> J) \<subseteq> (h ` I) <#>\<^bsub>H\<^esub> (h ` J)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1331 | proof | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1332 | fix a assume "a \<in> h ` (I <#>\<^bsub>G\<^esub> J)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1333 | then obtain i j where i: "i \<in> I" and j: "j \<in> J" and "a = h (i \<otimes>\<^bsub>G\<^esub> j)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1334 | unfolding set_mult_def by auto | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1335 | hence "a = (h i) \<otimes>\<^bsub>H\<^esub> (h j)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1336 | using assms unfolding hom_def by blast | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1337 | thus "a \<in> (h ` I) <#>\<^bsub>H\<^esub> (h ` J)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1338 | using i and j unfolding set_mult_def by auto | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1339 | qed | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1340 | next | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1341 | show "(h ` I) <#>\<^bsub>H\<^esub> (h ` J) \<subseteq> h ` (I <#>\<^bsub>G\<^esub> J)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1342 | proof | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1343 | fix a assume "a \<in> (h ` I) <#>\<^bsub>H\<^esub> (h ` J)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1344 | then obtain i j where i: "i \<in> I" and j: "j \<in> J" and "a = (h i) \<otimes>\<^bsub>H\<^esub> (h j)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1345 | unfolding set_mult_def by auto | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1346 | hence "a = h (i \<otimes>\<^bsub>G\<^esub> j)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1347 | using assms unfolding hom_def by fastforce | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1348 | thus "a \<in> h ` (I <#>\<^bsub>G\<^esub> J)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1349 | using i and j unfolding set_mult_def by auto | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1350 | qed | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1351 | qed | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1352 | |
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1353 | corollary coset_hom: | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1354 | assumes "h \<in> hom G H" "I \<subseteq> carrier G" "a \<in> carrier G" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1355 | shows "h ` (a <#\<^bsub>G\<^esub> I) = h a <#\<^bsub>H\<^esub> (h ` I)" and "h ` (I #>\<^bsub>G\<^esub> a) = (h ` I) #>\<^bsub>H\<^esub> h a" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1356 | unfolding l_coset_eq_set_mult r_coset_eq_set_mult using assms set_mult_hom[OF assms(1)] by auto | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1357 | |
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1358 | corollary (in group_hom) set_mult_ker_hom: | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1359 | assumes "I \<subseteq> carrier G" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1360 | shows "h ` (I <#> (kernel G H h)) = h ` I" and "h ` ((kernel G H h) <#> I) = h ` I" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1361 | proof - | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1362 | have ker_in_carrier: "kernel G H h \<subseteq> carrier G" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1363 | unfolding kernel_def by auto | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1364 | |
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1365 |   have "h ` (kernel G H h) = { \<one>\<^bsub>H\<^esub> }"
 | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1366 | unfolding kernel_def by force | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1367 | moreover have "h ` I \<subseteq> carrier H" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1368 | using assms by auto | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1369 |   hence "(h ` I) <#>\<^bsub>H\<^esub> { \<one>\<^bsub>H\<^esub> } = h ` I" and "{ \<one>\<^bsub>H\<^esub> } <#>\<^bsub>H\<^esub> (h ` I) = h ` I"
 | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1370 | unfolding set_mult_def by force+ | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1371 | ultimately show "h ` (I <#> (kernel G H h)) = h ` I" and "h ` ((kernel G H h) <#> I) = h ` I" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1372 | using set_mult_hom[OF homh assms ker_in_carrier] set_mult_hom[OF homh ker_in_carrier assms] by simp+ | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1373 | qed | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68975diff
changeset | 1374 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1375 | subsubsection\<open>Trivial homomorphisms\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1376 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1377 | definition trivial_homomorphism where | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1378 | "trivial_homomorphism G H f \<equiv> f \<in> hom G H \<and> (\<forall>x \<in> carrier G. f x = one H)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1379 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1380 | lemma trivial_homomorphism_kernel: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1381 | "trivial_homomorphism G H f \<longleftrightarrow> f \<in> hom G H \<and> kernel G H f = carrier G" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1382 | by (auto simp: trivial_homomorphism_def kernel_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1383 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1384 | lemma (in group) trivial_homomorphism_image: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1385 |    "trivial_homomorphism G H f \<longleftrightarrow> f \<in> hom G H \<and> f ` carrier G = {one H}"
 | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1386 | by (auto simp: trivial_homomorphism_def) (metis one_closed rev_image_eqI) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1387 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1388 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1389 | subsection \<open>Image kernel theorems\<close> | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1390 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1391 | lemma group_Int_image_ker: | 
| 77362 | 1392 | assumes f: "f \<in> hom G H" and g: "g \<in> hom H K" | 
| 1393 | and "inj_on (g \<circ> f) (carrier G)" "group G" "group H" "group K" | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1394 |   shows "(f ` carrier G) \<inter> (kernel H K g) = {\<one>\<^bsub>H\<^esub>}"
 | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1395 | proof - | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1396 |   have "(f ` carrier G) \<inter> (kernel H K g) \<subseteq> {\<one>\<^bsub>H\<^esub>}"
 | 
| 77362 | 1397 | using assms | 
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1398 | apply (clarsimp simp: kernel_def o_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1399 | by (metis group.is_monoid hom_one inj_on_eq_iff monoid.one_closed) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1400 | moreover have "one H \<in> f ` carrier G" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1401 | by (metis f \<open>group G\<close> \<open>group H\<close> group.is_monoid hom_one image_iff monoid.one_closed) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1402 | moreover have "one H \<in> kernel H K g" | 
| 77362 | 1403 | unfolding kernel_def using Group.group_def \<open>group H\<close> \<open>group K\<close> g hom_one by blast | 
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1404 | ultimately show ?thesis | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1405 | by blast | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1406 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1407 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1408 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1409 | lemma group_sum_image_ker: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1410 | assumes f: "f \<in> hom G H" and g: "g \<in> hom H K" and eq: "(g \<circ> f) ` (carrier G) = carrier K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1411 | and "group G" "group H" "group K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1412 | shows "set_mult H (f ` carrier G) (kernel H K g) = carrier H" (is "?lhs = ?rhs") | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1413 | proof | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1414 | show "?lhs \<subseteq> ?rhs" | 
| 77362 | 1415 | apply (clarsimp simp: kernel_def set_mult_def) | 
| 1416 | by (meson \<open>group H\<close> f group.is_monoid hom_in_carrier monoid.m_closed) | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1417 | have "\<exists>x\<in>carrier G. \<exists>z. z \<in> carrier H \<and> g z = \<one>\<^bsub>K\<^esub> \<and> y = f x \<otimes>\<^bsub>H\<^esub> z" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1418 | if y: "y \<in> carrier H" for y | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1419 | proof - | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1420 | have "g y \<in> carrier K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1421 | using g hom_carrier that by blast | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1422 | with assms obtain x where x: "x \<in> carrier G" "(g \<circ> f) x = g y" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1423 | by (metis image_iff) | 
| 77362 | 1424 | with assms have invf: "inv\<^bsub>H\<^esub> f x \<otimes>\<^bsub>H\<^esub> y \<in> carrier H" | 
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1425 | by (metis group.subgroup_self hom_carrier image_subset_iff subgroup_def y) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1426 | moreover | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1427 | have "g (inv\<^bsub>H\<^esub> f x \<otimes>\<^bsub>H\<^esub> y) = \<one>\<^bsub>K\<^esub>" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1428 | proof - | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1429 | have "inv\<^bsub>H\<^esub> f x \<in> carrier H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1430 | by (meson \<open>group H\<close> f group.inv_closed hom_carrier image_subset_iff x(1)) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1431 | then have "g (inv\<^bsub>H\<^esub> f x \<otimes>\<^bsub>H\<^esub> y) = g (inv\<^bsub>H\<^esub> f x) \<otimes>\<^bsub>K\<^esub> g y" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1432 | by (simp add: hom_mult [OF g] y) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1433 | also have "\<dots> = inv\<^bsub>K\<^esub> (g (f x)) \<otimes>\<^bsub>K\<^esub> g y" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1434 | using assms x(1) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1435 | by (metis (mono_tags, lifting) group_hom.hom_inv group_hom.intro group_hom_axioms.intro hom_carrier image_subset_iff) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1436 | also have "\<dots> = \<one>\<^bsub>K\<^esub>" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1437 | using \<open>g y \<in> carrier K\<close> assms(6) group.l_inv x(2) by fastforce | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1438 | finally show ?thesis . | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1439 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1440 | moreover | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1441 | have "y = f x \<otimes>\<^bsub>H\<^esub> (inv\<^bsub>H\<^esub> f x \<otimes>\<^bsub>H\<^esub> y)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1442 | using x y | 
| 77362 | 1443 | by (meson \<open>group H\<close> invf f group.inv_solve_left' hom_in_carrier) | 
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1444 | ultimately | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1445 | show ?thesis | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1446 | using x y by force | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1447 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1448 | then show "?rhs \<subseteq> ?lhs" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1449 | by (auto simp: kernel_def set_mult_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1450 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1451 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1452 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1453 | lemma group_sum_ker_image: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1454 | assumes f: "f \<in> hom G H" and g: "g \<in> hom H K" and eq: "(g \<circ> f) ` (carrier G) = carrier K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1455 | and "group G" "group H" "group K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1456 | shows "set_mult H (kernel H K g) (f ` carrier G) = carrier H" (is "?lhs = ?rhs") | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1457 | proof | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1458 | show "?lhs \<subseteq> ?rhs" | 
| 77362 | 1459 | apply (clarsimp simp: kernel_def set_mult_def) | 
| 1460 | by (meson \<open>group H\<close> f group.is_monoid hom_in_carrier monoid.m_closed) | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1461 | have "\<exists>w\<in>carrier H. \<exists>x \<in> carrier G. g w = \<one>\<^bsub>K\<^esub> \<and> y = w \<otimes>\<^bsub>H\<^esub> f x" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1462 | if y: "y \<in> carrier H" for y | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1463 | proof - | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1464 | have "g y \<in> carrier K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1465 | using g hom_carrier that by blast | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1466 | with assms obtain x where x: "x \<in> carrier G" "(g \<circ> f) x = g y" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1467 | by (metis image_iff) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1468 | with assms have carr: "(y \<otimes>\<^bsub>H\<^esub> inv\<^bsub>H\<^esub> f x) \<in> carrier H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1469 | by (metis group.subgroup_self hom_carrier image_subset_iff subgroup_def y) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1470 | moreover | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1471 | have "g (y \<otimes>\<^bsub>H\<^esub> inv\<^bsub>H\<^esub> f x) = \<one>\<^bsub>K\<^esub>" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1472 | proof - | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1473 | have "inv\<^bsub>H\<^esub> f x \<in> carrier H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1474 | by (meson \<open>group H\<close> f group.inv_closed hom_carrier image_subset_iff x(1)) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1475 | then have "g (y \<otimes>\<^bsub>H\<^esub> inv\<^bsub>H\<^esub> f x) = g y \<otimes>\<^bsub>K\<^esub> g (inv\<^bsub>H\<^esub> f x)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1476 | by (simp add: hom_mult [OF g] y) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1477 | also have "\<dots> = g y \<otimes>\<^bsub>K\<^esub> inv\<^bsub>K\<^esub> (g (f x))" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1478 | using assms x(1) | 
| 77362 | 1479 | by (metis group_hom.hom_inv group_hom_axioms.intro group_hom_def hom_in_carrier) | 
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1480 | also have "\<dots> = \<one>\<^bsub>K\<^esub>" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1481 | using \<open>g y \<in> carrier K\<close> assms(6) group.l_inv x(2) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1482 | by (simp add: group.r_inv) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1483 | finally show ?thesis . | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1484 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1485 | moreover | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1486 | have "y = (y \<otimes>\<^bsub>H\<^esub> inv\<^bsub>H\<^esub> f x) \<otimes>\<^bsub>H\<^esub> f x" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1487 | using x y by (meson \<open>group H\<close> carr f group.inv_solve_right hom_carrier image_subset_iff) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1488 | ultimately | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1489 | show ?thesis | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1490 | using x y by force | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1491 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1492 | then show "?rhs \<subseteq> ?lhs" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1493 | by (force simp: kernel_def set_mult_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1494 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1495 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1496 | lemma group_semidirect_sum_ker_image: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1497 | assumes "(g \<circ> f) \<in> iso G K" "f \<in> hom G H" "g \<in> hom H K" "group G" "group H" "group K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1498 |   shows "(kernel H K g) \<inter> (f ` carrier G) = {\<one>\<^bsub>H\<^esub>}"
 | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1499 | "kernel H K g <#>\<^bsub>H\<^esub> (f ` carrier G) = carrier H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1500 | using assms | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1501 | by (simp_all add: iso_iff_mon_epi group_Int_image_ker group_sum_ker_image epi_def mon_def Int_commute [of "kernel H K g"]) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1502 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1503 | lemma group_semidirect_sum_image_ker: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1504 | assumes f: "f \<in> hom G H" and g: "g \<in> hom H K" and iso: "(g \<circ> f) \<in> iso G K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1505 | and "group G" "group H" "group K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1506 |    shows "(f ` carrier G) \<inter> (kernel H K g) = {\<one>\<^bsub>H\<^esub>}"
 | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1507 | "f ` carrier G <#>\<^bsub>H\<^esub> (kernel H K g) = carrier H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1508 | using group_Int_image_ker [OF f g] group_sum_image_ker [OF f g] assms | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1509 | by (simp_all add: iso_def bij_betw_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1510 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1511 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1512 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1513 | subsection \<open>Factor Groups and Direct product\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1514 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1515 | lemma (in group) DirProd_normal : \<^marker>\<open>contributor \<open>Martin Baillon\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1516 | assumes "group K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1517 | and "H \<lhd> G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1518 | and "N \<lhd> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1519 | shows "H \<times> N \<lhd> G \<times>\<times> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1520 | proof (intro group.normal_invI[OF DirProd_group[OF group_axioms assms(1)]]) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1521 | show sub : "subgroup (H \<times> N) (G \<times>\<times> K)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1522 | using DirProd_subgroups[OF group_axioms normal_imp_subgroup[OF assms(2)]assms(1) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1523 | normal_imp_subgroup[OF assms(3)]]. | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1524 | show "\<And>x h. x \<in> carrier (G\<times>\<times>K) \<Longrightarrow> h \<in> H\<times>N \<Longrightarrow> x \<otimes>\<^bsub>G\<times>\<times>K\<^esub> h \<otimes>\<^bsub>G\<times>\<times>K\<^esub> inv\<^bsub>G\<times>\<times>K\<^esub> x \<in> H\<times>N" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1525 | proof- | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1526 | fix x h assume xGK : "x \<in> carrier (G \<times>\<times> K)" and hHN : " h \<in> H \<times> N" | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 1527 | hence hGK : "h \<in> carrier (G \<times>\<times> K)" using subgroup.subset[OF sub] by auto | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1528 | from xGK obtain x1 x2 where x1x2 :"x1 \<in> carrier G" "x2 \<in> carrier K" "x = (x1,x2)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1529 | unfolding DirProd_def by fastforce | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1530 | from hHN obtain h1 h2 where h1h2 : "h1 \<in> H" "h2 \<in> N" "h = (h1,h2)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1531 | unfolding DirProd_def by fastforce | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1532 | hence h1h2GK : "h1 \<in> carrier G" "h2 \<in> carrier K" | 
| 68687 | 1533 | using normal_imp_subgroup subgroup.subset assms by blast+ | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1534 | have "inv\<^bsub>G \<times>\<times> K\<^esub> x = (inv\<^bsub>G\<^esub> x1,inv\<^bsub>K\<^esub> x2)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1535 | using inv_DirProd[OF group_axioms assms(1) x1x2(1)x1x2(2)] x1x2 by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1536 | hence "x \<otimes>\<^bsub>G \<times>\<times> K\<^esub> h \<otimes>\<^bsub>G \<times>\<times> K\<^esub> inv\<^bsub>G \<times>\<times> K\<^esub> x = (x1 \<otimes> h1 \<otimes> inv x1,x2 \<otimes>\<^bsub>K\<^esub> h2 \<otimes>\<^bsub>K\<^esub> inv\<^bsub>K\<^esub> x2)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1537 | using h1h2 x1x2 h1h2GK by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1538 | moreover have "x1 \<otimes> h1 \<otimes> inv x1 \<in> H" "x2 \<otimes>\<^bsub>K\<^esub> h2 \<otimes>\<^bsub>K\<^esub> inv\<^bsub>K\<^esub> x2 \<in> N" | 
| 68687 | 1539 | using assms x1x2 h1h2 assms by (simp_all add: normal.inv_op_closed2) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1540 | hence "(x1 \<otimes> h1 \<otimes> inv x1, x2 \<otimes>\<^bsub>K\<^esub> h2 \<otimes>\<^bsub>K\<^esub> inv\<^bsub>K\<^esub> x2)\<in> H \<times> N" by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1541 | ultimately show " x \<otimes>\<^bsub>G \<times>\<times> K\<^esub> h \<otimes>\<^bsub>G \<times>\<times> K\<^esub> inv\<^bsub>G \<times>\<times> K\<^esub> x \<in> H \<times> N" by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1542 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1543 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1544 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1545 | lemma (in group) FactGroup_DirProd_multiplication_iso_set : \<^marker>\<open>contributor \<open>Martin Baillon\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1546 | assumes "group K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1547 | and "H \<lhd> G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1548 | and "N \<lhd> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1549 | shows "(\<lambda> (X, Y). X \<times> Y) \<in> iso ((G Mod H) \<times>\<times> (K Mod N)) (G \<times>\<times> K Mod H \<times> N)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1550 | proof- | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1551 | have R :"(\<lambda>(X, Y). X \<times> Y) \<in> carrier (G Mod H) \<times> carrier (K Mod N) \<rightarrow> carrier (G \<times>\<times> K Mod H \<times> N)" | 
| 68687 | 1552 | unfolding r_coset_def Sigma_def DirProd_def FactGroup_def RCOSETS_def by force | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1553 | moreover have "(\<forall>x\<in>carrier (G Mod H). \<forall>y\<in>carrier (K Mod N). \<forall>xa\<in>carrier (G Mod H). | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1554 | \<forall>ya\<in>carrier (K Mod N). (x <#> xa) \<times> (y <#>\<^bsub>K\<^esub> ya) = x \<times> y <#>\<^bsub>G \<times>\<times> K\<^esub> xa \<times> ya)" | 
| 68517 | 1555 | unfolding set_mult_def by force | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1556 | moreover have "(\<forall>x\<in>carrier (G Mod H). \<forall>y\<in>carrier (K Mod N). \<forall>xa\<in>carrier (G Mod H). | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1557 | \<forall>ya\<in>carrier (K Mod N). x \<times> y = xa \<times> ya \<longrightarrow> x = xa \<and> y = ya)" | 
| 68517 | 1558 | unfolding FactGroup_def using times_eq_iff subgroup.rcosets_non_empty | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1559 | by (metis assms(2) assms(3) normal_def partial_object.select_convs(1)) | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1560 | moreover have "(\<lambda>(X, Y). X \<times> Y) ` (carrier (G Mod H) \<times> carrier (K Mod N)) = | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1561 | carrier (G \<times>\<times> K Mod H \<times> N)" | 
| 68687 | 1562 | proof - | 
| 1563 | have 1: "\<And>x a b. \<lbrakk>a \<in> carrier (G Mod H); b \<in> carrier (K Mod N)\<rbrakk> \<Longrightarrow> a \<times> b \<in> carrier (G \<times>\<times> K Mod H \<times> N)" | |
| 1564 | using R by force | |
| 1565 | have 2: "\<And>z. z \<in> carrier (G \<times>\<times> K Mod H \<times> N) \<Longrightarrow> \<exists>x\<in>carrier (G Mod H). \<exists>y\<in>carrier (K Mod N). z = x \<times> y" | |
| 1566 | unfolding DirProd_def FactGroup_def RCOSETS_def r_coset_def by force | |
| 1567 | show ?thesis | |
| 1568 | unfolding image_def by (auto simp: intro: 1 2) | |
| 1569 | qed | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1570 | ultimately show ?thesis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1571 | unfolding iso_def hom_def bij_betw_def inj_on_def by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1572 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1573 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1574 | corollary (in group) FactGroup_DirProd_multiplication_iso_1 : \<^marker>\<open>contributor \<open>Martin Baillon\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1575 | assumes "group K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1576 | and "H \<lhd> G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1577 | and "N \<lhd> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1578 | shows " ((G Mod H) \<times>\<times> (K Mod N)) \<cong> (G \<times>\<times> K Mod H \<times> N)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1579 | unfolding is_iso_def using FactGroup_DirProd_multiplication_iso_set assms by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1580 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1581 | corollary (in group) FactGroup_DirProd_multiplication_iso_2 : \<^marker>\<open>contributor \<open>Martin Baillon\<close>\<close> | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1582 | assumes "group K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1583 | and "H \<lhd> G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1584 | and "N \<lhd> K" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1585 | shows "(G \<times>\<times> K Mod H \<times> N) \<cong> ((G Mod H) \<times>\<times> (K Mod N))" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1586 | using FactGroup_DirProd_multiplication_iso_1 group.iso_sym assms | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1587 | DirProd_group[OF normal.factorgroup_is_group normal.factorgroup_is_group] | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1588 | by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
67443diff
changeset | 1589 | |
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1590 | subsubsection "More Lemmas about set multiplication" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1591 | |
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1592 | text \<open>A group multiplied by a subgroup stays the same\<close> | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1593 | lemma (in group) set_mult_carrier_idem: | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1594 | assumes "subgroup H G" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1595 | shows "(carrier G) <#> H = carrier G" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1596 | proof | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1597 | show "(carrier G)<#>H \<subseteq> carrier G" | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 1598 | unfolding set_mult_def using subgroup.subset assms by blast | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1599 | next | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1600 | have " (carrier G) #> \<one> = carrier G" unfolding set_mult_def r_coset_def group_axioms by simp | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1601 | moreover have "(carrier G) #> \<one> \<subseteq> (carrier G) <#> H" unfolding set_mult_def r_coset_def | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1602 | using assms subgroup.one_closed[OF assms] by blast | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1603 | ultimately show "carrier G \<subseteq> (carrier G) <#> H" by simp | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1604 | qed | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1605 | |
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1606 | text \<open>Same lemma as above, but everything is included in a subgroup\<close> | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1607 | lemma (in group) set_mult_subgroup_idem: | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1608 | assumes HG: "subgroup H G" and NG: "subgroup N (G \<lparr> carrier := H \<rparr>)" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1609 | shows "H <#> N = H" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1610 | using group.set_mult_carrier_idem[OF subgroup.subgroup_is_group[OF HG group_axioms] NG] by simp | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1611 | |
| 77407 | 1612 | text \<open>A normal subgroup is commutative with set multiplication\<close> | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1613 | lemma (in group) commut_normal: | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1614 | assumes "subgroup H G" and "N\<lhd>G" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1615 | shows "H<#>N = N<#>H" | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1616 | proof- | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1617 |   have aux1: "{H <#> N} = {\<Union>h\<in>H. h <# N }" unfolding set_mult_def l_coset_def by auto
 | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1618 |   also have "... = {\<Union>h\<in>H. N #> h }" using assms normal.coset_eq subgroup.mem_carrier by fastforce
 | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1619 |   moreover have aux2: "{N <#> H} = {\<Union>h\<in>H. N #> h }"unfolding set_mult_def r_coset_def by auto
 | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1620 | ultimately show "H<#>N = N<#>H" by simp | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1621 | qed | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1622 | |
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1623 | text \<open>Same lemma as above, but everything is included in a subgroup\<close> | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1624 | lemma (in group) commut_normal_subgroup: | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1625 | assumes "subgroup H G" and "N \<lhd> (G\<lparr> carrier := H \<rparr>)" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1626 | and "subgroup K (G \<lparr> carrier := H \<rparr>)" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1627 | shows "K <#> N = N <#> K" | 
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1628 | by (metis assms(2) assms(3) group.commut_normal normal.axioms(2) set_mult_consistent) | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1629 | |
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1630 | |
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1631 | subsubsection "Lemmas about intersection and normal subgroups" | 
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1632 | text \<open>Mostly by Jakob von Raumer\<close> | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1633 | |
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1634 | lemma (in group) normal_inter: | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1635 | assumes "subgroup H G" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1636 | and "subgroup K G" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1637 | and "H1\<lhd>G\<lparr>carrier := H\<rparr>" | 
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1638 | shows "(H1\<inter>K)\<lhd>(G\<lparr>carrier:= (H\<inter>K)\<rparr>)" | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1639 | proof- | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1640 | define HK and H1K and GH and GHK | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1641 | where "HK = H\<inter>K" and "H1K=H1\<inter>K" and "GH =G\<lparr>carrier := H\<rparr>" and "GHK = (G\<lparr>carrier:= (H\<inter>K)\<rparr>)" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1642 | show "H1K\<lhd>GHK" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1643 | proof (intro group.normal_invI[of GHK H1K]) | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1644 | show "Group.group GHK" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1645 | using GHK_def subgroups_Inter_pair subgroup_imp_group assms by blast | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1646 | |
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1647 | next | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1648 | have H1K_incl:"subgroup H1K (G\<lparr>carrier:= (H\<inter>K)\<rparr>)" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1649 | proof(intro subgroup_incl) | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1650 | show "subgroup H1K G" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1651 | using assms normal_imp_subgroup subgroups_Inter_pair incl_subgroup H1K_def by blast | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1652 | next | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1653 | show "subgroup (H\<inter>K) G" using HK_def subgroups_Inter_pair assms by auto | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1654 | next | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1655 | have "H1 \<subseteq> (carrier (G\<lparr>carrier:=H\<rparr>))" | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 1656 | using assms(3) normal_imp_subgroup subgroup.subset by blast | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1657 | also have "... \<subseteq> H" by simp | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1658 | thus "H1K \<subseteq>H\<inter>K" | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1659 | using H1K_def calculation by auto | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1660 | qed | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1661 | thus "subgroup H1K GHK" using GHK_def by simp | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1662 | next | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1663 | show "\<And> x h. x\<in>carrier GHK \<Longrightarrow> h\<in>H1K \<Longrightarrow> x \<otimes>\<^bsub>GHK\<^esub> h \<otimes>\<^bsub>GHK\<^esub> inv\<^bsub>GHK\<^esub> x\<in> H1K" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1664 | proof- | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1665 | have invHK: "\<lbrakk>y\<in>HK\<rbrakk> \<Longrightarrow> inv\<^bsub>GHK\<^esub> y = inv\<^bsub>GH\<^esub> y" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1666 | using m_inv_consistent assms HK_def GH_def GHK_def subgroups_Inter_pair by simp | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1667 | have multHK : "\<lbrakk>x\<in>HK;y\<in>HK\<rbrakk> \<Longrightarrow> x \<otimes>\<^bsub>(G\<lparr>carrier:=HK\<rparr>)\<^esub> y = x \<otimes> y" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1668 | using HK_def by simp | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1669 | fix x assume p: "x\<in>carrier GHK" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1670 | fix h assume p2 : "h:H1K" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1671 | have "carrier(GHK)\<subseteq>HK" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1672 | using GHK_def HK_def by simp | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1673 | hence xHK:"x\<in>HK" using p by auto | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1674 | hence invx:"inv\<^bsub>GHK\<^esub> x = inv\<^bsub>GH\<^esub> x" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1675 | using invHK assms GHK_def HK_def GH_def m_inv_consistent subgroups_Inter_pair by simp | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1676 | have "H1\<subseteq>carrier(GH)" | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 1677 | using assms GH_def normal_imp_subgroup subgroup.subset by blast | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1678 | hence hHK:"h\<in>HK" | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1679 | using p2 H1K_def HK_def GH_def by auto | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1680 | hence xhx_egal : "x \<otimes>\<^bsub>GHK\<^esub> h \<otimes>\<^bsub>GHK\<^esub> inv\<^bsub>GHK\<^esub>x = x \<otimes>\<^bsub>GH\<^esub> h \<otimes>\<^bsub>GH\<^esub> inv\<^bsub>GH\<^esub> x" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1681 | using invx invHK multHK GHK_def GH_def by auto | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1682 | have xH:"x\<in>carrier(GH)" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1683 | using xHK HK_def GH_def by auto | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1684 | have hH:"h\<in>carrier(GH)" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1685 | using hHK HK_def GH_def by auto | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1686 | have "(\<forall>x\<in>carrier (GH). \<forall>h\<in>H1. x \<otimes>\<^bsub>GH\<^esub> h \<otimes>\<^bsub>GH\<^esub> inv\<^bsub>GH\<^esub> x \<in> H1)" | 
| 68687 | 1687 | using assms GH_def normal.inv_op_closed2 by fastforce | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1688 | hence INCL_1 : "x \<otimes>\<^bsub>GH\<^esub> h \<otimes>\<^bsub>GH\<^esub> inv\<^bsub>GH\<^esub> x \<in> H1" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1689 | using xH H1K_def p2 by blast | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1690 | have " x \<otimes>\<^bsub>GH\<^esub> h \<otimes>\<^bsub>GH\<^esub> inv\<^bsub>GH\<^esub> x \<in> HK" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1691 | using assms HK_def subgroups_Inter_pair hHK xHK | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1692 | by (metis GH_def inf.cobounded1 subgroup_def subgroup_incl) | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1693 | hence " x \<otimes>\<^bsub>GH\<^esub> h \<otimes>\<^bsub>GH\<^esub> inv\<^bsub>GH\<^esub> x \<in> K" using HK_def by simp | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1694 | hence " x \<otimes>\<^bsub>GH\<^esub> h \<otimes>\<^bsub>GH\<^esub> inv\<^bsub>GH\<^esub> x \<in> H1K" using INCL_1 H1K_def by auto | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1695 | thus "x \<otimes>\<^bsub>GHK\<^esub> h \<otimes>\<^bsub>GHK\<^esub> inv\<^bsub>GHK\<^esub> x \<in> H1K" using xhx_egal by simp | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1696 | qed | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1697 | qed | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1698 | qed | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1699 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1700 | lemma (in group) normal_Int_subgroup: | 
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1701 | assumes "subgroup H G" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1702 | and "N \<lhd> G" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1703 | shows "(N\<inter>H) \<lhd> (G\<lparr>carrier := H\<rparr>)" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1704 | proof - | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1705 | define K where "K = carrier G" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1706 | have "G\<lparr>carrier := K\<rparr> = G" using K_def by auto | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1707 | moreover have "subgroup K G" using K_def subgroup_self by blast | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1708 | moreover have "normal N (G \<lparr>carrier :=K\<rparr>)" using assms K_def by simp | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1709 | ultimately have "N \<inter> H \<lhd> G\<lparr>carrier := K \<inter> H\<rparr>" | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1710 | using normal_inter[of K H N] assms(1) by blast | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 1711 | moreover have "K \<inter> H = H" using K_def assms subgroup.subset by blast | 
| 68687 | 1712 | ultimately show "normal (N\<inter>H) (G\<lparr>carrier := H\<rparr>)" | 
| 1713 | by auto | |
| 68445 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1714 | qed | 
| 
c183a6a69f2d
reorganisation of Algebra: new material from Baillon and Vilhena, removal of duplicate names, elimination of "More_" theories
 paulson <lp15@cam.ac.uk> parents: 
68443diff
changeset | 1715 | |
| 77406 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1716 | lemma (in group) normal_restrict_supergroup: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1717 | assumes "subgroup S G" "N \<lhd> G" "N \<subseteq> S" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1718 | shows "N \<lhd> (G\<lparr>carrier := S\<rparr>)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1719 | by (metis assms inf.absorb_iff1 normal_Int_subgroup) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1720 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1721 | text \<open>A subgroup relation survives factoring by a normal subgroup.\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1722 | lemma (in group) normal_subgroup_factorize: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1723 | assumes "N \<lhd> G" and "N \<subseteq> H" and "subgroup H G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1724 | shows "subgroup (rcosets\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> N) (G Mod N)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1725 | proof - | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1726 | interpret GModN: group "G Mod N" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1727 | using assms(1) by (rule normal.factorgroup_is_group) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1728 | have "N \<lhd> G\<lparr>carrier := H\<rparr>" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1729 | using assms by (metis normal_restrict_supergroup) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1730 | hence grpHN: "group (G\<lparr>carrier := H\<rparr> Mod N)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1731 | by (rule normal.factorgroup_is_group) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1732 |   have "(<#>\<^bsub>G\<lparr>carrier:=H\<rparr>\<^esub>) = (\<lambda>U K. (\<Union>h\<in>U. \<Union>k\<in>K. {h \<otimes>\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> k}))" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1733 | using set_mult_def by metis | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1734 |   moreover have "\<dots> = (\<lambda>U K. (\<Union>h\<in>U. \<Union>k\<in>K. {h \<otimes>\<^bsub>G\<^esub> k}))" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1735 | by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1736 |   moreover have "(<#>) = (\<lambda>U K. (\<Union>h\<in>U. \<Union>k\<in>K. {h \<otimes> k}))" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1737 | using set_mult_def by metis | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1738 | ultimately have "(<#>\<^bsub>G\<lparr>carrier:=H\<rparr>\<^esub>) = (<#>\<^bsub>G\<^esub>)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1739 | by simp | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1740 | with grpHN have "group ((G Mod N)\<lparr>carrier := (rcosets\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> N)\<rparr>)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1741 | unfolding FactGroup_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1742 | moreover have "rcosets\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> N \<subseteq> carrier (G Mod N)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1743 | unfolding FactGroup_def RCOSETS_def r_coset_def using assms(3) subgroup.subset | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1744 | by fastforce | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1745 | ultimately show ?thesis | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1746 | using GModN.group_incl_imp_subgroup by blast | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1747 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1748 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1749 | text \<open>A normality relation survives factoring by a normal subgroup.\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1750 | lemma (in group) normality_factorization: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1751 | assumes NG: "N \<lhd> G" and NH: "N \<subseteq> H" and HG: "H \<lhd> G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1752 | shows "(rcosets\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> N) \<lhd> (G Mod N)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1753 | proof - | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1754 | from assms(1) interpret GModN: group "G Mod N" by (metis normal.factorgroup_is_group) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1755 | show ?thesis | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1756 | unfolding GModN.normal_inv_iff | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1757 | proof (intro conjI strip) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1758 | show "subgroup (rcosets\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> N) (G Mod N)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1759 | using assms normal_imp_subgroup normal_subgroup_factorize by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1760 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1761 | fix U V | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1762 | assume U: "U \<in> carrier (G Mod N)" and V: "V \<in> rcosets\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> N" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1763 | then obtain g where g: "g \<in> carrier G" "U = N #> g" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1764 | unfolding FactGroup_def RCOSETS_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1765 | from V obtain h where h: "h \<in> H" "V = N #> h" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1766 | unfolding FactGroup_def RCOSETS_def r_coset_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1767 | hence hG: "h \<in> carrier G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1768 | using HG normal_imp_subgroup subgroup.mem_carrier by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1769 | hence ghG: "g \<otimes> h \<in> carrier G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1770 | using g m_closed by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1771 | from g h have "g \<otimes> h \<otimes> inv g \<in> H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1772 | using HG normal_inv_iff by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1773 | moreover have "U <#> V <#> inv\<^bsub>G Mod N\<^esub> U = N #> (g \<otimes> h \<otimes> inv g)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1774 | proof - | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1775 | from g U have "inv\<^bsub>G Mod N\<^esub> U = N #> inv g" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1776 | using NG normal.inv_FactGroup normal.rcos_inv by fastforce | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1777 | hence "U <#> V <#> inv\<^bsub>G Mod N\<^esub> U = (N #> g) <#> (N #> h) <#> (N #> inv g)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1778 | using g h by simp | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1779 | also have "\<dots> = N #> (g \<otimes> h \<otimes> inv g)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1780 | using g hG NG inv_closed ghG normal.rcos_sum by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1781 | finally show ?thesis . | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1782 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1783 | ultimately show "U \<otimes>\<^bsub>G Mod N\<^esub> V \<otimes>\<^bsub>G Mod N\<^esub> inv\<^bsub>G Mod N\<^esub> U \<in> rcosets\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> N" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1784 | unfolding RCOSETS_def r_coset_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1785 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1786 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1787 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1788 | text \<open>Factorizing by the trivial subgroup is an isomorphism.\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1789 | lemma (in group) trivial_factor_iso: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1790 |   shows "the_elem \<in> iso (G Mod {\<one>}) G"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1791 | proof - | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1792 | have "group_hom G G (\<lambda>x. x)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1793 | unfolding group_hom_def group_hom_axioms_def hom_def using is_group by simp | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1794 | moreover have "(\<lambda>x. x) ` carrier G = carrier G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1795 | by simp | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1796 |   moreover have "kernel G G (\<lambda>x. x) = {\<one>}" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1797 | unfolding kernel_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1798 | ultimately show ?thesis using group_hom.FactGroup_iso_set | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1799 | by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1800 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1801 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1802 | text \<open>And the dual theorem to the previous one: Factorizing by the group itself gives the trivial group\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1803 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1804 | lemma (in group) self_factor_iso: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1805 |   shows "(\<lambda>X. the_elem ((\<lambda>x. \<one>) ` X)) \<in> iso (G Mod (carrier G)) (G\<lparr> carrier := {\<one>} \<rparr>)"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1806 | proof - | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1807 |   have "group (G\<lparr>carrier := {\<one>}\<rparr>)" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1808 | by (metis subgroup_imp_group triv_subgroup) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1809 |   hence "group_hom G (G\<lparr>carrier := {\<one>}\<rparr>) (\<lambda>x. \<one>)" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1810 | unfolding group_hom_def group_hom_axioms_def hom_def using is_group by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1811 |   moreover have "(\<lambda>x. \<one>) ` carrier G = carrier (G\<lparr>carrier := {\<one>}\<rparr>)" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1812 | by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1813 |   moreover have "kernel G (G\<lparr>carrier := {\<one>}\<rparr>) (\<lambda>x. \<one>) = carrier G" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1814 | unfolding kernel_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1815 | ultimately show ?thesis using group_hom.FactGroup_iso_set | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1816 | by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1817 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1818 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1819 | text \<open>Factoring by a normal subgroups yields the trivial group iff the subgroup is the whole group.\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1820 | lemma (in normal) fact_group_trivial_iff: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1821 | assumes "finite (carrier G)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1822 |   shows "(carrier (G Mod H) = {\<one>\<^bsub>G Mod H\<^esub>}) \<longleftrightarrow> (H = carrier G)"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1823 | proof | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1824 |   assume "carrier (G Mod H) = {\<one>\<^bsub>G Mod H\<^esub>}" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1825 | moreover have "order (G Mod H) * card H = order G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1826 | by (simp add: FactGroup_def lagrange order_def subgroup_axioms) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1827 | ultimately have "card H = order G" unfolding order_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1828 | thus "H = carrier G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1829 | by (simp add: assms card_subset_eq order_def subset) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1830 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1831 | assume "H = carrier G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1832 | with assms is_subgroup lagrange | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1833 | have "card (rcosets H) * order G = order G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1834 | by (simp add: order_def) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1835 | then have "card (rcosets H) = 1" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1836 | using assms order_gt_0_iff_finite by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1837 | hence "order (G Mod H) = 1" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1838 | unfolding order_def FactGroup_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1839 |   thus "carrier (G Mod H) = {\<one>\<^bsub>G Mod H\<^esub>}" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1840 | using factorgroup_is_group by (metis group.order_one_triv_iff) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1841 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1842 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1843 | text \<open>The union of all the cosets contained in a subgroup of a quotient group acts as a represenation for that subgroup.\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1844 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1845 | lemma (in normal) factgroup_subgroup_union_char: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1846 | assumes "subgroup A (G Mod H)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1847 |   shows "(\<Union>A) = {x \<in> carrier G. H #> x \<in> A}"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1848 | proof | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1849 |   show "\<Union>A \<subseteq> {x \<in> carrier G. H #> x \<in> A}"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1850 | proof | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1851 | fix x | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1852 | assume x: "x \<in> \<Union>A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1853 | then obtain a where a: "a \<in> A" "x \<in> a" and xx: "x \<in> carrier G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1854 | using subgroup.subset assms by (force simp add: FactGroup_def RCOSETS_def r_coset_def) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1855 | from assms a obtain y where y: "y \<in> carrier G" "a = H #> y" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1856 | using subgroup.subset unfolding FactGroup_def RCOSETS_def by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1857 | with a have "x \<in> H #> y" by simp | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1858 | hence "H #> y = H #> x" using y is_subgroup repr_independence by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1859 | with y(2) a(1) have "H #> x \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1860 | by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1861 |     with xx show "x \<in> {x \<in> carrier G. H #> x \<in> A}" by simp
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1862 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1863 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1864 |   show "{x \<in> carrier G. H #> x \<in> A} \<subseteq> \<Union>A"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1865 | using rcos_self subgroup_axioms by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1866 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1867 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1868 | lemma (in normal) factgroup_subgroup_union_subgroup: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1869 | assumes "subgroup A (G Mod H)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1870 | shows "subgroup (\<Union>A) G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1871 | proof - | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1872 |   have "subgroup {x \<in> carrier G. H #> x \<in> A} G"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1873 | proof | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1874 |     show "{x \<in> carrier G. H #> x \<in> A} \<subseteq> carrier G" by auto
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1875 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1876 | fix x y | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1877 |     assume xy: "x \<in> {x \<in> carrier G. H #> x \<in> A}" "y \<in> {x \<in> carrier G. H #> x \<in> A}"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1878 | then have "(H #> x) <#> (H #> y) \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1879 | using subgroup.m_closed assms unfolding FactGroup_def by fastforce | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1880 | hence "H #> (x \<otimes> y) \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1881 | using xy rcos_sum by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1882 |     with xy show "x \<otimes> y \<in> {x \<in> carrier G. H #> x \<in> A}" by blast 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1883 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1884 | have "H #> \<one> \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1885 | using assms subgroup.one_closed subset by fastforce | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1886 |     with assms one_closed show "\<one> \<in> {x \<in> carrier G. H #> x \<in> A}" by simp
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1887 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1888 | fix x | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1889 |     assume x: "x \<in> {x \<in> carrier G. H #> x \<in> A}"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1890 | hence invx: "inv x \<in> carrier G" using inv_closed by simp | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1891 | from assms x have "set_inv (H #> x) \<in> A" using subgroup.m_inv_closed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1892 | using inv_FactGroup subgroup.mem_carrier by fastforce | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1893 |     with invx show "inv x \<in> {x \<in> carrier G. H #> x \<in> A}"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1894 | using rcos_inv x by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1895 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1896 | with assms factgroup_subgroup_union_char show ?thesis by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1897 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1898 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1899 | lemma (in normal) factgroup_subgroup_union_normal: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1900 | assumes "A \<lhd> (G Mod H)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1901 | shows "\<Union>A \<lhd> G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1902 | proof - | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1903 |   have "{x \<in> carrier G. H #> x \<in> A} \<lhd> G"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1904 | unfolding normal_def normal_axioms_def | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1905 | proof (intro conjI strip) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1906 |     from assms show "subgroup {x \<in> carrier G. H #> x \<in> A} G"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1907 | by (metis (full_types) factgroup_subgroup_union_char factgroup_subgroup_union_subgroup normal_imp_subgroup) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1908 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1909 | interpret Anormal: normal A "(G Mod H)" using assms by simp | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1910 |     show "{x \<in> carrier G. H #> x \<in> A} #> x = x <# {x \<in> carrier G. H #> x \<in> A}" if x: "x \<in> carrier G" for x
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1911 | proof - | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1912 |       { fix y
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1913 |         assume y: "y \<in> {x \<in> carrier G. H #> x \<in> A} #> x"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1914 | then obtain x' where x': "x' \<in> carrier G" "H #> x' \<in> A" "y = x' \<otimes> x" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1915 | unfolding r_coset_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1916 | from x(1) have Hx: "H #> x \<in> carrier (G Mod H)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1917 | unfolding FactGroup_def RCOSETS_def by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1918 | with x' have "(inv\<^bsub>G Mod H\<^esub> (H #> x)) \<otimes>\<^bsub>G Mod H\<^esub> (H #> x') \<otimes>\<^bsub>G Mod H\<^esub> (H #> x) \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1919 | using Anormal.inv_op_closed1 by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1920 | hence "(set_inv (H #> x)) <#> (H #> x') <#> (H #> x) \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1921 | using inv_FactGroup Hx unfolding FactGroup_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1922 | hence "(H #> (inv x)) <#> (H #> x') <#> (H #> x) \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1923 | using x(1) by (metis rcos_inv) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1924 | hence "H #> (inv x \<otimes> x' \<otimes> x) \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1925 | by (metis inv_closed m_closed rcos_sum x'(1) x(1)) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1926 | moreover have "inv x \<otimes> x' \<otimes> x \<in> carrier G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1927 | using x x' by (metis inv_closed m_closed) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1928 |         ultimately have xcoset: "x \<otimes> (inv x \<otimes> x' \<otimes> x) \<in> x <# {x \<in> carrier G. H #> x \<in> A}" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1929 | unfolding l_coset_def using x(1) by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1930 | have "x \<otimes> (inv x \<otimes> x' \<otimes> x) = (x \<otimes> inv x) \<otimes> x' \<otimes> x" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1931 | by (metis Units_eq Units_inv_Units m_assoc m_closed x'(1) x(1)) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1932 | also have "\<dots> = y" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1933 | by (simp add: x x') | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1934 | finally have "x \<otimes> (inv x \<otimes> x' \<otimes> x) = y" . | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1935 |         with xcoset have "y \<in> x <# {x \<in> carrier G. H #> x \<in> A}" by auto}
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1936 | moreover | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1937 |       { fix y
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1938 |         assume y: "y \<in> x <# {x \<in> carrier G. H #> x \<in> A}"
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1939 | then obtain x' where x': "x' \<in> carrier G" "H #> x' \<in> A" "y = x \<otimes> x'" unfolding l_coset_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1940 | from x(1) have invx: "inv x \<in> carrier G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1941 | by (rule inv_closed) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1942 | hence Hinvx: "H #> (inv x) \<in> carrier (G Mod H)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1943 | unfolding FactGroup_def RCOSETS_def by force | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1944 | with x' have "(inv\<^bsub>G Mod H\<^esub> (H #> inv x)) \<otimes>\<^bsub>G Mod H\<^esub> (H #> x') \<otimes>\<^bsub>G Mod H\<^esub> (H #> inv x) \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1945 | using invx Anormal.inv_op_closed1 by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1946 | hence "(set_inv (H #> inv x)) <#> (H #> x') <#> (H #> inv x) \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1947 | using inv_FactGroup Hinvx unfolding FactGroup_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1948 | hence "H #> (x \<otimes> x' \<otimes> inv x) \<in> A" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1949 | by (simp add: rcos_inv rcos_sum x x'(1)) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1950 | moreover have "x \<otimes> x' \<otimes> inv x \<in> carrier G" using x x' by (metis inv_closed m_closed) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1951 |         ultimately have xcoset: "(x \<otimes> x' \<otimes> inv x) \<otimes> x \<in> {x \<in> carrier G. H #> x \<in> A} #> x" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1952 | unfolding r_coset_def using invx by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1953 | have "(x \<otimes> x' \<otimes> inv x) \<otimes> x = (x \<otimes> x') \<otimes> (inv x \<otimes> x)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1954 | by (metis Units_eq Units_inv_Units m_assoc m_closed x'(1) x(1)) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1955 | also have "\<dots> = y" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1956 | by (simp add: x x') | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1957 | finally have "x \<otimes> x' \<otimes> inv x \<otimes> x = y". | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1958 |         with xcoset have "y \<in> {x \<in> carrier G. H #> x \<in> A} #> x" by auto }
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1959 | ultimately show ?thesis | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1960 | by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1961 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1962 | qed auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1963 | with assms show ?thesis | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1964 | by (metis (full_types) factgroup_subgroup_union_char normal_imp_subgroup) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1965 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1966 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1967 | lemma (in normal) factgroup_subgroup_union_factor: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1968 | assumes "subgroup A (G Mod H)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1969 | shows "A = rcosets\<^bsub>G\<lparr>carrier := \<Union>A\<rparr>\<^esub> H" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1970 | using assms subgroup.mem_carrier factgroup_subgroup_union_char by (fastforce simp: RCOSETS_def FactGroup_def) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1971 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1972 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1973 | section \<open>Flattening the type of group carriers\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1974 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1975 | text \<open>Flattening here means to convert the type of group elements from 'a set to 'a. | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1976 | This is possible whenever the empty set is not an element of the group. By Jakob von Raumer\<close> | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1977 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1978 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1979 | definition flatten where | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1980 |   "flatten (G::('a set, 'b) monoid_scheme) rep = \<lparr>carrier=(rep ` (carrier G)),
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1981 | monoid.mult=(\<lambda> x y. rep ((the_inv_into (carrier G) rep x) \<otimes>\<^bsub>G\<^esub> (the_inv_into (carrier G) rep y))), | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1982 | one=rep \<one>\<^bsub>G\<^esub> \<rparr>" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1983 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1984 | lemma flatten_set_group_hom: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1985 | assumes group: "group G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1986 | assumes inj: "inj_on rep (carrier G)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1987 | shows "rep \<in> hom G (flatten G rep)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1988 | by (force simp add: hom_def flatten_def inj the_inv_into_f_f) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1989 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1990 | lemma flatten_set_group: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1991 | assumes "group G" "inj_on rep (carrier G)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1992 | shows "group (flatten G rep)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1993 | proof (rule groupI) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1994 | fix x y | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1995 | assume "x \<in> carrier (flatten G rep)" and "y \<in> carrier (flatten G rep)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1996 | then show "x \<otimes>\<^bsub>flatten G rep\<^esub> y \<in> carrier (flatten G rep)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1997 | using assms group.surj_const_mult the_inv_into_f_f by (fastforce simp: flatten_def) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1998 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 1999 | show "\<one>\<^bsub>flatten G rep\<^esub> \<in> carrier (flatten G rep)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2000 | unfolding flatten_def by (simp add: assms group.is_monoid) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2001 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2002 | fix x y z | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2003 | assume "x \<in> carrier (flatten G rep)" "y \<in> carrier (flatten G rep)" "z \<in> carrier (flatten G rep)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2004 | then show "x \<otimes>\<^bsub>flatten G rep\<^esub> y \<otimes>\<^bsub>flatten G rep\<^esub> z = x \<otimes>\<^bsub>flatten G rep\<^esub> (y \<otimes>\<^bsub>flatten G rep\<^esub> z)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2005 | by (auto simp: assms flatten_def group.is_monoid monoid.m_assoc monoid.m_closed the_inv_into_f_f) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2006 | next | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2007 | fix x | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2008 | assume x: "x \<in> carrier (flatten G rep)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2009 | then show "\<one>\<^bsub>flatten G rep\<^esub> \<otimes>\<^bsub>flatten G rep\<^esub> x = x" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2010 | by (auto simp: assms group.is_monoid the_inv_into_f_f flatten_def) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2011 | then have "\<exists>y\<in>carrier G. rep (y \<otimes>\<^bsub>G\<^esub> z) = rep \<one>\<^bsub>G\<^esub>" if "z \<in> carrier G" for z | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2012 | by (metis \<open>group G\<close> group.l_inv_ex that) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2013 | with assms x show "\<exists>y\<in>carrier (flatten G rep). y \<otimes>\<^bsub>flatten G rep\<^esub> x = \<one>\<^bsub>flatten G rep\<^esub>" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2014 | by (auto simp: flatten_def the_inv_into_f_f) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2015 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2016 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2017 | lemma (in normal) flatten_set_group_mod_inj: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2018 | shows "inj_on (\<lambda>U. SOME g. g \<in> U) (carrier (G Mod H))" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2019 | proof (rule inj_onI) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2020 | fix U V | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2021 | assume U: "U \<in> carrier (G Mod H)" and V: "V \<in> carrier (G Mod H)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2022 | then obtain g h where g: "U = H #> g" "g \<in> carrier G" and h: "V = H #> h" "h \<in> carrier G" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2023 | unfolding FactGroup_def RCOSETS_def by auto | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2024 |   hence notempty: "U \<noteq> {}" "V \<noteq> {}" 
 | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2025 | by (metis empty_iff is_subgroup rcos_self)+ | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2026 | assume "(SOME g. g \<in> U) = (SOME g. g \<in> V)" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2027 | with notempty have "(SOME g. g \<in> U) \<in> U \<inter> V" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2028 | by (metis IntI ex_in_conv someI) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2029 | thus "U = V" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2030 | by (metis Int_iff g h is_subgroup repr_independence) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2031 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2032 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2033 | lemma (in normal) flatten_set_group_mod: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2034 | shows "group (flatten (G Mod H) (\<lambda>U. SOME g. g \<in> U))" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2035 | by (simp add: factorgroup_is_group flatten_set_group flatten_set_group_mod_inj) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2036 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2037 | lemma (in normal) flatten_set_group_mod_iso: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2038 | shows "(\<lambda>U. SOME g. g \<in> U) \<in> iso (G Mod H) (flatten (G Mod H) (\<lambda>U. SOME g. g \<in> U))" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2039 | proof - | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2040 | have "(\<lambda>U. SOME g. g \<in> U) \<in> hom (G Mod H) (flatten (G Mod H) (\<lambda>U. SOME g. g \<in> U))" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2041 | using factorgroup_is_group flatten_set_group_hom flatten_set_group_mod_inj by blast | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2042 | moreover | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2043 | have "inj_on (\<lambda>U. SOME g. g \<in> U) (carrier (G Mod H))" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2044 | using flatten_set_group_mod_inj by blast | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2045 | ultimately show ?thesis | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2046 | by (simp add: iso_def bij_betw_def flatten_def) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2047 | qed | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
77362diff
changeset | 2048 | |
| 13870 
cf947d1ec5ff
moved Exponent, Coset, Sylow from GroupTheory to Algebra, converting them
 paulson parents: diff
changeset | 2049 | end |