Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
Require Import Basics.Overture Basics.Tactics Basics.Equivalences Basics.Iff.Require Import Basics.Overture Basics.Tactics Basics.Equivalences Basics.Iff.Require Import Types.Universe.Require Import Groups.Group AbGroups.Abelianization AbGroups.AbelianGroup
Groups.Commutator Groups.QuotientGroup.Require Import WildCat.Core WildCat.Equiv.LocalOpen Scope mc_scope.LocalOpen Scope mc_mult_scope.LocalOpen Scope group_scope.(** * Perfect Groups *)(** ** Definition *)(** A group is perfect if its abelianization is trivial. *)ClassIsPerfect (G : Group) := contr_abel_isperfect :: IsTrivialGroup (abel G).(** A group is perfect if its commutator subgroup is the maximal subgroup. *)
G: Group
IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G] -> IsPerfect G
G: Group
IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G] -> IsPerfect G
G: Group max: IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G]
IsPerfect G
G: Group max: IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G]
maximal_subgroup (abel G) $<~> grp_trivial
G: Group max: IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G]
abel G $<~> grp_trivial
G: Group max: IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G]
abgroup_derived_quotient G $<~> grp_trivial
exact (fst (istrivial_iff_grp_iso_trivial (abgroup_derived_quotient G)) _
$oE (grp_iso_subgroup_group_maximal _)^-1$).Defined.(** Conversely, the commutator subgroup of any perfect group is the maximal subgroup. *)
H: Univalence G: Group
IsPerfect G -> IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G]
H: Univalence G: Group
IsPerfect G -> IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G]
H: Univalence G: Group N: NormalSubgroup G perf: IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G]
forallx : G,
[maximal_subgroup G, maximal_subgroup G] x ->
subgroup_preimage grp_quotient_map
[maximal_subgroup (G / N), maximal_subgroup (G / N)] x
H: Univalence G: Group N: NormalSubgroup G perf: IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G]
forallxy : G,
maximal_subgroup G x ->
maximal_subgroup G y ->
subgroup_preimage grp_quotient_map
[maximal_subgroup (G / N), maximal_subgroup (G / N)]
(grp_commutator x y)
H: Univalence G: Group N: NormalSubgroup G perf: IsMaximalSubgroup [maximal_subgroup G, maximal_subgroup G] x, y: G