Mercurial > hg > Members > kono > Proof > galois
changeset 303:061a0fd484c3
Foundamental theorem done
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 08 Sep 2023 19:20:12 +0900 |
parents | 3812936d52c8 |
children | 737c66ba371f |
files | src/Homomorphism.agda src/homomorphism.agda |
diffstat | 2 files changed, 432 insertions(+), 392 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Homomorphism.agda Fri Sep 08 19:20:12 2023 +0900 @@ -0,0 +1,432 @@ +{-# OPTIONS --allow-unsolved-metas #-} + +-- fundamental homomorphism theorem +-- + +module Homomorphism where + +open import Level hiding ( suc ; zero ) +open import Algebra +open import Algebra.Structures +open import Algebra.Definitions +open import Algebra.Core +open import Algebra.Bundles + +open import Data.Product +open import Relation.Binary.PropositionalEquality +open import NormalSubgroup +import Gutil +import Function.Definitions as FunctionDefinitions + +import Algebra.Morphism.Definitions as MorphismDefinitions +open import Algebra.Morphism.Structures + +open import Tactic.MonoidSolver using (solve; solve-macro) + +-- +-- Given two groups G and H and a group homomorphism f : G → H, +-- let K be a normal subgroup in G and φ the natural surjective homomorphism G → G/K +-- (where G/K is the quotient group of G by K). +-- If K is a subset of ker(f) then there exists a unique homomorphism h: G/K → H such that f = h∘φ. +-- https://en.wikipedia.org/wiki/Fundamental_theorem_on_homomorphisms +-- +-- f +-- G --→ H +-- | / +-- φ | / h +-- ↓ / +-- G/K +-- + +import Relation.Binary.Reasoning.Setoid as EqReasoning + +open GroupMorphisms + +-- import Axiom.Extensionality.Propositional +-- postulate f-extensionality : { n m : Level} → Axiom.Extensionality.Propositional.Extensionality n m + +open import Data.Empty +open import Relation.Nullary + +-- Set of a ∙ ∃ n ∈ N +-- + +data IsaN {c d : Level} {A : Group c d } (N : NormalSubGroup {d} A) (a : Group.Carrier A ) : (x : Group.Carrier A ) → Set (Level.suc c ⊔ d) where + an : (n x : Group.Carrier A ) → A < A < a ∙ n > ≈ x > → (pn : NormalSubGroup.P N n) → IsaN N a x + +record aNeq {c d : Level} {A : Group c d } (N : NormalSubGroup A ) (a b : Group.Carrier A) : Set (Level.suc c ⊔ d) where + field + eq→ : {x : Group.Carrier A} → IsaN N a x → IsaN N b x + eq← : {x : Group.Carrier A} → IsaN N b x → IsaN N a x + +module AN {c d : Level} (A : Group c d) (N : NormalSubGroup {d} A ) where + open Group A + open NormalSubGroup N + open EqReasoning (Algebra.Group.setoid A) + open Gutil A + open aNeq + -- + -- (aN)(bN) = a(Nb)N = a(bN)N = (ab)NN = (ab)N. + -- + naN : {a x : Carrier} → IsaN N a x → Carrier + naN (an n x eq pn) = n + aaN : {a x : Carrier} → IsaN N a x → Carrier + aaN {a} (an n x eq pn) = a + PaN : {a x : Carrier} → (iax : IsaN N a x) → P (naN iax) + PaN (an n x eq pn) = pn + anaN=x : {a x : Carrier} → (ax : IsaN N a x) → a ∙ naN ax ≈ x + anaN=x (an n x eq pn) = eq + -- a =n= b → a . b ⁻¹ ∈ N + a=b→ab⁻¹∈N : {a b : Carrier} → (a=b : aNeq N a b) → P (a ∙ b ⁻¹) + a=b→ab⁻¹∈N {a} {b} a=b with eq→ a=b (an ε a (proj₂ identity _) Pε) + ... | an n .a bn=a pn = P≈ an06 (Pcomm {n} {b} pn ) where + an06 : b ∙ (n ∙ b ⁻¹) ≈ a ∙ b ⁻¹ + an06 = begin + b ∙ (n ∙ b ⁻¹) ≈⟨ solve monoid ⟩ + (b ∙ n ) ∙ b ⁻¹ ≈⟨ car bn=a ⟩ + a ∙ b ⁻¹ ∎ + an-factor : {x y a : Carrier } → (xua : IsaN N (x ∙ y) a ) → IsaN N x (a ∙ y ⁻¹) × IsaN N y y + an-factor {x} {y} {a} (an n a1 eqa pn) = an n1 _ an02 (Pcomm pn) + , an n2 _ an03 Pε where + an04 : x ∙ y ∙ n ≈ a + an04 = eqa + -- n ≈ (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) ∙ n2) + -- n ∙ n2 ⁻¹ ≈ (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) + -- y ∙ (n ∙ n2 ⁻¹) ∙ y ⁻¹ ≈ n1 + n1 : Carrier + n1 = y ∙ (n ∙ y ⁻¹) + n2 : Carrier + n2 = ε + an02 : x ∙ n1 ≈ a ∙ y ⁻¹ + an02 = begin + x ∙ n1 ≈⟨ grefl ⟩ + x ∙ (y ∙ (n ∙ y ⁻¹)) ≈⟨ solve monoid ⟩ + (x ∙ y ∙ n ) ∙ y ⁻¹ ≈⟨ car eqa ⟩ + a ∙ y ⁻¹ ∎ + an03 : y ∙ n2 ≈ y + an03 = proj₂ identity _ + an-comp : {x y a b : Carrier } → IsaN N x a → IsaN N y b → IsaN N (x ∙ y) (a ∙ b) + an-comp {x} {y} {a} {b} (an n1 a1 eqa p1) (an n2 a2 eqb p2) = an (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) ∙ n2) _ an01 (P∙ (Pcomm p1) p2) where + an01 : x ∙ y ∙ (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) ∙ n2) ≈ a ∙ b + an01 = begin + x ∙ y ∙ (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) ∙ n2) ≈⟨ solve monoid ⟩ + (x ∙ (y ∙ y ⁻¹) ∙ n1) ∙ (y ⁻¹) ⁻¹ ∙ n2 ≈⟨ car (∙-cong (car (cdr (proj₂ inverse _))) f⁻¹⁻¹≈f ) ⟩ + (x ∙ ε ∙ n1) ∙ y ∙ n2 ≈⟨ solve monoid ⟩ + (x ∙ n1) ∙ (y ∙ n2) ≈⟨ ∙-cong eqa eqb ⟩ + a ∙ b ∎ + an-cong : {a b x : Carrier } → a ≈ b → IsaN N a x → IsaN N b x + an-cong {a} {b} {x} eq (an n _ eq1 pn) = an n _ an04 pn where + an04 : b ∙ n ≈ x + an04 = begin + b ∙ n ≈⟨ car (gsym eq) ⟩ + a ∙ n ≈⟨ eq1 ⟩ + x ∎ + conj : (n x : Carrier) → Carrier + conj n x = x ∙ (n ∙ x ⁻¹) + Pconj : (n x : Carrier) → P n → P (conj n x) + Pconj n x pn = Pcomm pn + aN=Na : {x n : Carrier} → x ∙ n ≈ conj n x ∙ x + aN=Na {x} {n} = gsym ( begin + (x ∙ (n ∙ x ⁻¹)) ∙ x ≈⟨ solve monoid ⟩ + (x ∙ n ) ∙ (x ⁻¹ ∙ x) ≈⟨ cdr (proj₁ inverse _) ⟩ + (x ∙ n ) ∙ ε ≈⟨ proj₂ identity _ ⟩ + x ∙ n ∎ ) + Na=aN : {x n : Carrier} → n ∙ x ≈ x ∙ conj n (x ⁻¹) + Na=aN {x} {n} = gsym ( begin + x ∙ ( x ⁻¹ ∙ (n ∙ (x ⁻¹ ) ⁻¹ ) ) ≈⟨ solve monoid ⟩ + (x ∙ x ⁻¹ ) ∙ (n ∙ (x ⁻¹) ⁻¹) ≈⟨ ∙-cong (proj₂ inverse _) (cdr f⁻¹⁻¹≈f) ⟩ + ε ∙ (n ∙ x) ≈⟨ proj₁ identity _ ⟩ + n ∙ x ∎ ) + aneq : {a b : Carrier } → a ≈ b → aNeq N a b + aneq {a} {b} eq = record { eq→ = λ {x} lt → an-cong eq lt ; eq← = λ lt → an-cong (gsym eq) lt } + -- this may wrong + -- aNeq→n-eq : {a b x : Carrier } → aNeq N a b → (ia : IsaN N a x) → (ib : IsaN N b x) → naN ia ≈ naN ib + ayxi : {x y : Carrier} → aNeq N x y → {n : Carrier} → P n → IsaN N y (x ∙ n) + ayxi {x} {y} x=y {n} pn = eq→ x=y (an n _ grefl pn) + ayxn : {x y : Carrier} → aNeq N x y → {n : Carrier} → P n → Carrier + ayxn {x} {y} x=y {n} pn = naN (ayxi x=y pn) + Payxn : {x y : Carrier} → (x=y : aNeq N x y) → {n : Carrier} → (pn : P n) → P (ayxn x=y pn) + Payxn {x} {y} x=y {n} pn with ayxi x=y pn + ... | an n₁ .((A Group.∙ x) n) x₁ pn₁ = pn₁ + _=n=_ = aNeq N + anxn=yn : {x y n : Carrier } → (x=y : aNeq N x y) → (pn : P n) → x ∙ n ≈ y ∙ (ayxn x=y pn) + anxn=yn {x} {y} {n} x=y pn with ayxi x=y pn + ... | an n₁ .((A Group.∙ x) n) eq1 pn₁ = gsym eq1 + + nrefl : {x : Carrier} → x =n= x + nrefl {x} = record { eq→ = λ {lt} ix → ix ; eq← = λ {lt} ix → ix } + nsym : {x y : Carrier} → x =n= y → y =n= x + nsym {x} {y} eq = record { eq→ = λ {lt} ix → eq← eq ix ; eq← = λ {lt} ix → eq→ eq ix } + ntrans : {x y z : Carrier} → x =n= y → y =n= z → x =n= z + ntrans {x} {y} {z} x=y y=z = record { eq→ = λ {lt} ix → eq→ y=z (eq→ x=y ix) + ; eq← = λ {lt} ix → eq← x=y (eq← y=z ix) } + +_/_ : {c d : Level} (A : Group c d ) (N : NormalSubGroup A ) → Group c (Level.suc c ⊔ d) +_/_ A N = record { + Carrier = Group.Carrier A + ; _≈_ = aNeq N + ; _∙_ = _∙_ + ; ε = ε + ; _⁻¹ = λ x → x ⁻¹ + ; isGroup = record { isMonoid = record { isSemigroup = record { isMagma = record { + isEquivalence = record {refl = nrefl + ; trans = ntrans ; sym = λ a=b → nsym a=b + } + ; ∙-cong = λ {x} {y} {u} {v} x=y u=v → gk00 x=y u=v } + ; assoc = gkassoc } + ; identity = (λ a → aneq (proj₁ identity _)) , (λ a → aneq (proj₂ identity _) ) } + ; inverse = (λ a → aneq (proj₁ inverse _)) , (λ x → aneq (proj₂ inverse _) ) + ; ⁻¹-cong = gkcong⁻¹ + } + } where + _=n=_ = aNeq N + open Group A + open NormalSubGroup N + open EqReasoning (Algebra.Group.setoid A) + open Gutil A + open AN A N + open aNeq + gk00 : {x y u v : Carrier } → aNeq N x y → aNeq N u v → aNeq N (x ∙ u) (y ∙ v) + gk00 {x} {y} {u} {v} x=y u=v = record { eq→ = gk01 x=y u=v ; eq← = gk01 (nsym x=y) (nsym u=v) } where + -- xN ≈ yN → uN ≈ vN → xuN ≈ xN⁻¹NuN ≈ yN⁻¹NvN ≈ yvN + gk01 : {a x y u v : Carrier} → aNeq N x y → aNeq N u v → IsaN N (x ∙ u) a → IsaN N (y ∙ v) a + gk01 {a} {x} {y} {u} {v} x=y u=v (an n z eq pn) = an gk1n z gk13 (PaN gk14) where + gk10 : IsaN N x (a ∙ u ⁻¹) + gk10 = proj₁ (an-factor (an n z eq pn)) + gk12 : IsaN N u u + gk12 = proj₂ (an-factor (an n z eq pn)) + gk14 : IsaN N _ _ + gk14 = an-comp (eq→ x=y gk10) (eq→ u=v gk12 ) + gk1n : Carrier + gk1n = naN gk14 + gk13 : (y ∙ v) ∙ gk1n ≈ a + gk13 = begin + y ∙ v ∙ gk1n ≈⟨ grefl ⟩ + y ∙ v ∙ naN gk14 ≈⟨ anaN=x gk14 ⟩ + a ∙ u ⁻¹ ∙ u ≈⟨ solve monoid ⟩ + a ∙ (u ⁻¹ ∙ u) ≈⟨ cdr ( proj₁ inverse _) ⟩ + a ∙ ε ≈⟨ solve monoid ⟩ + a ∎ + gkassoc : (x y z : Carrier ) → aNeq N ((x ∙ y ) ∙ z) (x ∙ (y ∙ z)) + gkassoc x y z = record { eq→ = gk04 ; eq← = gk06 } where + gk04 : {a : Carrier } → IsaN N (x ∙ y ∙ z) a → IsaN N (x ∙ (y ∙ z)) a + gk04 {a} (an n _ eq pn) = an n _ gk05 pn where + gk05 : x ∙ (y ∙ z) ∙ n ≈ a + gk05 = begin + x ∙ (y ∙ z) ∙ n ≈⟨ solve monoid ⟩ + x ∙ y ∙ z ∙ n ≈⟨ eq ⟩ + a ∎ + gk06 : {a : Carrier } → IsaN N (x ∙ (y ∙ z)) a → IsaN N (x ∙ y ∙ z) a + gk06 {a} (an n _ eq pn) = an n _ gk05 pn where + gk05 : x ∙ y ∙ z ∙ n ≈ a + gk05 = begin + x ∙ y ∙ z ∙ n ≈⟨ solve monoid ⟩ + x ∙ (y ∙ z) ∙ n ≈⟨ eq ⟩ + a ∎ + gkcong⁻¹ : {x y : Carrier } → aNeq N x y → aNeq N (x ⁻¹) (y ⁻¹) + gkcong⁻¹ {x} {y} x=y = record { eq→ = gk07 x=y ; eq← = gk07 (nsym x=y) } where + -- a⁻¹N ≈ (Na)⁻¹ ≈ (aN)⁻¹ ≈ (bN)⁻¹ ≈ (Nb)⁻¹ ≈ b⁻¹N + -- a ⁻¹ ∙ n ≈ ( n ⁻¹ ∙ a ) ⁻¹ ≈ ( a ∙ n₁ ) ⁻¹ ≈ ( b ∙ n₂ ) ⁻¹ ≈ ( n₃ ∙ b ) ⁻¹ ≈ b ⁻¹ ∙ n₃ + gk07 : {a x y : Carrier } → (x=y : aNeq N x y) → IsaN N (x ⁻¹) a → IsaN N (y ⁻¹) a + gk07 {a} {x} {y} x=y (an n _ eq pn) = an ((conj (ayxn x=y pj) y )⁻¹) _ gk01 (P⁻¹ _ (Pconj _ _ (Payxn x=y pj ) ) ) where + pj : P (conj (n ⁻¹) (x ⁻¹)) + pj = Pcomm (P⁻¹ _ pn) + gk01 : y ⁻¹ ∙ (conj (ayxn x=y pj) y ) ⁻¹ ≈ a + gk01 = begin + y ⁻¹ ∙ (conj (ayxn x=y pj) _ ) ⁻¹ ≈⟨ lemma5 _ _ ⟩ + ( conj (ayxn x=y pj) _ ∙ y ) ⁻¹ ≈⟨ ⁻¹-cong (gsym aN=Na) ⟩ + (y ∙ ayxn x=y pj ) ⁻¹ ≈⟨ gsym ( ⁻¹-cong ( anxn=yn x=y pj )) ⟩ + (x ∙ conj (n ⁻¹) (x ⁻¹) ) ⁻¹ ≈⟨ ⁻¹-cong (gsym Na=aN ) ⟩ + (n ⁻¹ ∙ x ) ⁻¹ ≈⟨ gsym (lemma5 _ _ ) ⟩ + x ⁻¹ ∙ (n ⁻¹) ⁻¹ ≈⟨ cdr f⁻¹⁻¹≈f ⟩ + x ⁻¹ ∙ n ≈⟨ eq ⟩ + a ∎ + +-- K ⊆ ker(f) +K⊆ker : {c d : Level} (G H : Group c d) (K : NormalSubGroup {d} G ) (f : Group.Carrier G → Group.Carrier H ) + → Set (c ⊔ d) +K⊆ker G H K f = (x : Group.Carrier G ) → P x → f x ≈ ε where + open Group H + open NormalSubGroup K + +open import Function.Surjection +open import Function.Equality + +module GK {c d : Level} (G : Group c d) (K : NormalSubGroup G ) where + open Group G + open NormalSubGroup K + open EqReasoning (Algebra.Group.setoid G) + open Gutil G + open AN G K + + gkε : Group.Carrier (G / K) + gkε = Group.ε (G / K) + + φ : Group.Carrier G → Group.Carrier (G / K ) -- a → aN + φ g = g + + φ-homo : IsGroupHomomorphism (GR G) (GR (G / K)) φ + φ-homo = record {⁻¹-homo = λ x → aneq grefl ; isMonoidHomomorphism = record { ε-homo = aneq grefl + ; isMagmaHomomorphism = record { homo = λ x y → aneq grefl ; isRelHomomorphism = + record { cong = λ eq → aneq eq } }}} + + + φe : (Algebra.Group.setoid G) Function.Equality.⟶ (Algebra.Group.setoid (G / K)) + φe = record { _⟨$⟩_ = φ ; cong = gk40 } where + gk40 : {i j : Carrier} → i ≈ j → (G / K ) < φ i ≈ φ j > + gk40 {i} {j} i=j = aneq i=j + + -- inv-φ get a prepresentable element of aN + -- any element x ≈ a ∙ n is Ok, but there is no obvious one + + -- inv-φ : Group.Carrier (G / K ) → Carrier -- P (inv-ψ x) + -- inv-φ x = ra (factor x) + + -- φ-surjective : Surjective φe + -- φ-surjective = record { from = record { _⟨$⟩_ = inv-φ ; cong = λ {f} {g} → gk50 f g } + -- ; right-inverse-of = gk60 } where + -- open aNeq + -- gk50 : (f g : Group.Carrier (G / K)) → (G / K) < f ≈ g > → inv-φ f ≈ inv-φ g + -- gk50 f g f=g = ? where + -- gk52 : IsaN K g (f ∙ rn (factor f)) + -- gk52 = eq→ f=g (an (rn (factor f)) (f ∙ rn (factor f)) grefl (prn (factor f))) + -- gk51 : G < G < g ∙ ? > ≈ G < f ∙ rn (factor f) > > + -- gk51 with gk52 + -- ... | an n .((G Group.∙ f) (rn (factor f))) gn=frn pn = ? + -- gk60 : (x : Group.Carrier (G / K )) → aNeq K (φ (inv-φ x)) x + -- gk60 = ? + -- + -- gk01 : (x : Group.Carrier (G / K ) ) → (G / K) < φ ( inv-φ x ) ≈ x > + -- gk01 = ? + + +record FundamentalHomomorphism {c d : Level} (G H : Group c d ) + (f : Group.Carrier G → Group.Carrier H ) + (homo : IsGroupHomomorphism (GR G) (GR H) f ) + (K : NormalSubGroup G ) (kf : K⊆ker G H K f) : Set (Level.suc c ⊔ d) where + open Group H + open GK G K + field + h : Group.Carrier (G / K ) → Group.Carrier H + h-homo : IsGroupHomomorphism (GR (G / K) ) (GR H) h + is-solution : (x : Group.Carrier G) → f x ≈ h ( φ x ) + unique : (h1 : Group.Carrier (G / K ) → Group.Carrier H) → (homo : IsGroupHomomorphism (GR (G / K)) (GR H) h1 ) + → ( (x : Group.Carrier G) → f x ≈ h1 ( φ x )) → (( x : Group.Carrier (G / K)) → h x ≈ h1 x ) + +Imf : {c d : Level} (G H : Group c d) + (f : Group.Carrier G → Group.Carrier H ) + (f-homo : IsGroupHomomorphism (GR G) (GR H) f ) → NormalSubGroup {d} G +Imf {c} {d} G H f f-homo = record { + P = λ x → f x ≈ ε + ; Pε = ε-homo + ; P⁻¹ = im01 + ; P≈ = im02 + ; P∙ = im03 + ; Pcomm = im04 + } where + open Group H + open Gutil H + open IsGroupHomomorphism f-homo + open EqReasoning (Algebra.Group.setoid H) + + GC = Group.Carrier G + im01 : (a : Group.Carrier G) → f a ≈ ε → f ((G Group.⁻¹) a) ≈ ε + im01 a fa=e = begin + f ((G Group.⁻¹) a) ≈⟨ ⁻¹-homo _ ⟩ + f a ⁻¹ ≈⟨ ⁻¹-cong fa=e ⟩ + ε ⁻¹ ≈⟨ gsym ε≈ε⁻¹ ⟩ + ε ∎ + im00 : (a : GC) → f a ≈ ε → f ((G Group.⁻¹) a) ≈ ε + im00 a fa=e = begin + f ((G Group.⁻¹) a) ≈⟨ ⁻¹-homo _ ⟩ + f a ⁻¹ ≈⟨ ⁻¹-cong fa=e ⟩ + ε ⁻¹ ≈⟨ gsym ε≈ε⁻¹ ⟩ + ε ∎ + im02 : {a b : GC} → G < a ≈ b > → f a ≈ ε → f b ≈ ε + im02 {a} {b} a=b fa=e = begin + f b ≈⟨ ⟦⟧-cong (GU.gsym a=b) ⟩ + f a ≈⟨ fa=e ⟩ + ε ∎ where + open import Gutil G as GU + im04 : {a b : Group.Carrier G} → f a ≈ ε → + f ((G Group.∙ b) ((G Group.∙ a) ((G Group.⁻¹) b))) ≈ ε + im04 {a} {b} fa=e = begin + f ( G < b ∙ G < a ∙ (G Group.⁻¹) b > > ) ≈⟨ homo _ _ ⟩ + f b ∙ f ( G < a ∙ (G Group.⁻¹) b > ) ≈⟨ cdr (homo _ _) ⟩ + f b ∙ ( f a ∙ f ((G Group.⁻¹) b )) ≈⟨ cdr (cdr (⁻¹-homo _)) ⟩ + f b ∙ ( f a ∙ f b ⁻¹ ) ≈⟨ cdr (car fa=e) ⟩ + f b ∙ ( ε ∙ f b ⁻¹ ) ≈⟨ solve monoid ⟩ + f b ∙ f b ⁻¹ ≈⟨ proj₂ inverse _ ⟩ + ε ∎ + im03 : {a b : Group.Carrier G} → f a ≈ ε → f b ≈ ε → + f ((G Group.∙ a) b) ≈ ε + im03 {a} {b} fa=e fb=e = begin + f (G < a ∙ b > ) ≈⟨ homo _ _ ⟩ + f a ∙ f b ≈⟨ ∙-cong fa=e fb=e ⟩ + ε ∙ ε ≈⟨ proj₁ identity _ ⟩ + ε ∎ + +FactorGroup : {c d : Level} (G : Group c d) {H : Group c d} + {f : Group.Carrier G → Group.Carrier H } + (f-homo : IsGroupHomomorphism (GR G) (GR H) f ) → Group _ _ +FactorGroup G {H} {f} f-homo = G / Imf G H f f-homo + +FundamentalHomomorphismTheorm : {c d : Level} (G H : Group c d) + (f : Group.Carrier G → Group.Carrier H ) + (f-homo : IsGroupHomomorphism (GR G) (GR H) f ) + (K : NormalSubGroup G ) → (kf : K⊆ker G H K f) → FundamentalHomomorphism G H f f-homo K kf +FundamentalHomomorphismTheorm {c} {d} G H f f-homo K kf = record { + h = h + ; h-homo = h-homo + ; is-solution = is-solution + ; unique = unique + } where + open GK G K + open Group H + open Gutil H + -- open NormalSubGroup K ? + open IsGroupHomomorphism f-homo + open EqReasoning (Algebra.Group.setoid H) + + + h : Group.Carrier (G / K ) → Group.Carrier H + h r = f r + h03 : (x y : Group.Carrier (G / K ) ) → h ( (G / K) < x ∙ y > ) ≈ h x ∙ h y + h03 x y = homo _ _ + h04 : {x y : Group.Carrier G} → aNeq K x y → h x ≈ h y + h04 {x} {y} x=y = h20 where + h20 : h x ≈ h y + h20 = begin + h x ≈⟨ gsym (proj₂ identity _) ⟩ + h x ∙ ε ≈⟨ cdr (gsym (proj₁ inverse _)) ⟩ + h x ∙ ((h y) ⁻¹ ∙ h y) ≈⟨ solve monoid ⟩ + (h x ∙ (h y) ⁻¹ ) ∙ h y ≈⟨ gsym (car (cdr (⁻¹-homo _ ))) ⟩ + (h x ∙ h (Group._⁻¹ G y )) ∙ h y ≈⟨ gsym (car (homo _ _)) ⟩ + h (G < x ∙ (Group._⁻¹ G y ) > ) ∙ h y ≈⟨ car ( kf _ (AN.a=b→ab⁻¹∈N G K x=y )) ⟩ + ε ∙ h y ≈⟨ proj₁ identity _ ⟩ + h y ∎ + h-homo : IsGroupHomomorphism (GR (G / K ) ) (GR H) h + h-homo = record { -- this is essentially f-homo + isMonoidHomomorphism = record { + isMagmaHomomorphism = record { + isRelHomomorphism = record { cong = λ {x} {y} eq → h04 eq } + ; homo = h03 } + ; ε-homo = ε-homo } + ; ⁻¹-homo = ⁻¹-homo } + is-solution : (x : Group.Carrier G) → f x ≈ h ( φ x ) + is-solution x = begin + f x ≈⟨ grefl ⟩ + h ( φ x ) ∎ + unique : (h1 : Group.Carrier (G / K ) → Group.Carrier H) → (h1-homo : IsGroupHomomorphism (GR (G / K)) (GR H) h1 ) + → ( (x : Group.Carrier G) → f x ≈ h1 ( φ x ) ) → ( ( x : Group.Carrier (G / K)) → h x ≈ h1 x ) + unique h1 h1-homo h1-is-solution x = begin + h x ≈⟨ grefl ⟩ + f x ≈⟨ h1-is-solution _ ⟩ + h1 ( φ x ) ≈⟨ IsGroupHomomorphism.⟦⟧-cong h1-homo (AN.nrefl G K) ⟩ + h1 x ∎ + + + + + +
--- a/src/homomorphism.agda Thu Sep 07 11:45:11 2023 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,392 +0,0 @@ -{-# OPTIONS --allow-unsolved-metas #-} - --- fundamental homomorphism theorem --- - -module homomorphism where - -open import Level hiding ( suc ; zero ) -open import Algebra -open import Algebra.Structures -open import Algebra.Definitions -open import Algebra.Core -open import Algebra.Bundles - -open import Data.Product -open import Relation.Binary.PropositionalEquality -open import NormalSubgroup -import Gutil -import Function.Definitions as FunctionDefinitions - -import Algebra.Morphism.Definitions as MorphismDefinitions -open import Algebra.Morphism.Structures - -open import Tactic.MonoidSolver using (solve; solve-macro) - --- --- Given two groups G and H and a group homomorphism f : G → H, --- let K be a normal subgroup in G and φ the natural surjective homomorphism G → G/K --- (where G/K is the quotient group of G by K). --- If K is a subset of ker(f) then there exists a unique homomorphism h: G/K → H such that f = h∘φ. --- https://en.wikipedia.org/wiki/Fundamental_theorem_on_homomorphisms --- --- f --- G --→ H --- | / --- φ | / h --- ↓ / --- G/K --- - -import Relation.Binary.Reasoning.Setoid as EqReasoning - -open GroupMorphisms - --- import Axiom.Extensionality.Propositional --- postulate f-extensionality : { n m : Level} → Axiom.Extensionality.Propositional.Extensionality n m - -open import Data.Empty -open import Relation.Nullary - --- Set of a ∙ ∃ n ∈ N --- - -data IsaN {c d : Level} {A : Group c d } (N : NormalSubGroup {d} A) (a : Group.Carrier A ) : (x : Group.Carrier A ) → Set (Level.suc c ⊔ d) where - an : (n x : Group.Carrier A ) → A < A < a ∙ n > ≈ x > → (pn : NormalSubGroup.P N n) → IsaN N a x - -record aNeq {c d : Level} {A : Group c d } (N : NormalSubGroup A ) (a b : Group.Carrier A) : Set (Level.suc c ⊔ d) where - field - eq→ : {x : Group.Carrier A} → IsaN N a x → IsaN N b x - eq← : {x : Group.Carrier A} → IsaN N b x → IsaN N a x - -module AN {c d : Level} (A : Group c d) (N : NormalSubGroup {d} A ) where - open Group A - open NormalSubGroup N - open EqReasoning (Algebra.Group.setoid A) - open Gutil A - open aNeq - -- - -- (aN)(bN) = a(Nb)N = a(bN)N = (ab)NN = (ab)N. - -- - naN : {a x : Carrier} → IsaN N a x → Carrier - naN (an n x eq pn) = n - PaN : {a x : Carrier} → (iax : IsaN N a x) → P (naN iax) - PaN (an n x eq pn) = pn - anaN=x : {a x : Carrier} → (ax : IsaN N a x) → a ∙ naN ax ≈ x - anaN=x (an n x eq pn) = eq - an-factor : {x y a : Carrier } → (xua : IsaN N (x ∙ y) a ) → IsaN N x (a ∙ y ⁻¹) × IsaN N y y - an-factor {x} {y} {a} (an n a1 eqa pn) = an n1 _ an02 (Pcomm pn) - , an n2 _ an03 Pε where - an04 : x ∙ y ∙ n ≈ a - an04 = eqa - -- n ≈ (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) ∙ n2) - -- n ∙ n2 ⁻¹ ≈ (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) - -- y ∙ (n ∙ n2 ⁻¹) ∙ y ⁻¹ ≈ n1 - n1 : Carrier - n1 = y ∙ (n ∙ y ⁻¹) - n2 : Carrier - n2 = ε - an02 : x ∙ n1 ≈ a ∙ y ⁻¹ - an02 = begin - x ∙ n1 ≈⟨ grefl ⟩ - x ∙ (y ∙ (n ∙ y ⁻¹)) ≈⟨ solve monoid ⟩ - (x ∙ y ∙ n ) ∙ y ⁻¹ ≈⟨ car eqa ⟩ - a ∙ y ⁻¹ ∎ - an03 : y ∙ n2 ≈ y - an03 = proj₂ identity _ - an-comp : {x y a b : Carrier } → IsaN N x a → IsaN N y b → IsaN N (x ∙ y) (a ∙ b) - an-comp {x} {y} {a} {b} (an n1 a1 eqa p1) (an n2 a2 eqb p2) = an (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) ∙ n2) _ an01 (P∙ (Pcomm p1) p2) where - an01 : x ∙ y ∙ (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) ∙ n2) ≈ a ∙ b - an01 = begin - x ∙ y ∙ (((y ⁻¹) ∙ (n1 ∙ ((y ⁻¹) ⁻¹ ))) ∙ n2) ≈⟨ solve monoid ⟩ - (x ∙ (y ∙ y ⁻¹) ∙ n1) ∙ (y ⁻¹) ⁻¹ ∙ n2 ≈⟨ car (∙-cong (car (cdr (proj₂ inverse _))) f⁻¹⁻¹≈f ) ⟩ - (x ∙ ε ∙ n1) ∙ y ∙ n2 ≈⟨ solve monoid ⟩ - (x ∙ n1) ∙ (y ∙ n2) ≈⟨ ∙-cong eqa eqb ⟩ - a ∙ b ∎ - an-cong : {a b x : Carrier } → a ≈ b → IsaN N a x → IsaN N b x - an-cong {a} {b} {x} eq (an n _ eq1 pn) = an n _ an04 pn where - an04 : b ∙ n ≈ x - an04 = begin - b ∙ n ≈⟨ car (gsym eq) ⟩ - a ∙ n ≈⟨ eq1 ⟩ - x ∎ - conj : (n x : Carrier) → Carrier - conj n x = x ∙ (n ∙ x ⁻¹) - Pconj : (n x : Carrier) → P n → P (conj n x) - Pconj n x pn = Pcomm pn - aN=Na : {x n : Carrier} → x ∙ n ≈ conj n x ∙ x - aN=Na {x} {n} = gsym ( begin - (x ∙ (n ∙ x ⁻¹)) ∙ x ≈⟨ solve monoid ⟩ - (x ∙ n ) ∙ (x ⁻¹ ∙ x) ≈⟨ cdr (proj₁ inverse _) ⟩ - (x ∙ n ) ∙ ε ≈⟨ proj₂ identity _ ⟩ - x ∙ n ∎ ) - Na=aN : {x n : Carrier} → n ∙ x ≈ x ∙ conj n (x ⁻¹) - Na=aN {x} {n} = gsym ( begin - x ∙ ( x ⁻¹ ∙ (n ∙ (x ⁻¹ ) ⁻¹ ) ) ≈⟨ solve monoid ⟩ - (x ∙ x ⁻¹ ) ∙ (n ∙ (x ⁻¹) ⁻¹) ≈⟨ ∙-cong (proj₂ inverse _) (cdr f⁻¹⁻¹≈f) ⟩ - ε ∙ (n ∙ x) ≈⟨ proj₁ identity _ ⟩ - n ∙ x ∎ ) - - aneq : {a b : Carrier } → a ≈ b → aNeq N a b - aneq {a} {b} eq = record { eq→ = λ {x} lt → an-cong eq lt ; eq← = λ lt → an-cong (gsym eq) lt } - -- this may wrong - -- aNeq→n-eq : {a b x : Carrier } → aNeq N a b → (ia : IsaN N a x) → (ib : IsaN N b x) → naN ia ≈ naN ib - ayxi : {x y : Carrier} → aNeq N x y → {n : Carrier} → P n → IsaN N y (x ∙ n) - ayxi {x} {y} x=y {n} pn = eq→ x=y (an n _ grefl pn) - ayxn : {x y : Carrier} → aNeq N x y → {n : Carrier} → P n → Carrier - ayxn {x} {y} x=y {n} pn = naN (ayxi x=y pn) - Payxn : {x y : Carrier} → (x=y : aNeq N x y) → {n : Carrier} → (pn : P n) → P (ayxn x=y pn) - Payxn {x} {y} x=y {n} pn with ayxi x=y pn - ... | an n₁ .((A Group.∙ x) n) x₁ pn₁ = pn₁ - anxn=yn : {x y n : Carrier } → (x=y : aNeq N x y) → (pn : P n) → x ∙ n ≈ y ∙ (ayxn x=y pn) - anxn=yn {x} {y} {n} x=y pn with ayxi x=y pn - ... | an n₁ .((A Group.∙ x) n) eq1 pn₁ = gsym eq1 - -_/_ : {c d : Level} (A : Group c d ) (N : NormalSubGroup A ) → Group c (Level.suc c ⊔ d) -_/_ A N = record { - Carrier = Group.Carrier A - ; _≈_ = aNeq N - ; _∙_ = _∙_ - ; ε = ε - ; _⁻¹ = λ x → x ⁻¹ - ; isGroup = record { isMonoid = record { isSemigroup = record { isMagma = record { - isEquivalence = record {refl = nrefl - ; trans = ntrans ; sym = λ a=b → nsym a=b - } - ; ∙-cong = λ {x} {y} {u} {v} x=y u=v → gk00 x=y u=v } - ; assoc = gkassoc } - ; identity = (λ a → aneq (proj₁ identity _)) , (λ a → aneq (proj₂ identity _) ) } - ; inverse = (λ a → aneq (proj₁ inverse _)) , (λ x → aneq (proj₂ inverse _) ) - ; ⁻¹-cong = gkcong⁻¹ - } - } where - _=n=_ = aNeq N - open Group A - open NormalSubGroup N - open EqReasoning (Algebra.Group.setoid A) - open Gutil A - open AN A N - open aNeq - nrefl : {x : Carrier} → x =n= x - nrefl {x} = record { eq→ = λ {lt} ix → ix ; eq← = λ {lt} ix → ix } - nsym : {x y : Carrier} → x =n= y → y =n= x - nsym {x} {y} eq = record { eq→ = λ {lt} ix → eq← eq ix ; eq← = λ {lt} ix → eq→ eq ix } - ntrans : {x y z : Carrier} → x =n= y → y =n= z → x =n= z - ntrans {x} {y} {z} x=y y=z = record { eq→ = λ {lt} ix → eq→ y=z (eq→ x=y ix) - ; eq← = λ {lt} ix → eq← x=y (eq← y=z ix) } - gk00 : {x y u v : Carrier } → aNeq N x y → aNeq N u v → aNeq N (x ∙ u) (y ∙ v) - gk00 {x} {y} {u} {v} x=y u=v = record { eq→ = gk01 x=y u=v ; eq← = gk01 (nsym x=y) (nsym u=v) } where - -- xN ≈ yN → uN ≈ vN → xuN ≈ xN⁻¹NuN ≈ yN⁻¹NvN ≈ yvN - gk01 : {a x y u v : Carrier} → aNeq N x y → aNeq N u v → IsaN N (x ∙ u) a → IsaN N (y ∙ v) a - gk01 {a} {x} {y} {u} {v} x=y u=v (an n z eq pn) = an gk1n z gk13 (PaN gk14) where - gk10 : IsaN N x (a ∙ u ⁻¹) - gk10 = proj₁ (an-factor (an n z eq pn)) - gk12 : IsaN N u u - gk12 = proj₂ (an-factor (an n z eq pn)) - gk14 : IsaN N _ _ - gk14 = an-comp (eq→ x=y gk10) (eq→ u=v gk12 ) - gk1n : Carrier - gk1n = naN gk14 - gk13 : (y ∙ v) ∙ gk1n ≈ a - gk13 = begin - y ∙ v ∙ gk1n ≈⟨ grefl ⟩ - y ∙ v ∙ naN gk14 ≈⟨ anaN=x gk14 ⟩ - a ∙ u ⁻¹ ∙ u ≈⟨ solve monoid ⟩ - a ∙ (u ⁻¹ ∙ u) ≈⟨ cdr ( proj₁ inverse _) ⟩ - a ∙ ε ≈⟨ solve monoid ⟩ - a ∎ - gkassoc : (x y z : Carrier ) → aNeq N ((x ∙ y ) ∙ z) (x ∙ (y ∙ z)) - gkassoc x y z = record { eq→ = gk04 ; eq← = gk06 } where - gk04 : {a : Carrier } → IsaN N (x ∙ y ∙ z) a → IsaN N (x ∙ (y ∙ z)) a - gk04 {a} (an n _ eq pn) = an n _ gk05 pn where - gk05 : x ∙ (y ∙ z) ∙ n ≈ a - gk05 = begin - x ∙ (y ∙ z) ∙ n ≈⟨ solve monoid ⟩ - x ∙ y ∙ z ∙ n ≈⟨ eq ⟩ - a ∎ - gk06 : {a : Carrier } → IsaN N (x ∙ (y ∙ z)) a → IsaN N (x ∙ y ∙ z) a - gk06 {a} (an n _ eq pn) = an n _ gk05 pn where - gk05 : x ∙ y ∙ z ∙ n ≈ a - gk05 = begin - x ∙ y ∙ z ∙ n ≈⟨ solve monoid ⟩ - x ∙ (y ∙ z) ∙ n ≈⟨ eq ⟩ - a ∎ - gkcong⁻¹ : {x y : Carrier } → aNeq N x y → aNeq N (x ⁻¹) (y ⁻¹) - gkcong⁻¹ {x} {y} x=y = record { eq→ = gk07 x=y ; eq← = gk07 (nsym x=y) } where - -- a⁻¹N ≈ (Na)⁻¹ ≈ (aN)⁻¹ ≈ (bN)⁻¹ ≈ (Nb)⁻¹ ≈ b⁻¹N - -- a ⁻¹ ∙ n ≈ ( n ⁻¹ ∙ a ) ⁻¹ ≈ ( a ∙ n₁ ) ⁻¹ ≈ ( b ∙ n₂ ) ⁻¹ ≈ ( n₃ ∙ b ) ⁻¹ ≈ b ⁻¹ ∙ n₃ - gk07 : {a x y : Carrier } → (x=y : aNeq N x y) → IsaN N (x ⁻¹) a → IsaN N (y ⁻¹) a - gk07 {a} {x} {y} x=y (an n _ eq pn) = an ((conj (ayxn x=y pj) y )⁻¹) _ gk01 (P⁻¹ _ (Pconj _ _ (Payxn x=y pj ) ) ) where - pj : P (conj (n ⁻¹) (x ⁻¹)) - pj = Pcomm (P⁻¹ _ pn) - gk01 : y ⁻¹ ∙ (conj (ayxn x=y pj) y ) ⁻¹ ≈ a - gk01 = begin - y ⁻¹ ∙ (conj (ayxn x=y pj) _ ) ⁻¹ ≈⟨ lemma5 _ _ ⟩ - ( conj (ayxn x=y pj) _ ∙ y ) ⁻¹ ≈⟨ ⁻¹-cong (gsym aN=Na) ⟩ - (y ∙ ayxn x=y pj ) ⁻¹ ≈⟨ gsym ( ⁻¹-cong ( anxn=yn x=y pj )) ⟩ - (x ∙ conj (n ⁻¹) (x ⁻¹) ) ⁻¹ ≈⟨ ⁻¹-cong (gsym Na=aN ) ⟩ - (n ⁻¹ ∙ x ) ⁻¹ ≈⟨ gsym (lemma5 _ _ ) ⟩ - x ⁻¹ ∙ (n ⁻¹) ⁻¹ ≈⟨ cdr f⁻¹⁻¹≈f ⟩ - x ⁻¹ ∙ n ≈⟨ eq ⟩ - a ∎ - --- K ⊂ ker(f) -K⊆ker : {c d : Level} (G H : Group c d) (K : NormalSubGroup {d} G ) (f : Group.Carrier G → Group.Carrier H ) - → Set (c ⊔ d) -K⊆ker G H K f = (x : Group.Carrier G ) → P x → f x ≈ ε where - open Group H - open NormalSubGroup K - -open import Function.Surjection -open import Function.Equality - -module GK {c d : Level} (G : Group c d) (K : NormalSubGroup G ) where - open Group G - open NormalSubGroup K - open EqReasoning (Algebra.Group.setoid G) - open Gutil G - open AN G K - - gkε : Group.Carrier (G / K) - gkε = Group.ε (G / K) - - φ : Group.Carrier G → Group.Carrier (G / K ) -- a → aN - φ g = g - - φ-homo : IsGroupHomomorphism (GR G) (GR (G / K)) φ - φ-homo = record {⁻¹-homo = λ x → aneq grefl ; isMonoidHomomorphism = record { ε-homo = aneq grefl - ; isMagmaHomomorphism = record { homo = λ x y → aneq grefl ; isRelHomomorphism = - record { cong = λ eq → aneq eq } }}} - - - φe : (Algebra.Group.setoid G) Function.Equality.⟶ (Algebra.Group.setoid (G / K)) - φe = record { _⟨$⟩_ = φ ; cong = gk40 } where - gk40 : {i j : Carrier} → i ≈ j → (G / K ) < φ i ≈ φ j > - gk40 {i} {j} i=j = aneq i=j - - inv-φ : Group.Carrier (G / K ) → Carrier -- P (inv-ψ x) - inv-φ x = x - - φ-surjective : Surjective φe - φ-surjective = record { from = record { _⟨$⟩_ = inv-φ ; cong = λ {f} {g} → gk50 f g } - ; right-inverse-of = gk60 } where - gk50 : (f g : Group.Carrier (G / K)) → (G / K) < f ≈ g > → inv-φ f ≈ inv-φ g - gk50 f g f=g = ? - gk60 : (x : Group.Carrier (G / K )) → aNeq K (φ (inv-φ x)) x - gk60 = ? - - gk01 : (x : Group.Carrier (G / K ) ) → (G / K) < φ ( inv-φ x ) ≈ x > - gk01 = ? - - -record FundamentalHomomorphism {c d : Level} (G H : Group c d ) - (f : Group.Carrier G → Group.Carrier H ) - (homo : IsGroupHomomorphism (GR G) (GR H) f ) - (K : NormalSubGroup G ) (kf : K⊆ker G H K f) : Set (Level.suc c ⊔ d) where - open Group H - -- open GK G K - field - h : Group.Carrier (G / K ) → Group.Carrier H - h-homo : IsGroupHomomorphism (GR (G / K) ) (GR H) h - is-solution : (x : Group.Carrier G) → f x ≈ h ( GK.φ G K x ) - unique : (h1 : Group.Carrier (G / K ) → Group.Carrier H) → (homo : IsGroupHomomorphism (GR (G / K)) (GR H) h1 ) - → ( (x : Group.Carrier G) → f x ≈ h1 ( GK.φ G K x ) ) → ( ( x : Group.Carrier (G / K)) → h x ≈ h1 x ) - -FundamentalHomomorphismTheorm : {c d : Level} (G H : Group c d) - (f : Group.Carrier G → Group.Carrier H ) - (f-homo : IsGroupHomomorphism (GR G) (GR H) f ) - (K : NormalSubGroup G ) → (kf : K⊆ker G H K f) → FundamentalHomomorphism G H f f-homo K kf -FundamentalHomomorphismTheorm {c} {d} G H f f-homo K kf = record { - h = h - ; h-homo = h-homo - ; is-solution = is-solution - ; unique = unique - } where - -- open GK G K - open Group H - open Gutil H - -- open NormalSubGroup K ? - open IsGroupHomomorphism f-homo - open EqReasoning (Algebra.Group.setoid H) - - Imf : NormalSubGroup G - Imf = record { - P = λ x → f x ≈ ε - ; Pε = ε-homo - ; P⁻¹ = im01 - ; P≈ = im02 - ; P∙ = im03 - ; Pcomm = im04 - } where - open NormalSubGroup K - GC = Group.Carrier G - im01 : (a : Group.Carrier G) → f a ≈ ε → f ((G Group.⁻¹) a) ≈ ε - im01 a fa=e = begin - f ((G Group.⁻¹) a) ≈⟨ ⁻¹-homo _ ⟩ - f a ⁻¹ ≈⟨ ⁻¹-cong fa=e ⟩ - ε ⁻¹ ≈⟨ gsym ε≈ε⁻¹ ⟩ - ε ∎ - im00 : (a : GC) → f a ≈ ε → f ((G Group.⁻¹) a) ≈ ε - im00 a fa=e = begin - f ((G Group.⁻¹) a) ≈⟨ ⁻¹-homo _ ⟩ - f a ⁻¹ ≈⟨ ⁻¹-cong fa=e ⟩ - ε ⁻¹ ≈⟨ gsym ε≈ε⁻¹ ⟩ - ε ∎ - im02 : {a b : GC} → G < a ≈ b > → f a ≈ ε → f b ≈ ε - im02 {a} {b} a=b fa=e = begin - f b ≈⟨ ⟦⟧-cong (GU.gsym a=b) ⟩ - f a ≈⟨ fa=e ⟩ - ε ∎ where - open import Gutil G as GU - im04 : {a b : Group.Carrier G} → f a ≈ ε → - f ((G Group.∙ b) ((G Group.∙ a) ((G Group.⁻¹) b))) ≈ ε - im04 {a} {b} fa=e = begin - f ( G < b ∙ G < a ∙ (G Group.⁻¹) b > > ) ≈⟨ homo _ _ ⟩ - f b ∙ f ( G < a ∙ (G Group.⁻¹) b > ) ≈⟨ cdr (homo _ _) ⟩ - f b ∙ ( f a ∙ f ((G Group.⁻¹) b )) ≈⟨ cdr (cdr (⁻¹-homo _)) ⟩ - f b ∙ ( f a ∙ f b ⁻¹ ) ≈⟨ cdr (car fa=e) ⟩ - f b ∙ ( ε ∙ f b ⁻¹ ) ≈⟨ solve monoid ⟩ - f b ∙ f b ⁻¹ ≈⟨ proj₂ inverse _ ⟩ - ε ∎ - im03 : {a b : Group.Carrier G} → f a ≈ ε → f b ≈ ε → - f ((G Group.∙ a) b) ≈ ε - im03 {a} {b} fa=e fb=e = begin - f (G < a ∙ b > ) ≈⟨ homo _ _ ⟩ - f a ∙ f b ≈⟨ ∙-cong fa=e fb=e ⟩ - ε ∙ ε ≈⟨ proj₁ identity _ ⟩ - ε ∎ - - h05 : Group _ _ - h05 = G / Imf - - h : Group.Carrier (G / K ) → Group.Carrier H - h r = f r - h03 : (x y : Group.Carrier (G / K ) ) → h ( (G / K) < x ∙ y > ) ≈ h x ∙ h y - h03 x y = homo _ _ - h04 : {x y : Group.Carrier G} → aNeq K x y → h x ≈ h y - h04 {x} {y} x=y = ? - h-homo : IsGroupHomomorphism (GR (G / K ) ) (GR H) h - h-homo = record { - isMonoidHomomorphism = record { - isMagmaHomomorphism = record { - isRelHomomorphism = record { cong = λ {x} {y} eq → h04 eq } - ; homo = h03 } - ; ε-homo = ε-homo } - ; ⁻¹-homo = ⁻¹-homo } - is-solution : (x : Group.Carrier G) → f x ≈ h ( GK.φ ? ? x ) - is-solution x = begin - f x ≈⟨ ? ⟩ - h ( GK.φ ? ? x ) ∎ - unique : (h1 : Group.Carrier (G / K ) → Group.Carrier H) → (h1-homo : IsGroupHomomorphism (GR (G / K)) (GR H) h1 ) - → ( (x : Group.Carrier G) → f x ≈ h1 ( GK.φ ? ? x ) ) → ( ( x : Group.Carrier (G / K)) → h x ≈ h1 x ) - unique h1 h1-homo h1-is-solution x = begin - h x ≈⟨ grefl ⟩ - f ( GK.inv-φ ? ? x ) ≈⟨ h1-is-solution _ ⟩ - h1 ( GK.φ ? ? ( GK.inv-φ ? ? x ) ) ≈⟨ IsGroupHomomorphism.⟦⟧-cong h1-homo (GK.gk01 ? ? x) ⟩ - h1 x ∎ - - - - - -