changeset 1012:5dcbf2b9194e

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 20 Mar 2021 20:33:28 +0900
parents a104c3baefe4
children 39e2b29e3279
files src/Polynominal.agda src/deductive.agda
diffstat 2 files changed, 145 insertions(+), 80 deletions(-) [+]
line wrap: on
line diff
--- a/src/Polynominal.agda	Sat Mar 20 16:03:45 2021 +0900
+++ b/src/Polynominal.agda	Sat Mar 20 20:33:28 2021 +0900
@@ -87,12 +87,15 @@
     SCat : Category c₁ c₂ ℓ
     SCat = record { Obj = Obj A ; Hom = SHom ; _o_ = _*_ ; _≈_ = _⋍_ ; Id  = λ {a} → S-id a ; isCategory = isSCat }
 
+  module coKleisli' { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } { S : Functor A A } (SM : coMonad A S) where
+
   open CCC.CCC C
   open coMonad 
   open Functor
   open NTrans
   open import Category.Cat
   
+  open ≈-Reasoning A
   SA : (a : Obj A) → Functor A A
   SA a = record {
        FObj = λ x → a ∧ x
@@ -103,7 +106,6 @@
         ; distr = sa-distr
        }
     } where
-        open ≈-Reasoning A
         sa-id :  {b : Obj A} →  < π , ( id1 A b o π'  ) > ≈ id1 A (a ∧ b ) 
         sa-id {b} = begin
            < π , ( id1 A b o π'  ) > ≈⟨ IsCCC.π-cong isCCC (sym idR) (trans-hom idL (sym idR) ) ⟩
@@ -130,7 +132,6 @@
          ; assoc = assoc2
         }
      } where
-        open ≈-Reasoning A
         δ-comm :  {a₁ : Obj A} {b : Obj A} {f : Hom A a₁ b} →
              FMap (_○_ (SA a)  (SA a)) f o < π , id1 A _ > ≈ < π , id1 A _ > o FMap (SA a) f 
         δ-comm {x} {b} {f} = begin
@@ -164,7 +165,132 @@
 
 
 
