| author | Fabian Huch <huch@in.tum.de> | 
| Fri, 01 Dec 2023 20:32:34 +0100 | |
| changeset 79101 | 4e47b34fbb8e | 
| parent 77406 | c2013f617a70 | 
| child 80400 | 898034c8a799 | 
| permissions | -rw-r--r-- | 
| 35849 | 1 | (* Title: HOL/Algebra/Group.thy | 
| 2 | Author: Clemens Ballarin, started 4 February 2003 | |
| 13813 | 3 | |
| 4 | Based on work by Florian Kammueller, L C Paulson and Markus Wenzel. | |
| 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 | 5 | With additional contributions from Martin Baillon and Paulo Emílio de Vilhena. | 
| 13813 | 6 | *) | 
| 7 | ||
| 28823 | 8 | theory Group | 
| 68188 
2af1f142f855
move FuncSet back to HOL-Library (amending 493b818e8e10)
 immler parents: 
68072diff
changeset | 9 | imports Complete_Lattice "HOL-Library.FuncSet" | 
| 28823 | 10 | begin | 
| 13813 | 11 | |
| 61382 | 12 | section \<open>Monoids and Groups\<close> | 
| 13936 | 13 | |
| 61382 | 14 | subsection \<open>Definitions\<close> | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19984diff
changeset | 15 | |
| 61382 | 16 | text \<open> | 
| 76987 | 17 | Definitions follow \<^cite>\<open>"Jacobson:1985"\<close>. | 
| 61382 | 18 | \<close> | 
| 13813 | 19 | |
| 14963 | 20 | record 'a monoid = "'a partial_object" + | 
| 21 | mult :: "['a, 'a] \<Rightarrow> 'a" (infixl "\<otimes>\<index>" 70) | |
| 22 |   one     :: 'a ("\<one>\<index>")
 | |
| 13817 | 23 | |
| 35847 | 24 | definition | 
| 14852 | 25 |   m_inv :: "('a, 'b) monoid_scheme => 'a => 'a" ("inv\<index> _" [81] 80)
 | 
| 67091 | 26 | where "inv\<^bsub>G\<^esub> x = (THE y. y \<in> carrier G \<and> x \<otimes>\<^bsub>G\<^esub> y = \<one>\<^bsub>G\<^esub> \<and> y \<otimes>\<^bsub>G\<^esub> x = \<one>\<^bsub>G\<^esub>)" | 
| 13936 | 27 | |
| 35847 | 28 | definition | 
| 14651 | 29 | Units :: "_ => 'a set" | 
| 67443 
3abf6a722518
standardized towards new-style formal comments: isabelle update_comments;
 wenzelm parents: 
67399diff
changeset | 30 | \<comment> \<open>The set of invertible elements\<close> | 
| 67091 | 31 |   where "Units G = {y. y \<in> carrier G \<and> (\<exists>x \<in> carrier G. x \<otimes>\<^bsub>G\<^esub> y = \<one>\<^bsub>G\<^esub> \<and> y \<otimes>\<^bsub>G\<^esub> x = \<one>\<^bsub>G\<^esub>)}"
 | 
| 13936 | 32 | |
| 19783 | 33 | locale monoid = | 
| 34 | fixes G (structure) | |
| 13813 | 35 | assumes m_closed [intro, simp]: | 
| 14963 | 36 | "\<lbrakk>x \<in> carrier G; y \<in> carrier G\<rbrakk> \<Longrightarrow> x \<otimes> y \<in> carrier G" | 
| 37 | and m_assoc: | |
| 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 | 38 | "\<lbrakk>x \<in> carrier G; y \<in> carrier G; z \<in> carrier G\<rbrakk> | 
| 14963 | 39 | \<Longrightarrow> (x \<otimes> y) \<otimes> z = x \<otimes> (y \<otimes> z)" | 
| 40 | and one_closed [intro, simp]: "\<one> \<in> carrier G" | |
| 41 | and l_one [simp]: "x \<in> carrier G \<Longrightarrow> \<one> \<otimes> x = x" | |
| 42 | and r_one [simp]: "x \<in> carrier G \<Longrightarrow> x \<otimes> \<one> = x" | |
| 13817 | 43 | |
| 13936 | 44 | lemma monoidI: | 
| 19783 | 45 | fixes G (structure) | 
| 13936 | 46 | assumes m_closed: | 
| 14693 | 47 | "!!x y. [| x \<in> carrier G; y \<in> carrier G |] ==> x \<otimes> y \<in> carrier G" | 
| 48 | and one_closed: "\<one> \<in> carrier G" | |
| 13936 | 49 | and m_assoc: | 
| 50 | "!!x y z. [| x \<in> carrier G; y \<in> carrier G; z \<in> carrier G |] ==> | |
| 14693 | 51 | (x \<otimes> y) \<otimes> z = x \<otimes> (y \<otimes> z)" | 
| 52 | and l_one: "!!x. x \<in> carrier G ==> \<one> \<otimes> x = x" | |
| 53 | and r_one: "!!x. x \<in> carrier G ==> x \<otimes> \<one> = x" | |
| 13936 | 54 | shows "monoid G" | 
| 27714 
27b4d7c01f8b
Tuned (for the sake of a meaningless log entry).
 ballarin parents: 
