@@ -262,20 +262,6 @@ theorem comap_ker {P : Type*} [MulOneClass P] (g : N →* P) (f : G →* N) :
262262 g.ker.comap f = (g.comp f).ker :=
263263 rfl
264264
265- /-- The kernel of a homomorphism composed with an isomorphism is equal to the kernel of
266- the homomorphism mapped by the inverse isomorphism. -/
267- @ [to_additive (attr := simp)]
268- lemma ker_comp_mulEquiv {P : Type *} [MulOneClass P] (g : N →* P) (iso : G ≃* N) :
269- (g.comp iso).ker = map (iso.symm : N →* G) g.ker := by
270- rw [← comap_ker, comap_equiv_eq_map_symm]
271-
272- /-- Composing with an isomorphism on the codomain does not change the kernel. -/
273- @ [to_additive (attr := simp)]
274- lemma ker_mulEquiv_comp {P : Type *} [MulOneClass P] (f : G →* N) (iso : N ≃* P) :
275- ((iso : N →* P).comp f).ker = f.ker := by
276- ext
277- simp
278-
279265@ [to_additive (attr := simp)]
280266theorem comap_bot (f : G →* N) : (⊥ : Subgroup N).comap f = f.ker :=
281267 rfl
@@ -312,13 +298,36 @@ theorem ker_eq_bot_iff (f : G →* M) : f.ker = ⊥ ↔ Function.Injective f :=
312298 ⟨fun h x y hxy => by rwa [eq_iff, h, mem_bot, inv_mul_eq_one, eq_comm] at hxy, fun h =>
313299 bot_unique fun _ hx => h (hx.trans f.map_one.symm)⟩
314300
301+ @[to_additive]
302+ theorem ker_eq_bot (f : G →* M) (hf : Function.Injective f) : f.ker = ⊥ :=
303+ f.ker_eq_bot_iff.mpr hf
304+
305+ /-- The kernel of a homomorphism composed with an isomorphism is equal to the kernel of
306+ the homomorphism mapped by the inverse isomorphism. -/
307+ @ [to_additive (attr := simp)]
308+ lemma ker_comp_mulEquiv {P : Type *} [MulOneClass P] (g : N →* P) (iso : G ≃* N) :
309+ (g.comp iso).ker = map (iso.symm : N →* G) g.ker := by
310+ rw [← comap_ker, comap_equiv_eq_map_symm]
311+
312+ /-- Composing with an injective homomorphism on the codomain does not change the kernel. -/
313+ @[to_additive]
314+ lemma ker_comp_of_injective {P : Type *} [MulOneClass P] (f : G →* N) (g : N →* P)
315+ (hg : Function.Injective g) : (g.comp f).ker = f.ker := by
316+ rw [← comap_ker, g.ker_eq_bot hg, comap_bot]
317+
318+ /-- Composing with an isomorphism on the codomain does not change the kernel. -/
319+ @ [to_additive (attr := simp)]
320+ lemma ker_mulEquiv_comp {P : Type *} [MulOneClass P] (f : G →* N) (iso : N ≃* P) :
321+ ((iso : N →* P).comp f).ker = f.ker :=
322+ ker_comp_of_injective f iso.toMonoidHom iso.injective
323+
315324@ [to_additive (attr := simp)]
316325theorem _root_.Subgroup.ker_subtype (H : Subgroup G) : H.subtype.ker = ⊥ :=
317- H.subtype.ker_eq_bot_iff.mpr Subtype.coe_injective
326+ H.subtype.ker_eq_bot Subtype.coe_injective
318327
319328@ [to_additive (attr := simp)]
320329theorem _root_.Subgroup.ker_inclusion {H K : Subgroup G} (h : H ≤ K) : (inclusion h).ker = ⊥ :=
321- (inclusion h).ker_eq_bot_iff.mpr (Set.inclusion_injective h)
330+ (inclusion h).ker_eq_bot (Set.inclusion_injective h)
322331
323332@ [to_additive ker_prod]
324333theorem ker_prod {M N : Type *} [MulOneClass M] [MulOneClass N] (f : G →* M) (g : G →* N) :
@@ -386,7 +395,7 @@ theorem map_eq_bot_iff {f : G →* N} : H.map f = ⊥ ↔ H ≤ f.ker :=
386395
387396@[to_additive]
388397theorem map_eq_bot_iff_of_injective {f : G →* N} (hf : Function.Injective f) :
389- H.map f = ⊥ ↔ H = ⊥ := by rw [map_eq_bot_iff, f.ker_eq_bot_iff.mpr hf, le_bot_iff]
398+ H.map f = ⊥ ↔ H = ⊥ := by rw [map_eq_bot_iff, f.ker_eq_bot hf, le_bot_iff]
390399
391400open MonoidHom
392401
@@ -453,7 +462,7 @@ theorem comap_map_eq_self {f : G →* N} {H : Subgroup G} (h : f.ker ≤ H) :
453462@[to_additive]
454463theorem comap_map_eq_self_of_injective {f : G →* N} (h : Function.Injective f) (H : Subgroup G) :
455464 comap f (map f H) = H :=
456- comap_map_eq_self (((ker_eq_bot_iff _).mpr h).symm ▸ bot_le)
465+ comap_map_eq_self ((ker_eq_bot _ h).symm ▸ bot_le)
457466
458467@[to_additive]
459468theorem map_le_map_iff {f : G →* N} {H K : Subgroup G} : H.map f ≤ K.map f ↔ H ≤ K ⊔ f.ker := by
0 commit comments