-  -- functional-completeness : (C : CCC A ) → {a : Obj A} → ( x : Hom A (CCC.1 C) a ) → {!!}
-  -- functional-completeness = {!!}
+  -- open import deductive A C
+
+  _・_ = _[_o_] A
+  
+  -- every proof b →  c with assumption a has following forms
+  data  φ  {a ⊤ : Obj A } ( x : Hom A ⊤ a ) : {b c : Obj A } → Hom A b c → Set ( c₁  ⊔  c₂ ⊔ ℓ) where
+     i   : {b c : Obj A} {k : Hom A b c } → φ x k
+     ii  : φ x {⊤} {a} x
+     iii : {b c' c'' : Obj A } { f : Hom A b c' } { g : Hom A b c'' } (ψ : φ x f ) (χ : φ x g ) → φ x {b} {c'  ∧ c''} < f , g > 
+     iv  : {b c d : Obj A } { f : Hom A d c } { g : Hom A b d } (ψ : φ x f ) (χ : φ x g ) → φ x ( f ・ g )
+     v   : {b c' c'' : Obj A } { f : Hom A (b ∧ c') c'' }  (ψ : φ x f )  → φ x {b} {c'' <= c'} ( f * )
+     φ-cong   : {b c : Obj A} {k k' : Hom A b c } → A [ k ≈ k' ] → φ x k  → φ x k'
+  
+  α : {a b c : Obj A } → Hom A (( a ∧ b ) ∧ c ) ( a ∧ ( b ∧ c ) )
+  α = < π  ・ π   , < π'  ・ π  , π'  > >
+  
+  -- genetate (a ∧ b) → c proof from  proof b →  c with assumption a
+  
+  k : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → {z : Hom A b c } → ( y  : φ {a} x∈a z ) → Hom A (a ∧ b) c
+  k x∈a {k} i = k ・ π'
+  k x∈a ii = π
+  k x∈a (iii ψ χ ) = < k x∈a ψ  , k x∈a χ  >
+  k x∈a (iv ψ χ ) = k x∈a ψ  ・ < π , k x∈a χ  >
+  k x∈a (v ψ ) = ( k x∈a ψ  ・ α ) *
+  k x∈a (φ-cong  eq ψ) = k x∈a  ψ
+
+  toφ : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → (z : Hom A b c ) → φ {a} x∈a z  
+  toφ {a} {⊤} {b} {c} x∈a z = i
+
+  record PHom {a ⊤ : Obj A } { x : Hom A ⊤ a } (b c : Obj A) : Set (c₁ ⊔ c₂ ⊔ ℓ)  where
+    field
+       hom : Hom A b c 
+       phi : φ x {b} {c} hom
+
+  open PHom
+  -- open import HomReasoning
+  -- open import cat-utility
+
+  -- date _≅_ : {a b c : Hom A} → { x : Hom A ⊤ a } → (f g : PHom b c ) → Set (c₁ ⊔ c₂ ⊔ ℓ) where
+  --    pcomp : { a b c : Hom A } → A [ A [ hom g o hom f ] ≈ hom h ] → (A [ hom g o hom f ]) ≅ hom h
+
+  -- this is too easy, so what is A[x]?
+  Polynominal :  {a ⊤ : Obj A } ( x : Hom A ⊤ a ) → Category c₁ (c₁ ⊔ c₂ ⊔ ℓ) ℓ 
+  Polynominal {a} {⊤} x =  record {
+            Obj  = Obj A;
+            Hom = λ b c → PHom {a} {⊤} {x} b c ;
+            _o_ =  λ{a} {b} {c} x y → record { hom = A [ hom x o hom y ] ; phi = iv (phi x) (phi y) } ;
+            _≈_ =  λ x y → A [ hom x ≈ hom y ] ;
+            Id  =  λ{a} → record { hom = id1 A a ; phi = i } ;
+            isCategory  = record {
+                    isEquivalence =  record { sym = sym-hom ; trans = trans-hom ; refl = refl-hom } ;
+                    identityL  = λ {a b f} → idL ;
+                    identityR  = λ {a b f} → idR ;
+                    o-resp-≈  = λ {a b c f g h i} → resp ;
+                    associative  = λ{a b c d f g h } → assoc 
+               }
+           }  
+
+  Hx :  {a ⊤ : Obj A } ( x : Hom A ⊤ a ) → Functor A (Polynominal x)
+  Hx {a} x = record {
+     FObj = λ a → a
+   ; FMap = λ f → record { hom = f ; phi = i }
+   ; isFunctor = record {
+        identity = refl-hom
+      ; distr = refl-hom
+      ; ≈-cong = λ eq → eq
+     }
+   } 
+
+  record Functional-completeness {a : Obj A} ( x : Hom A 1 a ) : Set  (c₁ ⊔ c₂ ⊔ ℓ) where
+    field 
+      fun  : {b c : Obj A} →  PHom {a} {1} {x} b c  → Hom A (a ∧ b) c
+      fp   : {b c : Obj A} →  (p : PHom b c)  → A [ A [ fun p o < A [ x o ○ b ]  , id1 A b  > ] ≈ hom p ] 
+      uniq : {b c : Obj A} →  (p : PHom b c)  → (f : Hom A (a ∧ b) c) → A [ A [ f o < A [ x o ○ b ]  , id1 A b  > ] ≈ hom p ] 
+         → A [ f  ≈ fun p ]
+
+  functional-completeness : {a : Obj A} ( x : Hom A 1 a ) → Functional-completeness  x 
+  functional-completeness {a} x = record {
+         fun = λ y → k x (phi y)
+       ; fp = fc0
+       ; uniq = {!!}
+     } where
+        open φ
+        fc0 :  {b c : Obj A} (p : PHom b c) → A [ A [ k x (phi p) o < A [ x o ○ b ] , id1 A b > ] ≈ hom p ]
+        fc0 {b} {c} p with phi p
+        ... | i {_} {_} {s} = begin
+             (s o π') o < ( x o ○ b ) , id1 A b > ≈↑⟨ assoc ⟩
+             s o (π' o < ( x o ○ b ) , id1 A b >) ≈⟨ cdr (IsCCC.e3b isCCC ) ⟩
+             s o id1 A b ≈⟨ idR ⟩
+             s ∎
+        ... | ii = begin
+             π o < ( x o ○ b ) , id1 A b > ≈⟨ IsCCC.e3a isCCC ⟩
+             x o ○ b  ≈↑⟨ cdr (IsCCC.e2 isCCC ) ⟩
+             x o id1 A b  ≈⟨ idR ⟩
+             x ∎
+        ... | iii {_} {_} {_} {f} {g} y z  = begin
+             < k x y , k x z > o < (x o ○ b ) , id1 A b > ≈⟨ IsCCC.distr-π isCCC  ⟩
+             < k x y o < (x o ○ b ) , id1 A b > , k x z o < (x o ○ b ) , id1 A b > >
+                 ≈⟨ IsCCC.π-cong isCCC (fc0 record { hom = f ; phi = y } ) (fc0 record { hom = g ; phi = z } ) ⟩
+             < f , g > ≈⟨⟩
+             hom p ∎
+        ... | iv {_} {_} {d} {f} {g} y z  = begin
+             (k x y o < π , k x z >) o < ( x o ○ b ) , id1 A b > ≈↑⟨ assoc ⟩
+             k x y o ( < π , k x z > o < ( x o ○ b ) , id1 A b > ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩
+             k x y o ( < π  o < ( x o ○ b ) , id1 A b > ,  k x z  o < ( x o ○ b ) , id1 A b > > )
+                 ≈⟨ cdr (IsCCC.π-cong isCCC (IsCCC.e3a isCCC) (fc0 record { hom = g ; phi = z} ) ) ⟩
+             k x y o ( < x o ○ b  ,  g > ) ≈↑⟨ cdr (IsCCC.π-cong isCCC (cdr (IsCCC.e2 isCCC)) refl-hom ) ⟩
+             k x y o ( < x o ( ○ d o g ) ,  g > ) ≈⟨  cdr (IsCCC.π-cong isCCC assoc (sym idL)) ⟩
+             k x y o ( < (x o ○ d) o g  , id1 A d o g > ) ≈↑⟨ cdr (IsCCC.distr-π isCCC) ⟩
+             k x y o ( < x o ○ d ,  id1 A d > o g ) ≈⟨ assoc ⟩
+             (k x y o  < x o ○ d ,  id1 A d > ) o g  ≈⟨ car (fc0 record { hom = f ; phi = y }) ⟩
+             f o g  ∎
+        ... | v {_} {_} {_} {f} y = begin
+            ( (k x y o < π o π , <  π' o  π , π' > >) *) o < x o (○ b) , id1 A b > ≈⟨ IsCCC.distr-* isCCC ⟩
+            ( (k x y o < π o π , <  π' o  π , π' > >) o < < x o ○ b , id1 A _ > o π , π' > ) * ≈⟨ {!!} ⟩
+            ( k x y o ( < π o π , <  π' o  π , π' > > o < < x o ○ b , id1 A _ > o π , π' > ) ) * ≈⟨ {!!} ⟩
+             ( k x y o < (π o π) o < < x o ○ b , id1 A _ > o π , π' >  , <  π' o  π , π' > o < < x o ○ b , id1 A _ > o π , π' >  > ) * ≈⟨ {!!} ⟩
+             ( k x y o < π o (π o < < x o ○ b , id1 A _ > o π , π' > ) , <  (π' o  π) o < < x o ○ b , id1 A _ > o π , π' > , π'  o < < x o ○ b , id1 A _ > o π , π' > > >  ) * ≈⟨ {!!} ⟩
+             ( k x y o < π o ( < x o ○ b , id1 A _ > o π  ) , <  π' o  (π o < < x o ○ b , id1 A _ > o π , π' >) ,  π'  > >  ) * ≈⟨ {!!} ⟩
+             ( k x y o < (π o  < x o ○ b , id1 A _ > o π  ) , <  π' o  (< x o ○ b , id1 A _ > o π ) , π' > >  ) * ≈⟨ {!!} ⟩
+             ( k x y o < (π o  < x o ○ b , id1 A _ > ) o π   , <  (π' o  < x o ○ b , id1 A _ > ) o π  , π' > >  ) * ≈⟨ {!!} ⟩
+             ( k x y o < ( (x o ○ b ) o π )  , <   id1 A _  o π  , π' > >  ) * ≈⟨ {!!} ⟩
+             ( k x y o < ( (x o ○ b ) o π )  , <    π  , π' > >  ) * ≈⟨  IsCCC.*-cong isCCC ( cdr (IsCCC.π-cong isCCC {!!} {!!} )) ⟩
+             ( k x y o  < x o ○ _ , id1 A _  >  ) * ≈⟨ IsCCC.*-cong isCCC (fc0 record { hom = f ; phi = y}) ⟩
+             f * ∎
+        ... | φ-cong y z = {!!}
+        
 
 -- end
--- a/src/deductive.agda	Sat Mar 20 16:03:45 2021 +0900
+++ b/src/deductive.agda	Sat Mar 20 20:33:28 2021 +0900
@@ -1,32 +1,14 @@
 open import Level
 open import Category
-module deductive {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) where
-
--- Deduction Theorem
-
--- positive logic 
-
--- record PositiveLogic {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) :  Set ( c₁  ⊔  c₂ ⊔ ℓ ) where
---      field
---          ⊤ : Obj A 
---          ○ : (a : Obj A ) → Hom A a ⊤ 
---          _∧_ : Obj A → Obj A → Obj A   
---          <_,_> : {a b c : Obj A } → Hom A c a → Hom A c b → Hom A c (a ∧ b)  
---          π : {a b : Obj A } → Hom A (a ∧ b) a 
---          π' : {a b : Obj A } → Hom A (a ∧ b) b  
---          _<=_ : (a b : Obj A ) → Obj A 
---          _* : {a b c : Obj A } → Hom A (a ∧ b) c → Hom A a (c <= b) 
---          ε : {a b : Obj A } → Hom A ((a <= b ) ∧ b) a 
-
 open import CCC
 
-module deduction-theorem (  L :  CCC A ) where
+module deductive {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) (  L :  CCC A ) where
 
-  open CCC.CCC L
-  _・_ = _[_o_] A
+open CCC.CCC L
+_・_ = _[_o_] A
   
   -- every proof b →  c with assumption a has following forms
-  data  φ  {a ⊤ : Obj A } ( x : Hom A ⊤ a ) : {b c : Obj A } → Hom A b c → Set ( c₁  ⊔  c₂ ⊔ ℓ) where
+data  φ  {a ⊤ : Obj A } ( x : Hom A ⊤ a ) : {b c : Obj A } → Hom A b c → Set ( c₁  ⊔  c₂ ⊔ ℓ) where
      i   : {b c : Obj A} {k : Hom A b c } → φ x k
      ii  : φ x {⊤} {a} x
      iii : {b c' c'' : Obj A } { f : Hom A b c' } { g : Hom A b c'' } (ψ : φ x f ) (χ : φ x g ) → φ x {b} {c'  ∧ c''} < f , g > 
@@ -34,61 +16,18 @@
      v   : {b c' c'' : Obj A } { f : Hom A (b ∧ c') c'' }  (ψ : φ x f )  → φ x {b} {c'' <= c'} ( f * )
      φ-cong   : {b c : Obj A} {k k' : Hom A b c } → A [ k ≈ k' ] → φ x k  → φ x k'
   
-  α : {a b c : Obj A } → Hom A (( a ∧ b ) ∧ c ) ( a ∧ ( b ∧ c ) )
-  α = < π  ・ π   , < π'  ・ π  , π'  > >
+α : {a b c : Obj A } → Hom A (( a ∧ b ) ∧ c ) ( a ∧ ( b ∧ c ) )
+α = < π  ・ π   , < π'  ・ π  , π'  > >
   
   -- genetate (a ∧ b) → c proof from  proof b →  c with assumption a
   
-  k : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → {z : Hom A b c } → ( y  : φ {a} x∈a z ) → Hom A (a ∧ b) c
-  k x∈a {k} i = k ・ π'
-  k x∈a ii = π
-  k x∈a (iii ψ χ ) = < k x∈a ψ  , k x∈a χ  >
-  k x∈a (iv ψ χ ) = k x∈a ψ  ・ < π , k x∈a χ  >
-  k x∈a (v ψ ) = ( k x∈a ψ  ・ α ) *
-  k x∈a (φ-cong  eq ψ) = k x∈a  ψ
-
-  toφ : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → (z : Hom A b c ) → φ {a} x∈a z  
-  toφ {a} {⊤} {b} {c} x∈a z = i
-
-  record PHom {a ⊤ : Obj A } { x : Hom A ⊤ a } (b c : Obj A) : Set (c₁ ⊔ c₂ ⊔ ℓ)  where
-    field
-       hom : Hom A b c 
-       phi : φ x {b} {c} hom
-
-  open PHom
-  open import HomReasoning
-  open import cat-utility
-
-  -- date _≅_ : {a b c : Hom A} → { x : Hom A ⊤ a } → (f g : PHom b c ) → Set (c₁ ⊔ c₂ ⊔ ℓ) where
-  --    pcomp : { a b c : Hom A } → A [ A [ hom g o hom f ] ≈ hom h ] → (A [ hom g o hom f ]) ≅ hom h
+k : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → {z : Hom A b c } → ( y  : φ {a} x∈a z ) → Hom A (a ∧ b) c
+k x∈a {k} i = k ・ π'
+k x∈a ii = π
+k x∈a (iii ψ χ ) = < k x∈a ψ  , k x∈a χ  >
+k x∈a (iv ψ χ ) = k x∈a ψ  ・ < π , k x∈a χ  >
+k x∈a (v ψ ) = ( k x∈a ψ  ・ α ) *
+k x∈a (φ-cong  eq ψ) = k x∈a  ψ
 
-  -- this is too easy, so what is A[x]?
-  Polynominal :  {a ⊤ : Obj A } ( x : Hom A ⊤ a ) → Category c₁ (c₁ ⊔ c₂ ⊔ ℓ) ℓ 
-  Polynominal {a} {⊤} x =  record {
-            Obj  = Obj A;
-            Hom = λ b c → PHom {a} {⊤} {x} b c ;
-            _o_ =  λ{a} {b} {c} x y → record { hom = A [ hom x o hom y ] ; phi = iv (phi x) (phi y) } ;
-            _≈_ =  λ x y → A [ hom x ≈ hom y ] ;
-            Id  =  λ{a} → record { hom = id1 A a ; phi = i } ;
-            isCategory  = record {
-                    isEquivalence =  record { sym = sym-hom ; trans = trans-hom ; refl = refl-hom } ;
-                    identityL  = λ {a b f} → idL ;
-                    identityR  = λ {a b f} → idR ;
-                    o-resp-≈  = λ {a b c f g h i} → resp ;
-                    associative  = λ{a b c d f g h } → assoc 
-               }
-           }  where
-              open ≈-Reasoning A
-
-  Hx :  {a ⊤ : Obj A } ( x : Hom A ⊤ a ) → Functor A (Polynominal x)
-  Hx {a} x = record {
-     FObj = λ a → a
-   ; FMap = λ f → record { hom = f ; phi = i }
-   ; isFunctor = record {
-        identity = refl-hom
-      ; distr = refl-hom
-      ; ≈-cong = λ eq → eq
-     }
-   } where
-      open ≈-Reasoning A
-
+toφ : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → (z : Hom A b c ) → φ {a} x∈a z  
+toφ {a} {⊤} {b} {c} x∈a z = i