Require Import Algebra.Groups.Group. Require Import Algebra.Groups.Subgroup. Require Import Algebra.Groups.QuotientGroup. Require Import Spaces.Finite.Finite. Require Import Spaces.Nat.Core Spaces.Nat.Division. Require Import Truncations.Core. Local Open Scope nat_scope. Local Open Scope mc_mult_scope. Set Universe Minimization ToSet. (** * Finite Groups *) (** ** Basic Properties *) (** The order of a group is strictly positive. *)G: Group
fin_G: Finite G0 < fcard GG: Group
fin_G: Finite G0 < fcard GG: Group
fin_G: Finite G
f: merely (G <~> Fin.Fin (fcard G))0 < fcard GG: Group
fin_G: Finite G
f: G <~> Fin.Fin (fcard G)0 < fcard GG: Group
fin_G: Finite G
f: G <~> Fin.Fin 00 < 0G: Group
fin_G: Finite G
n: nat
f: G <~> Fin.Fin n.+10 < n.+1contradiction (f mon_unit).G: Group
fin_G: Finite G
f: G <~> Fin.Fin 00 < 0exact _. Defined. (** ** Lagrange's theorem *) (** Lagrange's Theorem - Given a finite group [G] and a finite subgroup [H] of [G], the order of [H] divides the order of [G]. Note that constructively, a subgroup of a finite group cannot be shown to be finite without excluded middle. We therefore have to assume it is. This in turn implies that the subgroup is decidable. *)G: Group
fin_G: Finite G
n: nat
f: G <~> Fin.Fin n.+10 < n.+1U: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite H(fcard H | fcard G)U: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite H(fcard H | fcard G)U: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite H(subgroup_index G H * fcard H)%nat = fcard GU: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite Hfcard G = (subgroup_index G H * fcard H)%natU: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite Hfinadd (fun z : Quotient (in_cosetL H) => fcard {x : G & (fun x0 : G => trunctype_type (in_class (in_cosetL H) z x0)) x}) = (subgroup_index G H * fcard H)%natU: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite Hfinadd (fun z : Quotient (in_cosetL H) => fcard {x : G & (fun x0 : G => trunctype_type (in_class (in_cosetL H) z x0)) x}) = finadd (fun _ : LeftCoset G H => fcard H)U: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite H(fun z : Quotient (in_cosetL H) => fcard {x : G & (fun x0 : G => trunctype_type (in_class (in_cosetL H) z x0)) x}) == (fun _ : LeftCoset G H => fcard H)U: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite Hforall a : G, fcard {x : G & (fun x0 : G => H (a^ * x0)) x} = fcard HU: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite H
x: Gfcard {x0 : G & (fun x1 : G => H (x^ * x1)) x0} = fcard Happly equiv_sigma_in_cosetL_subgroup. Defined. (** As a corollary, the index of a subgroup is the order of the group divided by the order of the subgroup. *)U: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite H
x: G{x0 : G & H (x^ * x0)} <~> HU: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite Hsubgroup_index G H = fcard G / fcard HU: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite Hsubgroup_index G H = fcard G / fcard Happly divides_fcard_subgroup. Defined. (** Therefore we can show that the order of the quotient group [G / H] is the order of [G] divided by the order of [H]. *)U: Univalence
G: Group
H: Subgroup G
fin_G: Finite G
fin_H: Finite H(subgroup_index G H * fcard H)%nat = fcard GU: Univalence
G: Group
H: NormalSubgroup G
fin_G: Finite G
fin_H: Finite Hfcard (QuotientGroup G H) = fcard G / fcard Hrapply subgroup_index_fcard_div. Defined.U: Univalence
G: Group
H: NormalSubgroup G
fin_G: Finite G
fin_H: Finite Hfcard (QuotientGroup G H) = fcard G / fcard H