--------------------------------------------------------------------------------
Ettore Aldrovandi ealdrovandi@fsu.edu
Keri D'Angelo kd349@cornell.edu
June 2022
--------------------------------------------------------------------------------
This only exists to use the subgroups code from UF-SIP-Examples with
Groups interface. The code is almost literally imported from the
subgroup module in UF-SIP-Examples with minor adaptations, since the
interface defined by Groups is different. This relies on the proof
that the group axioms, as defined in Groups, form a proposition.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
open import UF.Base hiding (_≈_)
open import UF.Classifiers
open import UF.Embeddings
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.FunExt
open import UF.Powerset
open import UF.Sets
open import UF.Sets-Properties
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import UF.UA-FunExt
open import UF.Univalence
open import Groups.Type renaming (_≅_ to _≣_)
module Groups.Subgroups
(𝓤 : Universe)
(ua : Univalence) where
fe : ∀ {𝓥} {𝓦} → funext 𝓥 𝓦
fe {𝓥} {𝓦} = univalence-gives-funext' 𝓥 𝓦 (ua 𝓥) (ua (𝓥 ⊔ 𝓦))
module _ (G : Group 𝓤) where
private
_·_ : ⟨ G ⟩ → ⟨ G ⟩ → ⟨ G ⟩
_·_ = multiplication G
e : ⟨ G ⟩
e = unit G
infixl 42 _·_
group-closed : (⟨ G ⟩ → 𝓥 ̇ ) → 𝓤 ⊔ 𝓥 ̇
group-closed 𝓐 = 𝓐 (unit G)
× ((x y : ⟨ G ⟩) → 𝓐 x → 𝓐 y → 𝓐 (x · y))
× ((x : ⟨ G ⟩) → 𝓐 x → 𝓐 (inv G x))
Subgroup : 𝓤 ⁺ ̇
Subgroup = Σ A ꞉ 𝓟 ⟨ G ⟩ , group-closed (_∈ A)
⟪_⟫ : Subgroup → 𝓟 ⟨ G ⟩
⟪ A , u , c , ι ⟫ = A
being-group-closed-subset-is-prop : (A : 𝓟 ⟨ G ⟩)
→ is-prop (group-closed (_∈ A))
being-group-closed-subset-is-prop A = ×-is-prop
(∈-is-prop A (unit G))
(×-is-prop
(Π-is-prop fe
(λ x → Π-is-prop fe
(λ y → Π-is-prop fe
(λ _ → Π-is-prop fe
(λ _ → ∈-is-prop A (x · y))))))
(Π-is-prop fe
(λ x → Π-is-prop fe
(λ _ → ∈-is-prop A (inv G x)))))
⟪⟫-is-embedding : is-embedding ⟪_⟫
⟪⟫-is-embedding = pr₁-is-embedding being-group-closed-subset-is-prop
ap-⟪⟫ : (S T : Subgroup) → S = T → ⟪ S ⟫ = ⟪ T ⟫
ap-⟪⟫ S T = ap ⟪_⟫
ap-⟪⟫-is-equiv : (S T : Subgroup) → is-equiv (ap-⟪⟫ S T)
ap-⟪⟫-is-equiv = embedding-gives-embedding' ⟪_⟫ ⟪⟫-is-embedding
subgroups-form-a-set : is-set Subgroup
subgroups-form-a-set {S} {T} = equiv-to-prop
(ap-⟪⟫ S T , ap-⟪⟫-is-equiv S T)
(𝓟-is-set ua)
subgroup-equality : (S T : Subgroup)
→ (S = T)
≃ ((x : ⟨ G ⟩) → (x ∈ ⟪ S ⟫) ↔ (x ∈ ⟪ T ⟫))
subgroup-equality S T = γ
where
f : S = T → (x : ⟨ G ⟩) → x ∈ ⟪ S ⟫ ↔ x ∈ ⟪ T ⟫
f p x = transport (λ - → x ∈ ⟪ - ⟫) p , transport (λ - → x ∈ ⟪ - ⟫) (p ⁻¹)
h : ((x : ⟨ G ⟩) → x ∈ ⟪ S ⟫ ↔ x ∈ ⟪ T ⟫) → ⟪ S ⟫ = ⟪ T ⟫
h φ = subset-extensionality' ua α β
where
α : ⟪ S ⟫ ⊆ ⟪ T ⟫
α x = lr-implication (φ x)
β : ⟪ T ⟫ ⊆ ⟪ S ⟫
β x = rl-implication (φ x)
g : ((x : ⟨ G ⟩) → x ∈ ⟪ S ⟫ ↔ x ∈ ⟪ T ⟫) → S = T
g = inverse (ap-⟪⟫ S T) (ap-⟪⟫-is-equiv S T) ∘ h
γ : (S = T) ≃ ((x : ⟨ G ⟩) → x ∈ ⟪ S ⟫ ↔ x ∈ ⟪ T ⟫)
γ = logically-equivalent-props-are-equivalent
subgroups-form-a-set
(Π-is-prop fe
(λ x → ×-is-prop
(Π-is-prop fe (λ _ → ∈-is-prop ⟪ T ⟫ x))
(Π-is-prop fe (λ _ → ∈-is-prop ⟪ S ⟫ x)))) f g
T : 𝓤 ̇ → 𝓤 ̇
T X = Σ _·_ ꞉ group-structure X , group-axioms X _·_
module _ {X : 𝓤 ̇ } (h : X → ⟨ G ⟩) (e : is-embedding h) where
private
h-lc : left-cancellable h
h-lc = embeddings-are-lc h e
having-group-closed-fiber-is-prop : is-prop (group-closed (fiber h))
having-group-closed-fiber-is-prop = being-group-closed-subset-is-prop
(λ x → (fiber h x , e x))
at-most-one-homomorphic-structure : is-prop (Σ τ ꞉ T X , is-hom (X , τ) G h)
at-most-one-homomorphic-structure ((_*_ , gaxiom) , pmult) ((_*'_ , gaxiom') , pmult')
= to-subtype-= (λ τ → being-hom-is-prop fe ((X , τ)) G h) δ
where
τ τ' : T X
τ = _*_ , gaxiom
τ' = _*'_ , gaxiom'
p : _*_ = _*'_
p = dfunext fe (λ x → dfunext fe (λ y → h-lc ( h (x * y) =⟨ pmult ⟩
h x · h y =⟨ pmult' ⁻¹ ⟩
h (x *' y) ∎)))
δ : τ = τ'
δ = to-subtype-= (λ _ → group-axioms-is-prop fe X _) p
group-closed-fiber-gives-homomorphic-structure : funext 𝓤 𝓤
→ group-closed (fiber h)
→ (Σ τ ꞉ T X , is-hom (X , τ) G h)
group-closed-fiber-gives-homomorphic-structure fe (unitc , mulc , invc) = τ , i
where
φ : (x : X) → fiber h (h x)
φ x = (x , 𝓻𝓮𝒻𝓵 (h x))
unitH : X
unitH = fiber-point unitc
_*_ : X → X → X
x * y = fiber-point (mulc (h x) (h y) (φ x) (φ y))
invH : X → X
invH x = fiber-point (invc (h x) (φ x))
pmul : (x y : X) → h (x * y) = h x · h y
pmul x y = fiber-identification (mulc (h x) (h y) (φ x) (φ y))
punit : h unitH = unit G
punit = fiber-identification unitc
pinv : (x : X) → h (invH x) = inv G (h x)
pinv x = fiber-identification (invc (h x) (φ x))
unitH-left : (x : X) → unitH * x = x
unitH-left x = h-lc (h (unitH * x) =⟨ pmul unitH x ⟩
h unitH · h x =⟨ ap (_· h x) punit ⟩
unit G · h x =⟨ unit-left G (h x) ⟩
h x ∎)
unitH-right : (x : X) → x * unitH = x
unitH-right x = h-lc (h (x * unitH) =⟨ pmul x unitH ⟩
h x · h unitH =⟨ ap (h x ·_) punit ⟩
h x · unit G =⟨ unit-right G (h x) ⟩
h x ∎)
assocH : (x y z : X) → ((x * y) * z) = (x * (y * z))
assocH x y z = h-lc (h ((x * y) * z) =⟨ pmul (x * y) z ⟩
h (x * y) · h z =⟨ ap (_· h z) (pmul x y) ⟩
(h x · h y) · h z =⟨ assoc G (h x) (h y) (h z) ⟩
h x · (h y · h z) =⟨ (ap (h x ·_) (pmul y z))⁻¹ ⟩
h x · h (y * z) =⟨ (pmul x (y * z))⁻¹ ⟩
h (x * (y * z)) ∎)
group-axiomH : (x : X) → Σ x' ꞉ X , (x' * x = unitH) × (x * x' = unitH)
group-axiomH x = invH x , h-lc (h (invH x * x) =⟨ pmul (invH x) x ⟩
h (invH x) · h x =⟨ ap (_· h x) (pinv x) ⟩
inv G (h x) · h x =⟨ inv-left G (h x) ⟩
unit G =⟨ punit ⁻¹ ⟩
h unitH ∎) ,
h-lc (h (x * invH x) =⟨ pmul x (invH x) ⟩
h x · h (invH x) =⟨ ap (h x ·_) (pinv x) ⟩
h x · inv G (h x) =⟨ inv-right G (h x) ⟩
unit G =⟨ punit ⁻¹ ⟩
h unitH ∎)
j : is-set X
j = subtypes-of-sets-are-sets' h h-lc (groups-are-sets G)
τ : T X
τ = _*_ , (j , (assocH , unitH , (unitH-left , (unitH-right , group-axiomH))))
i : is-hom (X , τ) G h
i {x} {y} = pmul x y
homomorphic-structure-gives-group-closed-fiber : (Σ τ ꞉ T X , is-hom (X , τ) G h)
→ group-closed (fiber h)
homomorphic-structure-gives-group-closed-fiber ((_*_ , gaxiom) , pmult) = (unitc , mulc , invc)
where
H : Group 𝓤
H = X , (_*_ , gaxiom)
unitH : X
unitH = pr₁ (pr₂ (pr₂ gaxiom))
unitc : fiber h (unit G)
unitc = unitH , (homs-preserve-unit H G h pmult)
mulc : ((x y : ⟨ G ⟩) → fiber h x → fiber h y → fiber h (x · y))
mulc x y (a , p) (b , q) = (a * b) ,
(h (a * b) =⟨ pmult {a} {b} ⟩
h a · h b =⟨ ap₂ (λ - -' → - · -') p q ⟩
x · y ∎)
invc : ((x : ⟨ G ⟩) → fiber h x → fiber h (inv G x))
invc x (a , p) = inv H a ,
(h (inv H a) =⟨ homs-preserve-invs H G h pmult a ⟩
inv G (h a) =⟨ ap (inv G) p ⟩
inv G x ∎)
fiber-structure-lemma : funext 𝓤 𝓤
→ group-closed (fiber h)
≃ (Σ τ ꞉ T X , is-hom (X , τ) G h)
fiber-structure-lemma fe = logically-equivalent-props-are-equivalent
having-group-closed-fiber-is-prop
at-most-one-homomorphic-structure
(group-closed-fiber-gives-homomorphic-structure fe)
homomorphic-structure-gives-group-closed-fiber
characterization-of-the-type-of-subgroups : Subgroup ≃ (Σ H ꞉ Group 𝓤
, Σ h ꞉ (⟨ H ⟩ → ⟨ G ⟩)
, is-embedding h
× is-hom H G h)
characterization-of-the-type-of-subgroups =
Subgroup ≃⟨ i ⟩
(Σ A ꞉ 𝓟 ⟨ G ⟩ , group-closed (_∈ A)) ≃⟨ ii ⟩
(Σ (X , h , e) ꞉ Subtype ⟨ G ⟩ , group-closed (fiber h)) ≃⟨ iii ⟩
(Σ X ꞉ 𝓤 ̇ , Σ (h , e) ꞉ X ↪ ⟨ G ⟩ , group-closed (fiber h)) ≃⟨ iv ⟩
(Σ X ꞉ 𝓤 ̇ , Σ (h , e) ꞉ X ↪ ⟨ G ⟩ , Σ τ ꞉ T X , is-hom (X , τ) G h) ≃⟨ v ⟩
(Σ X ꞉ 𝓤 ̇ , Σ h ꞉ (X → ⟨ G ⟩) , Σ e ꞉ is-embedding h , Σ τ ꞉ T X , is-hom (X , τ) G h) ≃⟨ vi ⟩
(Σ X ꞉ 𝓤 ̇ , Σ h ꞉ (X → ⟨ G ⟩) , Σ τ ꞉ T X , Σ e ꞉ is-embedding h , is-hom (X , τ) G h) ≃⟨ vii ⟩
(Σ X ꞉ 𝓤 ̇ , Σ τ ꞉ T X , Σ h ꞉ (X → ⟨ G ⟩) , is-embedding h × is-hom (X , τ) G h) ≃⟨ viii ⟩
(Σ H ꞉ Group 𝓤 , Σ h ꞉ (⟨ H ⟩ → ⟨ G ⟩) , is-embedding h × is-hom H G h) ■
where
open special-classifier-single-universe 𝓤
φ : Subtype ⟨ G ⟩ → 𝓟 ⟨ G ⟩
φ = χ-special is-prop ⟨ G ⟩
j : is-equiv φ
j = χ-special-is-equiv (ua 𝓤) fe is-prop ⟨ G ⟩
i = ≃-refl Subgroup
ii = ≃-sym (Σ-change-of-variable (λ (A : 𝓟 ⟨ G ⟩) → group-closed (_∈ A)) φ j)
iii = Σ-assoc
iv = Σ-cong (λ X → Σ-cong (λ (h , e) → fiber-structure-lemma h e fe))
v = Σ-cong (λ X → Σ-assoc)
vi = Σ-cong (λ X → Σ-cong (λ h → Σ-flip))
vii = Σ-cong (λ X → Σ-flip)
viii = ≃-sym Σ-assoc
induced-group : Subgroup → Group 𝓤
induced-group S = pr₁ (⌜ characterization-of-the-type-of-subgroups ⌝ S)
\end{code}