@@ -618,7 +618,7 @@ set.inclusion_injective h
618
618
@[simp, to_additive]
619
619
lemma subtype_comp_inclusion {H K : subgroup G} (hH : H ≤ K) :
620
620
K.subtype.comp (inclusion hH) = H.subtype :=
621
- by { ext, simp }
621
+ rfl
622
622
623
623
/-- The subgroup `G` of the group `G`. -/
624
624
@[to_additive " The `add_subgroup G` of the `add_group G`." ]
@@ -1192,30 +1192,27 @@ by {rw eq_top_iff, intros x hx, obtain ⟨y, hy⟩ := (h x), exact ⟨y, trivial
1192
1192
@[simp, to_additive] lemma comap_top (f : G →* N) : (⊤ : subgroup N).comap f = ⊤ :=
1193
1193
(gc_map_comap f).u_top
1194
1194
1195
- @[simp, to_additive] lemma comap_subtype_self_eq_top {G : Type *} [group G] {H : subgroup G} :
1196
- comap H.subtype H = ⊤ := by { ext, simp }
1197
-
1198
- @[simp, to_additive]
1199
- lemma comap_subtype_inf_left {H K : subgroup G} : comap H.subtype (H ⊓ K) = comap H.subtype K :=
1200
- ext $ λ x, and_iff_right_of_imp (λ _, x.prop)
1201
-
1202
- @[simp, to_additive]
1203
- lemma comap_subtype_inf_right {H K : subgroup G} : comap K.subtype (H ⊓ K) = comap K.subtype H :=
1204
- ext $ λ x, and_iff_left_of_imp (λ _, x.prop)
1195
+ /-- For any subgroups `H` and `K`, view `H ⊓ K` as a subgroup of `K`. -/
1196
+ @[to_additive " For any subgroups `H` and `K`, view `H ⊓ K` as a subgroup of `K`." ]
1197
+ def subgroup_of (H K : subgroup G) : subgroup K := H.comap K.subtype
1205
1198
1206
1199
/-- If `H ≤ K`, then `H` as a subgroup of `K` is isomorphic to `H`. -/
1207
1200
@[to_additive " If `H ≤ K`, then `H` as a subgroup of `K` is isomorphic to `H`." , simps]
1208
- def comap_subtype_equiv_of_le {G : Type *} [group G] {H K : subgroup G} (h : H ≤ K) :
1209
- H.comap K.subtype ≃* H :=
1201
+ def subgroup_of_equiv_of_le {G : Type *} [group G] {H K : subgroup G} (h : H ≤ K) :
1202
+ H.subgroup_of K ≃* H :=
1210
1203
{ to_fun := λ g, ⟨g.1 , g.2 ⟩,
1211
1204
inv_fun := λ g, ⟨⟨g.1 , h g.2 ⟩, g.2 ⟩,
1212
1205
left_inv := λ g, subtype.ext (subtype.ext rfl),
1213
1206
right_inv := λ g, subtype.ext rfl,
1214
1207
map_mul' := λ g h, rfl }
1215
1208
1216
- /-- For any subgroups `H` and `K`, view `H ⊓ K` as a subgroup of `K`. -/
1217
- @[to_additive " For any subgroups `H` and `K`, view `H ⊓ K` as a subgroup of `K`." ]
1218
- def subgroup_of (H K : subgroup G) : subgroup K := H.comap K.subtype
1209
+ @[simp, to_additive]
1210
+ lemma comap_subtype (H K : subgroup G) : H.comap K.subtype = H.subgroup_of K := rfl
1211
+
1212
+ @[simp, to_additive]
1213
+ lemma comap_inclusion_subgroup_of {K₁ K₂ : subgroup G} (h : K₁ ≤ K₂) (H : subgroup G) :
1214
+ (H.subgroup_of K₂).comap (inclusion h) = H.subgroup_of K₁ :=
1215
+ rfl
1219
1216
1220
1217
@[to_additive] lemma coe_subgroup_of (H K : subgroup G) :
1221
1218
(H.subgroup_of K : set K) = K.subtype ⁻¹' H := rfl
@@ -1224,13 +1221,9 @@ def subgroup_of (H K : subgroup G) : subgroup K := H.comap K.subtype
1224
1221
h ∈ H.subgroup_of K ↔ (h : G) ∈ H :=
1225
1222
iff.rfl
1226
1223
1227
- @[to_additive] lemma subgroup_of_map_subtype (H K : subgroup G) :
1228
- (H.subgroup_of K).map K.subtype = H ⊓ K := set_like.ext'
1229
- begin
1230
- convert set.image_preimage_eq_inter_range,
1231
- simp only [subtype.range_coe_subtype, coe_subtype, coe_inf],
1232
- refl,
1233
- end
1224
+ @[simp, to_additive] lemma subgroup_of_map_subtype (H K : subgroup G) :
1225
+ (H.subgroup_of K).map K.subtype = H ⊓ K :=
1226
+ set_like.ext' $ subtype.image_preimage_coe _ _
1234
1227
1235
1228
@[simp, to_additive] lemma bot_subgroup_of : (⊥ : subgroup G).subgroup_of H = ⊥ :=
1236
1229
eq.symm (subgroup.ext (λ g, subtype.ext_iff))
@@ -1244,8 +1237,26 @@ subsingleton.elim _ _
1244
1237
@[to_additive] lemma subgroup_of_bot_eq_top : H.subgroup_of ⊥ = ⊤ :=
1245
1238
subsingleton.elim _ _
1246
1239
1247
- @[simp, to_additive] lemma subgroup_of_self : H.subgroup_of H = ⊤ :=
1248
- top_le_iff.mp (λ g hg, g.2 )
1240
+ @[simp, to_additive] lemma subgroup_of_self : H.subgroup_of H = ⊤ := top_unique (λ g hg, g.2 )
1241
+
1242
+ @[simp, to_additive] lemma subgroup_of_inj {H₁ H₂ K : subgroup G} :
1243
+ H₁.subgroup_of K = H₂.subgroup_of K ↔ H₁ ⊓ K = H₂ ⊓ K :=
1244
+ by simpa only [set_like.ext_iff, mem_inf, mem_subgroup_of, and.congr_left_iff] using subtype.forall
1245
+
1246
+ @[simp, to_additive] lemma inf_subgroup_of_right (H K : subgroup G) :
1247
+ (H ⊓ K).subgroup_of K = H.subgroup_of K :=
1248
+ subgroup_of_inj.2 inf_right_idem
1249
+
1250
+ @[simp, to_additive] lemma inf_subgroup_of_left (H K : subgroup G) :
1251
+ (K ⊓ H).subgroup_of K = H.subgroup_of K :=
1252
+ by rw [inf_comm, inf_subgroup_of_right]
1253
+
1254
+ @[simp, to_additive] lemma subgroup_of_eq_bot {H K : subgroup G} :
1255
+ H.subgroup_of K = ⊥ ↔ disjoint H K :=
1256
+ by rw [disjoint_iff, ← bot_subgroup_of, subgroup_of_inj, bot_inf_eq]
1257
+
1258
+ @[simp, to_additive] lemma subgroup_of_eq_top {H K : subgroup G} : H.subgroup_of K = ⊤ ↔ K ≤ H :=
1259
+ by rw [← top_subgroup_of, subgroup_of_inj, top_inf_eq, inf_eq_right]
1249
1260
1250
1261
/-- Given `subgroup`s `H`, `K` of groups `G`, `N` respectively, `H × K` as a subgroup of `G × N`. -/
1251
1262
@[to_additive prod " Given `add_subgroup`s `H`, `K` of `add_group`s `A`, `B` respectively, `H × K`
@@ -1645,7 +1656,7 @@ by rw [←inv_mem_iff, mem_normalizer_iff, inv_inv]
1645
1656
λ x xH n, by rw [H.mul_mem_cancel_right (H.inv_mem xH), H.mul_mem_cancel_left xH]
1646
1657
1647
1658
@[priority 100 , to_additive]
1648
- instance normal_in_normalizer : (H.comap H.normalizer.subtype ).normal :=
1659
+ instance normal_in_normalizer : (H.subgroup_of H.normalizer).normal :=
1649
1660
⟨λ x xH g, by simpa using (g.2 x).1 xH⟩
1650
1661
1651
1662
@[to_additive] lemma normalizer_eq_top : H.normalizer = ⊤ ↔ H.normal :=
@@ -1658,9 +1669,9 @@ eq_top_iff.trans ⟨λ h, ⟨λ a ha b, (h (mem_top b) a).mp ha⟩, λ h a ha b,
1658
1669
open_locale classical
1659
1670
1660
1671
@[to_additive]
1661
- lemma le_normalizer_of_normal [hK : (H.comap K.subtype ).normal] (HK : H ≤ K) : K ≤ H.normalizer :=
1672
+ lemma le_normalizer_of_normal [hK : (H.subgroup_of K ).normal] (HK : H ≤ K) : K ≤ H.normalizer :=
1662
1673
λ x hx y, ⟨λ yH, hK.conj_mem ⟨y, HK yH⟩ yH ⟨x, hx⟩,
1663
- λ yH, by simpa [mem_comap , mul_assoc] using
1674
+ λ yH, by simpa [mem_subgroup_of , mul_assoc] using
1664
1675
hK.conj_mem ⟨x * y * x⁻¹, HK yH⟩ yH ⟨x⁻¹, K.inv_mem hx⟩⟩
1665
1676
1666
1677
variables {N : Type *} [group N]
@@ -2076,9 +2087,7 @@ such that `f x = 0`"]
2076
2087
def ker (f : G →* M) : subgroup G :=
2077
2088
{ inv_mem' := λ x (hx : f x = 1 ),
2078
2089
calc f x⁻¹ = f x * f x⁻¹ : by rw [hx, one_mul]
2079
- ... = f (x * x⁻¹) : by rw [f.map_mul]
2080
- ... = f 1 : by rw [mul_right_inv]
2081
- ... = 1 : f.map_one,
2090
+ ... = 1 : by rw [← map_mul, mul_inv_self, map_one],
2082
2091
..f.mker }
2083
2092
2084
2093
@[to_additive]
@@ -2340,13 +2349,6 @@ begin
2340
2349
rwa [comap_map_eq, comap_map_eq, sup_of_le_left hH, sup_of_le_left hK] at hf,
2341
2350
end
2342
2351
2343
- @[to_additive] lemma subgroup_of_eq_bot {H K : subgroup G} : H.subgroup_of K = ⊥ ↔ disjoint H K :=
2344
- by rw [←(map_injective K.subtype_injective).eq_iff, subgroup_of_map_subtype, map_bot, disjoint_iff]
2345
-
2346
- @[to_additive] lemma subgroup_of_eq_top {H K : subgroup G} : H.subgroup_of K = ⊤ ↔ K ≤ H :=
2347
- by rw [←(map_injective K.subtype_injective).eq_iff, subgroup_of_map_subtype,
2348
- ←K.subtype.range_eq_map, K.subtype_range, inf_eq_right]
2349
-
2350
2352
@[to_additive] lemma closure_preimage_eq_top (s : set G) :
2351
2353
closure ((closure s).subtype ⁻¹' s) = ⊤ :=
2352
2354
begin
@@ -2371,8 +2373,11 @@ comap_sup_eq_of_le_range f (le_top.trans (ge_of_eq (f.range_top_of_surjective hf
2371
2373
2372
2374
@[to_additive] lemma sup_subgroup_of_eq {H K L : subgroup G} (hH : H ≤ L) (hK : K ≤ L) :
2373
2375
H.subgroup_of L ⊔ K.subgroup_of L = (H ⊔ K).subgroup_of L :=
2374
- comap_sup_eq_of_le_range L.subtype (hH.trans (ge_of_eq L.subtype_range))
2375
- (hK.trans (ge_of_eq L.subtype_range))
2376
+ comap_sup_eq_of_le_range L.subtype (hH.trans L.subtype_range.ge) (hK.trans L.subtype_range.ge)
2377
+
2378
+ @[to_additive] lemma codisjoint_subgroup_of_sup (H K : subgroup G) :
2379
+ codisjoint (H.subgroup_of (H ⊔ K)) (K.subgroup_of (H ⊔ K)) :=
2380
+ by { rw [codisjoint_iff, sup_subgroup_of_eq, subgroup_of_self], exacts [le_sup_left, le_sup_right] }
2376
2381
2377
2382
/-- A subgroup is isomorphic to its image under an injective function -/
2378
2383
@[to_additive " An additive subgroup is isomorphic to its image under an injective function" ]
@@ -2415,8 +2420,8 @@ begin
2415
2420
end
2416
2421
2417
2422
@[to_additive]
2418
- lemma comap_subtype_normalizer_eq {H N : subgroup G} (h : H.normalizer ≤ N) :
2419
- comap N.subtype H.normalizer = (comap N.subtype H ).normalizer :=
2423
+ lemma subgroup_of_normalizer_eq {H N : subgroup G} (h : H.normalizer ≤ N) :
2424
+ H.normalizer.subgroup_of N = (H.subgroup_of N ).normalizer :=
2420
2425
begin
2421
2426
apply comap_normalizer_eq_of_injective_of_le_range,
2422
2427
exact subtype.coe_injective,
@@ -2569,14 +2574,15 @@ lemma subgroup.normal.comap {H : subgroup N} (hH : H.normal) (f : G →* N) :
2569
2574
instance subgroup.normal_comap {H : subgroup N}
2570
2575
[nH : H.normal] (f : G →* N) : (H.comap f).normal := nH.comap _
2571
2576
2577
+ -- Here `H.normal` is an explicit argument so we can use dot notation with `subgroup_of`.
2578
+ @[to_additive]
2579
+ lemma subgroup.normal.subgroup_of {H : subgroup G} (hH : H.normal) (K : subgroup G) :
2580
+ (H.subgroup_of K).normal :=
2581
+ hH.comap _
2582
+
2572
2583
@[priority 100 , to_additive]
2573
- instance subgroup.normal_inf (H N : subgroup G) [hN : N.normal] :
2574
- ((H ⊓ N).comap H.subtype).normal :=
2575
- ⟨λ x hx g, begin
2576
- simp only [subgroup.mem_inf, coe_subtype, subgroup.mem_comap] at hx,
2577
- simp only [subgroup.coe_mul, subgroup.mem_inf, coe_subtype, subgroup.coe_inv, subgroup.mem_comap],
2578
- exact ⟨H.mul_mem (H.mul_mem g.2 hx.1 ) (H.inv_mem g.2 ), hN.1 x hx.2 g⟩,
2579
- end ⟩
2584
+ instance subgroup.normal_subgroup_of {H N : subgroup G} [N.normal] : (N.subgroup_of H).normal :=
2585
+ subgroup.normal_comap _
2580
2586
2581
2587
namespace subgroup
2582
2588
0 commit comments