Mercurial > hg > Members > kono > Proof > galois
view src/Fundamental.agda @ 267:864afb582fc7
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 31 May 2022 12:27:07 +0900 |
parents | e6f9eb2bfc78 |
children | 86408a621c6e |
line wrap: on
line source
-- fundamental homomorphism theorem -- open import Level hiding ( suc ; zero ) module Fundamental (c l : Level) where open import Algebra open import Algebra.Structures open import Algebra.Definitions open import Data.Product open import Relation.Binary.PropositionalEquality open import Algebra.Morphism.Structures open GroupMorphisms open import Gutil0 -- -- 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 HomoMorphism -- -- Coset : N : NormalSubGroup → { a ∙ n | G ∋ a , N ∋ n } -- data Coset (G : Group c l) (K : NormalSubGroup G) : Group.Carrier G → Set ( c Level.⊔ l ) where coset : (a b : Group.Carrier G ) → Coset G K ( Group._∙_ G a (NormalSubGroup.sub K b) ) cscong : {a b : Group.Carrier G } → Group._≈_ G a b → Coset G K a → Coset G K b open NormalSubGroup -- G has at least an element other than ε φ : {G : Group c l} → {K : NormalSubGroup G} → (g x : Group.Carrier G ) → Coset G K x φ {G} {K} g x = cscong p01 ( coset (x ∙ (sub K g) ⁻¹ ) g) where open Group G p01 : x ∙ sub K g ⁻¹ ∙ sub K g ≈ x p01 = begin x ∙ sub K g ⁻¹ ∙ sub K g ≈⟨ assoc x _ _ ⟩ x ∙ ( sub K g ⁻¹ ∙ sub K g ) ≈⟨ ∙-cong (grefl G) (proj₁ inverse _ ) ⟩ x ∙ ε ≈⟨ proj₂ identity _ ⟩ x ∎ where open EqReasoning (Algebra.Group.setoid G ) base1 : {G : Group c l} {K : NormalSubGroup G} → {x : Group.Carrier G } → Coset G K x → Group.Carrier G base1 {G} {K} {x} (coset a b) = a ⁻¹ ∙ x where open Group G -- x ≡ a ∙ sub K b base1 (cscong x y) = base1 y base : {G : Group c l} {K : NormalSubGroup G} → ( (g : Group.Carrier G )→ Coset G K g) → Group.Carrier G base {G} {K} x = base1 (x ε) where -- with x ε won't work why? open Group G -- Na ∙ Nb = Nab mul : {G : Group c l} {K : NormalSubGroup G} → (x y : (g : Group.Carrier G ) → Coset G K g ) → (g : Group.Carrier G ) → Coset G K g mul {G} {K} x y g = φ (base x ∙ base y) g where open Group G inv : {G : Group c l} {K : NormalSubGroup G} → ( (g : Group.Carrier G )→ Coset G K g) → ( (g : Group.Carrier G )→ Coset G K g) inv {G} {K} x g = inv1 (x g) where open Group G inv1 : {a : Carrier} → (x : Coset G K a) → Coset G K g inv1 (coset a b) = φ (a ⁻¹) g inv1 (cscong eq x) = inv1 x COSET : (G : Group c l) (K : NormalSubGroup G) → Set ( c Level.⊔ l ) COSET G K = (g : Group.Carrier G ) → Coset G K g -- import Relation.Binary.HeterogeneousEquality as HE using (_≅_ ) -- open HE import Axiom.Extensionality.Propositional postulate f-extensionality : { n m : Level} → Axiom.Extensionality.Propositional.Extensionality n m -- G / K : Quotient _/_ : (G : Group c l) (K : NormalSubGroup G) → Group ( c Level.⊔ l ) l G / K = record { Carrier = (g : Group.Carrier G ) → Coset G K g ; _≈_ = λ x y → Group._≈_ G (sub K (base x)) (sub K (base y)) ; _∙_ = λ x y → mul x y ; ε = φ (Group.ε G ) ; _⁻¹ = λ x → inv x ; isGroup = record { isMonoid = record { isSemigroup = record { isMagma = record { isEquivalence = record { refl = grefl G ; sym = gsym G ; trans = gtrans G } ; ∙-cong = λ {x y u v} → cresp {x} {y} {u} {v} } ; assoc = assoc1 } ; identity = {!!} } ; inverse = {!!} ; ⁻¹-cong = λ {x} {y} → {!!} } } where open Group G hiding (refl ; sym ; trans ) open EqReasoning (Algebra.Group.setoid G) open IsGroupHomomorphism (s-homo K ) mbase : {x y : COSET G K} → sub K (base (mul x y)) ≈ sub K (base x ∙ base y) mbase {x} {y} = begin sub K ((ε ∙ sub K (base1 (x ε) ∙ base1 (y ε)) ⁻¹) ⁻¹ ∙ (ε ∙ sub K (base1 (x ε) ∙ base1 (y ε)) ⁻¹ ∙ sub K (base1 (x ε) ∙ base1 (y ε)))) ≈⟨ {!!} ⟩ sub K ( ((ε ∙ sub K (base1 (x ε) ∙ base1 (y ε)) ⁻¹) ⁻¹ ∙ (ε ∙ sub K (base1 (x ε) ∙ base1 (y ε)) ⁻¹ )) ∙ (base1 (x ε) ∙ base1 (y ε))) ≈⟨ ⟦⟧-cong ( ∙-cong ( begin (ε ∙ sub K (base1 (x ε) ∙ base1 (y ε)) ⁻¹) ⁻¹ ∙ (ε ∙ sub K (base1 (x ε) ∙ base1 (y ε)) ⁻¹) ≈⟨ {!!} ⟩ sub K ((base1 (x ε) ∙ base1 (y ε)) ⁻¹) ⁻¹ ∙ (sub K (base1 (x ε) ∙ base1 (y ε)) ⁻¹) ≈⟨ {!!} ⟩ sub K (((base1 (x ε) ∙ base1 (y ε)) ⁻¹) ⁻¹ ∙ (base1 (x ε) ∙ base1 (y ε)) ⁻¹) ≈⟨ {!!} ⟩ sub K ε ≈⟨ {!!} ⟩ ε ∎ ) (grefl G) ) ⟩ sub K (ε ∙ (base1 {G} {K} (x ε) ∙ base1 {G} {K} (y ε))) ≈⟨ {!!} ⟩ sub K (base1 {G} {K} (x ε) ∙ base1 {G} {K} (y ε)) ∎ cresp : {x y u v : COSET G K} → sub K (base x) ≈ sub K (base y) → sub K (base u )≈ sub K (base v) → sub K (base (mul x u)) ≈ sub K (base (mul y v)) cresp {x} {y} {u} {v} x=y u=v = begin sub K (base (mul x u)) ≈⟨ {!!} ⟩ sub K (base x ∙ base u) ≈⟨ {!!} ⟩ sub K (base x ) ∙ sub K (base u) ≈⟨ {!!} ⟩ sub K (base y ) ∙ sub K (base v) ≈⟨ {!!} ⟩ sub K (base y ∙ base v) ≈⟨ {!!} ⟩ sub K (base (mul y v)) ∎ assoc1 : (x y z : COSET G K) → sub K (base (mul (mul x y ) z)) ≈ sub K (base (mul x ( mul y z ) )) assoc1 x y z = {!!} where -- crefl1 (coset a b) = ⟦⟧-cong (grefl G) -- K ⊂ ker(f) K⊆ker : (G H : Group c l) (K : NormalSubGroup G) (f : Group.Carrier G → Group.Carrier H ) → Set ( c Level.⊔ l ) K⊆ker G H K f = (x : Group.Carrier G ) → f ( sub K x ) ≈ ε where open Group H record FundamentalHomomorphism (G H : Group c l) (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 ( c Level.⊔ l ) where open Group H field h : {!!} → Group.Carrier H h-homo : IsGroupHomomorphism (GR (G / K) ) (GR H) {!!} unique : (x : Group.Carrier G) → {!!} -- f x ≈ h ( φ x ) FundamentalHomomorphismTheorm : (G H : Group c l) (f : Group.Carrier G → Group.Carrier H ) (homo : IsGroupHomomorphism (GR G) (GR H) f ) (K : NormalSubGroup G ) → (kf : K⊆ker G H K f) → FundamentalHomomorphism G H f homo K kf FundamentalHomomorphismTheorm G H f homo K kf = record { h = h ; h-homo = h-homo ; unique = unique } where open Group H EqH = IsMagma.isEquivalence (IsSemigroup.isMagma (IsMonoid.isSemigroup (IsGroup.isMonoid isGroup ))) EqG = IsMagma.isEquivalence (IsSemigroup.isMagma (IsMonoid.isSemigroup (IsGroup.isMonoid (Group.isGroup G) ))) h1 : {x : Group.Carrier G } → Coset G K x → Carrier h1 (coset a b) = f a h : {!!} -- CosetCarrier G K → Carrier -- G / K → H h r = {!!} _o_ = Group._∙_ G h03 : (x y : Group.Carrier (G / K ) ) → {!!} h03 x y = {!!} h-homo : IsGroupHomomorphism (GR (G / K) ) (GR H) {!!} h-homo = record { isMonoidHomomorphism = record { isMagmaHomomorphism = record { isRelHomomorphism = record { cong = λ {x} {y} eq → {!!} } ; homo = h03 } ; ε-homo = {!!} } ; ⁻¹-homo = {!!} } unique : (x : Group.Carrier G) → f x ≈ h ( φ x ) unique x = begin f x ≈⟨ {!!} ⟩ f ( x o (Group._⁻¹ G (sub K x))) ∎ where open EqReasoning (Algebra.Group.setoid H )