Mercurial > hg > Members > kono > Proof > galois
view Solvable.agda @ 12:d960f2ea902f
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 17 Aug 2020 15:12:17 +0900 |
parents | 9dae7ef74342 |
children | e0d16960d10d |
line wrap: on
line source
open import Level hiding ( suc ; zero ) open import Algebra module Solvable {n m : Level} (G : Group n m ) where open import Data.Unit open import Function.Inverse as Inverse using (_↔_; Inverse; _InverseOf_) open import Function open import Data.Nat hiding (_⊔_) -- using (ℕ; suc; zero) open import Relation.Nullary open import Data.Empty open import Data.Product open import Relation.Binary.PropositionalEquality hiding ( [_] ) open Group G [_,_] : Carrier → Carrier → Carrier [ g , h ] = g ⁻¹ ∙ h ⁻¹ ∙ g ∙ h data Commutator (P : Carrier → Set (Level.suc n ⊔ m)) : (f : Carrier) → Set (Level.suc n ⊔ m) where uni : Commutator P ε comm : {g h : Carrier} → P g → P h → Commutator P [ g , h ] gen : {f g : Carrier} → Commutator P f → Commutator P g → Commutator P ( f ∙ g ) ccong : {f g : Carrier} → f ≈ g → Commutator P f → Commutator P g deriving : ( i : ℕ ) → Carrier → Set (Level.suc n ⊔ m) deriving 0 x = Lift (Level.suc n ⊔ m) ⊤ deriving (suc i) x = Commutator (deriving i) x record Solvable : Set (Level.suc n ⊔ m) where field dervied-length : ℕ end : (x : Carrier ) → deriving dervied-length x → x ≈ ε -- deriving stage is closed on multiplication and inversion import Relation.Binary.Reasoning.Setoid as EqReasoning gsym = Algebra.Group.sym G grefl = Algebra.Group.refl G gtrans = Algebra.Group.trans G lemma3 : ε ≈ ε ⁻¹ lemma3 = begin ε ≈⟨ gsym (proj₁ inverse _) ⟩ ε ⁻¹ ∙ ε ≈⟨ proj₂ identity _ ⟩ ε ⁻¹ ∎ where open EqReasoning (Algebra.Group.setoid G) lemma6 : {f : Carrier } → ( f ⁻¹ ) ⁻¹ ≈ f lemma6 {f} = begin ( f ⁻¹ ) ⁻¹ ≈⟨ gsym ( proj₁ identity _) ⟩ ε ∙ ( f ⁻¹ ) ⁻¹ ≈⟨ ∙-cong (gsym ( proj₂ inverse _ )) grefl ⟩ (f ∙ f ⁻¹ ) ∙ ( f ⁻¹ ) ⁻¹ ≈⟨ assoc _ _ _ ⟩ f ∙ ( f ⁻¹ ∙ ( f ⁻¹ ) ⁻¹ ) ≈⟨ ∙-cong grefl (proj₂ inverse _) ⟩ f ∙ ε ≈⟨ proj₂ identity _ ⟩ f ∎ where open EqReasoning (Algebra.Group.setoid G) ≡→≈ : {f g : Carrier } → f ≡ g → f ≈ g ≡→≈ refl = grefl data MP : Carrier → Set (Level.suc n) where am : (x : Carrier ) → MP x _o_ : {x y : Carrier } → MP x → MP y → MP ( x ∙ y ) mpf : {x : Carrier } → (m : MP x ) → Carrier → Carrier mpf {x} (am x) y = x ∙ y mpf (m o m₁) y = mpf m ( mpf m₁ y ) mp-flatten : {x : Carrier } → (m : MP x ) → Carrier mp-flatten {x} m = mpf {x} m ε ∙-flatten : {x : Carrier } → (m : MP x ) → x ≈ mp-flatten m ∙-flatten {x} (am x) = gsym (proj₂ identity _) ∙-flatten {_} (am x o q) = ∙-cong grefl ( ∙-flatten q ) ∙-flatten (_o_ {_} {z} (_o_ {x} {y} p q) r) = lemma9 _ _ _ ( ∙-flatten {x ∙ y } (p o q )) ( ∙-flatten {z} r ) where mp-cong : {p q r : Carrier} → (P : MP p) → q ≈ r → mpf P q ≈ mpf P r mp-cong (am x) q=r = ∙-cong grefl q=r mp-cong (P o P₁) q=r = mp-cong P ( mp-cong P₁ q=r ) mp-assoc : {p q r : Carrier} → (P : MP p) → mpf P q ∙ r ≈ mpf P (q ∙ r ) mp-assoc (am x) = assoc _ _ _ mp-assoc {p} {q} {r} (P o P₁) = begin mpf P (mpf P₁ q) ∙ r ≈⟨ mp-assoc P ⟩ mpf P (mpf P₁ q ∙ r) ≈⟨ mp-cong P (mp-assoc P₁) ⟩ mpf P ((mpf P₁) (q ∙ r)) ∎ where open EqReasoning (Algebra.Group.setoid G) lemma9 : (x y z : Carrier) → x ∙ y ≈ mpf p (mpf q ε) → z ≈ mpf r ε → x ∙ y ∙ z ≈ mp-flatten ((p o q) o r) lemma9 x y z t s = begin x ∙ y ∙ z ≈⟨ ∙-cong t grefl ⟩ mpf p (mpf q ε) ∙ z ≈⟨ mp-assoc p ⟩ mpf p (mpf q ε ∙ z) ≈⟨ mp-cong p (mp-assoc q ) ⟩ mpf p (mpf q (ε ∙ z)) ≈⟨ mp-cong p (mp-cong q (proj₁ identity _ )) ⟩ mpf p (mpf q z) ≈⟨ mp-cong p (mp-cong q s) ⟩ mpf p (mpf q (mpf r ε)) ∎ where open EqReasoning (Algebra.Group.setoid G) mpg : {x : Carrier } → (m : MP x ) → Carrier → Carrier mpg {x} (am x) y = y ∙ x mpg (m o m₁) y = mpf m₁ ( mpf m y ) mp-flatten-g : {x : Carrier } → (m : MP x ) → Carrier mp-flatten-g {x} m = mpg {x} m ε ∙-flatten-g : {x : Carrier } → (m : MP x ) → x ≈ mp-flatten-g m ∙-flatten-g {x} (am x) = gsym (proj₁ identity _) ∙-flatten-g {_} (am x o q) = {!!} -- ∙-cong ( ∙-flatten-g q ) grefl ∙-flatten-g (_o_ {_} {z} (_o_ {x} {y} p q) r) = lemma9 _ _ _ {!!} ( ∙-flatten-g {z} r ) where mp-cong : {p q r : Carrier} → (P : MP p) → q ≈ r → mpg P q ≈ mpg P r mp-cong (am x) q=r = {!!} -- ∙-cong grefl q=r mp-cong (P o P₁) q=r = {!!} -- mp-cong P ( mp-cong P₁ q=r ) mp-assoc : {p q r : Carrier} → (P : MP p) → mpg P q ∙ r ≈ mpg P (q ∙ r ) mp-assoc (am x) = {!!} -- assoc _ _ _ mp-assoc {p} {q} {r} (P o P₁) = begin {!!} ≈⟨ {!!} ⟩ {!!} ∎ where open EqReasoning (Algebra.Group.setoid G) lemma9 : (x y z : Carrier) → x ∙ y ≈ mpg p (mpg q ε) → z ≈ mpg r ε → x ∙ y ∙ z ≈ mp-flatten-g ((p o q) o r) lemma9 x y z t s = begin {!!} ≈⟨ {!!} ⟩ {!!} ∎ where open EqReasoning (Algebra.Group.setoid G) tet1 : (f g : Carrier ) → {!!} tet1 f g = mp-flatten-g ((am (g ⁻¹) o am (f ⁻¹) ) o ( (am f o am g) o am ((f ∙ g) ⁻¹ ))) tet2 : (f g : Carrier ) → {!!} tet2 f g = mp-flatten ((am (g ⁻¹) o am (f ⁻¹) ) o ( (am f o am g) o am ((f ∙ g) ⁻¹ ))) lemma5 : (f g : Carrier ) → g ⁻¹ ∙ f ⁻¹ ≈ (f ∙ g) ⁻¹ lemma5 f g = begin g ⁻¹ ∙ f ⁻¹ ≈⟨ gsym (proj₂ identity _) ⟩ g ⁻¹ ∙ f ⁻¹ ∙ ε ≈⟨ gsym (∙-cong grefl (proj₂ inverse _ )) ⟩ g ⁻¹ ∙ f ⁻¹ ∙ ( (f ∙ g) ∙ (f ∙ g) ⁻¹ ) ≈⟨ ∙-flatten ((am (g ⁻¹) o am (f ⁻¹) ) o ( (am f o am g) o am ((f ∙ g) ⁻¹ ))) ⟩ g ⁻¹ ∙ (f ⁻¹ ∙ (f ∙ (g ∙ ((f ∙ g) ⁻¹ ∙ ε)))) ≈⟨ ∙-cong grefl (gsym (assoc _ _ _ )) ⟩ g ⁻¹ ∙ ((f ⁻¹ ∙ f) ∙ (g ∙ ((f ∙ g) ⁻¹ ∙ ε))) ≈⟨ ∙-cong grefl (gtrans (∙-cong (proj₁ inverse _ ) grefl) (proj₁ identity _)) ⟩ g ⁻¹ ∙ (g ∙ ((f ∙ g) ⁻¹ ∙ ε)) ≈⟨ gsym (assoc _ _ _) ⟩ (g ⁻¹ ∙ g ) ∙ ((f ∙ g) ⁻¹ ∙ ε) ≈⟨ gtrans (∙-cong (proj₁ inverse _ ) grefl) (proj₁ identity _) ⟩ (f ∙ g) ⁻¹ ∙ ε ≈⟨ proj₂ identity _ ⟩ (f ∙ g) ⁻¹ ∎ where open EqReasoning (Algebra.Group.setoid G) lemma4 : (g h : Carrier ) → [ h , g ] ≈ [ g , h ] ⁻¹ lemma4 g h = begin [ h , g ] ≈⟨ grefl ⟩ (h ⁻¹ ∙ g ⁻¹ ∙ h ) ∙ g ≈⟨ assoc _ _ _ ⟩ h ⁻¹ ∙ g ⁻¹ ∙ (h ∙ g) ≈⟨ ∙-cong grefl (gsym (∙-cong lemma6 lemma6)) ⟩ h ⁻¹ ∙ g ⁻¹ ∙ ((h ⁻¹) ⁻¹ ∙ (g ⁻¹) ⁻¹) ≈⟨ ∙-cong grefl (lemma5 _ _ ) ⟩ h ⁻¹ ∙ g ⁻¹ ∙ (g ⁻¹ ∙ h ⁻¹) ⁻¹ ≈⟨ assoc _ _ _ ⟩ h ⁻¹ ∙ (g ⁻¹ ∙ (g ⁻¹ ∙ h ⁻¹) ⁻¹) ≈⟨ ∙-cong grefl (lemma5 (g ⁻¹ ∙ h ⁻¹ ) g ) ⟩ h ⁻¹ ∙ (g ⁻¹ ∙ h ⁻¹ ∙ g) ⁻¹ ≈⟨ lemma5 (g ⁻¹ ∙ h ⁻¹ ∙ g) h ⟩ (g ⁻¹ ∙ h ⁻¹ ∙ g ∙ h) ⁻¹ ≈⟨ grefl ⟩ [ g , h ] ⁻¹ ∎ where open EqReasoning (Algebra.Group.setoid G) deriving-mul : { i : ℕ } → { x y : Carrier } → deriving i x → deriving i y → deriving i ( x ∙ y ) deriving-mul {zero} {x} {y} _ _ = lift tt deriving-mul {suc i} {x} {y} ix iy = gen ix iy deriving-inv : { i : ℕ } → { x : Carrier } → deriving i x → deriving i ( x ⁻¹ ) deriving-inv {zero} {x} (lift tt) = lift tt deriving-inv {suc i} {ε} uni = ccong lemma3 uni deriving-inv {suc i} {_} (comm x x₁ ) = ccong (lemma4 _ _) (comm x₁ x) where deriving-inv {suc i} {_} (gen x x₁ ) = ccong (lemma5 _ _ ) ( gen (deriving-inv x₁) (deriving-inv x)) where deriving-inv {suc i} {x} (ccong eq ix ) = ccong (⁻¹-cong eq) ( deriving-inv ix )