changeset 1048:28df99fe81de

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 18 Apr 2021 11:00:21 +0900
parents cc7103f643b7
children 2871dd5b5e63
files src/Polynominal.agda src/ToposIL.agda
diffstat 2 files changed, 49 insertions(+), 96 deletions(-) [+]
line wrap: on
line diff
--- a/src/Polynominal.agda	Sun Apr 18 09:21:40 2021 +0900
+++ b/src/Polynominal.agda	Sun Apr 18 11:00:21 2021 +0900
@@ -1,3 +1,5 @@
+{-# OPTIONS --allow-unsolved-metas #-}
+
 open import Category
 open import CCC
 open import Level
@@ -7,81 +9,7 @@
 module Polynominal { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) ( C : CCC A )   where
 
   open CCC.CCC C
-  open coMonad 
-  open Functor
-  open NTrans
-  open import Category.Cat
-  
   open ≈-Reasoning A hiding (_∙_)
-  SA : (a : Obj A) → Functor A A
-  SA a = record {
-       FObj = λ x → a ∧ x
-     ; FMap = λ f →  < π ,  A [ f o π' ]   >
-     ; isFunctor = record {
-          identity = sa-id
-        ; ≈-cong = λ eq → IsCCC.π-cong isCCC refl-hom (resp refl-hom eq )
-        ; distr = sa-distr
-       }
-    } where
-        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) ) ⟩
-           < ( π o id1 A _ ) , ( π' o id1 A _ )  > ≈⟨ IsCCC.e3c isCCC  ⟩
-          id1 A (a ∧ b ) ∎
-        sa-distr :  {x b c : Obj A} {f : Hom A x b} {g : Hom A b c} →
-            < π , (( g o f ) o π') > ≈ < π , ( g o π' ) > o < π , (f o π') > 
-        sa-distr {x} {b} {c} {f} {g} = begin
-            < π , (( g o f ) o π') > ≈↑⟨ IsCCC.π-cong isCCC (IsCCC.e3a isCCC) ( begin 
-               ( g o π' ) o < π , (f o π') >  ≈↑⟨ assoc ⟩ 
-                g o ( π'  o < π , (f o π') > )  ≈⟨ cdr (IsCCC.e3b isCCC)  ⟩ 
-                g o ( f o π')   ≈⟨ assoc  ⟩ 
-               ( g o f ) o π'  ∎ ) ⟩
-            < (π o < π , (f o π') >) ,  ( ( g o π' ) o < π , (f o π') >) > ≈↑⟨ IsCCC.distr-π isCCC  ⟩
-            < π , ( g o π' ) > o < π , (f o π') > ∎
-
-  SM : (a : Obj A) → coMonad A (SA a)
-  SM a = record {
-        δ = record { TMap = λ x → < π , id1 A _ > ;  isNTrans = record { commute = δ-comm} }
-      ; ε = record { TMap = λ x → π' ; isNTrans =  record { commute = ε-comm } }
-      ; isCoMonad = record {
-           unity1 = IsCCC.e3b isCCC
-         ; unity2 = unity2
-         ; assoc = assoc2
-        }
-     } where
-        δ-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
-           FMap (_○_ (SA a)  (SA a)) f o < π , id1 A _ > ≈⟨  IsCCC.distr-π isCCC ⟩
-           < π o < π , id1 A _ > ,  (FMap (SA a) f o π' ) o < π , id1 A _ > >  ≈⟨ IsCCC.π-cong isCCC (IsCCC.e3a isCCC) (sym assoc) ⟩
-           < π ,  FMap (SA a) f o ( π'  o < π , id1 A _ >) >  ≈⟨ IsCCC.π-cong isCCC refl-hom (cdr (IsCCC.e3b isCCC)) ⟩
-           < π ,  FMap (SA a) f o id1 A _  >                  ≈⟨  IsCCC.π-cong isCCC refl-hom idR ⟩
-           < π ,  FMap (SA a) f  >                            ≈↑⟨   IsCCC.π-cong isCCC  (IsCCC.e3a isCCC) idL ⟩
-           < π o  FMap (SA a) f ,  id1 A _ o FMap (SA a) f >  ≈↑⟨  IsCCC.distr-π isCCC   ⟩
-           < π , id1 A _ > o FMap (SA a) f  ∎
-        ε-comm :  {a₁ : Obj A} {b : Obj A} {f : Hom A a₁ b} → 
-             FMap (identityFunctor {_} {_} {_} {A}) f o π'  ≈  π' o FMap (SA a) f 
-        ε-comm {_} {_} {f} = sym  (IsCCC.e3b isCCC)
-        unity2 :  {a₁ : Obj A} →  FMap (SA a) π' o < π , id1 A _ >  ≈ id1 A (a ∧ a₁)
-        unity2 {x} = begin
-           FMap (SA a) π' o < π , id1 A _ >                         ≈⟨  IsCCC.distr-π isCCC   ⟩
-            < π o < π , id1 A _ > , ( π' o π' ) o < π , id1 A _ > > ≈⟨  IsCCC.π-cong isCCC (IsCCC.e3a isCCC) (sym assoc) ⟩
-            < π  ,  π' o ( π'  o < π , id1 A _ > ) >                ≈⟨  IsCCC.π-cong isCCC  refl-hom (cdr (IsCCC.e3b isCCC)) ⟩
-            < π  ,  π' o  id1 A _ >                                 ≈⟨  IsCCC.π-cong isCCC  refl-hom  idR ⟩
-            < π  ,  π' >                                            ≈⟨  IsCCC.π-id isCCC ⟩
-           id1 A (a ∧ x)  ∎
-        assoc2 :   {a₁ : Obj A} →  < π , id1 A _ > o < π , id1  A _ > ≈  FMap (SA a) < π , id1 A (a ∧ a₁) > o < π , id1 A _ > 
-        assoc2 {x} = begin
-            < π , id1 A _ > o < π , id1  A _ >                      ≈⟨  IsCCC.distr-π isCCC ⟩
-            < π o < π , id1  A _ > , id1 A _ o < π , id1  A _ > >   ≈⟨  IsCCC.π-cong isCCC  (IsCCC.e3a isCCC) idL  ⟩
-            < π  , < π , id1 A _ > >                                ≈↑⟨ IsCCC.π-cong isCCC refl-hom idR ⟩
-            < π  , < π , id1 A _ > o  id1 A _ >                     ≈↑⟨ IsCCC.π-cong isCCC refl-hom  (cdr (IsCCC.e3b isCCC)) ⟩
-            < π  , < π , id1 A _ > o  ( π'  o < π , id1 A _ > ) >   ≈↑⟨ IsCCC.π-cong isCCC  (IsCCC.e3a isCCC) (sym assoc) ⟩
-            < π o < π , id1 A _ > , (< π , id1 A _ > o  π' ) o < π , id1 A _ > > ≈↑⟨  IsCCC.distr-π isCCC  ⟩
-           FMap (SA a) < π , id1 A (a ∧ x) > o < π , id1 A _ > ∎
-  --
-  -- coKleisli category of SM should give the fucntional completeness 
-  --
 
   _∙_ = _[_o_] A
 
@@ -126,6 +54,11 @@
   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 XHom {a ⊤ : Obj A }  : Set (c₁ ⊔ c₂ ⊔ ℓ)  where
+    field
+       xhom : Hom A ⊤ a 
+       phi : {b c : Obj A} → {f : Hom A b c} → φ xhom {b} {c} f
+
   record PHom {a ⊤ : Obj A } { x : Hom A ⊤ a } (b c : Obj A) : Set (c₁ ⊔ c₂ ⊔ ℓ)  where
     field
        hom : Hom A b c 
@@ -175,31 +108,34 @@
       uniq : {b c : Obj A} →  (p : PHom b c)  → (f : Hom A (a ∧ b) c) → A [ f ∙ < x ∙ ○ b   , id1 A b  >  ≈ hom p ] 
          → A [ f  ≈ fun p ]
 
-  record XHom {a ⊤ : Obj A }  : Set (c₁ ⊔ c₂ ⊔ ℓ)  where
-    field
-       xhom : Hom A ⊤ a 
-       phi : {b c : Obj A} → {f : Hom A b c} → φ xhom {b} {c} f
-
   -- f ≡ λ (x ∈ a) → φ x , ∃ (f : b <= a) →  f ∙ x ≈  φ x  
   record Select  {a b : Obj A} (Ω : Obj A) ( φ : (x :  Hom A 1 a ) → Hom A 1 b )
          :  Set ( suc c₁  ⊔  suc c₂ ⊔ suc ℓ ) where
     field
       sl :  Hom A 1 (b <= a) 
-      isSelect : (x : Hom A 1 a  ) → A [  A [ ε C  o < sl , x > ]  ≈  φ x ]
-      isUnique : (x : Hom A 1 a  ) → (f : Hom A 1 (b <= a) )  → A [  A [ ε C o < f , x > ]  ≈  φ x ]
+      isSelect : (x : Hom A 1 a  ) → A [  A [ ε  o < sl , x > ]  ≈  φ x ]
+      isUnique : (x : Hom A 1 a  ) → (f : Hom A 1 (b <= a) )  → A [  A [ ε o < f , x > ]  ≈  φ x ]
         →  A [ sl  ≈ f ]
 
-  φ→Phom : {a b : Obj A} (Ω : Obj A) ( φ : (x :  Hom A 1 a ) → Hom A 1 b ) → Hom A a b
-  φ→Phom = {!!}
-  
+  record Fc {a b : Obj A } ( φ : (x : Hom A 1 a  ) → XHom {b} {1} )
+         :  Set ( suc c₁  ⊔  suc c₂ ⊔ suc ℓ ) where
+    field
+      sl :  Hom A a b 
+    g : Hom A 1 (b <= a) 
+    g = (A [ A [ A [ sl o π ] o < id1 A _ ,  ○ a > ] o π' ]  ) *
+    field
+      isSelect : (x : Hom A 1 a  ) → A [  A [ ε  o < g , x > ]  ≈  XHom.xhom ( φ x ) ]
+      isUnique : (x : Hom A 1 a  ) → (f : Hom A 1 (b <= a) )  → A [  A [ ε o < f , x > ]  ≈   XHom.xhom ( φ x ) ]
+        →  A [ g  ≈ f ]
 
   -- functional completeness
-  FC : {a b : Obj A}  ( φ : (x :  Hom A 1 a ) → Hom A 1 b ) → Select b φ
+  FC : {a b : Obj A}  → (φ  : Hom A 1 a   → XHom {b} {1} )  → Fc φ 
   FC {a} {b} φ = record {
-       sl = (A [ A [ {!!} o < id1 A _ ,  ○ a > ] o π' ]  ) *
+     sl = {!!}
      ; isSelect = {!!} 
      ; isUnique = {!!} 
-    }
+    } 
+       -- sl = (A [ A [  {!!}  o < id1 A _ ,  ○ a > ] o π' ]  ) *
 
   π-cong = IsCCC.π-cong isCCC
   e2 = IsCCC.e2 isCCC
--- a/src/ToposIL.agda	Sun Apr 18 09:21:40 2021 +0900
+++ b/src/ToposIL.agda	Sun Apr 18 11:00:21 2021 +0900
@@ -15,6 +15,19 @@
   open import Category.Sets hiding (_o_)
   open import Relation.Binary.PropositionalEquality hiding ( [_] ; sym)
 
+  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 (A [ f o 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'
+
+  record XHom {a ⊤ : Obj A }  : Set (c₁ ⊔ c₂ ⊔ ℓ)  where
+    field
+       xhom : Hom A ⊤ a
+       phi : {b c : Obj A} → {f : Hom A b c} → φ xhom {b} {c} f
+
   -- record IsLogic    (c : CCC A) 
   --        (Ω : Obj A)
   --        (⊤ : Hom A 1 Ω)
@@ -32,7 +45,7 @@
          _==_ : {a : Obj A} (x y : Hom A 1 a ) → Hom A 1 Ω
          _∈_ : {a : Obj A} (x :  Hom A 1 a ) (α : Hom A 1 (P a) ) → Hom A 1 Ω
          -- { x ∈ a | φ x } : P a
-         select : {a : Obj A} → ( (x :  Hom A 1 a ) →  Hom A 1 Ω ) → Hom A 1 (P a)
+         select : {a : Obj A} → ( φ : (x : Hom A 1 a  ) → XHom {Ω} {1} ) → Hom A 1 (P a)
          -- isTL : IsLogic c Ω ⊤ P _==_ _∈_  _|-_
      _|-_  :  (List (Hom A 1 Ω)) → (p : Hom A 1 Ω ) → Set ℓ
      [] |-  p = A [ p ≈  ⊤ ] 
@@ -54,24 +67,28 @@
 
   open import ToposEx A c using ( δmono  )
 
-  -- f ≡ λ (x ∈ a) → φ x or  ∃ (f : b <= a) →  f ∙ x ≈  φ x  
-  record Select  {a b : Obj A} (Ω : Obj A) ( φ : (x :  Hom A 1 a ) → Hom A 1 b )
+  -- f ≡ λ (x ∈ a) → φ x , ∃ (f : b <= a) →  f ∙ x ≈  φ x  
+
+  record Fc {a b : Obj A } ( φ : (x : Hom A 1 a  ) → XHom {b} {1} )
          :  Set ( suc c₁  ⊔  suc c₂ ⊔ suc ℓ ) where
     field
-      sl :  Hom A 1 (b <= a) 
-      isSelect : (x : Hom A 1 a  ) → A [  A [ ε o < sl , x > ]  ≈  φ x ]
-      isUnique : (x : Hom A 1 a  ) → (f : Hom A 1 (b <= a) )  → A [  A [ ε o < f , x > ]  ≈  φ x ]
-        →  A [ sl  ≈ f ]
+      sl :  Hom A a b
+    g : Hom A 1 (b <= a)
+    g = (A [ A [ A [ sl o π ] o < id1 A _ ,  ○ a > ] o π' ]  ) *
+    field
+      isSelect : (x : Hom A 1 a  ) → A [  A [ ε  o < g , x > ]  ≈  XHom.xhom ( φ x ) ]
+      isUnique : (x : Hom A 1 a  ) → (f : Hom A 1 (b <= a) )  → A [  A [ ε  o < f , x > ]  ≈   XHom.xhom ( φ x ) ]
+        →  A [ g  ≈ f ]
 
   -- functional completeness
   FC : Set ( suc c₁  ⊔  suc c₂ ⊔ suc ℓ )
-  FC = {a b : Obj A}  ( φ : (x :  Hom A 1 a ) → Hom A 1 b ) → Select b φ
+  FC = {a b : Obj A}  ( φ : (x : Hom A 1 a  ) → XHom {b} {1} ) → Fc φ
 
   topos→logic : (t : Topos A c ) → ToposNat A 1 → FC  → InternalLanguage (Topos.Ω t) (Topos.⊤ t) (λ a → (Topos.Ω t) <= a)
   topos→logic t n fc = record {
          _==_ = λ {b} f g →   A [ char t < id1 A b , id1 A b > (δmono t n ) o < f , g > ]
       ;  _∈_ = λ {a} x α →  A [ ε o < α , x > ]
       -- { x ∈ a | φ x } : P a
-      ;  select = λ {a} φ →  Select.sl ( fc φ )
+      ;  select = λ {a} φ →  Fc.g ( fc φ )
       -- ;  isTL = {!!}
     }