9 begin |
9 begin |
10 |
10 |
11 section \<open>Cosets and Quotient Groups\<close> |
11 section \<open>Cosets and Quotient Groups\<close> |
12 |
12 |
13 definition |
13 definition |
14 r_coset :: "[_, 'a set, 'a] \<Rightarrow> 'a set" (infixl "#>\<index>" 60) |
14 r_coset :: "[_, 'a set, 'a] \<Rightarrow> 'a set" (infixl \<open>#>\<index>\<close> 60) |
15 where "H #>\<^bsub>G\<^esub> a = (\<Union>h\<in>H. {h \<otimes>\<^bsub>G\<^esub> a})" |
15 where "H #>\<^bsub>G\<^esub> a = (\<Union>h\<in>H. {h \<otimes>\<^bsub>G\<^esub> a})" |
16 |
16 |
17 definition |
17 definition |
18 l_coset :: "[_, 'a, 'a set] \<Rightarrow> 'a set" (infixl "<#\<index>" 60) |
18 l_coset :: "[_, 'a, 'a set] \<Rightarrow> 'a set" (infixl \<open><#\<index>\<close> 60) |
19 where "a <#\<^bsub>G\<^esub> H = (\<Union>h\<in>H. {a \<otimes>\<^bsub>G\<^esub> h})" |
19 where "a <#\<^bsub>G\<^esub> H = (\<Union>h\<in>H. {a \<otimes>\<^bsub>G\<^esub> h})" |
20 |
20 |
21 definition |
21 definition |
22 RCOSETS :: "[_, 'a set] \<Rightarrow> ('a set)set" ("rcosets\<index> _" [81] 80) |
22 RCOSETS :: "[_, 'a set] \<Rightarrow> ('a set)set" (\<open>rcosets\<index> _\<close> [81] 80) |
23 where "rcosets\<^bsub>G\<^esub> H = (\<Union>a\<in>carrier G. {H #>\<^bsub>G\<^esub> a})" |
23 where "rcosets\<^bsub>G\<^esub> H = (\<Union>a\<in>carrier G. {H #>\<^bsub>G\<^esub> a})" |
24 |
24 |
25 definition |
25 definition |
26 set_mult :: "[_, 'a set ,'a set] \<Rightarrow> 'a set" (infixl "<#>\<index>" 60) |
26 set_mult :: "[_, 'a set ,'a set] \<Rightarrow> 'a set" (infixl \<open><#>\<index>\<close> 60) |
27 where "H <#>\<^bsub>G\<^esub> K = (\<Union>h\<in>H. \<Union>k\<in>K. {h \<otimes>\<^bsub>G\<^esub> k})" |
27 where "H <#>\<^bsub>G\<^esub> K = (\<Union>h\<in>H. \<Union>k\<in>K. {h \<otimes>\<^bsub>G\<^esub> k})" |
28 |
28 |
29 definition |
29 definition |
30 SET_INV :: "[_,'a set] \<Rightarrow> 'a set" ("set'_inv\<index> _" [81] 80) |
30 SET_INV :: "[_,'a set] \<Rightarrow> 'a set" (\<open>set'_inv\<index> _\<close> [81] 80) |
31 where "set_inv\<^bsub>G\<^esub> H = (\<Union>h\<in>H. {inv\<^bsub>G\<^esub> h})" |
31 where "set_inv\<^bsub>G\<^esub> H = (\<Union>h\<in>H. {inv\<^bsub>G\<^esub> h})" |
32 |
32 |
33 |
33 |
34 locale normal = subgroup + group + |
34 locale normal = subgroup + group + |
35 assumes coset_eq: "(\<forall>x \<in> carrier G. H #> x = x <# H)" |
35 assumes coset_eq: "(\<forall>x \<in> carrier G. H #> x = x <# H)" |
36 |
36 |
37 abbreviation |
37 abbreviation |
38 normal_rel :: "['a set, ('a, 'b) monoid_scheme] \<Rightarrow> bool" (infixl "\<lhd>" 60) where |
38 normal_rel :: "['a set, ('a, 'b) monoid_scheme] \<Rightarrow> bool" (infixl \<open>\<lhd>\<close> 60) where |
39 "H \<lhd> G \<equiv> normal H G" |
39 "H \<lhd> G \<equiv> normal H G" |
40 |
40 |
41 lemma (in comm_group) subgroup_imp_normal: "subgroup A G \<Longrightarrow> A \<lhd> G" |
41 lemma (in comm_group) subgroup_imp_normal: "subgroup A G \<Longrightarrow> A \<lhd> G" |
42 by (simp add: normal_def normal_axioms_def l_coset_def r_coset_def m_comm subgroup.mem_carrier) |
42 by (simp add: normal_def normal_axioms_def l_coset_def r_coset_def m_comm subgroup.mem_carrier) |
43 |
43 |
657 |
657 |
658 |
658 |
659 subsubsection\<open>An Equivalence Relation\<close> |
659 subsubsection\<open>An Equivalence Relation\<close> |
660 |
660 |
661 definition |
661 definition |
662 r_congruent :: "[('a,'b)monoid_scheme, 'a set] \<Rightarrow> ('a*'a)set" ("rcong\<index> _") |
662 r_congruent :: "[('a,'b)monoid_scheme, 'a set] \<Rightarrow> ('a*'a)set" (\<open>rcong\<index> _\<close>) |
663 where "rcong\<^bsub>G\<^esub> H = {(x,y). x \<in> carrier G \<and> y \<in> carrier G \<and> inv\<^bsub>G\<^esub> x \<otimes>\<^bsub>G\<^esub> y \<in> H}" |
663 where "rcong\<^bsub>G\<^esub> H = {(x,y). x \<in> carrier G \<and> y \<in> carrier G \<and> inv\<^bsub>G\<^esub> x \<otimes>\<^bsub>G\<^esub> y \<in> H}" |
664 |
664 |
665 |
665 |
666 lemma (in subgroup) equiv_rcong: |
666 lemma (in subgroup) equiv_rcong: |
667 assumes "group G" |
667 assumes "group G" |
959 using lagrange triv_subgroup by fastforce |
959 using lagrange triv_subgroup by fastforce |
960 |
960 |
961 subsection \<open>Quotient Groups: Factorization of a Group\<close> |
961 subsection \<open>Quotient Groups: Factorization of a Group\<close> |
962 |
962 |
963 definition |
963 definition |
964 FactGroup :: "[('a,'b) monoid_scheme, 'a set] \<Rightarrow> ('a set) monoid" (infixl "Mod" 65) |
964 FactGroup :: "[('a,'b) monoid_scheme, 'a set] \<Rightarrow> ('a set) monoid" (infixl \<open>Mod\<close> 65) |
965 \<comment> \<open>Actually defined for groups rather than monoids\<close> |
965 \<comment> \<open>Actually defined for groups rather than monoids\<close> |
966 where "FactGroup G H = \<lparr>carrier = rcosets\<^bsub>G\<^esub> H, mult = set_mult G, one = H\<rparr>" |
966 where "FactGroup G H = \<lparr>carrier = rcosets\<^bsub>G\<^esub> H, mult = set_mult G, one = H\<rparr>" |
967 |
967 |
968 lemma (in normal) setmult_closed: |
968 lemma (in normal) setmult_closed: |
969 "\<lbrakk>K1 \<in> rcosets H; K2 \<in> rcosets H\<rbrakk> \<Longrightarrow> K1 <#> K2 \<in> rcosets H" |
969 "\<lbrakk>K1 \<in> rcosets H; K2 \<in> rcosets H\<rbrakk> \<Longrightarrow> K1 <#> K2 \<in> rcosets H" |