108 lines
4.5 KiB
Agda
108 lines
4.5 KiB
Agda
|
|
open import Group.Core
|
|||
|
|
open import Level using (Level)
|
|||
|
|
open import Data.Product using (_,_; Σ-syntax; proj₁; proj₂)
|
|||
|
|
open import Function using (_$_; _∘_; id)
|
|||
|
|
|
|||
|
|
import Group.Properties
|
|||
|
|
|
|||
|
|
module Group.SubgroupTests
|
|||
|
|
{ℓ₁ ℓ₂ ℓ₃ : Level}
|
|||
|
|
(𝐆 : Group {ℓ₁} {ℓ₂})
|
|||
|
|
(H : Set ℓ₃)
|
|||
|
|
where
|
|||
|
|
|
|||
|
|
open Group 𝐆
|
|||
|
|
|
|||
|
|
two-step : (ι : H → G)
|
|||
|
|
→ (∀ (a b : H) → Σ[ c ∈ H ] ι c ≈ ι a · ι b)
|
|||
|
|
→ (∀ (a : H) → Σ[ a⁻¹ ∈ H ] ι a⁻¹ ≈ (ι a) ⁻¹)
|
|||
|
|
→ Σ[ e′ ∈ H ] (ι e′ ≈ e)
|
|||
|
|
→ Group
|
|||
|
|
two-step ι ·-closed ⁻¹-closed (e′ , ιe′≈e) =
|
|||
|
|
record
|
|||
|
|
{ G = H
|
|||
|
|
; _·_ = λ g → proj₁ ∘ ·-closed g
|
|||
|
|
; _⁻¹ = proj₁ ∘ ⁻¹-closed
|
|||
|
|
; _≈_ = λ g h → ι g ≈ ι h
|
|||
|
|
; e = e′
|
|||
|
|
; isEquivalence = record
|
|||
|
|
{ refl = refl
|
|||
|
|
; sym = sym
|
|||
|
|
; trans = trans
|
|||
|
|
}
|
|||
|
|
; ≈-resp-·ˡ = λ {a} {b} {c} ιa≈ιb →
|
|||
|
|
let (a·c , ιa·c≈ιa·ιc) = ·-closed a c in
|
|||
|
|
let (b·c , ιb·c≈ιb·ιc) = ·-closed b c in begin
|
|||
|
|
ι a·c ≈⟨ ιa·c≈ιa·ιc ⟩
|
|||
|
|
ι a · ι c ≈⟨ ≈-resp-·ˡ ιa≈ιb ⟩
|
|||
|
|
ι b · ι c ≈⟨ sym ιb·c≈ιb·ιc ⟩
|
|||
|
|
ι b·c ∎
|
|||
|
|
; ≈-resp-·ʳ = λ {a} {b} {c} ιa≈ιb →
|
|||
|
|
let (c·a , ιc·a≈ιc·ιa) = ·-closed c a in
|
|||
|
|
let (c·b , ιc·b≈ιc·ιb) = ·-closed c b in begin
|
|||
|
|
ι c·a ≈⟨ ιc·a≈ιc·ιa ⟩
|
|||
|
|
ι c · ι a ≈⟨ ≈-resp-·ʳ ιa≈ιb ⟩
|
|||
|
|
ι c · ι b ≈⟨ sym ιc·b≈ιc·ιb ⟩
|
|||
|
|
ι c·b ∎
|
|||
|
|
; ≈-resp-⁻¹ = λ {a} {b} ιa≈ιb →
|
|||
|
|
let (a⁻¹ , hai) = ⁻¹-closed a in
|
|||
|
|
let (b⁻¹ , hbi) = ⁻¹-closed b in begin
|
|||
|
|
ι a⁻¹ ≈⟨ hai ⟩
|
|||
|
|
(ι a) ⁻¹ ≈⟨ ≈-resp-⁻¹ ιa≈ιb ⟩
|
|||
|
|
(ι b) ⁻¹ ≈⟨ sym hbi ⟩
|
|||
|
|
ι b⁻¹ ∎
|
|||
|
|
; identity-ˡ = λ {a} →
|
|||
|
|
let (e′·a , ιe′·a≈ιe′·ιa) = ·-closed e′ a in begin
|
|||
|
|
ι e′·a ≈⟨ ιe′·a≈ιe′·ιa ⟩
|
|||
|
|
ι e′ · ι a ≈⟨ ≈-resp-·ˡ ιe′≈e ⟩
|
|||
|
|
e · ι a ≈⟨ identity-ˡ ⟩
|
|||
|
|
ι a ∎
|
|||
|
|
; identity-ʳ = λ {a} →
|
|||
|
|
let (a·e′ , ιa·e′≈ιa·ιe′) = ·-closed a e′ in begin
|
|||
|
|
ι a·e′ ≈⟨ ιa·e′≈ιa·ιe′ ⟩
|
|||
|
|
ι a · ι e′ ≈⟨ ≈-resp-·ʳ ιe′≈e ⟩
|
|||
|
|
ι a · e ≈⟨ identity-ʳ ⟩
|
|||
|
|
ι a ∎
|
|||
|
|
; assoc = λ {a} {b} {c} →
|
|||
|
|
let (a·b , hab) = ·-closed a b in
|
|||
|
|
let (ab·c , hc) = ·-closed a·b c in
|
|||
|
|
let (b·c , hbc) = ·-closed b c in
|
|||
|
|
let (a·bc , ha) = ·-closed a b·c in begin
|
|||
|
|
ι a·bc ≈⟨ ha ⟩
|
|||
|
|
ι a · ι b·c ≈⟨ ≈-resp-·ʳ hbc ⟩
|
|||
|
|
ι a · (ι b · ι c) ≈⟨ assoc ⟩
|
|||
|
|
(ι a · ι b) · ι c ≈⟨ sym (≈-resp-·ˡ hab) ⟩
|
|||
|
|
(ι a·b) · ι c ≈⟨ sym hc ⟩
|
|||
|
|
ι ab·c ∎
|
|||
|
|
; inverse-ˡ = λ {a} →
|
|||
|
|
let (a⁻¹ , ha⁻¹) = ⁻¹-closed a in
|
|||
|
|
let (a⁻¹·a , hboth) = ·-closed a⁻¹ a in begin
|
|||
|
|
ι a⁻¹·a ≈⟨ hboth ⟩
|
|||
|
|
ι a⁻¹ · ι a ≈⟨ ≈-resp-·ˡ ha⁻¹ ⟩
|
|||
|
|
(ι a) ⁻¹ · ι a ≈⟨ inverse-ˡ ⟩
|
|||
|
|
e ≈⟨ sym ιe′≈e ⟩
|
|||
|
|
ι e′ ∎
|
|||
|
|
; inverse-ʳ = λ {a} →
|
|||
|
|
let (a⁻¹ , ha⁻¹) = ⁻¹-closed a in
|
|||
|
|
let (a·a⁻¹ , hboth) = ·-closed a a⁻¹ in begin
|
|||
|
|
ι a·a⁻¹ ≈⟨ hboth ⟩
|
|||
|
|
ι a · ι a⁻¹ ≈⟨ ≈-resp-·ʳ ha⁻¹ ⟩
|
|||
|
|
ι a · (ι a) ⁻¹ ≈⟨ inverse-ʳ ⟩
|
|||
|
|
e ≈⟨ sym ιe′≈e ⟩
|
|||
|
|
ι e′ ∎
|
|||
|
|
}
|
|||
|
|
where open Reasoning
|
|||
|
|
|
|||
|
|
two-step-subgroup : (ι : H → G)
|
|||
|
|
→ (h₁ : (∀ (a b : H) → Σ[ c ∈ H ] ι c ≈ ι a · ι b))
|
|||
|
|
→ (h₂ : (∀ (a : H) → Σ[ a⁻¹ ∈ H ] ι a⁻¹ ≈ (ι a) ⁻¹))
|
|||
|
|
→ (h₃ : Σ[ e′ ∈ H ] (ι e′ ≈ e))
|
|||
|
|
→ Subgroup (two-step ι h₁ h₂ h₃) 𝐆
|
|||
|
|
two-step-subgroup ι h₁ h₂ h₃ = record { F = F ; inj = id }
|
|||
|
|
where
|
|||
|
|
𝐇 = two-step ι h₁ h₂ h₃
|
|||
|
|
F = record
|
|||
|
|
{ φ = ι
|
|||
|
|
; homo = λ {a} {b} → h₁ a b .proj₂
|
|||
|
|
; φ-resp-≈ = id }
|