@@ -9,33 +9,33 @@ import group_theory.subgroup.basic
9
9
import tactic.group
10
10
11
11
/-!
12
- # General commutators.
12
+ # Commutators of Subgroups
13
13
14
- If `G` is a group and `H₁ H₂ : subgroup G` then the general commutator `⁅H₁, H₂⁆ : subgroup G`
14
+ If `G` is a group and `H₁ H₂ : subgroup G` then the commutator `⁅H₁, H₂⁆ : subgroup G`
15
15
is the subgroup of `G` generated by the commutators `h₁ * h₂ * h₁⁻¹ * h₂⁻¹`.
16
16
17
17
## Main definitions
18
18
19
- * `general_commutator H₁ H₂` : the commutator of the subgroups `H₁` and `H₂`
19
+ * `⁅H₁, H₂⁆ ` : the commutator of the subgroups `H₁` and `H₂`.
20
20
-/
21
21
22
- open subgroup
22
+ namespace subgroup
23
23
24
24
variables {G G' : Type *} [group G] [group G'] {f : G →* G'}
25
25
26
26
/-- The commutator of two subgroups `H₁` and `H₂`. -/
27
- instance general_commutator : has_bracket (subgroup G) (subgroup G) :=
27
+ instance commutator : has_bracket (subgroup G) (subgroup G) :=
28
28
⟨λ H₁ H₂, closure {x | ∃ (p ∈ H₁) (q ∈ H₂), p * q * p⁻¹ * q⁻¹ = x}⟩
29
29
30
- lemma general_commutator_def (H₁ H₂ : subgroup G) :
30
+ lemma commutator_def (H₁ H₂ : subgroup G) :
31
31
⁅H₁, H₂⁆ = closure {x | ∃ (p ∈ H₁) (q ∈ H₂), p * q * p⁻¹ * q⁻¹ = x} := rfl
32
32
33
- instance general_commutator_normal (H₁ H₂ : subgroup G) [h₁ : H₁.normal]
33
+ instance commutator_normal (H₁ H₂ : subgroup G) [h₁ : H₁.normal]
34
34
[h₂ : H₂.normal] : normal ⁅H₁, H₂⁆ :=
35
35
begin
36
36
let base : set G := {x | ∃ (p ∈ H₁) (q ∈ H₂), p * q * p⁻¹ * q⁻¹ = x},
37
37
suffices h_base : base = group.conjugates_of_set base,
38
- { dsimp only [general_commutator_def , ←base],
38
+ { dsimp only [commutator_def , ←base],
39
39
rw h_base,
40
40
exact subgroup.normal_closure_normal },
41
41
apply set.subset.antisymm group.subset_conjugates_of_set,
@@ -45,124 +45,125 @@ begin
45
45
exact ⟨d * c * d⁻¹, h₁.conj_mem c hc d, d * e * d⁻¹, h₂.conj_mem e he d, by group⟩,
46
46
end
47
47
48
- lemma general_commutator_mono {H₁ H₂ K₁ K₂ : subgroup G} (h₁ : H₁ ≤ K₁) (h₂ : H₂ ≤ K₂) :
48
+ lemma commutator_mono {H₁ H₂ K₁ K₂ : subgroup G} (h₁ : H₁ ≤ K₁) (h₂ : H₂ ≤ K₂) :
49
49
⁅H₁, H₂⁆ ≤ ⁅K₁, K₂⁆ :=
50
50
begin
51
51
apply closure_mono,
52
52
rintros x ⟨p, hp, q, hq, rfl⟩,
53
53
exact ⟨p, h₁ hp, q, h₂ hq, rfl⟩,
54
54
end
55
55
56
- lemma general_commutator_def ' (H₁ H₂ : subgroup G) [H₁.normal] [H₂.normal] :
56
+ lemma commutator_def ' (H₁ H₂ : subgroup G) [H₁.normal] [H₂.normal] :
57
57
⁅H₁, H₂⁆ = normal_closure {x | ∃ (p ∈ H₁) (q ∈ H₂), p * q * p⁻¹ * q⁻¹ = x} :=
58
- by rw [← normal_closure_eq_self ⁅H₁, H₂⁆, general_commutator_def,
59
- normal_closure_closure_eq_normal_closure]
58
+ by rw [← normal_closure_eq_self ⁅H₁, H₂⁆, commutator_def, normal_closure_closure_eq_normal_closure]
60
59
61
- lemma general_commutator_le (H₁ H₂ : subgroup G) (K : subgroup G) :
60
+ lemma commutator_le (H₁ H₂ : subgroup G) (K : subgroup G) :
62
61
⁅H₁, H₂⁆ ≤ K ↔ ∀ (p ∈ H₁) (q ∈ H₂), p * q * p⁻¹ * q⁻¹ ∈ K :=
63
62
begin
64
- rw [general_commutator , closure_le],
63
+ rw [subgroup.commutator , closure_le],
65
64
split,
66
65
{ intros h p hp q hq,
67
66
exact h ⟨p, hp, q, hq, rfl⟩, },
68
67
{ rintros h x ⟨p, hp, q, hq, rfl⟩,
69
68
exact h p hp q hq, }
70
69
end
71
70
72
- lemma general_commutator_containment (H₁ H₂ : subgroup G) {p q : G} (hp : p ∈ H₁) (hq : q ∈ H₂) :
71
+ lemma commutator_containment (H₁ H₂ : subgroup G) {p q : G} (hp : p ∈ H₁) (hq : q ∈ H₂) :
73
72
p * q * p⁻¹ * q⁻¹ ∈ ⁅H₁, H₂⁆ :=
74
- (general_commutator_le H₁ H₂ ⁅H₁, H₂⁆).mp (le_refl ⁅H₁, H₂⁆) p hp q hq
73
+ (commutator_le H₁ H₂ ⁅H₁, H₂⁆).mp (le_refl ⁅H₁, H₂⁆) p hp q hq
75
74
76
- lemma general_commutator_comm (H₁ H₂ : subgroup G) : ⁅H₁, H₂⁆ = ⁅H₂, H₁⁆ :=
75
+ lemma commutator_comm (H₁ H₂ : subgroup G) : ⁅H₁, H₂⁆ = ⁅H₂, H₁⁆ :=
77
76
begin
78
77
suffices : ∀ H₁ H₂ : subgroup G, ⁅H₁, H₂⁆ ≤ ⁅H₂, H₁⁆, { exact le_antisymm (this _ _) (this _ _) },
79
78
intros H₁ H₂,
80
- rw general_commutator_le ,
79
+ rw commutator_le ,
81
80
intros p hp q hq,
82
81
have h : (p * q * p⁻¹ * q⁻¹)⁻¹ ∈ ⁅H₂, H₁⁆ := subset_closure ⟨q, hq, p, hp, by group⟩,
83
82
convert inv_mem ⁅H₂, H₁⁆ h,
84
83
group,
85
84
end
86
85
87
- lemma general_commutator_le_right (H₁ H₂ : subgroup G) [h : normal H₂] :
86
+ lemma commutator_le_right (H₁ H₂ : subgroup G) [h : normal H₂] :
88
87
⁅H₁, H₂⁆ ≤ H₂ :=
89
88
begin
90
- rw general_commutator_le ,
89
+ rw commutator_le ,
91
90
intros p hp q hq,
92
91
exact mul_mem H₂ (h.conj_mem q hq p) (inv_mem H₂ hq),
93
92
end
94
93
95
- lemma general_commutator_le_left (H₁ H₂ : subgroup G) [h : normal H₁] :
94
+ lemma commutator_le_left (H₁ H₂ : subgroup G) [h : normal H₁] :
96
95
⁅H₁, H₂⁆ ≤ H₁ :=
97
96
begin
98
- rw general_commutator_comm ,
99
- exact general_commutator_le_right H₂ H₁,
97
+ rw commutator_comm ,
98
+ exact commutator_le_right H₂ H₁,
100
99
end
101
100
102
- @[simp] lemma general_commutator_bot (H : subgroup G) : ⁅H, ⊥⁆ = (⊥ : subgroup G) :=
103
- by { rw eq_bot_iff, exact general_commutator_le_right H ⊥ }
101
+ @[simp] lemma commutator_bot (H : subgroup G) : ⁅H, ⊥⁆ = (⊥ : subgroup G) :=
102
+ by { rw eq_bot_iff, exact commutator_le_right H ⊥ }
104
103
105
- @[simp] lemma bot_general_commutator (H : subgroup G) : ⁅(⊥ : subgroup G), H⁆ = (⊥ : subgroup G) :=
106
- by { rw eq_bot_iff, exact general_commutator_le_left ⊥ H }
104
+ @[simp] lemma bot_commutator (H : subgroup G) : ⁅(⊥ : subgroup G), H⁆ = (⊥ : subgroup G) :=
105
+ by { rw eq_bot_iff, exact commutator_le_left ⊥ H }
107
106
108
- lemma general_commutator_le_inf (H₁ H₂ : subgroup G) [normal H₁] [normal H₂] :
107
+ lemma commutator_le_inf (H₁ H₂ : subgroup G) [normal H₁] [normal H₂] :
109
108
⁅H₁, H₂⁆ ≤ H₁ ⊓ H₂ :=
110
- by simp only [general_commutator_le_left, general_commutator_le_right , le_inf_iff, and_self]
109
+ by simp only [commutator_le_left, commutator_le_right , le_inf_iff, and_self]
111
110
112
- lemma map_general_commutator {G₂ : Type *} [group G₂] (f : G →* G₂) (H₁ H₂ : subgroup G) :
111
+ lemma map_commutator {G₂ : Type *} [group G₂] (f : G →* G₂) (H₁ H₂ : subgroup G) :
113
112
map f ⁅H₁, H₂⁆ = ⁅map f H₁, map f H₂⁆ :=
114
113
begin
115
114
apply le_antisymm,
116
- { rw [gc_map_comap, general_commutator_le ],
115
+ { rw [gc_map_comap, commutator_le ],
117
116
intros p hp q hq,
118
117
simp only [mem_comap, map_inv, map_mul],
119
- exact general_commutator_containment _ _ (mem_map_of_mem _ hp) (mem_map_of_mem _ hq), },
120
- { rw [general_commutator_le ],
118
+ exact commutator_containment _ _ (mem_map_of_mem _ hp) (mem_map_of_mem _ hq), },
119
+ { rw [commutator_le ],
121
120
rintros _ ⟨p, hp, rfl⟩ _ ⟨q, hq, rfl⟩,
122
121
simp only [← map_inv, ← map_mul],
123
- exact mem_map_of_mem _ (general_commutator_containment _ _ hp hq), }
122
+ exact mem_map_of_mem _ (commutator_containment _ _ hp hq), }
124
123
end
125
124
126
- lemma general_commutator_prod_prod {G₂ : Type *} [group G₂]
125
+ lemma commutator_prod_prod {G₂ : Type *} [group G₂]
127
126
(H₁ K₁ : subgroup G) (H₂ K₂ : subgroup G₂) :
128
127
⁅H₁.prod H₂, K₁.prod K₂⁆ = ⁅H₁, K₁⁆.prod ⁅H₂, K₂⁆ :=
129
128
begin
130
129
apply le_antisymm,
131
- { rw general_commutator_le ,
130
+ { rw commutator_le ,
132
131
rintros ⟨p₁, p₂⟩ ⟨hp₁, hp₂⟩ ⟨q₁, q₂⟩ ⟨hq₁, hq₂⟩,
133
- exact ⟨general_commutator_containment _ _ hp₁ hq₁, general_commutator_containment _ _ hp₂ hq₂⟩},
132
+ exact ⟨commutator_containment _ _ hp₁ hq₁, commutator_containment _ _ hp₂ hq₂⟩},
134
133
{ rw prod_le_iff, split;
135
- { rw map_general_commutator ,
136
- apply general_commutator_mono ;
134
+ { rw map_commutator ,
135
+ apply commutator_mono ;
137
136
simp [le_prod_iff, map_map, monoid_hom.fst_comp_inl, monoid_hom.snd_comp_inl,
138
137
monoid_hom.fst_comp_inr, monoid_hom.snd_comp_inr ], }, }
139
138
end
140
139
141
140
/-- The commutator of direct product is contained in the direct product of the commutators.
142
141
143
- See `general_commutator_pi_pi_of_fintype ` for equality given `fintype η`.
142
+ See `commutator_pi_pi_of_fintype ` for equality given `fintype η`.
144
143
-/
145
- lemma general_commutator_pi_pi_le {η : Type *} {Gs : η → Type *} [∀ i, group (Gs i)]
144
+ lemma commutator_pi_pi_le {η : Type *} {Gs : η → Type *} [∀ i, group (Gs i)]
146
145
(H K : Π i, subgroup (Gs i)) :
147
146
⁅subgroup.pi set.univ H, subgroup.pi set.univ K⁆ ≤ subgroup.pi set.univ (λ i, ⁅H i, K i⁆) :=
148
- (general_commutator_le _ _ _).mpr $
149
- λ p hp q hq i hi, general_commutator_containment _ _ (hp i hi) (hq i hi)
147
+ (commutator_le _ _ _).mpr $
148
+ λ p hp q hq i hi, commutator_containment _ _ (hp i hi) (hq i hi)
150
149
151
150
/-- The commutator of a finite direct product is contained in the direct product of the commutators.
152
151
-/
153
- lemma general_commutator_pi_pi_of_fintype {η : Type *} [fintype η] {Gs : η → Type *}
152
+ lemma commutator_pi_pi_of_fintype {η : Type *} [fintype η] {Gs : η → Type *}
154
153
[∀ i, group (Gs i)] (H K : Π i, subgroup (Gs i)) :
155
154
⁅subgroup.pi set.univ H, subgroup.pi set.univ K⁆ = subgroup.pi set.univ (λ i, ⁅H i, K i⁆) :=
156
155
begin
157
156
classical,
158
- apply le_antisymm (general_commutator_pi_pi_le H K),
157
+ apply le_antisymm (commutator_pi_pi_le H K),
159
158
{ rw pi_le_iff, intros i hi,
160
- rw map_general_commutator ,
161
- apply general_commutator_mono ;
159
+ rw map_commutator ,
160
+ apply commutator_mono ;
162
161
{ rw le_pi_iff,
163
162
intros j hj,
164
163
rintros _ ⟨_, ⟨x, hx, rfl⟩, rfl⟩,
165
164
by_cases h : j = i,
166
165
{ subst h, simpa using hx, },
167
166
{ simp [h, one_mem] }, }, },
168
167
end
168
+
169
+ end subgroup
0 commit comments