58 |
58 |
59 lemmas a_r_coset_defs = |
59 lemmas a_r_coset_defs = |
60 a_r_coset_def r_coset_def |
60 a_r_coset_def r_coset_def |
61 |
61 |
62 lemma a_r_coset_def': |
62 lemma a_r_coset_def': |
63 includes struct G |
63 fixes G (structure) |
64 shows "H +> a \<equiv> \<Union>h\<in>H. {h \<oplus> a}" |
64 shows "H +> a \<equiv> \<Union>h\<in>H. {h \<oplus> a}" |
65 unfolding a_r_coset_defs |
65 unfolding a_r_coset_defs |
66 by simp |
66 by simp |
67 |
67 |
68 lemmas a_l_coset_defs = |
68 lemmas a_l_coset_defs = |
69 a_l_coset_def l_coset_def |
69 a_l_coset_def l_coset_def |
70 |
70 |
71 lemma a_l_coset_def': |
71 lemma a_l_coset_def': |
72 includes struct G |
72 fixes G (structure) |
73 shows "a <+ H \<equiv> \<Union>h\<in>H. {a \<oplus> h}" |
73 shows "a <+ H \<equiv> \<Union>h\<in>H. {a \<oplus> h}" |
74 unfolding a_l_coset_defs |
74 unfolding a_l_coset_defs |
75 by simp |
75 by simp |
76 |
76 |
77 lemmas A_RCOSETS_defs = |
77 lemmas A_RCOSETS_defs = |
78 A_RCOSETS_def RCOSETS_def |
78 A_RCOSETS_def RCOSETS_def |
79 |
79 |
80 lemma A_RCOSETS_def': |
80 lemma A_RCOSETS_def': |
81 includes struct G |
81 fixes G (structure) |
82 shows "a_rcosets H \<equiv> \<Union>a\<in>carrier G. {H +> a}" |
82 shows "a_rcosets H \<equiv> \<Union>a\<in>carrier G. {H +> a}" |
83 unfolding A_RCOSETS_defs |
83 unfolding A_RCOSETS_defs |
84 by (fold a_r_coset_def, simp) |
84 by (fold a_r_coset_def, simp) |
85 |
85 |
86 lemmas set_add_defs = |
86 lemmas set_add_defs = |
87 set_add_def set_mult_def |
87 set_add_def set_mult_def |
88 |
88 |
89 lemma set_add_def': |
89 lemma set_add_def': |
90 includes struct G |
90 fixes G (structure) |
91 shows "H <+> K \<equiv> \<Union>h\<in>H. \<Union>k\<in>K. {h \<oplus> k}" |
91 shows "H <+> K \<equiv> \<Union>h\<in>H. \<Union>k\<in>K. {h \<oplus> k}" |
92 unfolding set_add_defs |
92 unfolding set_add_defs |
93 by simp |
93 by simp |
94 |
94 |
95 lemmas A_SET_INV_defs = |
95 lemmas A_SET_INV_defs = |
96 A_SET_INV_def SET_INV_def |
96 A_SET_INV_def SET_INV_def |
97 |
97 |
98 lemma A_SET_INV_def': |
98 lemma A_SET_INV_def': |
99 includes struct G |
99 fixes G (structure) |
100 shows "a_set_inv H \<equiv> \<Union>h\<in>H. {\<ominus> h}" |
100 shows "a_set_inv H \<equiv> \<Union>h\<in>H. {\<ominus> h}" |
101 unfolding A_SET_INV_defs |
101 unfolding A_SET_INV_defs |
102 by (fold a_inv_def) |
102 by (fold a_inv_def) |
103 |
103 |
104 |
104 |
186 lemma (in additive_subgroup) is_additive_subgroup: |
186 lemma (in additive_subgroup) is_additive_subgroup: |
187 shows "additive_subgroup H G" |
187 shows "additive_subgroup H G" |
188 by (rule additive_subgroup_axioms) |
188 by (rule additive_subgroup_axioms) |
189 |
189 |
190 lemma additive_subgroupI: |
190 lemma additive_subgroupI: |
191 includes struct G |
191 fixes G (structure) |
192 assumes a_subgroup: "subgroup H \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>" |
192 assumes a_subgroup: "subgroup H \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>" |
193 shows "additive_subgroup H G" |
193 shows "additive_subgroup H G" |
194 by (rule additive_subgroup.intro) (rule a_subgroup) |
194 by (rule additive_subgroup.intro) (rule a_subgroup) |
195 |
195 |
196 lemma (in additive_subgroup) a_subset: |
196 lemma (in additive_subgroup) a_subset: |
238 show "abelian_subgroup H G" |
238 show "abelian_subgroup H G" |
239 by (unfold_locales, simp add: a_comm) |
239 by (unfold_locales, simp add: a_comm) |
240 qed |
240 qed |
241 |
241 |
242 lemma abelian_subgroupI2: |
242 lemma abelian_subgroupI2: |
243 includes struct G |
243 fixes G (structure) |
244 assumes a_comm_group: "comm_group \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>" |
244 assumes a_comm_group: "comm_group \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>" |
245 and a_subgroup: "subgroup H \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>" |
245 and a_subgroup: "subgroup H \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>" |
246 shows "abelian_subgroup H G" |
246 shows "abelian_subgroup H G" |
247 proof - |
247 proof - |
248 interpret comm_group ["\<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>"] |
248 interpret comm_group ["\<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>"] |
263 by fast |
263 by fast |
264 qed |
264 qed |
265 qed |
265 qed |
266 |
266 |
267 lemma abelian_subgroupI3: |
267 lemma abelian_subgroupI3: |
268 includes struct G |
268 fixes G (structure) |
269 assumes asg: "additive_subgroup H G" |
269 assumes asg: "additive_subgroup H G" |
270 and ag: "abelian_group G" |
270 and ag: "abelian_group G" |
271 shows "abelian_subgroup H G" |
271 shows "abelian_subgroup H G" |
272 apply (rule abelian_subgroupI2) |
272 apply (rule abelian_subgroupI2) |
273 apply (rule abelian_group.a_comm_group[OF ag]) |
273 apply (rule abelian_group.a_comm_group[OF ag]) |
449 subsection {* Factorization *} |
449 subsection {* Factorization *} |
450 |
450 |
451 lemmas A_FactGroup_defs = A_FactGroup_def FactGroup_def |
451 lemmas A_FactGroup_defs = A_FactGroup_def FactGroup_def |
452 |
452 |
453 lemma A_FactGroup_def': |
453 lemma A_FactGroup_def': |
454 includes struct G |
454 fixes G (structure) |
455 shows "G A_Mod H \<equiv> \<lparr>carrier = a_rcosets\<^bsub>G\<^esub> H, mult = set_add G, one = H\<rparr>" |
455 shows "G A_Mod H \<equiv> \<lparr>carrier = a_rcosets\<^bsub>G\<^esub> H, mult = set_add G, one = H\<rparr>" |
456 unfolding A_FactGroup_defs |
456 unfolding A_FactGroup_defs |
457 by (fold A_RCOSETS_def set_add_def) |
457 by (fold A_RCOSETS_def set_add_def) |
458 |
458 |
459 |
459 |
532 |
532 |
533 |
533 |
534 subsection {* Homomorphisms *} |
534 subsection {* Homomorphisms *} |
535 |
535 |
536 lemma abelian_group_homI: |
536 lemma abelian_group_homI: |
537 includes abelian_group G |
537 assumes "abelian_group G" |
538 includes abelian_group H |
538 assumes "abelian_group H" |
539 assumes a_group_hom: "group_hom (| carrier = carrier G, mult = add G, one = zero G |) |
539 assumes a_group_hom: "group_hom (| carrier = carrier G, mult = add G, one = zero G |) |
540 (| carrier = carrier H, mult = add H, one = zero H |) h" |
540 (| carrier = carrier H, mult = add H, one = zero H |) h" |
541 shows "abelian_group_hom G H h" |
541 shows "abelian_group_hom G H h" |
542 apply (intro abelian_group_hom.intro abelian_group_hom_axioms.intro) |
542 proof - |
543 apply (rule G.abelian_group_axioms) |
543 interpret G: abelian_group [G] by fact |
544 apply (rule H.abelian_group_axioms) |
544 interpret H: abelian_group [H] by fact |
545 apply (rule a_group_hom) |
545 show ?thesis apply (intro abelian_group_hom.intro abelian_group_hom_axioms.intro) |
546 done |
546 apply fact |
|
547 apply fact |
|
548 apply (rule a_group_hom) |
|
549 done |
|
550 qed |
547 |
551 |
548 lemma (in abelian_group_hom) is_abelian_group_hom: |
552 lemma (in abelian_group_hom) is_abelian_group_hom: |
549 "abelian_group_hom G H h" |
553 "abelian_group_hom G H h" |
550 by (unfold_locales) |
554 by (unfold_locales) |
551 |
555 |
686 by (rule subgroup.rcos_module [OF a_subgroup a_group, |
690 by (rule subgroup.rcos_module [OF a_subgroup a_group, |
687 folded a_r_coset_def a_inv_def, simplified monoid_record_simps]) |
691 folded a_r_coset_def a_inv_def, simplified monoid_record_simps]) |
688 |
692 |
689 --"variant" |
693 --"variant" |
690 lemma (in abelian_subgroup) a_rcos_module_minus: |
694 lemma (in abelian_subgroup) a_rcos_module_minus: |
691 includes ring G |
695 assumes "ring G" |
692 assumes carr: "x \<in> carrier G" "x' \<in> carrier G" |
696 assumes carr: "x \<in> carrier G" "x' \<in> carrier G" |
693 shows "(x' \<in> H +> x) = (x' \<ominus> x \<in> H)" |
697 shows "(x' \<in> H +> x) = (x' \<ominus> x \<in> H)" |
694 proof - |
698 proof - |
|
699 interpret G: ring [G] by fact |
695 from carr |
700 from carr |
696 have "(x' \<in> H +> x) = (x' \<oplus> \<ominus>x \<in> H)" by (rule a_rcos_module) |
701 have "(x' \<in> H +> x) = (x' \<oplus> \<ominus>x \<in> H)" by (rule a_rcos_module) |
697 with carr |
702 with carr |
698 show "(x' \<in> H +> x) = (x' \<ominus> x \<in> H)" |
703 show "(x' \<in> H +> x) = (x' \<ominus> x \<in> H)" |
699 by (simp add: minus_eq) |
704 by (simp add: minus_eq) |