143 end |
143 end |
144 |
144 |
145 |
145 |
146 subsubsection \<open>Introduction and Destruct Rules for \<open>H\<close>\<close> |
146 subsubsection \<open>Introduction and Destruct Rules for \<open>H\<close>\<close> |
147 |
147 |
148 lemma (in sylow_central) H_I: "\<lbrakk>g \<in> carrier G; M1 #> g = M1\<rbrakk> \<Longrightarrow> g \<in> H" |
148 context sylow_central |
|
149 begin |
|
150 |
|
151 lemma H_I: "\<lbrakk>g \<in> carrier G; M1 #> g = M1\<rbrakk> \<Longrightarrow> g \<in> H" |
149 by (simp add: H_def) |
152 by (simp add: H_def) |
150 |
153 |
151 lemma (in sylow_central) H_into_carrier_G: "x \<in> H \<Longrightarrow> x \<in> carrier G" |
154 lemma H_into_carrier_G: "x \<in> H \<Longrightarrow> x \<in> carrier G" |
152 by (simp add: H_def) |
155 by (simp add: H_def) |
153 |
156 |
154 lemma (in sylow_central) in_H_imp_eq: "g \<in> H \<Longrightarrow> M1 #> g = M1" |
157 lemma in_H_imp_eq: "g \<in> H \<Longrightarrow> M1 #> g = M1" |
155 by (simp add: H_def) |
158 by (simp add: H_def) |
156 |
159 |
157 lemma (in sylow_central) H_m_closed: "\<lbrakk>x \<in> H; y \<in> H\<rbrakk> \<Longrightarrow> x \<otimes> y \<in> H" |
160 lemma H_m_closed: "\<lbrakk>x \<in> H; y \<in> H\<rbrakk> \<Longrightarrow> x \<otimes> y \<in> H" |
158 by (simp add: H_def coset_mult_assoc [symmetric]) |
161 by (simp add: H_def coset_mult_assoc [symmetric]) |
159 |
162 |
160 lemma (in sylow_central) H_not_empty: "H \<noteq> {}" |
163 lemma H_not_empty: "H \<noteq> {}" |
161 apply (simp add: H_def) |
164 apply (simp add: H_def) |
162 apply (rule exI [of _ \<one>]) |
165 apply (rule exI [of _ \<one>]) |
163 apply simp |
166 apply simp |
164 done |
167 done |
165 |
168 |
166 lemma (in sylow_central) H_is_subgroup: "subgroup H G" |
169 lemma H_is_subgroup: "subgroup H G" |
167 apply (rule subgroupI) |
170 apply (rule subgroupI) |
168 apply (rule subsetI) |
171 apply (rule subsetI) |
169 apply (erule H_into_carrier_G) |
172 apply (erule H_into_carrier_G) |
170 apply (rule H_not_empty) |
173 apply (rule H_not_empty) |
171 apply (simp add: H_def) |
174 apply (simp add: H_def) |
174 apply (simp add: coset_mult_assoc ) |
177 apply (simp add: coset_mult_assoc ) |
175 apply (blast intro: H_m_closed) |
178 apply (blast intro: H_m_closed) |
176 done |
179 done |
177 |
180 |
178 |
181 |
179 lemma (in sylow_central) rcosetGM1g_subset_G: |
182 lemma rcosetGM1g_subset_G: "\<lbrakk>g \<in> carrier G; x \<in> M1 #> g\<rbrakk> \<Longrightarrow> x \<in> carrier G" |
180 "\<lbrakk>g \<in> carrier G; x \<in> M1 #> g\<rbrakk> \<Longrightarrow> x \<in> carrier G" |
|
181 by (blast intro: M1_subset_G [THEN r_coset_subset_G, THEN subsetD]) |
183 by (blast intro: M1_subset_G [THEN r_coset_subset_G, THEN subsetD]) |
182 |
184 |
183 lemma (in sylow_central) finite_M1: "finite M1" |
185 lemma finite_M1: "finite M1" |
184 by (rule finite_subset [OF M1_subset_G finite_G]) |
186 by (rule finite_subset [OF M1_subset_G finite_G]) |
185 |
187 |
186 lemma (in sylow_central) finite_rcosetGM1g: "g \<in> carrier G \<Longrightarrow> finite (M1 #> g)" |
188 lemma finite_rcosetGM1g: "g \<in> carrier G \<Longrightarrow> finite (M1 #> g)" |
187 using rcosetGM1g_subset_G finite_G M1_subset_G cosets_finite rcosetsI by blast |
189 using rcosetGM1g_subset_G finite_G M1_subset_G cosets_finite rcosetsI by blast |
188 |
190 |
189 lemma (in sylow_central) M1_cardeq_rcosetGM1g: "g \<in> carrier G \<Longrightarrow> card (M1 #> g) = card M1" |
191 lemma M1_cardeq_rcosetGM1g: "g \<in> carrier G \<Longrightarrow> card (M1 #> g) = card M1" |
190 by (simp add: card_cosets_equal rcosetsI) |
192 by (simp add: card_cosets_equal rcosetsI) |
191 |
193 |
192 lemma (in sylow_central) M1_RelM_rcosetGM1g: "g \<in> carrier G \<Longrightarrow> (M1, M1 #> g) \<in> RelM" |
194 lemma M1_RelM_rcosetGM1g: "g \<in> carrier G \<Longrightarrow> (M1, M1 #> g) \<in> RelM" |
193 apply (simp add: RelM_def calM_def card_M1) |
195 apply (simp add: RelM_def calM_def card_M1) |
194 apply (rule conjI) |
196 apply (rule conjI) |
195 apply (blast intro: rcosetGM1g_subset_G) |
197 apply (blast intro: rcosetGM1g_subset_G) |
196 apply (simp add: card_M1 M1_cardeq_rcosetGM1g) |
198 apply (simp add: card_M1 M1_cardeq_rcosetGM1g) |
197 apply (metis M1_subset_G coset_mult_assoc coset_mult_one r_inv_ex) |
199 apply (metis M1_subset_G coset_mult_assoc coset_mult_one r_inv_ex) |
198 done |
200 done |
199 |
201 |
|
202 end |
|
203 |
200 |
204 |
201 subsection \<open>Equal Cardinalities of \<open>M\<close> and the Set of Cosets\<close> |
205 subsection \<open>Equal Cardinalities of \<open>M\<close> and the Set of Cosets\<close> |
202 |
206 |
203 text \<open>Injections between @{term M} and @{term "rcosets\<^bsub>G\<^esub> H"} show that |
207 text \<open>Injections between @{term M} and @{term "rcosets\<^bsub>G\<^esub> H"} show that |
204 their cardinalities are equal.\<close> |
208 their cardinalities are equal.\<close> |
205 |
209 |
206 lemma ElemClassEquiv: "\<lbrakk>equiv A r; C \<in> A // r\<rbrakk> \<Longrightarrow> \<forall>x \<in> C. \<forall>y \<in> C. (x, y) \<in> r" |
210 lemma ElemClassEquiv: "\<lbrakk>equiv A r; C \<in> A // r\<rbrakk> \<Longrightarrow> \<forall>x \<in> C. \<forall>y \<in> C. (x, y) \<in> r" |
207 unfolding equiv_def quotient_def sym_def trans_def by blast |
211 unfolding equiv_def quotient_def sym_def trans_def by blast |
208 |
212 |
209 lemma (in sylow_central) M_elem_map: "M2 \<in> M \<Longrightarrow> \<exists>g. g \<in> carrier G \<and> M1 #> g = M2" |
213 context sylow_central |
|
214 begin |
|
215 |
|
216 lemma M_elem_map: "M2 \<in> M \<Longrightarrow> \<exists>g. g \<in> carrier G \<and> M1 #> g = M2" |
210 using M1_in_M M_in_quot [THEN RelM_equiv [THEN ElemClassEquiv]] |
217 using M1_in_M M_in_quot [THEN RelM_equiv [THEN ElemClassEquiv]] |
211 by (simp add: RelM_def) (blast dest!: bspec) |
218 by (simp add: RelM_def) (blast dest!: bspec) |
212 |
219 |
213 lemmas (in sylow_central) M_elem_map_carrier = |
220 lemmas M_elem_map_carrier = M_elem_map [THEN someI_ex, THEN conjunct1] |
214 M_elem_map [THEN someI_ex, THEN conjunct1] |
221 |
215 |
222 lemmas M_elem_map_eq = M_elem_map [THEN someI_ex, THEN conjunct2] |
216 lemmas (in sylow_central) M_elem_map_eq = |
223 |
217 M_elem_map [THEN someI_ex, THEN conjunct2] |
224 lemma M_funcset_rcosets_H: |
218 |
|
219 lemma (in sylow_central) M_funcset_rcosets_H: |
|
220 "(\<lambda>x\<in>M. H #> (SOME g. g \<in> carrier G \<and> M1 #> g = x)) \<in> M \<rightarrow> rcosets H" |
225 "(\<lambda>x\<in>M. H #> (SOME g. g \<in> carrier G \<and> M1 #> g = x)) \<in> M \<rightarrow> rcosets H" |
221 by (metis (lifting) H_is_subgroup M_elem_map_carrier rcosetsI restrictI subgroup_imp_subset) |
226 by (metis (lifting) H_is_subgroup M_elem_map_carrier rcosetsI restrictI subgroup_imp_subset) |
222 |
227 |
223 lemma (in sylow_central) inj_M_GmodH: "\<exists>f \<in> M \<rightarrow> rcosets H. inj_on f M" |
228 lemma inj_M_GmodH: "\<exists>f \<in> M \<rightarrow> rcosets H. inj_on f M" |
224 apply (rule bexI) |
229 apply (rule bexI) |
225 apply (rule_tac [2] M_funcset_rcosets_H) |
230 apply (rule_tac [2] M_funcset_rcosets_H) |
226 apply (rule inj_onI, simp) |
231 apply (rule inj_onI, simp) |
227 apply (rule trans [OF _ M_elem_map_eq]) |
232 apply (rule trans [OF _ M_elem_map_eq]) |
228 prefer 2 apply assumption |
233 prefer 2 apply assumption |
234 apply (rule_tac [3] H_is_subgroup) |
239 apply (rule_tac [3] H_is_subgroup) |
235 prefer 2 apply (blast intro: M_elem_map_carrier) |
240 prefer 2 apply (blast intro: M_elem_map_carrier) |
236 apply (simp add: coset_mult_inv2 H_def M_elem_map_carrier subset_eq) |
241 apply (simp add: coset_mult_inv2 H_def M_elem_map_carrier subset_eq) |
237 done |
242 done |
238 |
243 |
239 |
244 end |
240 subsubsection\<open>The Opposite Injection\<close> |
245 |
241 |
246 |
242 lemma (in sylow_central) H_elem_map: "H1 \<in> rcosets H \<Longrightarrow> \<exists>g. g \<in> carrier G \<and> H #> g = H1" |
247 subsubsection \<open>The Opposite Injection\<close> |
|
248 |
|
249 context sylow_central |
|
250 begin |
|
251 |
|
252 lemma H_elem_map: "H1 \<in> rcosets H \<Longrightarrow> \<exists>g. g \<in> carrier G \<and> H #> g = H1" |
243 by (auto simp: RCOSETS_def) |
253 by (auto simp: RCOSETS_def) |
244 |
254 |
245 lemmas (in sylow_central) H_elem_map_carrier = |
255 lemmas H_elem_map_carrier = H_elem_map [THEN someI_ex, THEN conjunct1] |
246 H_elem_map [THEN someI_ex, THEN conjunct1] |
256 |
247 |
257 lemmas H_elem_map_eq = H_elem_map [THEN someI_ex, THEN conjunct2] |
248 lemmas (in sylow_central) H_elem_map_eq = |
258 |
249 H_elem_map [THEN someI_ex, THEN conjunct2] |
259 lemma rcosets_H_funcset_M: |
250 |
|
251 lemma (in sylow_central) rcosets_H_funcset_M: |
|
252 "(\<lambda>C \<in> rcosets H. M1 #> (@g. g \<in> carrier G \<and> H #> g = C)) \<in> rcosets H \<rightarrow> M" |
260 "(\<lambda>C \<in> rcosets H. M1 #> (@g. g \<in> carrier G \<and> H #> g = C)) \<in> rcosets H \<rightarrow> M" |
253 apply (simp add: RCOSETS_def) |
261 apply (simp add: RCOSETS_def) |
254 apply (fast intro: someI2 |
262 apply (fast intro: someI2 |
255 intro!: M1_in_M in_quotient_imp_closed [OF RelM_equiv M_in_quot _ M1_RelM_rcosetGM1g]) |
263 intro!: M1_in_M in_quotient_imp_closed [OF RelM_equiv M_in_quot _ M1_RelM_rcosetGM1g]) |
256 done |
264 done |
257 |
265 |
258 text \<open>Close to a duplicate of \<open>inj_M_GmodH\<close>.\<close> |
266 text \<open>Close to a duplicate of \<open>inj_M_GmodH\<close>.\<close> |
259 lemma (in sylow_central) inj_GmodH_M: "\<exists>g \<in> rcosets H\<rightarrow>M. inj_on g (rcosets H)" |
267 lemma inj_GmodH_M: "\<exists>g \<in> rcosets H\<rightarrow>M. inj_on g (rcosets H)" |
260 apply (rule bexI) |
268 apply (rule bexI) |
261 apply (rule_tac [2] rcosets_H_funcset_M) |
269 apply (rule_tac [2] rcosets_H_funcset_M) |
262 apply (rule inj_onI) |
270 apply (rule inj_onI) |
263 apply (simp) |
271 apply (simp) |
264 apply (rule trans [OF _ H_elem_map_eq]) |
272 apply (rule trans [OF _ H_elem_map_eq]) |
271 apply (blast intro: H_elem_map_carrier) |
279 apply (blast intro: H_elem_map_carrier) |
272 apply (rule H_is_subgroup) |
280 apply (rule H_is_subgroup) |
273 apply (simp add: H_I coset_mult_inv2 H_elem_map_carrier) |
281 apply (simp add: H_I coset_mult_inv2 H_elem_map_carrier) |
274 done |
282 done |
275 |
283 |
276 lemma (in sylow_central) calM_subset_PowG: "calM \<subseteq> Pow (carrier G)" |
284 lemma calM_subset_PowG: "calM \<subseteq> Pow (carrier G)" |
277 by (auto simp: calM_def) |
285 by (auto simp: calM_def) |
278 |
286 |
279 |
287 |
280 lemma (in sylow_central) finite_M: "finite M" |
288 lemma finite_M: "finite M" |
281 by (metis M_subset_calM finite_calM rev_finite_subset) |
289 by (metis M_subset_calM finite_calM rev_finite_subset) |
282 |
290 |
283 lemma (in sylow_central) cardMeqIndexH: "card M = card (rcosets H)" |
291 lemma cardMeqIndexH: "card M = card (rcosets H)" |
284 apply (insert inj_M_GmodH inj_GmodH_M) |
292 apply (insert inj_M_GmodH inj_GmodH_M) |
285 apply (blast intro: card_bij finite_M H_is_subgroup |
293 apply (blast intro: card_bij finite_M H_is_subgroup |
286 rcosets_subset_PowG [THEN finite_subset] |
294 rcosets_subset_PowG [THEN finite_subset] |
287 finite_Pow_iff [THEN iffD2]) |
295 finite_Pow_iff [THEN iffD2]) |
288 done |
296 done |
289 |
297 |
290 lemma (in sylow_central) index_lem: "card M * card H = order G" |
298 lemma index_lem: "card M * card H = order G" |
291 by (simp add: cardMeqIndexH lagrange H_is_subgroup) |
299 by (simp add: cardMeqIndexH lagrange H_is_subgroup) |
292 |
300 |
293 lemma (in sylow_central) lemma_leq1: "p^a \<le> card H" |
301 lemma lemma_leq1: "p^a \<le> card H" |
294 apply (rule dvd_imp_le) |
302 apply (rule dvd_imp_le) |
295 apply (rule div_combine [OF prime_imp_prime_elem[OF prime_p] not_dvd_M]) |
303 apply (rule div_combine [OF prime_imp_prime_elem[OF prime_p] not_dvd_M]) |
296 prefer 2 apply (blast intro: subgroup.finite_imp_card_positive H_is_subgroup) |
304 prefer 2 apply (blast intro: subgroup.finite_imp_card_positive H_is_subgroup) |
297 apply (simp add: index_lem order_G power_add mult_dvd_mono multiplicity_dvd zero_less_m) |
305 apply (simp add: index_lem order_G power_add mult_dvd_mono multiplicity_dvd zero_less_m) |
298 done |
306 done |
299 |
307 |
300 lemma (in sylow_central) lemma_leq2: "card H \<le> p^a" |
308 lemma lemma_leq2: "card H \<le> p^a" |
301 apply (subst card_M1 [symmetric]) |
309 apply (subst card_M1 [symmetric]) |
302 apply (cut_tac M1_inj_H) |
310 apply (cut_tac M1_inj_H) |
303 apply (blast intro!: M1_subset_G intro: card_inj H_into_carrier_G finite_subset [OF _ finite_G]) |
311 apply (blast intro!: M1_subset_G intro: card_inj H_into_carrier_G finite_subset [OF _ finite_G]) |
304 done |
312 done |
305 |
313 |
306 lemma (in sylow_central) card_H_eq: "card H = p^a" |
314 lemma card_H_eq: "card H = p^a" |
307 by (blast intro: le_antisym lemma_leq1 lemma_leq2) |
315 by (blast intro: le_antisym lemma_leq1 lemma_leq2) |
|
316 |
|
317 end |
308 |
318 |
309 lemma (in sylow) sylow_thm: "\<exists>H. subgroup H G \<and> card H = p^a" |
319 lemma (in sylow) sylow_thm: "\<exists>H. subgroup H G \<and> card H = p^a" |
310 using lemma_A1 |
320 using lemma_A1 |
311 apply clarify |
321 apply clarify |
312 apply (frule existsM1inM, clarify) |
322 apply (frule existsM1inM, clarify) |