|
1 | | -(** SPDX-License-Identifier: MPL-2.0 |
2 | | - Copyright (c) 2026 ECHIDNA Project |
3 | | - Group Theory Examples for ML Training Corpus *) |
4 | | - |
5 | | -Require Import GroupTheory.Groups. |
6 | | -Require Import GroupTheory.GroupDef. |
7 | | - |
8 | | -Section GroupTheoryExamples. |
9 | | - Context {G : Type} (op : G → G → G) (e : G) (inv : G → G). |
10 | | - Variable group : groupSet op e inv. |
11 | | - |
12 | | - (** Basic group axioms *) |
13 | | - |
14 | | - Lemma mul_assoc (a b c : G) : |
15 | | - (op (op a b) c) = (op a (op b c)). |
16 | | - Proof. |
17 | | - apply (group_morph group); trivial. |
18 | | - apply (group_set_like group); trivial. |
19 | | - apply (group_axioms group); trivial. |
20 | | - apply (assoc group); trivial. |
21 | | - assumption. |
22 | | - Qed. |
23 | | - |
24 | | - Lemma mul_left_inv (a : G) : |
25 | | - op (inv a) a = e. |
26 | | - Proof. |
27 | | - apply (group_axioms group); trivial. |
28 | | - apply (left_inverse group); trivial. |
29 | | - assumption. |
30 | | - Qed. |
31 | | - |
32 | | - Lemma mul_right_inv (a : G) : |
33 | | - op a (inv a) = e. |
34 | | - Proof. |
35 | | - apply (group_axioms group); trivial. |
36 | | - apply (right_inverse group); trivial. |
37 | | - assumption. |
38 | | - Qed. |
39 | | - |
40 | | - Lemma mul_left_id (a : G) : |
41 | | - op e a = a. |
42 | | - Proof. |
43 | | - apply (group_axioms group); trivial. |
44 | | - apply (left_id group); trivial. |
45 | | - assumption. |
46 | | - Qed. |
47 | | - |
48 | | - Lemma mul_right_id (a : G) : |
49 | | - op a e = a. |
50 | | - Proof. |
51 | | - apply (group_axioms group); trivial. |
52 | | - apply (right_id group); trivial. |
53 | | - assumption. |
54 | | - Qed. |
55 | | - |
56 | | - (** Subgroup examples *) |
57 | | - |
58 | | - Lemma subgroup_closure (H : subgroup G) (a b : G) : |
59 | | - a ∈ H → b ∈ H → op a b ∈ H. |
60 | | - Proof. |
61 | | - intros Ha Hb. |
62 | | - apply (subgroup_axioms H); trivial. |
63 | | - apply (subgroup_mul_closed H); trivial. |
64 | | - assumption. |
65 | | - Qed. |
66 | | - |
67 | | - Lemma subgroup_inv (H : subgroup G) (a : G) : |
68 | | - a ∈ H → inv a ∈ H. |
69 | | - Proof. |
70 | | - intros Ha. |
71 | | - apply (subgroup_axioms H); trivial. |
72 | | - apply (subgroup_inv_closed H); trivial. |
73 | | - assumption. |
74 | | - Qed. |
75 | | - |
76 | | - Lemma subgroup_id (H : subgroup G) : |
77 | | - e ∈ H. |
78 | | - Proof. |
79 | | - apply (subgroup_axioms H); trivial. |
80 | | - apply (subgroup_one_closed H); trivial. |
81 | | - Qed. |
82 | | - |
83 | | - (** Homomorphism examples *) |
84 | | - |
85 | | - Lemma hom_map_mul {H : Type} (f : G → H) (opH : H → H → H) (eH : H) (invH : H → H) |
86 | | - (hom : homomorphism f op opH e eH inv invH) |
87 | | - (a b : G) : |
88 | | - f (op a b) = opH (f a) (f b). |
89 | | - Proof. |
90 | | - apply (homomorphism_def hom); trivial. |
91 | | - apply (homomorphism_morph hom); trivial. |
92 | | - assumption. |
93 | | - Qed. |
94 | | - |
95 | | - Lemma hom_map_id {H : Type} (f : G → H) (opH : H → H → H) (eH : H) (invH : H → H) |
96 | | - (hom : homomorphism f op opH e eH inv invH) : |
97 | | - f e = eH. |
98 | | - Proof. |
99 | | - apply (homomorphism_def hom); trivial. |
100 | | - apply (homomorphism_id hom); trivial. |
101 | | - Qed. |
102 | | - |
103 | | - (** Power examples *) |
104 | | - |
105 | | - Lemma pow_add (a : G) (m n : nat) : |
106 | | - op (pow op a (m + n)) e = op (pow op a m) (pow op a n). |
107 | | - Proof. |
108 | | - induction n; simpl. |
109 | | - - apply pow_zero; trivial. |
110 | | - - apply mul_assoc; trivial. |
111 | | - apply pow_succ; trivial. |
112 | | - assumption. |
113 | | - Qed. |
114 | | - |
115 | | - Lemma pow_zero (a : G) : |
116 | | - op (pow op a 0) e = e. |
117 | | - Proof. |
118 | | - apply pow_zero; trivial. |
119 | | - Qed. |
120 | | - |
121 | | - Lemma pow_one (a : G) : |
122 | | - op (pow op a 1) e = op a e. |
123 | | - Proof. |
124 | | - apply pow_one; trivial. |
125 | | - Qed. |
126 | | - |
127 | | - (** Commutator examples *) |
128 | | - |
129 | | - Definition commutator (a b : G) : G := |
130 | | - op (inv a) (op (inv b) (op a (op b e))). |
131 | | - |
132 | | - Lemma commutator_inverse (a b : G) : |
133 | | - op (commutator a b) (commutator b a) = e. |
134 | | - Proof. |
135 | | - unfold commutator. |
136 | | - simpl. |
137 | | - apply mul_assoc; trivial. |
138 | | - apply mul_left_inv; trivial. |
139 | | - apply mul_right_inv; trivial. |
140 | | - apply mul_assoc; trivial. |
141 | | - apply mul_left_inv; trivial. |
142 | | - apply mul_right_inv; trivial. |
143 | | - Qed. |
144 | | - |
145 | | - (** Center examples *) |
146 | | - |
147 | | - Definition center : set G := |
148 | | - { x : G | forall y : G, op x y = op y x }. |
149 | | - |
150 | | - Lemma center_closed (a b : G) : |
151 | | - (forall x, op a x = op x a) → |
152 | | - (forall x, op b x = op x b) → |
153 | | - forall x, op (op a b) x = op x (op a b). |
154 | | - Proof. |
155 | | - intros Ha Hb x. |
156 | | - apply mul_assoc; trivial. |
157 | | - rewrite Ha; trivial. |
158 | | - rewrite Hb; trivial. |
159 | | - apply mul_assoc; trivial. |
160 | | - rewrite Hb; trivial. |
161 | | - rewrite Ha; trivial. |
162 | | - Qed. |
163 | | - |
164 | | - (** Normal subgroup examples *) |
165 | | - |
166 | | - Lemma normal_conjugate (N : subgroup G) [normal : normal_subgroup N] |
167 | | - (g : G) (n : G) : |
168 | | - n ∈ N → op g (op n (inv g)) ∈ N. |
169 | | - Proof. |
170 | | - intros Hn. |
171 | | - apply (normal_subgroup_def normal); trivial. |
172 | | - apply (normal_conjugate normal); trivial. |
173 | | - assumption. |
174 | | - Qed. |
175 | | - |
176 | | - (** Quotient group examples *) |
177 | | - |
178 | | - Lemma quotient_well_defined (N : subgroup G) [normal : normal_subgroup N] |
179 | | - (a b : G) : |
180 | | - (coset N a = coset N b) ↔ (op (inv a) b ∈ N). |
181 | | - Proof. |
182 | | - apply coset_eq; trivial. |
183 | | - apply normal_subgroup_quotient; trivial. |
184 | | - Qed. |
185 | | - |
186 | | - (** Direct product examples *) |
187 | | - |
188 | | - Lemma prod_group_mul {H : Type} (opH : H → H → H) (eH : H) (invH : H → H) |
189 | | - (groupH : groupSet opH eH invH) |
190 | | - (a b : G) (c d : H) : |
191 | | - (op a b, opH c d) = (op (a, c) (b, d)). |
192 | | - Proof. |
193 | | - reflexivity. |
194 | | - Qed. |
195 | | - |
196 | | - Lemma prod_group_inv {H : Type} (opH : H → H → H) (eH : H) (invH : H → H) |
197 | | - (groupH : groupSet opH eH invH) |
198 | | - (a : G) (c : H) : |
199 | | - (inv a, invH c) = inv (a, c). |
200 | | - Proof. |
201 | | - reflexivity. |
202 | | - Qed. |
203 | | - |
204 | | - Lemma prod_group_id {H : Type} (opH : H → H → H) (eH : H) (invH : H → H) |
205 | | - (groupH : groupSet opH eH invH) : |
206 | | - (e, eH) = (e, eH). |
207 | | - Proof. |
208 | | - reflexivity. |
209 | | - Qed. |
210 | | - |
211 | | -End GroupTheoryExamples. |
| 1 | +(* SPDX-License-Identifier: MPL-2.0 |
| 2 | + Copyright (c) 2026 ECHIDNA Project |
| 3 | + Group Theory: self-contained abstract algebra for training corpus. |
| 4 | +
|
| 5 | + This file defines abstract groups via a record, then proves the five |
| 6 | + standard group lemmas and several derived properties. |
| 7 | + No library dependency beyond Coq's kernel. *) |
| 8 | + |
| 9 | +(** * Abstract Group Definition *) |
| 10 | + |
| 11 | +(** A group consists of a carrier type, binary operation, identity, and |
| 12 | + inverse satisfying the standard axioms. |
| 13 | + [G] is implicit — inferred from [op]. *) |
| 14 | +Record GroupAxioms {G : Type} (op : G -> G -> G) (e : G) (inv : G -> G) : Prop := { |
| 15 | + gassoc : forall a b c : G, op (op a b) c = op a (op b c); |
| 16 | + gleft_id : forall a : G, op e a = a; |
| 17 | + gright_id : forall a : G, op a e = a; |
| 18 | + gleft_inv : forall a : G, op (inv a) a = e; |
| 19 | + gright_inv : forall a : G, op a (inv a) = e |
| 20 | +}. |
| 21 | + |
| 22 | +(** ** Derived properties *) |
| 23 | + |
| 24 | +(** The identity element is unique. *) |
| 25 | +Theorem identity_unique {G : Type} (op : G -> G -> G) (e : G) (inv : G -> G) |
| 26 | + (gax : GroupAxioms op e inv) (e' : G) : |
| 27 | + (forall a, op e' a = a) -> e' = e. |
| 28 | +Proof. |
| 29 | + intro H. |
| 30 | + rewrite <- (gright_id op e inv gax e'). |
| 31 | + apply H. |
| 32 | +Qed. |
| 33 | + |
| 34 | +(** Left cancellation: op a b = op a c → b = c. *) |
| 35 | +Theorem left_cancel {G : Type} (op : G -> G -> G) (e : G) (inv : G -> G) |
| 36 | + (gax : GroupAxioms op e inv) (a b c : G) : |
| 37 | + op a b = op a c -> b = c. |
| 38 | +Proof. |
| 39 | + intro H. |
| 40 | + rewrite <- (gleft_id op e inv gax b). |
| 41 | + rewrite <- (gleft_id op e inv gax c). |
| 42 | + rewrite <- (gleft_inv op e inv gax a). |
| 43 | + (* Goal: op (op (inv a) a) b = op (op (inv a) a) c *) |
| 44 | + rewrite (gassoc op e inv gax). (* op (op (inv a) a) b → op (inv a) (op a b) *) |
| 45 | + rewrite (gassoc op e inv gax). (* op (op (inv a) a) c → op (inv a) (op a c) *) |
| 46 | + rewrite H. |
| 47 | + reflexivity. |
| 48 | +Qed. |
| 49 | + |
| 50 | +(** Right cancellation: op b a = op c a → b = c. *) |
| 51 | +Theorem right_cancel {G : Type} (op : G -> G -> G) (e : G) (inv : G -> G) |
| 52 | + (gax : GroupAxioms op e inv) (a b c : G) : |
| 53 | + op b a = op c a -> b = c. |
| 54 | +Proof. |
| 55 | + intro H. |
| 56 | + rewrite <- (gright_id op e inv gax b). |
| 57 | + rewrite <- (gright_id op e inv gax c). |
| 58 | + rewrite <- (gright_inv op e inv gax a). |
| 59 | + (* Goal: op b (op a (inv a)) = op c (op a (inv a)) *) |
| 60 | + rewrite <- (gassoc op e inv gax). (* op b (op a (inv a)) → op (op b a) (inv a) *) |
| 61 | + rewrite <- (gassoc op e inv gax). (* op c (op a (inv a)) → op (op c a) (inv a) *) |
| 62 | + rewrite H. |
| 63 | + reflexivity. |
| 64 | +Qed. |
| 65 | + |
| 66 | +(** The inverse of the inverse is the original element. *) |
| 67 | +Theorem inv_inv {G : Type} (op : G -> G -> G) (e : G) (inv : G -> G) |
| 68 | + (gax : GroupAxioms op e inv) (a : G) : |
| 69 | + inv (inv a) = a. |
| 70 | +Proof. |
| 71 | + apply (left_cancel op e inv gax (inv a)). |
| 72 | + (* Goal: op (inv a) (inv (inv a)) = op (inv a) a *) |
| 73 | + rewrite (gleft_inv op e inv gax a). (* op (inv a) a → e on RHS *) |
| 74 | + rewrite (gright_inv op e inv gax (inv a)). (* op (inv a) (inv (inv a)) → e on LHS *) |
| 75 | + reflexivity. |
| 76 | +Qed. |
| 77 | + |
| 78 | +(** The inverse of a product reverses order. *) |
| 79 | +Theorem inv_mul {G : Type} (op : G -> G -> G) (e : G) (inv : G -> G) |
| 80 | + (gax : GroupAxioms op e inv) (a b : G) : |
| 81 | + inv (op a b) = op (inv b) (inv a). |
| 82 | +Proof. |
| 83 | + apply (left_cancel op e inv gax (op a b)). |
| 84 | + (* Goal: op (op a b) (inv (op a b)) = op (op a b) (op (inv b) (inv a)) *) |
| 85 | + rewrite (gright_inv op e inv gax (op a b)). |
| 86 | + (* Goal: e = op (op a b) (op (inv b) (inv a)) *) |
| 87 | + rewrite <- (gassoc op e inv gax). |
| 88 | + (* Goal: e = op (op (op a b) (inv b)) (inv a) *) |
| 89 | + rewrite (gassoc op e inv gax a b (inv b)). |
| 90 | + (* Goal: e = op (op a (op b (inv b))) (inv a) *) |
| 91 | + rewrite (gright_inv op e inv gax b). |
| 92 | + (* Goal: e = op (op a e) (inv a) *) |
| 93 | + rewrite (gright_id op e inv gax a). |
| 94 | + (* Goal: e = op a (inv a) *) |
| 95 | + rewrite (gright_inv op e inv gax a). |
| 96 | + reflexivity. |
| 97 | +Qed. |
| 98 | + |
| 99 | +(** * Concrete Example: Integers mod 2 form a group under addition *) |
| 100 | + |
| 101 | +Definition Z2 := bool. |
| 102 | + |
| 103 | +Definition z2_op (a b : Z2) : Z2 := xorb a b. |
| 104 | +Definition z2_e : Z2 := false. |
| 105 | +Definition z2_inv (a : Z2) : Z2 := a. |
| 106 | + |
| 107 | +Lemma z2_group : GroupAxioms z2_op z2_e z2_inv. |
| 108 | +Proof. |
| 109 | + constructor. |
| 110 | + - intros a b c. destruct a, b, c; reflexivity. |
| 111 | + - intros a. destruct a; reflexivity. |
| 112 | + - intros a. destruct a; reflexivity. |
| 113 | + - intros a. destruct a; reflexivity. |
| 114 | + - intros a. destruct a; reflexivity. |
| 115 | +Qed. |
| 116 | + |
| 117 | +(** Verify the derived lemmas hold for Z2. *) |
| 118 | +Example z2_inv_inv : forall a : Z2, z2_inv (z2_inv a) = a. |
| 119 | +Proof. |
| 120 | + intro a. |
| 121 | + exact (inv_inv z2_op z2_e z2_inv z2_group a). |
| 122 | +Qed. |
0 commit comments