Module docstring
{"# Deducing finiteness of a group. "}
{"# Deducing finiteness of a group. "}
Group.fintypeOfKerLeRange
definition
(h : g.ker ≤ f.range) : Fintype G
/-- If `F` and `H` are finite such that `ker(G →* H) ≤ im(F →* G)`, then `G` is finite. -/
@[to_additive "If `F` and `H` are finite such that `ker(G →+ H) ≤ im(F →+ G)`, then `G` is finite."]
noncomputable def fintypeOfKerLeRange (h : g.ker ≤ f.range) : Fintype G :=
@Fintype.ofEquiv _ _
(@instFintypeProd _ _ (Fintype.ofInjective _ <| kerLift_injective g) <|
Fintype.ofInjective _ <| inclusion_injective h)
groupEquivQuotientProdSubgroup.symm
Group.fintypeOfKerEqRange
definition
(h : g.ker = f.range) : Fintype G
/-- If `F` and `H` are finite such that `ker(G →* H) = im(F →* G)`, then `G` is finite. -/
@[to_additive "If `F` and `H` are finite such that `ker(G →+ H) = im(F →+ G)`, then `G` is finite."]
noncomputable def fintypeOfKerEqRange (h : g.ker = f.range) : Fintype G :=
fintypeOfKerLeRange _ _ h.le
Group.fintypeOfKerOfCodom
definition
[Fintype g.ker] : Fintype G
/-- If `ker(G →* H)` and `H` are finite, then `G` is finite. -/
@[to_additive "If `ker(G →+ H)` and `H` are finite, then `G` is finite."]
noncomputable def fintypeOfKerOfCodom [Fintype g.ker] : Fintype G :=
fintypeOfKerLeRange ((topEquiv : _ ≃* G).toMonoidHom.comp <| inclusion le_top) g fun x hx =>
⟨⟨x, hx⟩, rfl⟩
Group.fintypeOfDomOfCoker
definition
[Normal f.range] [Fintype <| G ⧸ f.range] : Fintype G
/-- If `F` and `coker(F →* G)` are finite, then `G` is finite. -/
@[to_additive "If `F` and `coker(F →+ G)` are finite, then `G` is finite."]
noncomputable def fintypeOfDomOfCoker [Normal f.range] [Fintype <| G ⧸ f.range] : Fintype G :=
fintypeOfKerLeRange _ (mk' f.range) fun x => (eq_one_iff x).mp
Finite.of_finite_quot_finite_subgroup
theorem
{H : Subgroup G} [Finite H] [Finite (G ⧸ H)] : Finite G
@[to_additive]
lemma _root_.Finite.of_finite_quot_finite_subgroup {H : Subgroup G} [Finite H] [Finite (G ⧸ H)] :
Finite G :=
Finite.of_equiv _ (groupEquivQuotientProdSubgroup (s := H)).symm