Library HoTT.Algebra.Groups.Finite
From HoTT Require Import Basics Types.
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.
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.
Instance lt_zero_fcard_grp (G : Group) (fin_G : Finite G) : 0 < fcard G.
Proof.
pose proof (merely_equiv_fin G) as f.
strip_truncations.
destruct (fcard G).
- contradiction (f mon_unit).
- exact _.
Defined.
Proof.
pose proof (merely_equiv_fin G) as f.
strip_truncations.
destruct (fcard G).
- contradiction (f mon_unit).
- exact _.
Defined.
Lagrange's theorem
Definition divides_fcard_subgroup {U : Univalence}
(G : Group) (H : Subgroup G) {fin_G : Finite G} {fin_H : Finite H}
: (fcard H | fcard G).
Proof.
∃ (subgroup_index G H).
symmetry.
refine (fcard_quotient (in_cosetL H) @ _).
refine (_ @ finadd_const _ _).
apply ap, path_forall.
srapply Quotient_ind_hprop; simpl.
intros x.
apply fcard_equiv'.
apply equiv_sigma_in_cosetL_subgroup.
Defined.
(G : Group) (H : Subgroup G) {fin_G : Finite G} {fin_H : Finite H}
: (fcard H | fcard G).
Proof.
∃ (subgroup_index G H).
symmetry.
refine (fcard_quotient (in_cosetL H) @ _).
refine (_ @ finadd_const _ _).
apply ap, path_forall.
srapply Quotient_ind_hprop; simpl.
intros x.
apply fcard_equiv'.
apply 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.
Definition subgroup_index_fcard_div {U : Univalence}
(G : Group) (H : Subgroup G) (fin_G : Finite G) (fin_H : Finite H)
: subgroup_index G H = fcard G / fcard H.
Proof.
rapply nat_div_moveL_nV.
apply divides_fcard_subgroup.
Defined.
(G : Group) (H : Subgroup G) (fin_G : Finite G) (fin_H : Finite H)
: subgroup_index G H = fcard G / fcard H.
Proof.
rapply nat_div_moveL_nV.
apply 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.
Definition fcard_grp_quotient {U : Univalence}
(G : Group) (H : NormalSubgroup G)
(fin_G : Finite G) (fin_H : Finite H)
: fcard (QuotientGroup G H) = fcard G / fcard H.
Proof.
rapply subgroup_index_fcard_div.
Defined.
(G : Group) (H : NormalSubgroup G)
(fin_G : Finite G) (fin_H : Finite H)
: fcard (QuotientGroup G H) = fcard G / fcard H.
Proof.
rapply subgroup_index_fcard_div.
Defined.