39 a_r_congruent :: "[('a,'b)ring_scheme, 'a set] \<Rightarrow> ('a*'a)set" ("racong\<index>") |
39 a_r_congruent :: "[('a,'b)ring_scheme, 'a set] \<Rightarrow> ('a*'a)set" ("racong\<index>") |
40 where "a_r_congruent G = r_congruent \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>" |
40 where "a_r_congruent G = r_congruent \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr>" |
41 |
41 |
42 definition |
42 definition |
43 A_FactGroup :: "[('a,'b) ring_scheme, 'a set] \<Rightarrow> ('a set) monoid" (infixl "A'_Mod" 65) |
43 A_FactGroup :: "[('a,'b) ring_scheme, 'a set] \<Rightarrow> ('a set) monoid" (infixl "A'_Mod" 65) |
44 \<comment>\<open>Actually defined for groups rather than monoids\<close> |
44 \<comment> \<open>Actually defined for groups rather than monoids\<close> |
45 where "A_FactGroup G H = FactGroup \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr> H" |
45 where "A_FactGroup G H = FactGroup \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr> H" |
46 |
46 |
47 definition |
47 definition |
48 a_kernel :: "('a, 'm) ring_scheme \<Rightarrow> ('b, 'n) ring_scheme \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> 'a set" |
48 a_kernel :: "('a, 'm) ring_scheme \<Rightarrow> ('b, 'n) ring_scheme \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> 'a set" |
49 \<comment>\<open>the kernel of a homomorphism (additive)\<close> |
49 \<comment> \<open>the kernel of a homomorphism (additive)\<close> |
50 where "a_kernel G H h = |
50 where "a_kernel G H h = |
51 kernel \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr> |
51 kernel \<lparr>carrier = carrier G, mult = add G, one = zero G\<rparr> |
52 \<lparr>carrier = carrier H, mult = add H, one = zero H\<rparr> h" |
52 \<lparr>carrier = carrier H, mult = add H, one = zero H\<rparr> h" |
53 |
53 |
54 locale abelian_group_hom = G?: abelian_group G + H?: abelian_group H |
54 locale abelian_group_hom = G?: abelian_group G + H?: abelian_group H |
685 shows "(x' \<in> H +> x) = (x' \<oplus> \<ominus>x \<in> H)" |
685 shows "(x' \<in> H +> x) = (x' \<oplus> \<ominus>x \<in> H)" |
686 using assms |
686 using assms |
687 by (rule subgroup.rcos_module [OF a_subgroup a_group, |
687 by (rule subgroup.rcos_module [OF a_subgroup a_group, |
688 folded a_r_coset_def a_inv_def, simplified monoid_record_simps]) |
688 folded a_r_coset_def a_inv_def, simplified monoid_record_simps]) |
689 |
689 |
690 \<comment>"variant" |
690 \<comment> \<open>variant\<close> |
691 lemma (in abelian_subgroup) a_rcos_module_minus: |
691 lemma (in abelian_subgroup) a_rcos_module_minus: |
692 assumes "ring G" |
692 assumes "ring G" |
693 assumes carr: "x \<in> carrier G" "x' \<in> carrier G" |
693 assumes carr: "x \<in> carrier G" "x' \<in> carrier G" |
694 shows "(x' \<in> H +> x) = (x' \<ominus> x \<in> H)" |
694 shows "(x' \<in> H +> x) = (x' \<ominus> x \<in> H)" |
695 proof - |
695 proof - |