27713diff
changeset | 55 | by (fast intro!: monoid.intro intro: assms) | 
| 13936 | 56 | |
| 57 | lemma (in monoid) Units_closed [dest]: | |
| 58 | "x \<in> Units G ==> x \<in> carrier G" | |
| 59 | by (unfold Units_def) fast | |
| 60 | ||
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 61 | lemma (in monoid) one_unique: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 62 | assumes "u \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 63 | and "\<And>x. x \<in> carrier G \<Longrightarrow> u \<otimes> x = x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 64 | shows "u = \<one>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 65 | using assms(2)[OF one_closed] r_one[OF assms(1)] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 66 | |
| 13936 | 67 | lemma (in monoid) inv_unique: | 
| 14693 | 68 | assumes eq: "y \<otimes> x = \<one>" "x \<otimes> y' = \<one>" | 
| 69 | and G: "x \<in> carrier G" "y \<in> carrier G" "y' \<in> carrier G" | |
| 13936 | 70 | shows "y = y'" | 
| 71 | proof - | |
| 72 | from G eq have "y = y \<otimes> (x \<otimes> y')" by simp | |
| 73 | also from G have "... = (y \<otimes> x) \<otimes> y'" by (simp add: m_assoc) | |
| 74 | also from G eq have "... = y'" by simp | |
| 75 | finally show ?thesis . | |
| 76 | qed | |
| 77 | ||
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 78 | lemma (in monoid) Units_m_closed [simp, intro]: | 
| 27698 | 79 | assumes x: "x \<in> Units G" and y: "y \<in> Units G" | 
| 80 | shows "x \<otimes> y \<in> Units G" | |
| 81 | proof - | |
| 82 | from x obtain x' where x: "x \<in> carrier G" "x' \<in> carrier G" and xinv: "x \<otimes> x' = \<one>" "x' \<otimes> x = \<one>" | |
| 83 | unfolding Units_def by fast | |
| 84 | from y obtain y' where y: "y \<in> carrier G" "y' \<in> carrier G" and yinv: "y \<otimes> y' = \<one>" "y' \<otimes> y = \<one>" | |
| 85 | unfolding Units_def by fast | |
| 86 | from x y xinv yinv have "y' \<otimes> (x' \<otimes> x) \<otimes> y = \<one>" by simp | |
| 87 | moreover from x y xinv yinv have "x \<otimes> (y \<otimes> y') \<otimes> x' = \<one>" by simp | |
| 88 | moreover note x y | |
| 89 | ultimately show ?thesis unfolding Units_def | |
| 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 | 90 | by simp (metis m_assoc m_closed) | 
| 27698 | 91 | qed | 
| 92 | ||
| 13940 | 93 | lemma (in monoid) Units_one_closed [intro, simp]: | 
| 94 | "\<one> \<in> Units G" | |
| 95 | by (unfold Units_def) auto | |
| 96 | ||
| 13936 | 97 | lemma (in monoid) Units_inv_closed [intro, simp]: | 
| 98 | "x \<in> Units G ==> inv x \<in> carrier G" | |
| 68662 | 99 | apply (simp add: Units_def m_inv_def) | 
| 100 | by (metis (mono_tags, lifting) inv_unique the_equality) | |
| 13936 | 101 | |
| 19981 | 102 | lemma (in monoid) Units_l_inv_ex: | 
| 103 | "x \<in> Units G ==> \<exists>y \<in> carrier G. y \<otimes> x = \<one>" | |
| 104 | by (unfold Units_def) auto | |
| 105 | ||
| 106 | lemma (in monoid) Units_r_inv_ex: | |
| 107 | "x \<in> Units G ==> \<exists>y \<in> carrier G. x \<otimes> y = \<one>" | |
| 108 | by (unfold Units_def) auto | |
| 109 | ||
| 27698 | 110 | lemma (in monoid) Units_l_inv [simp]: | 
| 13936 | 111 | "x \<in> Units G ==> inv x \<otimes> x = \<one>" | 
| 68662 | 112 | apply (unfold Units_def m_inv_def, simp) | 
| 113 | by (metis (mono_tags, lifting) inv_unique the_equality) | |
| 13936 | 114 | |
| 27698 | 115 | lemma (in monoid) Units_r_inv [simp]: | 
| 13936 | 116 | "x \<in> Units G ==> x \<otimes> inv x = \<one>" | 
| 68458 | 117 | by (metis (full_types) Units_closed Units_inv_closed Units_l_inv Units_r_inv_ex inv_unique) | 
| 13936 | 118 | |
| 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 | 119 | lemma (in monoid) inv_one [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 | 120 | "inv \<one> = \<one>" | 
| 
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 | 121 | by (metis Units_one_closed Units_r_inv l_one monoid.Units_inv_closed monoid_axioms) | 
| 
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 | 122 | |
| 13936 | 123 | lemma (in monoid) Units_inv_Units [intro, simp]: | 
| 124 | "x \<in> Units G ==> inv x \<in> Units G" | |
| 125 | proof - | |
| 126 | assume x: "x \<in> Units G" | |
| 127 | show "inv x \<in> Units G" | |
| 128 | by (auto simp add: Units_def | |
| 129 | intro: Units_l_inv Units_r_inv x Units_closed [OF x]) | |
| 130 | qed | |
| 131 | ||
| 132 | lemma (in monoid) Units_l_cancel [simp]: | |
| 133 | "[| x \<in> Units G; y \<in> carrier G; z \<in> carrier G |] ==> | |
| 134 | (x \<otimes> y = x \<otimes> z) = (y = z)" | |
| 135 | proof | |
| 136 | assume eq: "x \<otimes> y = x \<otimes> z" | |
| 14693 | 137 | and G: "x \<in> Units G" "y \<in> carrier G" "z \<in> carrier G" | 
| 13936 | 138 | then have "(inv x \<otimes> x) \<otimes> y = (inv x \<otimes> x) \<otimes> z" | 
| 27698 | 139 | by (simp add: m_assoc Units_closed del: Units_l_inv) | 
| 44472 | 140 | with G show "y = z" by simp | 
| 13936 | 141 | next | 
| 142 | assume eq: "y = z" | |
| 14693 | 143 | and G: "x \<in> Units G" "y \<in> carrier G" "z \<in> carrier G" | 
| 13936 | 144 | then show "x \<otimes> y = x \<otimes> z" by simp | 
| 145 | qed | |
| 146 | ||
| 147 | lemma (in monoid) Units_inv_inv [simp]: | |
| 148 | "x \<in> Units G ==> inv (inv x) = x" | |
| 149 | proof - | |
| 150 | assume x: "x \<in> Units G" | |
| 27698 | 151 | then have "inv x \<otimes> inv (inv x) = inv x \<otimes> x" by simp | 
| 152 | with x show ?thesis by (simp add: Units_closed del: Units_l_inv Units_r_inv) | |
| 13936 | 153 | qed | 
| 154 | ||
| 155 | lemma (in monoid) inv_inj_on_Units: | |
| 156 | "inj_on (m_inv G) (Units G)" | |
| 157 | proof (rule inj_onI) | |
| 158 | fix x y | |
| 14693 | 159 | assume G: "x \<in> Units G" "y \<in> Units G" and eq: "inv x = inv y" | 
| 13936 | 160 | then have "inv (inv x) = inv (inv y)" by simp | 
| 161 | with G show "x = y" by simp | |
| 162 | qed | |
| 163 | ||
| 13940 | 164 | lemma (in monoid) Units_inv_comm: | 
| 165 | assumes inv: "x \<otimes> y = \<one>" | |
| 14693 | 166 | and G: "x \<in> Units G" "y \<in> Units G" | 
| 13940 | 167 | shows "y \<otimes> x = \<one>" | 
| 168 | proof - | |
| 169 | from G have "x \<otimes> y \<otimes> x = x \<otimes> \<one>" by (auto simp add: inv Units_closed) | |
| 170 | with G show ?thesis by (simp del: r_one add: m_assoc Units_closed) | |
| 171 | qed | |
| 172 | ||
| 61628 | 173 | lemma (in monoid) carrier_not_empty: "carrier G \<noteq> {}"
 | 
| 174 | by auto | |
| 175 | ||
| 27698 | 176 | (* Jacobson defines submonoid here. *) | 
| 177 | (* Jacobson defines the order of a monoid here. *) | |
| 178 | ||
| 179 | ||
| 61382 | 180 | subsection \<open>Groups\<close> | 
| 27698 | 181 | |
| 61382 | 182 | text \<open> | 
| 13936 | 183 | A group is a monoid all of whose elements are invertible. | 
| 61382 | 184 | \<close> | 
| 13936 | 185 | |
| 186 | locale group = monoid + | |
| 187 | assumes Units: "carrier G <= Units G" | |
| 188 | ||
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 189 | lemma (in group) is_group [iff]: "group G" by (rule group_axioms) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 190 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 191 | lemma (in group) is_monoid [iff]: "monoid G" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 192 | by (rule monoid_axioms) | 
| 14761 | 193 | |
| 13936 | 194 | theorem groupI: | 
| 19783 | 195 | fixes G (structure) | 
| 13936 | 196 | assumes m_closed [simp]: | 
| 14693 | 197 | "!!x y. [| x \<in> carrier G; y \<in> carrier G |] ==> x \<otimes> y \<in> carrier G" | 
| 198 | and one_closed [simp]: "\<one> \<in> carrier G" | |
| 13936 | 199 | and m_assoc: | 
| 200 | "!!x y z. [| x \<in> carrier G; y \<in> carrier G; z \<in> carrier G |] ==> | |
| 14693 | 201 | (x \<otimes> y) \<otimes> z = x \<otimes> (y \<otimes> z)" | 
| 202 | and l_one [simp]: "!!x. x \<in> carrier G ==> \<one> \<otimes> x = x" | |
| 14963 | 203 | and l_inv_ex: "!!x. x \<in> carrier G ==> \<exists>y \<in> carrier G. y \<otimes> x = \<one>" | 
| 13936 | 204 | shows "group G" | 
| 205 | proof - | |
| 206 | have l_cancel [simp]: | |
| 207 | "!!x y z. [| x \<in> carrier G; y \<in> carrier G; z \<in> carrier G |] ==> | |
| 14693 | 208 | (x \<otimes> y = x \<otimes> z) = (y = z)" | 
| 13936 | 209 | proof | 
| 210 | fix x y z | |
| 14693 | 211 | assume eq: "x \<otimes> y = x \<otimes> z" | 
| 212 | and G: "x \<in> carrier G" "y \<in> carrier G" "z \<in> carrier G" | |
| 13936 | 213 | with l_inv_ex obtain x_inv where xG: "x_inv \<in> carrier G" | 
| 14693 | 214 | and l_inv: "x_inv \<otimes> x = \<one>" by fast | 
| 215 | from G eq xG have "(x_inv \<otimes> x) \<otimes> y = (x_inv \<otimes> x) \<otimes> z" | |
| 13936 | 216 | by (simp add: m_assoc) | 
| 217 | with G show "y = z" by (simp add: l_inv) | |
| 218 | next | |
| 219 | fix x y z | |
| 220 | assume eq: "y = z" | |
| 14693 | 221 | and G: "x \<in> carrier G" "y \<in> carrier G" "z \<in> carrier G" | 
| 222 | then show "x \<otimes> y = x \<otimes> z" by simp | |
| 13936 | 223 | qed | 
| 224 | have r_one: | |
| 14693 | 225 | "!!x. x \<in> carrier G ==> x \<otimes> \<one> = x" | 
| 13936 | 226 | proof - | 
| 227 | fix x | |
| 228 | assume x: "x \<in> carrier G" | |
| 229 | with l_inv_ex obtain x_inv where xG: "x_inv \<in> carrier G" | |
| 14693 | 230 | and l_inv: "x_inv \<otimes> x = \<one>" by fast | 
| 231 | from x xG have "x_inv \<otimes> (x \<otimes> \<one>) = x_inv \<otimes> x" | |
| 13936 | 232 | by (simp add: m_assoc [symmetric] l_inv) | 
| 14693 | 233 | with x xG show "x \<otimes> \<one> = x" by simp | 
| 13936 | 234 | qed | 
| 235 | have inv_ex: | |
| 67091 | 236 | "\<And>x. x \<in> carrier G \<Longrightarrow> \<exists>y \<in> carrier G. y \<otimes> x = \<one> \<and> x \<otimes> y = \<one>" | 
| 13936 | 237 | proof - | 
| 238 | fix x | |
| 239 | assume x: "x \<in> carrier G" | |
| 240 | with l_inv_ex obtain y where y: "y \<in> carrier G" | |
| 14693 | 241 | and l_inv: "y \<otimes> x = \<one>" by fast | 
| 242 | from x y have "y \<otimes> (x \<otimes> y) = y \<otimes> \<one>" | |
| 13936 | 243 | by (simp add: m_assoc [symmetric] l_inv r_one) | 
| 14693 | 244 | with x y have r_inv: "x \<otimes> y = \<one>" | 
| 13936 | 245 | by simp | 
| 67091 | 246 | from x y show "\<exists>y \<in> carrier G. y \<otimes> x = \<one> \<and> x \<otimes> y = \<one>" | 
| 13936 | 247 | by (fast intro: l_inv r_inv) | 
| 248 | qed | |
| 67091 | 249 | then have carrier_subset_Units: "carrier G \<subseteq> Units G" | 
| 13936 | 250 | by (unfold Units_def) fast | 
| 61169 | 251 | show ?thesis | 
| 252 | by standard (auto simp: r_one m_assoc carrier_subset_Units) | |
| 13936 | 253 | qed | 
| 254 | ||
| 27698 | 255 | lemma (in monoid) group_l_invI: | 
| 13936 | 256 | assumes l_inv_ex: | 
| 14963 | 257 | "!!x. x \<in> carrier G ==> \<exists>y \<in> carrier G. y \<otimes> x = \<one>" | 
| 13936 | 258 | shows "group G" | 
| 259 | by (rule groupI) (auto intro: m_assoc l_inv_ex) | |
| 260 | ||
| 261 | lemma (in group) Units_eq [simp]: | |
| 262 | "Units G = carrier G" | |
| 263 | proof | |
| 67091 | 264 | show "Units G \<subseteq> carrier G" by fast | 
| 13936 | 265 | next | 
| 67091 | 266 | show "carrier G \<subseteq> Units G" by (rule Units) | 
| 13936 | 267 | qed | 
| 268 | ||
| 269 | lemma (in group) inv_closed [intro, simp]: | |
| 270 | "x \<in> carrier G ==> inv x \<in> carrier G" | |
| 271 | using Units_inv_closed by simp | |
| 272 | ||
| 19981 | 273 | lemma (in group) l_inv_ex [simp]: | 
| 274 | "x \<in> carrier G ==> \<exists>y \<in> carrier G. y \<otimes> x = \<one>" | |
| 275 | using Units_l_inv_ex by simp | |
| 276 | ||
| 277 | lemma (in group) r_inv_ex [simp]: | |
| 278 | "x \<in> carrier G ==> \<exists>y \<in> carrier G. x \<otimes> y = \<one>" | |
| 279 | using Units_r_inv_ex by simp | |
| 280 | ||
| 14963 | 281 | lemma (in group) l_inv [simp]: | 
| 13936 | 282 | "x \<in> carrier G ==> inv x \<otimes> x = \<one>" | 
| 68399 
0b71d08528f0
resolution of name clashes in Algebra
 paulson <lp15@cam.ac.uk> parents: 
68188diff
changeset | 283 | by simp | 
| 13813 | 284 | |
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19984diff
changeset | 285 | |
| 61382 | 286 | subsection \<open>Cancellation Laws and Basic Properties\<close> | 
| 13813 | 287 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 288 | lemma (in group) inv_eq_1_iff [simp]: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 289 | assumes "x \<in> carrier G" shows "inv\<^bsub>G\<^esub> x = \<one>\<^bsub>G\<^esub> \<longleftrightarrow> x = \<one>\<^bsub>G\<^esub>" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 290 | proof - | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 291 | have "x = \<one>" if "inv x = \<one>" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 292 | proof - | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 293 | have "inv x \<otimes> x = \<one>" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 294 | using assms l_inv by blast | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 295 | then show "x = \<one>" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 296 | using that assms by simp | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 297 | qed | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 298 | then show ?thesis | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 299 | by auto | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 300 | qed | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 301 | |
| 14963 | 302 | lemma (in group) r_inv [simp]: | 
| 13813 | 303 | "x \<in> carrier G ==> x \<otimes> inv x = \<one>" | 
| 68399 
0b71d08528f0
resolution of name clashes in Algebra
 paulson <lp15@cam.ac.uk> parents: 
68188diff
changeset | 304 | by simp | 
| 13813 | 305 | |
| 68399 
0b71d08528f0
resolution of name clashes in Algebra
 paulson <lp15@cam.ac.uk> parents: 
68188diff
changeset | 306 | lemma (in group) right_cancel [simp]: | 
| 13813 | 307 | "[| x \<in> carrier G; y \<in> carrier G; z \<in> carrier G |] ==> | 
| 308 | (y \<otimes> x = z \<otimes> x) = (y = z)" | |
| 68399 
0b71d08528f0
resolution of name clashes in Algebra
 paulson <lp15@cam.ac.uk> parents: 
68188diff
changeset | 309 | by (metis inv_closed m_assoc r_inv r_one) | 
| 13813 | 310 | |
| 311 | lemma (in group) inv_inv [simp]: | |
| 312 | "x \<in> carrier G ==> inv (inv x) = x" | |
| 13936 | 313 | using Units_inv_inv by simp | 
| 314 | ||
| 315 | lemma (in group) inv_inj: | |
| 316 | "inj_on (m_inv G) (carrier G)" | |
| 317 | using inv_inj_on_Units by simp | |
| 13813 | 318 | |
| 13854 
91c9ab25fece
First distributed version of Group and Ring theory.
 ballarin parents: 
13835diff
changeset | 319 | lemma (in group) inv_mult_group: | 
| 13813 | 320 | "[| x \<in> carrier G; y \<in> carrier G |] ==> inv (x \<otimes> y) = inv y \<otimes> inv x" | 
| 321 | proof - | |
| 14693 | 322 | assume G: "x \<in> carrier G" "y \<in> carrier G" | 
| 13813 | 323 | then have "inv (x \<otimes> y) \<otimes> (x \<otimes> y) = (inv y \<otimes> inv x) \<otimes> (x \<otimes> y)" | 
| 44472 | 324 | by (simp add: m_assoc) (simp add: m_assoc [symmetric]) | 
| 27698 | 325 | with G show ?thesis by (simp del: l_inv Units_l_inv) | 
| 13813 | 326 | qed | 
| 327 | ||
| 13940 | 328 | lemma (in group) inv_comm: | 
| 329 | "[| x \<otimes> y = \<one>; x \<in> carrier G; y \<in> carrier G |] ==> y \<otimes> x = \<one>" | |
| 14693 | 330 | by (rule Units_inv_comm) auto | 
| 13940 | 331 | |
| 13944 | 332 | lemma (in group) inv_equality: | 
| 13943 | 333 | "[|y \<otimes> x = \<one>; x \<in> carrier G; y \<in> carrier G|] ==> inv x = y" | 
| 68399 
0b71d08528f0
resolution of name clashes in Algebra
 paulson <lp15@cam.ac.uk> parents: 
68188diff
changeset | 334 | using inv_unique r_inv by blast | 
| 13943 | 335 | |
| 57271 | 336 | lemma (in group) inv_solve_left: | 
| 337 | "\<lbrakk> a \<in> carrier G; b \<in> carrier G; c \<in> carrier G \<rbrakk> \<Longrightarrow> a = inv b \<otimes> c \<longleftrightarrow> c = b \<otimes> a" | |
| 338 | by (metis inv_equality l_inv_ex l_one m_assoc r_inv) | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 339 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 340 | lemma (in group) inv_solve_left': | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 341 | "\<lbrakk> a \<in> carrier G; b \<in> carrier G; c \<in> carrier G \<rbrakk> \<Longrightarrow> inv b \<otimes> c = a \<longleftrightarrow> c = b \<otimes> a" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 342 | by (metis inv_equality l_inv_ex l_one m_assoc r_inv) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 343 | |
| 57271 | 344 | lemma (in group) inv_solve_right: | 
| 345 | "\<lbrakk> a \<in> carrier G; b \<in> carrier G; c \<in> carrier G \<rbrakk> \<Longrightarrow> a = b \<otimes> inv c \<longleftrightarrow> b = a \<otimes> c" | |
| 346 | by (metis inv_equality l_inv_ex l_one m_assoc r_inv) | |
| 347 | ||
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 348 | lemma (in group) inv_solve_right': | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 349 | "\<lbrakk>a \<in> carrier G; b \<in> carrier G; c \<in> carrier G\<rbrakk> \<Longrightarrow> b \<otimes> inv c = a \<longleftrightarrow> b = a \<otimes> c" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 350 | by (auto simp: m_assoc) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 351 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 352 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 353 | subsection \<open>Power\<close> | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 354 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 355 | consts | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 356 |   pow :: "[('a, 'm) monoid_scheme, 'a, 'b::semiring_1] => 'a"  (infixr "[^]\<index>" 75)
 | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 357 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 358 | overloading nat_pow == "pow :: [_, 'a, nat] => 'a" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 359 | begin | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 360 | definition "nat_pow G a n = rec_nat \<one>\<^bsub>G\<^esub> (%u b. b \<otimes>\<^bsub>G\<^esub> a) n" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 361 | end | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 362 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 363 | lemma (in monoid) nat_pow_closed [intro, simp]: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 364 | "x \<in> carrier G ==> x [^] (n::nat) \<in> carrier G" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 365 | by (induct n) (simp_all add: nat_pow_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 366 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 367 | lemma (in monoid) nat_pow_0 [simp]: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 368 | "x [^] (0::nat) = \<one>" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 369 | by (simp add: nat_pow_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 370 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 371 | lemma (in monoid) nat_pow_Suc [simp]: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 372 | "x [^] (Suc n) = x [^] n \<otimes> x" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 373 | by (simp add: nat_pow_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 374 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 375 | lemma (in monoid) nat_pow_one [simp]: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 376 | "\<one> [^] (n::nat) = \<one>" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 377 | by (induct n) simp_all | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 378 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 379 | lemma (in monoid) nat_pow_mult: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 380 | "x \<in> carrier G ==> x [^] (n::nat) \<otimes> x [^] m = x [^] (n + m)" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 381 | by (induct m) (simp_all add: m_assoc [THEN sym]) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 382 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 383 | lemma (in monoid) nat_pow_comm: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 384 | "x \<in> carrier G \<Longrightarrow> (x [^] (n::nat)) \<otimes> (x [^] (m :: nat)) = (x [^] m) \<otimes> (x [^] n)" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 385 | using nat_pow_mult[of x n m] nat_pow_mult[of x m n] by (simp add: add.commute) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 386 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 387 | lemma (in monoid) nat_pow_Suc2: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 388 | "x \<in> carrier G \<Longrightarrow> x [^] (Suc n) = x \<otimes> (x [^] n)" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 389 | using nat_pow_mult[of x 1 n] Suc_eq_plus1[of n] | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 390 | by (metis One_nat_def Suc_eq_plus1_left l_one nat.rec(1) nat_pow_Suc nat_pow_def) | 
| 13936 | 391 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 392 | lemma (in monoid) nat_pow_pow: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 393 | "x \<in> carrier G ==> (x [^] n) [^] m = x [^] (n * m::nat)" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 394 | by (induct m) (simp, simp add: nat_pow_mult add.commute) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 395 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 396 | lemma (in monoid) nat_pow_consistent: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 397 | "x [^] (n :: nat) = x [^]\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> n" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 398 | unfolding nat_pow_def by simp | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 399 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 400 | lemma nat_pow_0 [simp]: "x [^]\<^bsub>G\<^esub> (0::nat) = \<one>\<^bsub>G\<^esub>" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 401 | by (simp add: nat_pow_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 402 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 403 | lemma nat_pow_Suc [simp]: "x [^]\<^bsub>G\<^esub> (Suc n) = (x [^]\<^bsub>G\<^esub> n)\<otimes>\<^bsub>G\<^esub> x" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 404 | by (simp add: nat_pow_def) | 
| 13936 | 405 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 406 | lemma (in group) nat_pow_inv: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 407 | assumes "x \<in> carrier G" shows "(inv x) [^] (i :: nat) = inv (x [^] i)" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 408 | proof (induction i) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 409 | case 0 thus ?case by simp | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 410 | next | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 411 | case (Suc i) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 412 | have "(inv x) [^] Suc i = ((inv x) [^] i) \<otimes> inv x" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 413 | by simp | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 414 | also have " ... = (inv (x [^] i)) \<otimes> inv x" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 415 | by (simp add: Suc.IH Suc.prems) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 416 | also have " ... = inv (x \<otimes> (x [^] i))" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 417 | by (simp add: assms inv_mult_group) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 418 | also have " ... = inv (x [^] (Suc i))" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 419 | using assms nat_pow_Suc2 by auto | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 420 | finally show ?case . | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 421 | qed | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 422 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 423 | overloading int_pow == "pow :: [_, 'a, int] => 'a" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 424 | begin | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 425 | definition "int_pow G a z = | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 426 | (let p = rec_nat \<one>\<^bsub>G\<^esub> (%u b. b \<otimes>\<^bsub>G\<^esub> a) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 427 | in if z < 0 then inv\<^bsub>G\<^esub> (p (nat (-z))) else p (nat z))" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 428 | end | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 429 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 430 | lemma int_pow_int: "x [^]\<^bsub>G\<^esub> (int n) = x [^]\<^bsub>G\<^esub> n" | 
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 431 | by(simp add: int_pow_def nat_pow_def) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 432 | |
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 433 | lemma pow_nat: | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 434 | assumes "i\<ge>0" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 435 | shows "x [^]\<^bsub>G\<^esub> nat i = x [^]\<^bsub>G\<^esub> i" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 436 | proof (cases i rule: int_cases) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 437 | case (nonneg n) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 438 | then show ?thesis | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 439 | by (simp add: int_pow_int) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 440 | next | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 441 | case (neg n) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 442 | then show ?thesis | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 443 | using assms by linarith | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 444 | qed | 
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 445 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 446 | lemma int_pow_0 [simp]: "x [^]\<^bsub>G\<^esub> (0::int) = \<one>\<^bsub>G\<^esub>" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 447 | by (simp add: int_pow_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 448 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 449 | lemma int_pow_def2: "a [^]\<^bsub>G\<^esub> z = | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 450 | (if z < 0 then inv\<^bsub>G\<^esub> (a [^]\<^bsub>G\<^esub> (nat (-z))) else a [^]\<^bsub>G\<^esub> (nat z))" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 451 | by (simp add: int_pow_def nat_pow_def) | 
| 13936 | 452 | |
| 453 | lemma (in group) int_pow_one [simp]: | |
| 67341 
df79ef3b3a41
Renamed (^) to [^] in preparation of the move from "op X" to (X)
 nipkow parents: 
67091diff
changeset | 454 | "\<one> [^] (z::int) = \<one>" | 
| 13936 | 455 | by (simp add: int_pow_def2) | 
| 456 | ||
| 57271 | 457 | lemma (in group) int_pow_closed [intro, simp]: | 
| 67341 
df79ef3b3a41
Renamed (^) to [^] in preparation of the move from "op X" to (X)
 nipkow parents: 
67091diff
changeset | 458 | "x \<in> carrier G ==> x [^] (i::int) \<in> carrier G" | 
| 57271 | 459 | by (simp add: int_pow_def2) | 
| 460 | ||
| 461 | lemma (in group) int_pow_1 [simp]: | |
| 67341 
df79ef3b3a41
Renamed (^) to [^] in preparation of the move from "op X" to (X)
 nipkow parents: 
67091diff
changeset | 462 | "x \<in> carrier G \<Longrightarrow> x [^] (1::int) = x" | 
| 57271 | 463 | by (simp add: int_pow_def2) | 
| 464 | ||
| 465 | lemma (in group) int_pow_neg: | |
| 67341 
df79ef3b3a41
Renamed (^) to [^] in preparation of the move from "op X" to (X)
 nipkow parents: 
67091diff
changeset | 466 | "x \<in> carrier G \<Longrightarrow> x [^] (-i::int) = inv (x [^] i)" | 
| 57271 | 467 | by (simp add: int_pow_def2) | 
| 468 | ||
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 469 | lemma (in group) int_pow_neg_int: "x \<in> carrier G \<Longrightarrow> x [^] -(int n) = inv (x [^] n)" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 470 | by (simp add: int_pow_neg int_pow_int) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 471 | |
| 57271 | 472 | lemma (in group) int_pow_mult: | 
| 68662 | 473 | assumes "x \<in> carrier G" shows "x [^] (i + j::int) = x [^] i \<otimes> x [^] j" | 
| 57271 | 474 | proof - | 
| 475 | have [simp]: "-i - j = -j - i" by simp | |
| 476 | show ?thesis | |
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 477 | by (auto simp: assms int_pow_def2 inv_solve_left inv_solve_right nat_add_distrib [symmetric] nat_pow_mult) | 
| 57271 | 478 | qed | 
| 479 | ||
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 480 | lemma (in group) int_pow_inv: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 481 | "x \<in> carrier G \<Longrightarrow> (inv x) [^] (i :: int) = inv (x [^] i)" | 
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 482 | by (metis int_pow_def2 nat_pow_inv) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 483 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 484 | lemma (in group) int_pow_pow: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 485 | assumes "x \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 486 | shows "(x [^] (n :: int)) [^] (m :: int) = x [^] (n * m :: int)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 487 | proof (cases) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 488 | assume n_ge: "n \<ge> 0" thus ?thesis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 489 | proof (cases) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 490 | assume m_ge: "m \<ge> 0" thus ?thesis | 
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 491 | using n_ge nat_pow_pow[OF assms, of "nat n" "nat m"] int_pow_def2 [where G=G] | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 492 | by (simp add: mult_less_0_iff nat_mult_distrib) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 493 | next | 
| 68605 | 494 | assume m_lt: "\<not> m \<ge> 0" | 
| 495 | with n_ge show ?thesis | |
| 496 | apply (simp add: int_pow_def2 mult_less_0_iff) | |
| 497 | by (metis assms mult_minus_right n_ge nat_mult_distrib nat_pow_pow) | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 498 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 499 | next | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 500 | assume n_lt: "\<not> n \<ge> 0" thus ?thesis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 501 | proof (cases) | 
| 68605 | 502 | assume m_ge: "m \<ge> 0" | 
| 503 | have "inv x [^] (nat m * nat (- n)) = inv x [^] nat (- (m * n))" | |
| 504 | by (metis (full_types) m_ge mult_minus_right nat_mult_distrib) | |
| 505 | with m_ge n_lt show ?thesis | |
| 506 | by (simp add: int_pow_def2 mult_less_0_iff assms mult.commute nat_pow_inv nat_pow_pow) | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 507 | next | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 508 | assume m_lt: "\<not> m \<ge> 0" thus ?thesis | 
| 68605 | 509 | using n_lt by (auto simp: int_pow_def2 mult_less_0_iff assms nat_mult_distrib_neg nat_pow_inv nat_pow_pow) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 510 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 511 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 512 | |
| 61628 | 513 | lemma (in group) int_pow_diff: | 
| 67341 
df79ef3b3a41
Renamed (^) to [^] in preparation of the move from "op X" to (X)
 nipkow parents: 
67091diff
changeset | 514 | "x \<in> carrier G \<Longrightarrow> x [^] (n - m :: int) = x [^] n \<otimes> inv (x [^] m)" | 
| 68662 | 515 | by(simp only: diff_conv_add_uminus int_pow_mult int_pow_neg) | 
| 61628 | 516 | |
| 517 | lemma (in group) inj_on_multc: "c \<in> carrier G \<Longrightarrow> inj_on (\<lambda>x. x \<otimes> c) (carrier G)" | |
| 68662 | 518 | by(simp add: inj_on_def) | 
| 61628 | 519 | |
| 520 | lemma (in group) inj_on_cmult: "c \<in> carrier G \<Longrightarrow> inj_on (\<lambda>x. c \<otimes> x) (carrier G)" | |
| 68662 | 521 | by(simp add: inj_on_def) | 
| 61628 | 522 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 523 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 524 | lemma (in monoid) group_commutes_pow: | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 525 | fixes n::nat | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 526 | shows "\<lbrakk>x \<otimes> y = y \<otimes> x; x \<in> carrier G; y \<in> carrier G\<rbrakk> \<Longrightarrow> x [^] n \<otimes> y = y \<otimes> x [^] n" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 527 | apply (induction n, auto) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 528 | by (metis m_assoc nat_pow_closed) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 529 | |
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 530 | lemma (in monoid) pow_mult_distrib: | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 531 | assumes eq: "x \<otimes> y = y \<otimes> x" and xy: "x \<in> carrier G" "y \<in> carrier G" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 532 | shows "(x \<otimes> y) [^] (n::nat) = x [^] n \<otimes> y [^] n" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 533 | proof (induct n) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 534 | case (Suc n) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 535 | have "x \<otimes> (y [^] n \<otimes> y) = y [^] n \<otimes> x \<otimes> y" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 536 | by (simp add: eq group_commutes_pow m_assoc xy) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 537 | then show ?case | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 538 | using assms Suc.hyps m_assoc by auto | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 539 | qed auto | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 540 | |
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 541 | lemma (in group) int_pow_mult_distrib: | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 542 | assumes eq: "x \<otimes> y = y \<otimes> x" and xy: "x \<in> carrier G" "y \<in> carrier G" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 543 | shows "(x \<otimes> y) [^] (i::int) = x [^] i \<otimes> y [^] i" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 544 | proof (cases i rule: int_cases) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 545 | case (nonneg n) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 546 | then show ?thesis | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 547 | by (metis eq int_pow_int pow_mult_distrib xy) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 548 | next | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 549 | case (neg n) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 550 | then show ?thesis | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 551 | unfolding neg | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 552 | apply (simp add: xy int_pow_neg_int del: of_nat_Suc) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 553 | by (metis eq inv_mult_group local.nat_pow_Suc nat_pow_closed pow_mult_distrib xy) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 554 | qed | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 555 | |
| 70030 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 556 | lemma (in group) pow_eq_div2: | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 557 | fixes m n :: nat | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 558 | assumes x_car: "x \<in> carrier G" | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 559 | assumes pow_eq: "x [^] m = x [^] n" | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 560 | shows "x [^] (m - n) = \<one>" | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 561 | proof (cases "m < n") | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 562 | case False | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 563 | have "\<one> \<otimes> x [^] m = x [^] m" by (simp add: x_car) | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 564 | also have "\<dots> = x [^] (m - n) \<otimes> x [^] n" | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 565 | using False by (simp add: nat_pow_mult x_car) | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 566 | also have "\<dots> = x [^] (m - n) \<otimes> x [^] m" | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 567 | by (simp add: pow_eq) | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 568 | finally show ?thesis | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 569 | by (metis nat_pow_closed one_closed right_cancel x_car) | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 570 | qed simp | 
| 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 571 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 572 | subsection \<open>Submonoids\<close> | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 573 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 574 | locale submonoid = \<^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: 
68399diff
changeset | 575 | fixes H and G (structure) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 576 | assumes subset: "H \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 577 | and m_closed [intro, simp]: "\<lbrakk>x \<in> H; y \<in> H\<rbrakk> \<Longrightarrow> x \<otimes> y \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 578 | and one_closed [simp]: "\<one> \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 579 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 580 | lemma (in submonoid) is_submonoid: \<^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: 
68399diff
changeset | 581 | "submonoid H G" by (rule submonoid_axioms) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 582 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 583 | lemma (in submonoid) mem_carrier [simp]: \<^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: 
68399diff
changeset | 584 | "x \<in> H \<Longrightarrow> x \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 585 | using subset by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 586 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 587 | lemma (in submonoid) submonoid_is_monoid [intro]: \<^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: 
68399diff
changeset | 588 | assumes "monoid G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 589 | shows "monoid (G\<lparr>carrier := H\<rparr>)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 590 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 591 | interpret monoid G by fact | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 592 | show ?thesis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 593 | by (simp add: monoid_def m_assoc) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 594 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 595 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 596 | lemma submonoid_nonempty: \<^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: 
68399diff
changeset | 597 |   "~ submonoid {} G"
 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 598 | by (blast dest: submonoid.one_closed) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 599 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 600 | lemma (in submonoid) finite_monoid_imp_card_positive: \<^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: 
68399diff
changeset | 601 | "finite (carrier G) ==> 0 < card H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 602 | proof (rule classical) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 603 | assume "finite (carrier G)" and a: "~ 0 < card H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 604 | then have "finite H" by (blast intro: finite_subset [OF subset]) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 605 |   with is_submonoid a have "submonoid {} G" by simp
 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 606 | with submonoid_nonempty show ?thesis by contradiction | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 607 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 608 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 609 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 610 | lemma (in monoid) monoid_incl_imp_submonoid : \<^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: 
68399diff
changeset | 611 | assumes "H \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 612 | and "monoid (G\<lparr>carrier := H\<rparr>)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 613 | shows "submonoid H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 614 | proof (intro submonoid.intro[OF assms(1)]) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 615 | have ab_eq : "\<And> a b. a \<in> H \<Longrightarrow> b \<in> H \<Longrightarrow> a \<otimes>\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> b = a \<otimes> b" using assms by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 616 | have "\<And>a b. a \<in> H \<Longrightarrow> b \<in> H \<Longrightarrow> a \<otimes> b \<in> carrier (G\<lparr>carrier := H\<rparr>) " | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 617 | using assms ab_eq unfolding group_def using monoid.m_closed by fastforce | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 618 | thus "\<And>a b. a \<in> H \<Longrightarrow> b \<in> H \<Longrightarrow> a \<otimes> b \<in> H" by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 619 | show "\<one> \<in> H " using monoid.one_closed[OF assms(2)] assms by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 620 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 621 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 622 | lemma (in monoid) inv_unique': \<^marker>\<open>contributor \<open>Martin Baillon\<close>\<close> | 
| 68517 | 623 | assumes "x \<in> carrier G" "y \<in> carrier G" | 
| 624 | shows "\<lbrakk> x \<otimes> y = \<one>; y \<otimes> x = \<one> \<rbrakk> \<Longrightarrow> y = inv x" | |
| 625 | proof - | |
| 626 | assume "x \<otimes> y = \<one>" and l_inv: "y \<otimes> x = \<one>" | |
| 627 | hence unit: "x \<in> Units G" | |
| 628 | using assms unfolding Units_def by auto | |
| 629 | show "y = inv x" | |
| 630 | using inv_unique[OF l_inv Units_r_inv[OF unit] assms Units_inv_closed[OF unit]] . | |
| 631 | qed | |
| 632 | ||
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 633 | lemma (in monoid) m_inv_monoid_consistent: \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 68517 | 634 | assumes "x \<in> Units (G \<lparr> carrier := H \<rparr>)" and "submonoid H G" | 
| 635 | shows "inv\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> x = inv x" | |
| 636 | proof - | |
| 637 | have monoid: "monoid (G \<lparr> carrier := H \<rparr>)" | |
| 638 | using submonoid.submonoid_is_monoid[OF assms(2) monoid_axioms] . | |
| 639 | obtain y where y: "y \<in> H" "x \<otimes> y = \<one>" "y \<otimes> x = \<one>" | |
| 640 | using assms(1) unfolding Units_def by auto | |
| 641 | have x: "x \<in> H" and in_carrier: "x \<in> carrier G" "y \<in> carrier G" | |
| 642 | using y(1) submonoid.subset[OF assms(2)] assms(1) unfolding Units_def by auto | |
| 643 | show ?thesis | |
| 644 | using monoid.inv_unique'[OF monoid, of x y] x y | |
| 645 | using inv_unique'[OF in_carrier y(2-3)] by auto | |
| 646 | qed | |
| 647 | ||
| 61382 | 648 | subsection \<open>Subgroups\<close> | 
| 13813 | 649 | |
| 19783 | 650 | locale subgroup = | 
| 651 | fixes H and G (structure) | |
| 14963 | 652 | assumes subset: "H \<subseteq> carrier G" | 
| 653 | and m_closed [intro, simp]: "\<lbrakk>x \<in> H; y \<in> H\<rbrakk> \<Longrightarrow> x \<otimes> y \<in> H" | |
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19984diff
changeset | 654 | and one_closed [simp]: "\<one> \<in> H" | 
| 14963 | 655 | and m_inv_closed [intro,simp]: "x \<in> H \<Longrightarrow> inv x \<in> H" | 
| 13813 | 656 | |
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19984diff
changeset | 657 | lemma (in subgroup) is_subgroup: | 
| 26199 | 658 | "subgroup H G" by (rule subgroup_axioms) | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19984diff
changeset | 659 | |
| 13813 | 660 | declare (in subgroup) group.intro [intro] | 
| 13949 
0ce528cd6f19
HOL-Algebra complete for release Isabelle2003 (modulo section headers).
 ballarin parents: 
13944diff
changeset | 661 | |
| 14963 | 662 | lemma (in subgroup) mem_carrier [simp]: | 
| 663 | "x \<in> H \<Longrightarrow> x \<in> carrier G" | |
| 664 | using subset by blast | |
| 13813 | 665 | |
| 14963 | 666 | lemma (in subgroup) subgroup_is_group [intro]: | 
| 27611 | 667 | assumes "group G" | 
| 668 | shows "group (G\<lparr>carrier := H\<rparr>)" | |
| 669 | proof - | |
| 29237 | 670 | interpret group G by fact | 
| 68458 | 671 | have "Group.monoid (G\<lparr>carrier := H\<rparr>)" | 
| 672 | by (simp add: monoid_axioms submonoid.intro submonoid.submonoid_is_monoid subset) | |
| 673 | then show ?thesis | |
| 674 | by (rule monoid.group_l_invI) (auto intro: l_inv mem_carrier) | |
| 27611 | 675 | qed | 
| 13813 | 676 | |
| 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: 
76987diff
changeset | 677 | lemma (in group) triv_subgroup: "subgroup {\<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: 
76987diff
changeset | 678 | by (auto simp: subgroup_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: 
76987diff
changeset | 679 | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 680 | lemma subgroup_is_submonoid: | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 681 | assumes "subgroup H G" shows "submonoid H G" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 682 | using assms by (auto intro: submonoid.intro simp add: subgroup_def) | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 683 | |
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 684 | lemma (in group) subgroup_Units: | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 685 | assumes "subgroup H G" shows "H \<subseteq> Units (G \<lparr> carrier := H \<rparr>)" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 686 | using group.Units[OF subgroup.subgroup_is_group[OF assms group_axioms]] by simp | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 687 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 688 | lemma (in group) m_inv_consistent [simp]: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 689 | assumes "subgroup H G" "x \<in> H" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 690 | shows "inv\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> x = inv x" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 691 | using assms m_inv_monoid_consistent[OF _ subgroup_is_submonoid] subgroup_Units[of H] by auto | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 692 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 693 | lemma (in group) int_pow_consistent: \<^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: 
68399diff
changeset | 694 | assumes "subgroup H G" "x \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 695 | shows "x [^] (n :: int) = x [^]\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> n" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 696 | proof (cases) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 697 | assume ge: "n \<ge> 0" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 698 | hence "x [^] n = x [^] (nat n)" | 
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 699 | using int_pow_def2 [of G] by auto | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 700 | also have " ... = x [^]\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> (nat n)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 701 | using nat_pow_consistent by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 702 | also have " ... = x [^]\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> n" | 
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 703 | by (metis ge int_nat_eq int_pow_int) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 704 | finally show ?thesis . | 
| 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 | 705 | next | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 706 | assume "\<not> n \<ge> 0" hence lt: "n < 0" by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 707 | hence "x [^] n = inv (x [^] (nat (- n)))" | 
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 708 | using int_pow_def2 [of G] by auto | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 709 | also have " ... = (inv x) [^] (nat (- n))" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 710 | by (metis assms nat_pow_inv subgroup.mem_carrier) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 711 | also have " ... = (inv\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> x) [^]\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> (nat (- n))" | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 712 | using m_inv_consistent[OF assms] nat_pow_consistent by auto | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 713 | also have " ... = inv\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> (x [^]\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> (nat (- n)))" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 714 | using group.nat_pow_inv[OF subgroup.subgroup_is_group[OF assms(1) is_group]] assms(2) by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 715 | also have " ... = x [^]\<^bsub>(G \<lparr> carrier := H \<rparr>)\<^esub> n" | 
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 716 | by (simp add: int_pow_def2 lt) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 717 | finally show ?thesis . | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 718 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 719 | |
| 61382 | 720 | text \<open> | 
| 69597 | 721 | Since \<^term>\<open>H\<close> is nonempty, it contains some element \<^term>\<open>x\<close>. Since | 
| 63167 | 722 | it is closed under inverse, it contains \<open>inv x\<close>. Since | 
| 723 | it is closed under product, it contains \<open>x \<otimes> inv x = \<one>\<close>. | |
| 61382 | 724 | \<close> | 
| 13813 | 725 | |
| 726 | lemma (in group) one_in_subset: | |
| 727 |   "[| H \<subseteq> carrier G; H \<noteq> {}; \<forall>a \<in> H. inv a \<in> H; \<forall>a\<in>H. \<forall>b\<in>H. a \<otimes> b \<in> H |]
 | |
| 728 | ==> \<one> \<in> H" | |
| 44472 | 729 | by force | 
| 13813 | 730 | |
| 61382 | 731 | text \<open>A characterization of subgroups: closed, non-empty subset.\<close> | 
| 13813 | 732 | |
| 733 | lemma (in group) subgroupI: | |
| 734 |   assumes subset: "H \<subseteq> carrier G" and non_empty: "H \<noteq> {}"
 | |
| 14963 | 735 | and inv: "!!a. a \<in> H \<Longrightarrow> inv a \<in> H" | 
| 736 | and mult: "!!a b. \<lbrakk>a \<in> H; b \<in> H\<rbrakk> \<Longrightarrow> a \<otimes> b \<in> H" | |
| 13813 | 737 | shows "subgroup H G" | 
| 27714 
27b4d7c01f8b
Tuned (for the sake of a meaningless log entry).
 ballarin parents: 
27713diff
changeset | 738 | proof (simp add: subgroup_def assms) | 
| 
27b4d7c01f8b
Tuned (for the sake of a meaningless log entry).
 ballarin parents: 
27713diff
changeset | 739 | show "\<one> \<in> H" by (rule one_in_subset) (auto simp only: assms) | 
| 13813 | 740 | qed | 
| 741 | ||
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 742 | lemma (in group) subgroupE: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 743 | assumes "subgroup H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 744 | shows "H \<subseteq> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 745 |     and "H \<noteq> {}"
 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 746 | and "\<And>a. a \<in> H \<Longrightarrow> inv a \<in> H" | 
| 68517 | 747 | and "\<And>a b. \<lbrakk> a \<in> H; b \<in> H \<rbrakk> \<Longrightarrow> a \<otimes> b \<in> H" | 
| 748 | using assms unfolding subgroup_def[of H G] by auto | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 749 | |
| 13936 | 750 | declare monoid.one_closed [iff] group.inv_closed [simp] | 
| 751 | monoid.l_one [simp] monoid.r_one [simp] group.inv_inv [simp] | |
| 13813 | 752 | |
| 753 | lemma subgroup_nonempty: | |
| 67091 | 754 |   "\<not> subgroup {} G"
 | 
| 13813 | 755 | by (blast dest: subgroup.one_closed) | 
| 756 | ||
| 68517 | 757 | lemma (in subgroup) finite_imp_card_positive: "finite (carrier G) \<Longrightarrow> 0 < card H" | 
| 758 | using subset one_closed card_gt_0_iff finite_subset by blast | |
| 13813 | 759 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 760 | lemma (in subgroup) subgroup_is_submonoid : \<^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: 
68399diff
changeset | 761 | "submonoid H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 762 | by (simp add: submonoid.intro subset) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 763 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 764 | lemma (in group) submonoid_subgroupI : \<^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: 
68399diff
changeset | 765 | assumes "submonoid H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 766 | and "\<And>a. a \<in> H \<Longrightarrow> inv a \<in> H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 767 | shows "subgroup H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 768 | by (metis assms subgroup_def submonoid_def) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 769 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 770 | lemma (in group) group_incl_imp_subgroup: \<^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: 
68399diff
changeset | 771 | assumes "H \<subseteq> carrier G" | 
| 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 | 772 | and "group (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 | 773 | shows "subgroup H G" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 774 | proof (intro submonoid_subgroupI[OF monoid_incl_imp_submonoid[OF assms(1)]]) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 775 | show "monoid (G\<lparr>carrier := H\<rparr>)" using group_def assms by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 776 | have ab_eq : "\<And> a b. a \<in> H \<Longrightarrow> b \<in> H \<Longrightarrow> a \<otimes>\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> b = a \<otimes> b" using assms 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 | 777 | fix a assume aH : "a \<in> H" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 778 | have " inv\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> a \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 779 | using assms aH group.inv_closed[OF assms(2)] by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 780 | moreover have "\<one>\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> = \<one>" using assms monoid.one_closed ab_eq one_def by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 781 | hence "a \<otimes>\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> inv\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> a= \<one>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 782 | using assms ab_eq aH group.r_inv[OF assms(2)] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 783 | hence "a \<otimes> inv\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> a= \<one>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 784 | using aH assms group.inv_closed[OF assms(2)] ab_eq by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 785 | ultimately have "inv\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> a = inv a" | 
| 68605 | 786 | by (metis aH assms(1) contra_subsetD group.inv_inv is_group local.inv_equality) | 
| 787 | moreover have "inv\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> a \<in> H" | |
| 788 | using aH group.inv_closed[OF assms(2)] by auto | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 789 | ultimately show "inv a \<in> H" by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 790 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 791 | |
| 13936 | 792 | |
| 61382 | 793 | subsection \<open>Direct Products\<close> | 
| 13813 | 794 | |
| 35848 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 795 | definition | 
| 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 796 |   DirProd :: "_ \<Rightarrow> _ \<Rightarrow> ('a \<times> 'b) monoid" (infixr "\<times>\<times>" 80) where
 | 
| 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 797 | "G \<times>\<times> H = | 
| 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 798 | \<lparr>carrier = carrier G \<times> carrier H, | 
| 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 799 | mult = (\<lambda>(g, h) (g', h'). (g \<otimes>\<^bsub>G\<^esub> g', h \<otimes>\<^bsub>H\<^esub> h')), | 
| 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 800 | one = (\<one>\<^bsub>G\<^esub>, \<one>\<^bsub>H\<^esub>)\<rparr>" | 
| 13813 | 801 | |
| 14963 | 802 | lemma DirProd_monoid: | 
| 27611 | 803 | assumes "monoid G" and "monoid H" | 
| 14963 | 804 | shows "monoid (G \<times>\<times> H)" | 
| 805 | proof - | |
| 30729 
461ee3e49ad3
interpretation/interpret: prefixes are mandatory by default;
 wenzelm parents: 
29240diff
changeset | 806 | interpret G: monoid G by fact | 
| 
461ee3e49ad3
interpretation/interpret: prefixes are mandatory by default;
 wenzelm parents: 
29240diff
changeset | 807 | interpret H: monoid H by fact | 
| 27714 
27b4d7c01f8b
Tuned (for the sake of a meaningless log entry).
 ballarin parents: 
27713diff
changeset | 808 | from assms | 
| 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 | 809 | show ?thesis by (unfold monoid_def DirProd_def, auto) | 
| 14963 | 810 | qed | 
| 13813 | 811 | |
| 812 | ||
| 61382 | 813 | text\<open>Does not use the previous result because it's easier just to use auto.\<close> | 
| 14963 | 814 | lemma DirProd_group: | 
| 27611 | 815 | assumes "group G" and "group H" | 
| 14963 | 816 | shows "group (G \<times>\<times> H)" | 
| 27611 | 817 | proof - | 
| 30729 
461ee3e49ad3
interpretation/interpret: prefixes are mandatory by default;
 wenzelm parents: 
29240diff
changeset | 818 | interpret G: group G by fact | 
| 
461ee3e49ad3
interpretation/interpret: prefixes are mandatory by default;
 wenzelm parents: 
29240diff
changeset | 819 | interpret H: group H by fact | 
| 27611 | 820 | show ?thesis by (rule groupI) | 
| 14963 | 821 | (auto intro: G.m_assoc H.m_assoc G.l_inv H.l_inv | 
| 822 | simp add: DirProd_def) | |
| 27611 | 823 | qed | 
| 13813 | 824 | |
| 68662 | 825 | lemma carrier_DirProd [simp]: "carrier (G \<times>\<times> H) = carrier G \<times> carrier H" | 
| 14963 | 826 | by (simp add: DirProd_def) | 
| 13944 | 827 | |
| 68662 | 828 | lemma one_DirProd [simp]: "\<one>\<^bsub>G \<times>\<times> H\<^esub> = (\<one>\<^bsub>G\<^esub>, \<one>\<^bsub>H\<^esub>)" | 
| 14963 | 829 | by (simp add: DirProd_def) | 
| 13944 | 830 | |
| 68662 | 831 | lemma mult_DirProd [simp]: "(g, h) \<otimes>\<^bsub>(G \<times>\<times> H)\<^esub> (g', h') = (g \<otimes>\<^bsub>G\<^esub> g', h \<otimes>\<^bsub>H\<^esub> h')" | 
| 14963 | 832 | by (simp add: DirProd_def) | 
| 13944 | 833 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 834 | lemma mult_DirProd': "x \<otimes>\<^bsub>(G \<times>\<times> H)\<^esub> y = (fst x \<otimes>\<^bsub>G\<^esub> fst y, snd x \<otimes>\<^bsub>H\<^esub> snd y)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 835 | by (subst mult_DirProd [symmetric]) simp | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 836 | |
| 68662 | 837 | lemma DirProd_assoc: "(G \<times>\<times> H \<times>\<times> I) = (G \<times>\<times> (H \<times>\<times> I))" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 838 | by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 839 | |
| 14963 | 840 | lemma inv_DirProd [simp]: | 
| 27611 | 841 | assumes "group G" and "group H" | 
| 13944 | 842 | assumes g: "g \<in> carrier G" | 
| 843 | and h: "h \<in> carrier H" | |
| 14963 | 844 | shows "m_inv (G \<times>\<times> H) (g, h) = (inv\<^bsub>G\<^esub> g, inv\<^bsub>H\<^esub> h)" | 
| 27611 | 845 | proof - | 
| 30729 
461ee3e49ad3
interpretation/interpret: prefixes are mandatory by default;
 wenzelm parents: 
29240diff
changeset | 846 | interpret G: group G by fact | 
| 
461ee3e49ad3
interpretation/interpret: prefixes are mandatory by default;
 wenzelm parents: 
29240diff
changeset | 847 | interpret H: group H by fact | 
| 
461ee3e49ad3
interpretation/interpret: prefixes are mandatory by default;
 wenzelm parents: 
29240diff
changeset | 848 | interpret Prod: group "G \<times>\<times> H" | 
| 27714 
27b4d7c01f8b
Tuned (for the sake of a meaningless log entry).
 ballarin parents: 
27713diff
changeset | 849 | by (auto intro: DirProd_group group.intro group.axioms assms) | 
| 14963 | 850 | show ?thesis by (simp add: Prod.inv_equality g h) | 
| 851 | qed | |
| 27698 | 852 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 853 | lemma DirProd_subgroups : | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 854 | assumes "group G" | 
| 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 | 855 | and "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 | 856 | and "group K" | 
| 
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 | 857 | and "subgroup I K" | 
| 
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 | 858 | shows "subgroup (H \<times> I) (G \<times>\<times> K)" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 859 | proof (intro group.group_incl_imp_subgroup[OF DirProd_group[OF assms(1)assms(3)]]) | 
| 68687 | 860 | have "H \<subseteq> carrier G" "I \<subseteq> carrier K" using subgroup.subset assms by blast+ | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 861 | thus "(H \<times> I) \<subseteq> carrier (G \<times>\<times> K)" unfolding DirProd_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 862 | have "Group.group ((G\<lparr>carrier := H\<rparr>) \<times>\<times> (K\<lparr>carrier := I\<rparr>))" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 863 | using DirProd_group[OF subgroup.subgroup_is_group[OF assms(2)assms(1)] | 
| 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 | 864 | subgroup.subgroup_is_group[OF assms(4)assms(3)]]. | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 865 | moreover have "((G\<lparr>carrier := H\<rparr>) \<times>\<times> (K\<lparr>carrier := I\<rparr>)) = ((G \<times>\<times> K)\<lparr>carrier := H \<times> I\<rparr>)" | 
| 68687 | 866 | unfolding DirProd_def using assms by simp | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 867 | ultimately show "Group.group ((G \<times>\<times> K)\<lparr>carrier := H \<times> I\<rparr>)" by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 868 | qed | 
| 14963 | 869 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 870 | subsection \<open>Homomorphisms (mono and epi) and Isomorphisms\<close> | 
| 13813 | 871 | |
| 35847 | 872 | definition | 
| 873 |   hom :: "_ => _ => ('a => 'b) set" where
 | |
| 35848 
5443079512ea
slightly more uniform definitions -- eliminated old-style meta-equality;
 wenzelm parents: 
35847diff
changeset | 874 | "hom G H = | 
| 67091 | 875 |     {h. h \<in> carrier G \<rightarrow> carrier H \<and>
 | 
| 14693 | 876 | (\<forall>x \<in> carrier G. \<forall>y \<in> carrier G. h (x \<otimes>\<^bsub>G\<^esub> y) = h x \<otimes>\<^bsub>H\<^esub> h y)}" | 
| 13813 | 877 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 878 | lemma homI: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 879 | "\<lbrakk>\<And>x. x \<in> carrier G \<Longrightarrow> h x \<in> carrier H; | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 880 | \<And>x y. \<lbrakk>x \<in> carrier G; y \<in> carrier G\<rbrakk> \<Longrightarrow> h (x \<otimes>\<^bsub>G\<^esub> y) = h x \<otimes>\<^bsub>H\<^esub> h y\<rbrakk> \<Longrightarrow> h \<in> hom G H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 881 | by (auto simp: hom_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 882 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 883 | lemma hom_carrier: "h \<in> hom G H \<Longrightarrow> h ` carrier G \<subseteq> carrier H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 884 | by (auto simp: hom_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 885 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 886 | lemma hom_in_carrier: "\<lbrakk>h \<in> hom G H; x \<in> carrier G\<rbrakk> \<Longrightarrow> h x \<in> carrier H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 887 | by (auto simp: hom_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 888 | |
| 69700 
7a92cbec7030
new material about summations and powers, along with some tweaks
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 889 | lemma hom_compose: | 
| 69122 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 890 | "\<lbrakk> f \<in> hom G H; g \<in> hom H I \<rbrakk> \<Longrightarrow> g \<circ> f \<in> hom G I" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 891 | unfolding hom_def by (auto simp add: Pi_iff) | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 892 | |
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 893 | lemma (in group) hom_restrict: | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 894 | assumes "h \<in> hom G H" and "\<And>g. g \<in> carrier G \<Longrightarrow> h g = t g" shows "t \<in> hom G H" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 895 | using assms unfolding hom_def by (auto simp add: Pi_iff) | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 896 | |
| 14761 | 897 | lemma (in group) hom_compose: | 
| 31754 | 898 | "[|h \<in> hom G H; i \<in> hom H I|] ==> compose (carrier G) i h \<in> hom G I" | 
| 44890 
22f665a2e91c
new fastforce replacing fastsimp - less confusing name
 nipkow parents: 
44655diff
changeset | 899 | by (fastforce simp add: hom_def compose_def) | 
| 13943 | 900 | |
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 901 | lemma (in group) restrict_hom_iff [simp]: | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 902 | "(\<lambda>x. if x \<in> carrier G then f x else g x) \<in> hom G H \<longleftrightarrow> f \<in> hom G H" | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 903 | by (simp add: hom_def Pi_iff) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 904 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 905 | definition iso :: "_ => _ => ('a => 'b) set"
 | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 906 |   where "iso G H = {h. h \<in> hom G H \<and> bij_betw h (carrier G) (carrier H)}"
 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 907 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 908 | definition is_iso :: "_ \<Rightarrow> _ \<Rightarrow> bool" (infixr "\<cong>" 60) | 
| 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 | 909 |   where "G \<cong> H = (iso G H  \<noteq> {})"
 | 
| 14761 | 910 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 911 | definition mon where "mon G H = {f \<in> hom G H. inj_on f (carrier G)}"
 | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 912 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 913 | definition epi where "epi G H = {f \<in> hom G H. f ` (carrier G) = carrier H}"
 | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 914 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 915 | lemma isoI: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 916 | "\<lbrakk>h \<in> hom G H; bij_betw h (carrier G) (carrier H)\<rbrakk> \<Longrightarrow> h \<in> iso G H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 917 | by (auto simp: iso_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 918 | |
| 70095 | 919 | lemma is_isoI: "h \<in> iso G H \<Longrightarrow> G \<cong> H" | 
| 920 | using is_iso_def by auto | |
| 921 | ||
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 922 | lemma epi_iff_subset: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 923 | "f \<in> epi G G' \<longleftrightarrow> f \<in> hom G G' \<and> carrier G' \<subseteq> f ` carrier G" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 924 | by (auto simp: epi_def hom_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 925 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 926 | lemma iso_iff_mon_epi: "f \<in> iso G H \<longleftrightarrow> f \<in> mon G H \<and> f \<in> epi G H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 927 | by (auto simp: iso_def mon_def epi_def bij_betw_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 928 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 929 | lemma iso_set_refl: "(\<lambda>x. x) \<in> iso G G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 930 | by (simp add: iso_def hom_def inj_on_def bij_betw_def Pi_def) | 
| 14761 | 931 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 932 | lemma id_iso: "id \<in> iso G G" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 933 | by (simp add: iso_def hom_def inj_on_def bij_betw_def Pi_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 934 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 935 | corollary iso_refl [simp]: "G \<cong> G" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 936 | using iso_set_refl unfolding is_iso_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 937 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 938 | lemma iso_iff: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 939 | "h \<in> iso G H \<longleftrightarrow> h \<in> hom G H \<and> h ` (carrier G) = carrier H \<and> inj_on h (carrier G)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 940 | by (auto simp: iso_def hom_def bij_betw_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 941 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 942 | lemma iso_imp_homomorphism: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 943 | "h \<in> iso G H \<Longrightarrow> h \<in> hom G H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 944 | by (simp add: iso_iff) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 945 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 946 | lemma trivial_hom: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 947 | "group H \<Longrightarrow> (\<lambda>x. one H) \<in> hom G H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 948 | by (auto simp: hom_def Group.group_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 949 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 950 | lemma (in group) hom_eq: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 951 | assumes "f \<in> hom G H" "\<And>x. x \<in> carrier G \<Longrightarrow> f' x = f x" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 952 | shows "f' \<in> hom G H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 953 | using assms by (auto simp: hom_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 954 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 955 | lemma (in group) iso_eq: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 956 | assumes "f \<in> iso G H" "\<And>x. x \<in> carrier G \<Longrightarrow> f' x = f x" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 957 | shows "f' \<in> iso G H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 958 | using assms by (fastforce simp: iso_def inj_on_def bij_betw_def hom_eq image_iff) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 959 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 960 | lemma (in group) iso_set_sym: | 
| 68458 | 961 | assumes "h \<in> iso G H" | 
| 962 | shows "inv_into (carrier G) h \<in> iso H G" | |
| 963 | proof - | |
| 964 | have h: "h \<in> hom G H" "bij_betw h (carrier G) (carrier H)" | |
| 965 | using assms by (auto simp add: iso_def bij_betw_inv_into) | |
| 966 | then have HG: "bij_betw (inv_into (carrier G) h) (carrier H) (carrier G)" | |
| 967 | by (simp add: bij_betw_inv_into) | |
| 968 | have "inv_into (carrier G) h \<in> hom H G" | |
| 969 | unfolding hom_def | |
| 970 | proof safe | |
| 971 | show *: "\<And>x. x \<in> carrier H \<Longrightarrow> inv_into (carrier G) h x \<in> carrier G" | |
| 972 | by (meson HG bij_betwE) | |
| 973 | show "inv_into (carrier G) h (x \<otimes>\<^bsub>H\<^esub> y) = inv_into (carrier G) h x \<otimes> inv_into (carrier G) h y" | |
| 974 | if "x \<in> carrier H" "y \<in> carrier H" for x y | |
| 975 | proof (rule inv_into_f_eq) | |
| 976 | show "inj_on h (carrier G)" | |
| 977 | using bij_betw_def h(2) by blast | |
| 978 | show "inv_into (carrier G) h x \<otimes> inv_into (carrier G) h y \<in> carrier G" | |
| 979 | by (simp add: * that) | |
| 980 | show "h (inv_into (carrier G) h x \<otimes> inv_into (carrier G) h y) = x \<otimes>\<^bsub>H\<^esub> y" | |
| 981 | using h bij_betw_inv_into_right [of h] unfolding hom_def by (simp add: "*" that) | |
| 982 | qed | |
| 983 | qed | |
| 984 | then show ?thesis | |
| 985 | by (simp add: Group.iso_def bij_betw_inv_into h) | |
| 986 | qed | |
| 14761 | 987 | |
| 68458 | 988 | corollary (in group) iso_sym: "G \<cong> H \<Longrightarrow> H \<cong> G" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 989 | using iso_set_sym unfolding is_iso_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 990 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 991 | lemma iso_set_trans: | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 992 | "\<lbrakk>h \<in> Group.iso G H; i \<in> Group.iso H I\<rbrakk> \<Longrightarrow> i \<circ> h \<in> Group.iso G I" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 993 | by (force simp: iso_def hom_compose intro: bij_betw_trans) | 
| 14761 | 994 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 995 | corollary iso_trans [trans]: "\<lbrakk>G \<cong> H ; H \<cong> I\<rbrakk> \<Longrightarrow> G \<cong> I" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 996 | using iso_set_trans unfolding is_iso_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 997 | |
| 69122 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 998 | lemma iso_same_card: "G \<cong> H \<Longrightarrow> card (carrier G) = card (carrier H)" | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 999 | using bij_betw_same_card unfolding is_iso_def iso_def by auto | 
| 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 1000 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1001 | lemma iso_finite: "G \<cong> H \<Longrightarrow> finite(carrier G) \<longleftrightarrow> finite(carrier H)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1002 | by (auto simp: is_iso_def iso_def bij_betw_finite) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1003 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1004 | lemma mon_compose: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1005 | "\<lbrakk>f \<in> mon G H; g \<in> mon H K\<rbrakk> \<Longrightarrow> (g \<circ> f) \<in> mon G K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1006 | by (auto simp: mon_def intro: hom_compose comp_inj_on inj_on_subset [OF _ hom_carrier]) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1007 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1008 | lemma mon_compose_rev: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1009 | "\<lbrakk>f \<in> hom G H; g \<in> hom H K; (g \<circ> f) \<in> mon G K\<rbrakk> \<Longrightarrow> f \<in> mon G H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1010 | using inj_on_imageI2 by (auto simp: mon_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1011 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1012 | lemma epi_compose: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1013 | "\<lbrakk>f \<in> epi G H; g \<in> epi H K\<rbrakk> \<Longrightarrow> (g \<circ> f) \<in> epi G K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1014 | using hom_compose by (force simp: epi_def hom_compose simp flip: image_image) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1015 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1016 | lemma epi_compose_rev: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1017 | "\<lbrakk>f \<in> hom G H; g \<in> hom H K; (g \<circ> f) \<in> epi G K\<rbrakk> \<Longrightarrow> g \<in> epi H K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1018 | by (fastforce simp: epi_def hom_def Pi_iff image_def set_eq_iff) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1019 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1020 | lemma iso_compose_rev: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1021 | "\<lbrakk>f \<in> hom G H; g \<in> hom H K; (g \<circ> f) \<in> iso G K\<rbrakk> \<Longrightarrow> f \<in> mon G H \<and> g \<in> epi H K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1022 | unfolding iso_iff_mon_epi using mon_compose_rev epi_compose_rev by blast | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1023 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1024 | lemma epi_iso_compose_rev: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1025 | assumes "f \<in> epi G H" "g \<in> hom H K" "(g \<circ> f) \<in> iso G K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1026 | shows "f \<in> iso G H \<and> g \<in> iso H K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1027 | proof | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1028 | show "f \<in> iso G H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1029 | by (metis (no_types, lifting) assms epi_def iso_compose_rev iso_iff_mon_epi mem_Collect_eq) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1030 | then have "f \<in> hom G H \<and> bij_betw f (carrier G) (carrier H)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1031 | using Group.iso_def \<open>f \<in> Group.iso G H\<close> by blast | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1032 | then have "bij_betw g (carrier H) (carrier K)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1033 | using Group.iso_def assms(3) bij_betw_comp_iff by blast | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1034 | then show "g \<in> iso H K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1035 | using Group.iso_def assms(2) by blast | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1036 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1037 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1038 | lemma mon_left_invertible: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1039 | "\<lbrakk>f \<in> hom G H; \<And>x. x \<in> carrier G \<Longrightarrow> g(f x) = x\<rbrakk> \<Longrightarrow> f \<in> mon G H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1040 | by (simp add: mon_def inj_on_def) metis | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1041 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1042 | lemma epi_right_invertible: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1043 | "\<lbrakk>g \<in> hom H G; f \<in> carrier G \<rightarrow> carrier H; \<And>x. x \<in> carrier G \<Longrightarrow> g(f x) = x\<rbrakk> \<Longrightarrow> g \<in> epi H G" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1044 | by (force simp: Pi_iff epi_iff_subset image_subset_iff_funcset subset_iff) | 
| 69122 
1b5178abaf97
updates to Algebra from Baillon and de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68687diff
changeset | 1045 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1046 | lemma (in monoid) hom_imp_img_monoid: \<^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: 
68399diff
changeset | 1047 | assumes "h \<in> hom G H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1048 | shows "monoid (H \<lparr> carrier := h ` (carrier G), one := h \<one>\<^bsub>G\<^esub> \<rparr>)" (is "monoid ?h_img") | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1049 | proof (rule monoidI) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1050 | show "\<one>\<^bsub>?h_img\<^esub> \<in> carrier ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1051 | by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1052 | next | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1053 | fix x y z assume "x \<in> carrier ?h_img" "y \<in> carrier ?h_img" "z \<in> carrier ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1054 | then obtain g1 g2 g3 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1055 | where g1: "g1 \<in> carrier G" "x = h g1" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1056 | and g2: "g2 \<in> carrier G" "y = h g2" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1057 | and g3: "g3 \<in> carrier G" "z = h g3" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1058 | using image_iff[where ?f = h and ?A = "carrier G"] by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1059 | have aux_lemma: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1060 | "\<And>a b. \<lbrakk> a \<in> carrier G; b \<in> carrier G \<rbrakk> \<Longrightarrow> h a \<otimes>\<^bsub>(?h_img)\<^esub> h b = h (a \<otimes> b)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1061 | using assms unfolding hom_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1062 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1063 | show "x \<otimes>\<^bsub>(?h_img)\<^esub> \<one>\<^bsub>(?h_img)\<^esub> = x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1064 | using aux_lemma[OF g1(1) one_closed] g1(2) r_one[OF g1(1)] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1065 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1066 | show "\<one>\<^bsub>(?h_img)\<^esub> \<otimes>\<^bsub>(?h_img)\<^esub> x = x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1067 | using aux_lemma[OF one_closed g1(1)] g1(2) l_one[OF g1(1)] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1068 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1069 | have "x \<otimes>\<^bsub>(?h_img)\<^esub> y = h (g1 \<otimes> g2)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1070 | using aux_lemma g1 g2 by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1071 | thus "x \<otimes>\<^bsub>(?h_img)\<^esub> y \<in> carrier ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1072 | using g1(1) g2(1) by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1073 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1074 | have "(x \<otimes>\<^bsub>(?h_img)\<^esub> y) \<otimes>\<^bsub>(?h_img)\<^esub> z = h ((g1 \<otimes> g2) \<otimes> g3)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1075 | using aux_lemma g1 g2 g3 by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1076 | also have " ... = h (g1 \<otimes> (g2 \<otimes> g3))" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1077 | using m_assoc[OF g1(1) g2(1) g3(1)] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1078 | also have " ... = x \<otimes>\<^bsub>(?h_img)\<^esub> (y \<otimes>\<^bsub>(?h_img)\<^esub> z)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1079 | using aux_lemma g1 g2 g3 by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1080 | finally show "(x \<otimes>\<^bsub>(?h_img)\<^esub> y) \<otimes>\<^bsub>(?h_img)\<^esub> z = x \<otimes>\<^bsub>(?h_img)\<^esub> (y \<otimes>\<^bsub>(?h_img)\<^esub> z)" . | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1081 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1082 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1083 | lemma (in group) hom_imp_img_group: \<^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: 
68399diff
changeset | 1084 | assumes "h \<in> hom G H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1085 | shows "group (H \<lparr> carrier := h ` (carrier G), one := h \<one>\<^bsub>G\<^esub> \<rparr>)" (is "group ?h_img") | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1086 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1087 | interpret monoid ?h_img | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1088 | using hom_imp_img_monoid[OF assms] . | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1089 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1090 | show ?thesis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1091 | proof (unfold_locales) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1092 | show "carrier ?h_img \<subseteq> Units ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1093 | proof (auto simp add: Units_def) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1094 | have aux_lemma: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1095 | "\<And>g1 g2. \<lbrakk> g1 \<in> carrier G; g2 \<in> carrier G \<rbrakk> \<Longrightarrow> h g1 \<otimes>\<^bsub>H\<^esub> h g2 = h (g1 \<otimes> g2)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1096 | using assms unfolding hom_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1097 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1098 | fix g1 assume g1: "g1 \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1099 | thus "\<exists>g2 \<in> carrier G. (h g2) \<otimes>\<^bsub>H\<^esub> (h g1) = h \<one> \<and> (h g1) \<otimes>\<^bsub>H\<^esub> (h g2) = h \<one>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1100 | using aux_lemma[OF g1 inv_closed[OF g1]] | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1101 | aux_lemma[OF inv_closed[OF g1] g1] | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1102 | inv_closed by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1103 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1104 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1105 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1106 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1107 | lemma (in group) iso_imp_group: \<^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: 
68399diff
changeset | 1108 | assumes "G \<cong> H" and "monoid H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1109 | shows "group H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1110 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1111 | obtain \<phi> where phi: "\<phi> \<in> iso G H" "inv_into (carrier G) \<phi> \<in> iso H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1112 | using iso_set_sym assms unfolding is_iso_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1113 | define \<psi> where psi_def: "\<psi> = inv_into (carrier G) \<phi>" | 
| 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 | 1114 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1115 | have surj: "\<phi> ` (carrier G) = (carrier H)" "\<psi> ` (carrier H) = (carrier G)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1116 | and inj: "inj_on \<phi> (carrier G)" "inj_on \<psi> (carrier H)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1117 | and phi_hom: "\<And>g1 g2. \<lbrakk> g1 \<in> carrier G; g2 \<in> carrier G \<rbrakk> \<Longrightarrow> \<phi> (g1 \<otimes> g2) = (\<phi> g1) \<otimes>\<^bsub>H\<^esub> (\<phi> g2)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1118 | and psi_hom: "\<And>h1 h2. \<lbrakk> h1 \<in> carrier H; h2 \<in> carrier H \<rbrakk> \<Longrightarrow> \<psi> (h1 \<otimes>\<^bsub>H\<^esub> h2) = (\<psi> h1) \<otimes> (\<psi> h2)" | 
| 68662 | 1119 | using phi psi_def unfolding iso_def bij_betw_def hom_def by auto | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1120 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1121 | have phi_one: "\<phi> \<one> = \<one>\<^bsub>H\<^esub>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1122 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1123 | have "(\<phi> \<one>) \<otimes>\<^bsub>H\<^esub> \<one>\<^bsub>H\<^esub> = (\<phi> \<one>) \<otimes>\<^bsub>H\<^esub> (\<phi> \<one>)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1124 | by (metis assms(2) image_eqI monoid.r_one one_closed phi_hom r_one surj(1)) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1125 | thus ?thesis | 
| 73932 
fd21b4a93043
added opaque_combs and renamed hide_lams to opaque_lifting
 desharna parents: 
70095diff
changeset | 1126 | by (metis (no_types, opaque_lifting) Units_eq Units_one_closed assms(2) f_inv_into_f imageI | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1127 | monoid.l_one monoid.one_closed phi_hom psi_def r_one surj) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1128 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1129 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1130 | have "carrier H \<subseteq> Units H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1131 | proof | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1132 | fix h assume h: "h \<in> carrier H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1133 | let ?inv_h = "\<phi> (inv (\<psi> h))" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1134 | have "h \<otimes>\<^bsub>H\<^esub> ?inv_h = \<phi> (\<psi> h) \<otimes>\<^bsub>H\<^esub> ?inv_h" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1135 | by (simp add: f_inv_into_f h psi_def surj(1)) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1136 | also have " ... = \<phi> ((\<psi> h) \<otimes> inv (\<psi> h))" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1137 | by (metis h imageI inv_closed phi_hom surj(2)) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1138 | also have " ... = \<phi> \<one>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1139 | by (simp add: h inv_into_into psi_def surj(1)) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1140 | finally have 1: "h \<otimes>\<^bsub>H\<^esub> ?inv_h = \<one>\<^bsub>H\<^esub>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1141 | using phi_one by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1142 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1143 | have "?inv_h \<otimes>\<^bsub>H\<^esub> h = ?inv_h \<otimes>\<^bsub>H\<^esub> \<phi> (\<psi> h)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1144 | by (simp add: f_inv_into_f h psi_def surj(1)) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1145 | also have " ... = \<phi> (inv (\<psi> h) \<otimes> (\<psi> h))" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1146 | by (metis h imageI inv_closed phi_hom surj(2)) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1147 | also have " ... = \<phi> \<one>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1148 | by (simp add: h inv_into_into psi_def surj(1)) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1149 | finally have 2: "?inv_h \<otimes>\<^bsub>H\<^esub> h = \<one>\<^bsub>H\<^esub>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1150 | using phi_one by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1151 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1152 | thus "h \<in> Units H" unfolding Units_def using 1 2 h surj by fastforce | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1153 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1154 | thus ?thesis unfolding group_def group_axioms_def using assms(2) by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1155 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1156 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1157 | corollary (in group) iso_imp_img_group: \<^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: 
68399diff
changeset | 1158 | assumes "h \<in> iso G H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1159 | shows "group (H \<lparr> one := h \<one> \<rparr>)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1160 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1161 | let ?h_img = "H \<lparr> carrier := h ` (carrier G), one := h \<one> \<rparr>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1162 | have "h \<in> iso G ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1163 | using assms unfolding iso_def hom_def bij_betw_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1164 | hence "G \<cong> ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1165 | unfolding is_iso_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1166 | hence "group ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1167 | using iso_imp_group[of ?h_img] hom_imp_img_monoid[of h H] assms unfolding iso_def by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1168 | moreover have "carrier H = carrier ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1169 | using assms unfolding iso_def bij_betw_def by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1170 | hence "H \<lparr> one := h \<one> \<rparr> = ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1171 | by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1172 | ultimately show ?thesis by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1173 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1174 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1175 | subsubsection \<open>HOL Light's concept of an isomorphism pair\<close> | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1176 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1177 | definition group_isomorphisms | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1178 | where | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1179 | "group_isomorphisms G H f g \<equiv> | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1180 | f \<in> hom G H \<and> g \<in> hom H G \<and> | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1181 | (\<forall>x \<in> carrier G. g(f x) = x) \<and> | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1182 | (\<forall>y \<in> carrier H. f(g y) = y)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1183 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1184 | lemma group_isomorphisms_sym: "group_isomorphisms G H f g \<Longrightarrow> group_isomorphisms H G g f" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1185 | by (auto simp: group_isomorphisms_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1186 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1187 | lemma group_isomorphisms_imp_iso: "group_isomorphisms G H f g \<Longrightarrow> f \<in> iso G H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1188 | by (auto simp: iso_def inj_on_def image_def group_isomorphisms_def hom_def bij_betw_def Pi_iff, metis+) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1189 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1190 | lemma (in group) iso_iff_group_isomorphisms: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1191 | "f \<in> iso G H \<longleftrightarrow> (\<exists>g. group_isomorphisms G H f g)" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1192 | proof safe | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1193 | show "\<exists>g. group_isomorphisms G H f g" if "f \<in> Group.iso G H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1194 | unfolding group_isomorphisms_def | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1195 | proof (intro exI conjI) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1196 | let ?g = "inv_into (carrier G) f" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1197 | show "\<forall>x\<in>carrier G. ?g (f x) = x" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1198 | by (metis (no_types, lifting) Group.iso_def bij_betw_inv_into_left mem_Collect_eq that) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1199 | show "\<forall>y\<in>carrier H. f (?g y) = y" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1200 | by (metis (no_types, lifting) Group.iso_def bij_betw_inv_into_right mem_Collect_eq that) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1201 | qed (use Group.iso_def iso_set_sym that in \<open>blast+\<close>) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1202 | next | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1203 | fix g | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1204 | assume "group_isomorphisms G H f g" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1205 | then show "f \<in> Group.iso G H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1206 | by (auto simp: iso_def group_isomorphisms_def hom_in_carrier intro: bij_betw_byWitness) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1207 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1208 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1209 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1210 | subsubsection \<open>Involving direct products\<close> | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1211 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1212 | lemma DirProd_commute_iso_set: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1213 | shows "(\<lambda>(x,y). (y,x)) \<in> iso (G \<times>\<times> H) (H \<times>\<times> G)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1214 | by (auto simp add: iso_def hom_def inj_on_def bij_betw_def) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1215 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1216 | corollary DirProd_commute_iso : | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1217 | "(G \<times>\<times> H) \<cong> (H \<times>\<times> G)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1218 | using DirProd_commute_iso_set unfolding is_iso_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1219 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1220 | lemma DirProd_assoc_iso_set: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1221 | shows "(\<lambda>(x,y,z). (x,(y,z))) \<in> iso (G \<times>\<times> H \<times>\<times> I) (G \<times>\<times> (H \<times>\<times> I))" | 
| 31754 | 1222 | by (auto simp add: iso_def hom_def inj_on_def bij_betw_def) | 
| 14761 | 1223 | |
| 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 | 1224 | lemma (in group) DirProd_iso_set_trans: | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1225 | assumes "g \<in> iso G G2" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1226 | and "h \<in> iso H I" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1227 | shows "(\<lambda>(x,y). (g x, h y)) \<in> iso (G \<times>\<times> H) (G2 \<times>\<times> I)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1228 | proof- | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1229 | have "(\<lambda>(x,y). (g x, h y)) \<in> hom (G \<times>\<times> H) (G2 \<times>\<times> I)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1230 | using assms unfolding iso_def hom_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1231 | moreover have " inj_on (\<lambda>(x,y). (g x, h y)) (carrier (G \<times>\<times> H))" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1232 | using assms unfolding iso_def DirProd_def bij_betw_def inj_on_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1233 | moreover have "(\<lambda>(x, y). (g x, h y)) ` carrier (G \<times>\<times> H) = carrier (G2 \<times>\<times> I)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1234 | using assms unfolding iso_def bij_betw_def image_def DirProd_def by fastforce | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1235 | ultimately show "(\<lambda>(x,y). (g x, h y)) \<in> iso (G \<times>\<times> H) (G2 \<times>\<times> I)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1236 | unfolding iso_def bij_betw_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1237 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1238 | |
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1239 | corollary (in group) DirProd_iso_trans : | 
| 68662 | 1240 | assumes "G \<cong> G2" and "H \<cong> I" | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1241 | shows "G \<times>\<times> H \<cong> G2 \<times>\<times> I" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1242 | using DirProd_iso_set_trans assms unfolding is_iso_def by blast | 
| 14761 | 1243 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1244 | lemma hom_pairwise: "f \<in> hom G (DirProd H K) \<longleftrightarrow> (fst \<circ> f) \<in> hom G H \<and> (snd \<circ> f) \<in> hom G K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1245 | apply (auto simp: hom_def mult_DirProd' dest: Pi_mem) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1246 | apply (metis Product_Type.mem_Times_iff comp_eq_dest_lhs funcset_mem) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1247 | by (metis mult_DirProd prod.collapse) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1248 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1249 | lemma hom_paired: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1250 | "(\<lambda>x. (f x,g x)) \<in> hom G (DirProd H K) \<longleftrightarrow> f \<in> hom G H \<and> g \<in> hom G K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1251 | by (simp add: hom_pairwise o_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1252 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1253 | lemma hom_paired2: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1254 | assumes "group G" "group H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1255 | shows "(\<lambda>(x,y). (f x,g y)) \<in> hom (DirProd G H) (DirProd G' H') \<longleftrightarrow> f \<in> hom G G' \<and> g \<in> hom H H'" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1256 | using assms | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1257 | by (fastforce simp: hom_def Pi_def dest!: group.is_monoid) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1258 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1259 | lemma iso_paired2: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1260 | assumes "group G" "group H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1261 | shows "(\<lambda>(x,y). (f x,g y)) \<in> iso (DirProd G H) (DirProd G' H') \<longleftrightarrow> f \<in> iso G G' \<and> g \<in> iso H H'" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1262 | using assms | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1263 | by (fastforce simp add: iso_def inj_on_def bij_betw_def hom_paired2 image_paired_Times | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1264 | times_eq_iff group_def monoid.carrier_not_empty) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1265 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1266 | lemma hom_of_fst: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1267 | assumes "group H" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1268 | shows "(f \<circ> fst) \<in> hom (DirProd G H) K \<longleftrightarrow> f \<in> hom G K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1269 | proof - | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1270 | interpret group H | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1271 | by (rule assms) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1272 | show ?thesis | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1273 | using one_closed by (auto simp: hom_def Pi_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1274 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1275 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1276 | lemma hom_of_snd: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1277 | assumes "group G" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1278 | shows "(f \<circ> snd) \<in> hom (DirProd G H) K \<longleftrightarrow> f \<in> hom H K" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1279 | proof - | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1280 | interpret group G | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1281 | by (rule assms) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1282 | show ?thesis | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1283 | using one_closed by (auto simp: hom_def Pi_def) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1284 | qed | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1285 | |
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1286 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1287 | subsection\<open>The locale for a homomorphism between two groups\<close> | 
| 14761 | 1288 | |
| 69597 | 1289 | text\<open>Basis for homomorphism proofs: we assume two groups \<^term>\<open>G\<close> and | 
| 1290 | \<^term>\<open>H\<close>, with a homomorphism \<^term>\<open>h\<close> between them\<close> | |
| 61565 
352c73a689da
Qualifiers in locale expressions default to mandatory regardless of the command.
 ballarin parents: 
61384diff
changeset | 1291 | locale group_hom = G?: group G + H?: group H for G (structure) and H (structure) + | 
| 29237 | 1292 | fixes h | 
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1293 | assumes homh [simp]: "h \<in> hom G H" | 
| 29240 | 1294 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1295 | declare group_hom.homh [simp] | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1296 | |
| 29240 | 1297 | lemma (in group_hom) hom_mult [simp]: | 
| 1298 | "[| x \<in> carrier G; y \<in> carrier G |] ==> h (x \<otimes>\<^bsub>G\<^esub> y) = h x \<otimes>\<^bsub>H\<^esub> h y" | |
| 1299 | proof - | |
| 1300 | assume "x \<in> carrier G" "y \<in> carrier G" | |
| 1301 | with homh [unfolded hom_def] show ?thesis by simp | |
| 1302 | qed | |
| 1303 | ||
| 1304 | lemma (in group_hom) hom_closed [simp]: | |
| 1305 | "x \<in> carrier G ==> h x \<in> carrier H" | |
| 1306 | proof - | |
| 1307 | assume "x \<in> carrier G" | |
| 31754 | 1308 | with homh [unfolded hom_def] show ?thesis by auto | 
| 29240 | 1309 | qed | 
| 13813 | 1310 | |
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1311 | lemma (in group_hom) one_closed: "h \<one> \<in> carrier H" | 
| 13813 | 1312 | by simp | 
| 1313 | ||
| 68662 | 1314 | lemma (in group_hom) hom_one [simp]: "h \<one> = \<one>\<^bsub>H\<^esub>" | 
| 13813 | 1315 | proof - | 
| 15076 
4b3d280ef06a
New prover for transitive and reflexive-transitive closure of relations.
 ballarin parents: 
14963diff
changeset | 1316 | have "h \<one> \<otimes>\<^bsub>H\<^esub> \<one>\<^bsub>H\<^esub> = h \<one> \<otimes>\<^bsub>H\<^esub> h \<one>" | 
| 13813 | 1317 | by (simp add: hom_mult [symmetric] del: hom_mult) | 
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1318 | then show ?thesis | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1319 | by (metis H.Units_eq H.Units_l_cancel H.one_closed local.one_closed) | 
| 13813 | 1320 | qed | 
| 1321 | ||
| 69749 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1322 | lemma hom_one: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1323 | assumes "h \<in> hom G H" "group G" "group H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1324 | shows "h (one G) = one H" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1325 | apply (rule group_hom.hom_one) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1326 | by (simp add: assms group_hom_axioms_def group_hom_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1327 | |
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1328 | lemma hom_mult: | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1329 | "\<lbrakk>h \<in> hom G H; x \<in> carrier G; y \<in> carrier G\<rbrakk> \<Longrightarrow> h (x \<otimes>\<^bsub>G\<^esub> y) = h x \<otimes>\<^bsub>H\<^esub> h y" | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1330 | by (auto simp: hom_def) | 
| 
10e48c47a549
some new results in group theory
 paulson <lp15@cam.ac.uk> parents: 
69700diff
changeset | 1331 | |
| 13813 | 1332 | lemma (in group_hom) inv_closed [simp]: | 
| 1333 | "x \<in> carrier G ==> h (inv x) \<in> carrier H" | |
| 1334 | by simp | |
| 1335 | ||
| 1336 | lemma (in group_hom) hom_inv [simp]: | |
| 68662 | 1337 | assumes "x \<in> carrier G" shows "h (inv x) = inv\<^bsub>H\<^esub> (h x)" | 
| 13813 | 1338 | proof - | 
| 68662 | 1339 | have "h x \<otimes>\<^bsub>H\<^esub> h (inv x) = h x \<otimes>\<^bsub>H\<^esub> inv\<^bsub>H\<^esub> (h x)" | 
| 1340 | using assms by (simp flip: hom_mult) | |
| 1341 | with assms show ?thesis by (simp del: H.r_inv H.Units_r_inv) | |
| 13813 | 1342 | qed | 
| 1343 | ||
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1344 | lemma (in group) int_pow_is_hom: \<^marker>\<open>contributor \<open>Joachim Breitner\<close>\<close> | 
| 67399 | 1345 | "x \<in> carrier G \<Longrightarrow> (([^]) x) \<in> hom \<lparr> carrier = UNIV, mult = (+), one = 0::int \<rparr> G " | 
| 57271 | 1346 | unfolding hom_def by (simp add: int_pow_mult) | 
| 1347 | ||
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1348 | lemma (in group_hom) img_is_subgroup: "subgroup (h ` (carrier G)) H" \<^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: 
68399diff
changeset | 1349 | apply (rule subgroupI) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1350 | apply (auto simp add: image_subsetI) | 
| 68687 | 1351 | apply (metis G.inv_closed hom_inv image_iff) | 
| 68605 | 1352 | by (metis G.monoid_axioms hom_mult image_eqI monoid.m_closed) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1353 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1354 | lemma (in group_hom) subgroup_img_is_subgroup: \<^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: 
68399diff
changeset | 1355 | assumes "subgroup I G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1356 | shows "subgroup (h ` I) H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1357 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1358 | have "h \<in> hom (G \<lparr> carrier := I \<rparr>) H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1359 | using G.subgroupE[OF assms] subgroup.mem_carrier[OF assms] homh | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1360 | unfolding hom_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1361 | hence "group_hom (G \<lparr> carrier := I \<rparr>) H h" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1362 | using subgroup.subgroup_is_group[OF assms G.is_group] is_group | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1363 | unfolding group_hom_def group_hom_axioms_def by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1364 | thus ?thesis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1365 | using group_hom.img_is_subgroup[of "G \<lparr> carrier := I \<rparr>" H h] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1366 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1367 | |
| 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: 
76987diff
changeset | 1368 | lemma (in subgroup) iso_subgroup: \<^marker>\<open>contributor \<open>Jakob von Raumer\<close>\<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: 
76987diff
changeset | 1369 | assumes "group G" "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: 
76987diff
changeset | 1370 | assumes "\<phi> \<in> iso G 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: 
76987diff
changeset | 1371 | shows "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: 
76987diff
changeset | 1372 | by (metis assms Group.iso_iff group_hom.intro group_hom_axioms_def group_hom.subgroup_img_is_subgroup 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: 
76987diff
changeset | 1373 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1374 | lemma (in group_hom) induced_group_hom: \<^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: 
68399diff
changeset | 1375 | assumes "subgroup I G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1376 | shows "group_hom (G \<lparr> carrier := I \<rparr>) (H \<lparr> carrier := h ` I \<rparr>) h" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1377 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1378 | have "h \<in> hom (G \<lparr> carrier := I \<rparr>) (H \<lparr> carrier := h ` I \<rparr>)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1379 | using homh subgroup.mem_carrier[OF assms] unfolding hom_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1380 | thus ?thesis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1381 | unfolding group_hom_def group_hom_axioms_def | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1382 | using subgroup.subgroup_is_group[OF assms G.is_group] | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1383 | subgroup.subgroup_is_group[OF subgroup_img_is_subgroup[OF assms] is_group] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1384 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1385 | |
| 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: 
76987diff
changeset | 1386 | text \<open>An isomorphism restricts to an isomorphism of subgroups.\<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: 
76987diff
changeset | 1387 | |
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
76987diff
changeset | 1388 | lemma iso_restrict: | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
76987diff
changeset | 1389 | assumes "\<phi> \<in> iso G 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: 
76987diff
changeset | 1390 | assumes groups: "group G" "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: 
76987diff
changeset | 1391 | assumes HG: "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: 
76987diff
changeset | 1392 | shows "(restrict \<phi> H) \<in> iso (G\<lparr>carrier := H\<rparr>) (F\<lparr>carrier := \<phi> ` 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: 
76987diff
changeset | 1393 | 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: 
76987diff
changeset | 1394 | have "\<And>x y. \<lbrakk>x \<in> H; y \<in> H; x \<otimes>\<^bsub>G\<^esub> y \<in> H\<rbrakk> \<Longrightarrow> \<phi> (x \<otimes>\<^bsub>G\<^esub> y) = \<phi> x \<otimes>\<^bsub>F\<^esub> \<phi> 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: 
76987diff
changeset | 1395 | by (meson assms hom_mult iso_imp_homomorphism subgroup.mem_carrier) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
76987diff
changeset | 1396 | moreover have "\<And>x y. \<lbrakk>x \<in> H; y \<in> H; x \<otimes>\<^bsub>G\<^esub> y \<notin> H\<rbrakk> \<Longrightarrow> \<phi> x \<otimes>\<^bsub>F\<^esub> \<phi> y = undefined" | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
76987diff
changeset | 1397 | by (simp add: HG subgroup.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: 
76987diff
changeset | 1398 | moreover have "\<And>x y. \<lbrakk>x \<in> H; y \<in> H; \<phi> x = \<phi> y\<rbrakk> \<Longrightarrow> 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: 
76987diff
changeset | 1399 | by (smt (verit, ccfv_SIG) assms group.iso_iff_group_isomorphisms group_isomorphisms_def subgroup.mem_carrier) | 
| 
c2013f617a70
Importation of basic group theory results, due to Jakob von Raumer from his AFP entry Jordan-Hölder Theorem
 paulson <lp15@cam.ac.uk> parents: 
76987diff
changeset | 1400 | 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: 
76987diff
changeset | 1401 | by (auto simp: iso_def hom_def bij_betw_def inj_on_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: 
76987diff
changeset | 1402 | 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: 
76987diff
changeset | 1403 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1404 | lemma (in group) canonical_inj_is_hom: \<^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: 
68399diff
changeset | 1405 | assumes "subgroup H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1406 | shows "group_hom (G \<lparr> carrier := H \<rparr>) G id" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1407 | unfolding group_hom_def group_hom_axioms_def hom_def | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1408 | using subgroup.subgroup_is_group[OF assms is_group] | 
| 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 | 1409 | is_group subgroup.subset[OF assms] by auto | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1410 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1411 | lemma (in group_hom) hom_nat_pow: \<^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: 
68399diff
changeset | 1412 | "x \<in> carrier G \<Longrightarrow> h (x [^] (n :: nat)) = (h x) [^]\<^bsub>H\<^esub> n" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1413 | by (induction n) auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1414 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1415 | lemma (in group_hom) hom_int_pow: \<^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: 
68399diff
changeset | 1416 | "x \<in> carrier G \<Longrightarrow> h (x [^] (n :: int)) = (h x) [^]\<^bsub>H\<^esub> n" | 
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1417 | using hom_nat_pow by (simp add: int_pow_def2) | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1418 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1419 | lemma hom_nat_pow: | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1420 | "\<lbrakk>h \<in> hom G H; x \<in> carrier G; group G; group H\<rbrakk> \<Longrightarrow> h (x [^]\<^bsub>G\<^esub> (n :: nat)) = (h x) [^]\<^bsub>H\<^esub> n" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1421 | by (simp add: group_hom.hom_nat_pow group_hom_axioms_def group_hom_def) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1422 | |
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1423 | lemma hom_int_pow: | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1424 | "\<lbrakk>h \<in> hom G H; x \<in> carrier G; group G; group H\<rbrakk> \<Longrightarrow> h (x [^]\<^bsub>G\<^esub> (n :: int)) = (h x) [^]\<^bsub>H\<^esub> n" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1425 | by (simp add: group_hom.hom_int_pow group_hom_axioms.intro group_hom_def) | 
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19984diff
changeset | 1426 | |
| 61382 | 1427 | subsection \<open>Commutative Structures\<close> | 
| 13936 | 1428 | |
| 61382 | 1429 | text \<open> | 
| 13936 | 1430 | Naming convention: multiplicative structures that are commutative | 
| 1431 |   are called \emph{commutative}, additive structures are called
 | |
| 1432 |   \emph{Abelian}.
 | |
| 61382 | 1433 | \<close> | 
| 13813 | 1434 | |
| 14963 | 1435 | locale comm_monoid = monoid + | 
| 1436 | assumes m_comm: "\<lbrakk>x \<in> carrier G; y \<in> carrier G\<rbrakk> \<Longrightarrow> x \<otimes> y = y \<otimes> x" | |
| 13813 | 1437 | |
| 14963 | 1438 | lemma (in comm_monoid) m_lcomm: | 
| 1439 | "\<lbrakk>x \<in> carrier G; y \<in> carrier G; z \<in> carrier G\<rbrakk> \<Longrightarrow> | |
| 13813 | 1440 | x \<otimes> (y \<otimes> z) = y \<otimes> (x \<otimes> z)" | 
| 1441 | proof - | |
| 14693 | 1442 | assume xyz: "x \<in> carrier G" "y \<in> carrier G" "z \<in> carrier G" | 
| 13813 | 1443 | from xyz have "x \<otimes> (y \<otimes> z) = (x \<otimes> y) \<otimes> z" by (simp add: m_assoc) | 
| 1444 | also from xyz have "... = (y \<otimes> x) \<otimes> z" by (simp add: m_comm) | |
| 1445 | also from xyz have "... = y \<otimes> (x \<otimes> z)" by (simp add: m_assoc) | |
| 1446 | finally show ?thesis . | |
| 1447 | qed | |
| 1448 | ||
| 14963 | 1449 | lemmas (in comm_monoid) m_ac = m_assoc m_comm m_lcomm | 
| 13813 | 1450 | |
| 13936 | 1451 | lemma comm_monoidI: | 
| 19783 | 1452 | fixes G (structure) | 
| 13936 | 1453 | assumes m_closed: | 
| 14693 | 1454 | "!!x y. [| x \<in> carrier G; y \<in> carrier G |] ==> x \<otimes> y \<in> carrier G" | 
| 1455 | and one_closed: "\<one> \<in> carrier G" | |
| 13936 | 1456 | and m_assoc: | 
| 1457 | "!!x y z. [| x \<in> carrier G; y \<in> carrier G; z \<in> carrier G |] ==> | |
| 14693 | 1458 | (x \<otimes> y) \<otimes> z = x \<otimes> (y \<otimes> z)" | 
| 1459 | and l_one: "!!x. x \<in> carrier G ==> \<one> \<otimes> x = x" | |
| 13936 | 1460 | and m_comm: | 
| 14693 | 1461 | "!!x y. [| x \<in> carrier G; y \<in> carrier G |] ==> x \<otimes> y = y \<otimes> x" | 
| 13936 | 1462 | shows "comm_monoid G" | 
| 1463 | using l_one | |
| 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 | 1464 | by (auto intro!: comm_monoid.intro comm_monoid_axioms.intro monoid.intro | 
| 27714 
27b4d7c01f8b
Tuned (for the sake of a meaningless log entry).
 ballarin parents: 
27713diff
changeset | 1465 | intro: assms simp: m_closed one_closed m_comm) | 
| 13817 | 1466 | |
| 13936 | 1467 | lemma (in monoid) monoid_comm_monoidI: | 
| 1468 | assumes m_comm: | |
| 14693 | 1469 | "!!x y. [| x \<in> carrier G; y \<in> carrier G |] ==> x \<otimes> y = y \<otimes> x" | 
| 13936 | 1470 | shows "comm_monoid G" | 
| 1471 | by (rule comm_monoidI) (auto intro: m_assoc m_comm) | |
| 14963 | 1472 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1473 | lemma (in comm_monoid) submonoid_is_comm_monoid : | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1474 | assumes "submonoid H G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1475 | shows "comm_monoid (G\<lparr>carrier := H\<rparr>)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1476 | proof (intro monoid.monoid_comm_monoidI) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1477 | show "monoid (G\<lparr>carrier := H\<rparr>)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1478 | using submonoid.submonoid_is_monoid assms comm_monoid_axioms comm_monoid_def by blast | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1479 | show "\<And>x y. x \<in> carrier (G\<lparr>carrier := H\<rparr>) \<Longrightarrow> y \<in> carrier (G\<lparr>carrier := H\<rparr>) | 
| 68687 | 1480 | \<Longrightarrow> x \<otimes>\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> y = y \<otimes>\<^bsub>G\<lparr>carrier := H\<rparr>\<^esub> x" | 
| 1481 | by simp (meson assms m_comm submonoid.mem_carrier) | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1482 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1483 | |
| 13936 | 1484 | locale comm_group = comm_monoid + group | 
| 1485 | ||
| 1486 | lemma (in group) group_comm_groupI: | |
| 68662 | 1487 | assumes m_comm: "!!x y. [| x \<in> carrier G; y \<in> carrier G |] ==> x \<otimes> y = y \<otimes> x" | 
| 13936 | 1488 | shows "comm_group G" | 
| 61169 | 1489 | by standard (simp_all add: m_comm) | 
| 13817 | 1490 | |
| 13936 | 1491 | lemma comm_groupI: | 
| 19783 | 1492 | fixes G (structure) | 
| 13936 | 1493 | assumes m_closed: | 
| 14693 | 1494 | "!!x y. [| x \<in> carrier G; y \<in> carrier G |] ==> x \<otimes> y \<in> carrier G" | 
| 1495 | and one_closed: "\<one> \<in> carrier G" | |
| 13936 | 1496 | and m_assoc: | 
| 1497 | "!!x y z. [| x \<in> carrier G; y \<in> carrier G; z \<in> carrier G |] ==> | |
| 14693 | 1498 | (x \<otimes> y) \<otimes> z = x \<otimes> (y \<otimes> z)" | 
| 13936 | 1499 | and m_comm: | 
| 14693 | 1500 | "!!x y. [| x \<in> carrier G; y \<in> carrier G |] ==> x \<otimes> y = y \<otimes> x" | 
| 1501 | and l_one: "!!x. x \<in> carrier G ==> \<one> \<otimes> x = x" | |
| 14963 | 1502 | and l_inv_ex: "!!x. x \<in> carrier G ==> \<exists>y \<in> carrier G. y \<otimes> x = \<one>" | 
| 13936 | 1503 | shows "comm_group G" | 
| 27714 
27b4d7c01f8b
Tuned (for the sake of a meaningless log entry).
 ballarin parents: 
27713diff
changeset | 1504 | by (fast intro: group.group_comm_groupI groupI assms) | 
| 13936 | 1505 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1506 | lemma comm_groupE: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1507 | fixes G (structure) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1508 | assumes "comm_group G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1509 | shows "\<And>x y. \<lbrakk> x \<in> carrier G; y \<in> carrier G \<rbrakk> \<Longrightarrow> x \<otimes> y \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1510 | and "\<one> \<in> carrier G" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1511 | and "\<And>x y z. \<lbrakk> x \<in> carrier G; y \<in> carrier G; z \<in> carrier G \<rbrakk> \<Longrightarrow> (x \<otimes> y) \<otimes> z = x \<otimes> (y \<otimes> z)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1512 | and "\<And>x y. \<lbrakk> x \<in> carrier G; y \<in> carrier G \<rbrakk> \<Longrightarrow> x \<otimes> y = y \<otimes> x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1513 | and "\<And>x. x \<in> carrier G \<Longrightarrow> \<one> \<otimes> x = x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1514 | and "\<And>x. x \<in> carrier G \<Longrightarrow> \<exists>y \<in> carrier G. y \<otimes> x = \<one>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1515 | apply (simp_all add: group.axioms assms comm_group.axioms comm_monoid.m_comm comm_monoid.m_ac(1)) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1516 | by (simp_all add: Group.group.axioms(1) assms comm_group.axioms(2) monoid.m_closed group.r_inv_ex) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1517 | |
| 13936 | 1518 | lemma (in comm_group) inv_mult: | 
| 13854 
91c9ab25fece
First distributed version of Group and Ring theory.
 ballarin parents: 
13835diff
changeset | 1519 | "[| x \<in> carrier G; y \<in> carrier G |] ==> inv (x \<otimes> y) = inv x \<otimes> inv y" | 
| 13936 | 1520 | by (simp add: m_ac inv_mult_group) | 
| 13854 
91c9ab25fece
First distributed version of Group and Ring theory.
 ballarin parents: 
13835diff
changeset | 1521 | |
| 70019 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1522 | lemma (in comm_monoid) nat_pow_distrib: | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1523 | fixes n::nat | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1524 | assumes "x \<in> carrier G" "y \<in> carrier G" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1525 | shows "(x \<otimes> y) [^] n = x [^] n \<otimes> y [^] n" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1526 | by (simp add: assms pow_mult_distrib m_comm) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1527 | |
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1528 | lemma (in comm_group) int_pow_distrib: | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1529 | assumes "x \<in> carrier G" "y \<in> carrier G" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1530 | shows "(x \<otimes> y) [^] (i::int) = x [^] i \<otimes> y [^] i" | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1531 | by (simp add: assms int_pow_mult_distrib m_comm) | 
| 
095dce9892e8
A few results in Algebra, and bits for Analysis
 paulson <lp15@cam.ac.uk> parents: 
69895diff
changeset | 1532 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1533 | lemma (in comm_monoid) hom_imp_img_comm_monoid: \<^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: 
68399diff
changeset | 1534 | assumes "h \<in> hom G H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1535 | shows "comm_monoid (H \<lparr> carrier := h ` (carrier G), one := h \<one>\<^bsub>G\<^esub> \<rparr>)" (is "comm_monoid ?h_img") | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1536 | proof (rule monoid.monoid_comm_monoidI) | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1537 | show "monoid ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1538 | using hom_imp_img_monoid[OF assms] . | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1539 | next | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1540 | fix x y assume "x \<in> carrier ?h_img" "y \<in> carrier ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1541 | then obtain g1 g2 | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1542 | where g1: "g1 \<in> carrier G" "x = h g1" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1543 | and g2: "g2 \<in> carrier G" "y = h g2" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1544 | by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1545 | have "x \<otimes>\<^bsub>(?h_img)\<^esub> y = h (g1 \<otimes> g2)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1546 | using g1 g2 assms unfolding hom_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1547 | also have " ... = h (g2 \<otimes> g1)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1548 | using m_comm[OF g1(1) g2(1)] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1549 | also have " ... = y \<otimes>\<^bsub>(?h_img)\<^esub> x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1550 | using g1 g2 assms unfolding hom_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1551 | finally show "x \<otimes>\<^bsub>(?h_img)\<^esub> y = y \<otimes>\<^bsub>(?h_img)\<^esub> x" . | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1552 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1553 | |
| 70039 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1554 | lemma (in comm_group) hom_group_mult: | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1555 | assumes "f \<in> hom H G" "g \<in> hom H G" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1556 | shows "(\<lambda>x. f x \<otimes>\<^bsub>G\<^esub> g x) \<in> hom H G" | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1557 | using assms by (auto simp: hom_def Pi_def m_ac) | 
| 
733e256ecdf3
new group theory material, mostly ported from HOL Light
 paulson <lp15@cam.ac.uk> parents: 
70030diff
changeset | 1558 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1559 | lemma (in comm_group) hom_imp_img_comm_group: \<^marker>\<open>contributor \<open>Paulo Emílio de Vilhena\<close>\<close> | 
| 68517 | 1560 | assumes "h \<in> hom G H" | 
| 1561 | shows "comm_group (H \<lparr> carrier := h ` (carrier G), one := h \<one>\<^bsub>G\<^esub> \<rparr>)" | |
| 1562 | unfolding comm_group_def | |
| 1563 | using hom_imp_img_group[OF assms] hom_imp_img_comm_monoid[OF assms] by simp | |
| 1564 | ||
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1565 | lemma (in comm_group) iso_imp_img_comm_group: \<^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: 
68399diff
changeset | 1566 | assumes "h \<in> iso G H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1567 | shows "comm_group (H \<lparr> one := h \<one>\<^bsub>G\<^esub> \<rparr>)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1568 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1569 | let ?h_img = "H \<lparr> carrier := h ` (carrier G), one := h \<one> \<rparr>" | 
| 68517 | 1570 | have "comm_group ?h_img" | 
| 1571 | using hom_imp_img_comm_group[of h H] assms unfolding iso_def by auto | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1572 | moreover have "carrier H = carrier ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1573 | using assms unfolding iso_def bij_betw_def by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1574 | hence "H \<lparr> one := h \<one> \<rparr> = ?h_img" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1575 | by simp | 
| 68517 | 1576 | ultimately show ?thesis by simp | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1577 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1578 | |
| 69895 
6b03a8cf092d
more formal contributors (with the help of the history);
 wenzelm parents: 
69749diff
changeset | 1579 | lemma (in comm_group) iso_imp_comm_group: \<^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: 
68399diff
changeset | 1580 | assumes "G \<cong> H" "monoid H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1581 | shows "comm_group H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1582 | proof - | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1583 | obtain h where h: "h \<in> iso G H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1584 | using assms(1) unfolding is_iso_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1585 | hence comm_gr: "comm_group (H \<lparr> one := h \<one> \<rparr>)" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1586 | using iso_imp_img_comm_group[of h H] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1587 | hence "\<And>x. x \<in> carrier H \<Longrightarrow> h \<one> \<otimes>\<^bsub>H\<^esub> x = x" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1588 | using monoid.l_one[of "H \<lparr> one := h \<one> \<rparr>"] unfolding comm_group_def comm_monoid_def by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1589 | moreover have "h \<one> \<in> carrier H" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1590 | using h one_closed unfolding iso_def hom_def by auto | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1591 | ultimately have "h \<one> = \<one>\<^bsub>H\<^esub>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1592 | using monoid.one_unique[OF assms(2), of "h \<one>"] by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1593 | hence "H = H \<lparr> one := h \<one> \<rparr>" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1594 | by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1595 | thus ?thesis | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1596 | using comm_gr by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1597 | qed | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1598 | |
| 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 | (*A subgroup of a subgroup is a subgroup of the group*) | 
| 
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 | lemma (in group) incl_subgroup: | 
| 
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 | assumes "subgroup J 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 | 1602 | and "subgroup I (G\<lparr>carrier:=J\<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 | 1603 | shows "subgroup I G" unfolding subgroup_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 | 1604 | proof | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 1605 | have H1: "I \<subseteq> carrier (G\<lparr>carrier:=J\<rparr>)" using assms(2) 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 | 1606 | also have H2: "...\<subseteq>J" by simp | 
| 68452 
c027dfbfad30
more on infinite products. Also subgroup_imp_subset -> subgroup.subset
 paulson <lp15@cam.ac.uk> parents: 
68445diff
changeset | 1607 | also have "...\<subseteq>(carrier G)" by (simp add: assms(1) subgroup.subset) | 
| 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 | 1608 | finally have H: "I \<subseteq> carrier G" 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 | 1609 | have "(\<And>x y. \<lbrakk>x \<in> I ; y \<in> I\<rbrakk> \<Longrightarrow> x \<otimes> y \<in> I)" using assms(2) by (auto simp add: subgroup_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 | 1610 | thus "I \<subseteq> carrier G \<and> (\<forall>x y. x \<in> I \<longrightarrow> y \<in> I \<longrightarrow> x \<otimes> y \<in> I)" using H 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 | 1611 | have K: "\<one> \<in> I" using assms(2) by (auto simp add: subgroup_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 | 1612 | have "(\<And>x. x \<in> I \<Longrightarrow> inv x \<in> I)" using assms subgroup.m_inv_closed H | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 1613 | by (metis H1 H2 m_inv_consistent subsetCE) | 
| 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 | 1614 | thus "\<one> \<in> I \<and> (\<forall>x. x \<in> I \<longrightarrow> inv x \<in> I)" using K 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 | 1615 | 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 | 1616 | |
| 
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 | (*A subgroup included in another subgroup is a subgroup of the subgroup*) | 
| 
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 | lemma (in group) subgroup_incl: | 
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 1619 | assumes "subgroup I G" and "subgroup J G" and "I \<subseteq> J" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 1620 | shows "subgroup I (G \<lparr> carrier := J \<rparr>)" | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 1621 | using group.group_incl_imp_subgroup[of "G \<lparr> carrier := J \<rparr>" I] | 
| 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 1622 | assms(1-2)[THEN subgroup.subgroup_is_group[OF _ group_axioms]] assms(3) by auto | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1623 | |
| 20318 
0e0ea63fe768
Restructured algebra library, added ideals and quotient rings.
 ballarin parents: 
19984diff
changeset | 1624 | |
| 61382 | 1625 | subsection \<open>The Lattice of Subgroups of a Group\<close> | 
| 14751 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1626 | |
| 61382 | 1627 | text_raw \<open>\label{sec:subgroup-lattice}\<close>
 | 
| 14751 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1628 | |
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1629 | theorem (in group) subgroups_partial_order: | 
| 67399 | 1630 |   "partial_order \<lparr>carrier = {H. subgroup H G}, eq = (=), le = (\<subseteq>)\<rparr>"
 | 
| 61169 | 1631 | by standard simp_all | 
| 14751 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1632 | |
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1633 | lemma (in group) subgroup_self: | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1634 | "subgroup (carrier G) G" | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1635 | by (rule subgroupI) auto | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1636 | |
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1637 | lemma (in group) subgroup_imp_group: | 
| 55926 | 1638 | "subgroup H G ==> group (G\<lparr>carrier := H\<rparr>)" | 
| 26199 | 1639 | by (erule subgroup.subgroup_is_group) (rule group_axioms) | 
| 14751 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1640 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1641 | lemma (in group) subgroup_mult_equality: | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1642 | "\<lbrakk> subgroup H G; h1 \<in> H; h2 \<in> H \<rbrakk> \<Longrightarrow> h1 \<otimes>\<^bsub>G \<lparr> carrier := H \<rparr>\<^esub> h2 = h1 \<otimes> h2" | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1643 | unfolding subgroup_def by simp | 
| 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1644 | |
| 14751 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1645 | theorem (in group) subgroups_Inter: | 
| 67091 | 1646 | assumes subgr: "(\<And>H. H \<in> A \<Longrightarrow> subgroup H G)" | 
| 1647 |     and not_empty: "A \<noteq> {}"
 | |
| 14751 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1648 | shows "subgroup (\<Inter>A) G" | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1649 | proof (rule subgroupI) | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1650 | from subgr [THEN subgroup.subset] and not_empty | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1651 | show "\<Inter>A \<subseteq> carrier G" by blast | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1652 | next | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1653 | from subgr [THEN subgroup.one_closed] | 
| 67091 | 1654 |   show "\<Inter>A \<noteq> {}" by blast
 | 
| 14751 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1655 | next | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1656 | fix x assume "x \<in> \<Inter>A" | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1657 | with subgr [THEN subgroup.m_inv_closed] | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1658 | show "inv x \<in> \<Inter>A" by blast | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1659 | next | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1660 | fix x y assume "x \<in> \<Inter>A" "y \<in> \<Inter>A" | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1661 | with subgr [THEN subgroup.m_closed] | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1662 | show "x \<otimes> y \<in> \<Inter>A" by blast | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1663 | qed | 
| 
0d7850e27fed
Change of theory hierarchy: Group is now based in Lattice.
 ballarin parents: 
14706diff
changeset | 1664 | |
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1665 | lemma (in group) subgroups_Inter_pair : | 
| 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: 
76987diff
changeset | 1666 | assumes "subgroup I G" "subgroup J G" shows "subgroup (I\<inter>J) 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: 
76987diff
changeset | 1667 |   using subgroups_Inter[ where ?A = "{I,J}"] assms by auto
 | 
| 68443 
43055b016688
New material from Martin Baillon and Paulo Emílio de Vilhena
 paulson <lp15@cam.ac.uk> parents: 
68399diff
changeset | 1668 | |
| 66579 | 1669 | theorem (in group) subgroups_complete_lattice: | 
| 67399 | 1670 |   "complete_lattice \<lparr>carrier = {H. subgroup H G}, eq = (=), le = (\<subseteq>)\<rparr>"
 | 
| 66579 | 1671 | (is "complete_lattice ?L") | 
| 1672 | proof (rule partial_order.complete_lattice_criterion1) | |
| 1673 | show "partial_order ?L" by (rule subgroups_partial_order) | |
| 1674 | next | |
| 1675 | have "greatest ?L (carrier G) (carrier ?L)" | |
| 1676 | by (unfold greatest_def) (simp add: subgroup.subset subgroup_self) | |
| 1677 | then show "\<exists>G. greatest ?L G (carrier ?L)" .. | |
| 1678 | next | |
| 1679 | fix A | |
| 67091 | 1680 |   assume L: "A \<subseteq> carrier ?L" and non_empty: "A \<noteq> {}"
 | 
| 66579 | 1681 | then have Int_subgroup: "subgroup (\<Inter>A) G" | 
| 1682 | by (fastforce intro: subgroups_Inter) | |
| 1683 | have "greatest ?L (\<Inter>A) (Lower ?L A)" (is "greatest _ ?Int _") | |
| 1684 | proof (rule greatest_LowerI) | |
| 1685 | fix H | |
| 1686 | assume H: "H \<in> A" | |
| 1687 | with L have subgroupH: "subgroup H G" by auto | |
| 1688 | from subgroupH have groupH: "group (G \<lparr>carrier := H\<rparr>)" (is "group ?H") | |
| 1689 | by (rule subgroup_imp_group) | |
| 1690 | from groupH have monoidH: "monoid ?H" | |
| 1691 | by (rule group.is_monoid) | |
| 1692 | from H have Int_subset: "?Int \<subseteq> H" by fastforce | |
| 1693 | then show "le ?L ?Int H" by simp | |
| 1694 | next | |
| 1695 | fix H | |
| 1696 | assume H: "H \<in> Lower ?L A" | |
| 1697 | with L Int_subgroup show "le ?L H ?Int" | |
| 1698 | by (fastforce simp: Lower_def intro: Inter_greatest) | |
| 1699 | next | |
| 1700 | show "A \<subseteq> carrier ?L" by (rule L) | |
| 1701 | next | |
| 1702 | show "?Int \<in> carrier ?L" by simp (rule Int_subgroup) | |
| 1703 | qed | |
| 1704 | then show "\<exists>I. greatest ?L I (Lower ?L A)" .. | |
| 1705 | qed | |
| 1706 | ||
| 70030 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1707 | subsection\<open>The units in any monoid give rise to a group\<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 | 1708 | |
| 70030 
042ae6ca2c40
The order of a group now follows the HOL Light definition, which is more general
 paulson <lp15@cam.ac.uk> parents: 
70027diff
changeset | 1709 | text \<open>Thanks to Jeremy Avigad. The file Residues.thy provides some infrastructure to use | 
| 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 | 1710 | facts about the unit group within the ring locale. | 
| 
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 | 1711 | \<close> | 
| 
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 | 1712 | |
| 
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 | 1713 | definition units_of :: "('a, 'b) monoid_scheme \<Rightarrow> 'a monoid"
 | 
| 
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 | where "units_of 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 | 1715 | \<lparr>carrier = Units G, Group.monoid.mult = Group.monoid.mult G, one = one G\<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 | 1716 | |
| 
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 | 1717 | lemma (in monoid) units_group: "group (units_of G)" | 
| 68458 | 1718 | proof - | 
| 1719 | have "\<And>x y z. \<lbrakk>x \<in> Units G; y \<in> Units G; z \<in> Units G\<rbrakk> \<Longrightarrow> x \<otimes> y \<otimes> z = x \<otimes> (y \<otimes> z)" | |
| 1720 | by (simp add: Units_closed m_assoc) | |
| 1721 | moreover have "\<And>x. x \<in> Units G \<Longrightarrow> \<exists>y\<in>Units G. y \<otimes> x = \<one>" | |
| 1722 | using Units_l_inv by blast | |
| 1723 | ultimately show ?thesis | |
| 1724 | unfolding units_of_def | |
| 1725 | by (force intro!: groupI) | |
| 1726 | qed | |
| 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 | 1727 | |
| 
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 | 1728 | lemma (in comm_monoid) units_comm_group: "comm_group (units_of G)" | 
| 68458 | 1729 | proof - | 
| 1730 | have "\<And>x y. \<lbrakk>x \<in> carrier (units_of G); y \<in> carrier (units_of G)\<rbrakk> | |
| 1731 | \<Longrightarrow> x \<otimes>\<^bsub>units_of G\<^esub> y = y \<otimes>\<^bsub>units_of G\<^esub> x" | |
| 1732 | by (simp add: Units_closed m_comm units_of_def) | |
| 1733 | then show ?thesis | |
| 1734 | by (rule group.group_comm_groupI [OF units_group]) auto | |
| 1735 | qed | |
| 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 | 1736 | |
| 
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 | 1737 | lemma units_of_carrier: "carrier (units_of G) = Units 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 | 1738 | by (auto simp: units_of_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 | 1739 | |
| 
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 | 1740 | lemma units_of_mult: "mult (units_of G) = mult 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 | 1741 | by (auto simp: units_of_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 | 1742 | |
| 
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 | 1743 | lemma units_of_one: "one (units_of G) = one 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 | 1744 | by (auto simp: units_of_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 | 1745 | |
| 68555 
22d51874f37d
a few more lemmas from Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68551diff
changeset | 1746 | lemma (in monoid) units_of_inv: | 
| 68458 | 1747 | assumes "x \<in> Units G" | 
| 1748 | shows "m_inv (units_of G) x = m_inv G x" | |
| 1749 | by (simp add: assms group.inv_equality units_group units_of_carrier units_of_mult units_of_one) | |
| 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 | 1750 | |
| 68551 
b680e74eb6f2
More on Algebra by Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1751 | lemma units_of_units [simp] : "Units (units_of G) = Units G" | 
| 
b680e74eb6f2
More on Algebra by Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1752 | unfolding units_of_def Units_def by force | 
| 
b680e74eb6f2
More on Algebra by Paulo and Martin
 paulson <lp15@cam.ac.uk> parents: 
68517diff
changeset | 1753 | |
| 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 | 1754 | lemma (in group) surj_const_mult: "a \<in> carrier G \<Longrightarrow> (\<lambda>x. a \<otimes> x) ` carrier G = 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 | 1755 | apply (auto simp add: image_def) | 
| 68458 | 1756 | by (metis inv_closed inv_solve_left m_closed) | 
| 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 | 1757 | |
| 
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 | 1758 | lemma (in group) l_cancel_one [simp]: "x \<in> carrier G \<Longrightarrow> a \<in> carrier G \<Longrightarrow> x \<otimes> a = x \<longleftrightarrow> a = one 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 | 1759 | by (metis Units_eq Units_l_cancel monoid.r_one monoid_axioms one_closed) | 
| 
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 | 1760 | |
| 
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 | 1761 | lemma (in group) r_cancel_one [simp]: "x \<in> carrier G \<Longrightarrow> a \<in> carrier G \<Longrightarrow> a \<otimes> x = x \<longleftrightarrow> a = one 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 | 1762 | by (metis monoid.l_one monoid_axioms one_closed right_cancel) | 
| 
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 | 1763 | |
| 
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 | 1764 | lemma (in group) l_cancel_one' [simp]: "x \<in> carrier G \<Longrightarrow> a \<in> carrier G \<Longrightarrow> x = x \<otimes> a \<longleftrightarrow> a = one 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 | 1765 | using l_cancel_one 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 | 1766 | |
| 
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 | 1767 | lemma (in group) r_cancel_one' [simp]: "x \<in> carrier G \<Longrightarrow> a \<in> carrier G \<Longrightarrow> x = a \<otimes> x \<longleftrightarrow> a = one 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 | 1768 | using r_cancel_one 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 | 1769 | |
| 70027 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1770 | declare pow_nat [simp] (*causes looping if added above, especially with int_pow_def2*) | 
| 
94494b92d8d0
some new group theory results: integer group, trivial group, etc.
 paulson <lp15@cam.ac.uk> parents: 
70019diff
changeset | 1771 | |
| 13813 | 1772 | end |