changeset 1074:2755bac8d8b9

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 09 May 2021 00:20:48 +0900
parents 785d8b2ba48f
children 10b4d04b734f
files src/CCC.agda src/ToposIL.agda src/equalizer.agda
diffstat 3 files changed, 46 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/CCC.agda	Sat May 08 19:02:57 2021 +0900
+++ b/src/CCC.agda	Sun May 09 00:20:48 2021 +0900
@@ -181,23 +181,6 @@
           ≈  subst (λ k → Hom B k (FObj functor a)) (trans (cong (λ k → CCC._∧_ cb k (FObj functor b)) (sym f<=)) (sym f∧))
               (CCC.ε cb {FObj functor a} {FObj functor b}) ]
 
-----
---
--- Sub Object Classifier as Topos
--- pull back on
---
---     iso          ○ b
---  e ⇐====⇒  b -----------→ 1         m ∙ f ≈ m ∙ g → f ≈ g
---  |         |              |
---  |       m |              | ⊤
---  |         ↓    char m    ↓    Ker h = Equalizer (char m mono)  (⊤ ∙ ○ a )
---  + ------→ a -----------→ Ω        m = Equalizer (char m mono)  (⊤ ∙ ○ a )
---     ker h        h
---
---  if m is an equalizer, there is an iso between e and b as k, and if we have the iso, m becomes an equalizer.
---    equalizer.equalizerIso : {a b c : Obj A} → (f g : Hom A a b ) → (equ : Equalizer A f g )
---      → (m :  Hom A c a) → ( ker-iso : IsoL A m (equalizer equ) ) → IsEqualizer A m f g
-
 open Equalizer
 open import equalizer
 
@@ -239,6 +222,23 @@
           if=ig : ( m o Iso.≅→ i ) o f  ≈ ( m o Iso.≅→ i ) o g  →  m o (Iso.≅→ i o f ) ≈  m o ( Iso.≅→ i o g ) 
           if=ig eq = trans-hom assoc (trans-hom eq (sym-hom assoc ) ) 
 
+----
+--
+-- Sub Object Classifier as Topos
+-- pull back on
+--
+--     iso          ○ b
+--  e ⇐====⇒  b -----------→ 1         m ∙ f ≈ m ∙ g → f ≈ g
+--  |         |              |
+--  |       m |              | ⊤
+--  |         ↓    char m    ↓    Ker h = Equalizer (char m mono)  (⊤ ∙ ○ a )
+--  + ------→ a -----------→ Ω        m = Equalizer (char m mono)  (⊤ ∙ ○ a )
+--     ker h        h
+--
+--  if m is an equalizer, there is an iso between e and b as k, and if we have the iso, m becomes an equalizer.
+--    equalizer.equalizerIso : {a b c : Obj A} → (f g : Hom A a b ) → (equ : Equalizer A f g )
+--      → (m :  Hom A c a) → ( ker-iso : IsoL A m (equalizer equ) ) → IsEqualizer A m f g
+
 record IsTopos {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) (c : CCC A) 
         ( Ω : Obj A )
         ( ⊤ : Hom A (CCC.1 c) Ω )
--- a/src/ToposIL.agda	Sat May 08 19:02:57 2021 +0900
+++ b/src/ToposIL.agda	Sun May 09 00:20:48 2021 +0900
@@ -115,13 +115,9 @@
      tl01 : {a b : Obj A}  (p q : Poly a  (Topos.Ω t) b ) 
         → p ⊢ q → q ⊢ p →  A [ Poly.f p ≈ Poly.f q ]
      tl01 {a} {b} p q p<q q<p = begin
-          Poly.f p ≈↑⟨ tt p ⟩
-          char t (equalizer (Ker t (Poly.f p))) (mm p)   ≈↑⟨  IsTopos.char-iso (Topos.isTopos t) {!!} {!!}  ⟩
-          char t (equalizer (Ker t (Poly.f p)) ∙ {!!} ) {!!} ≈⟨ {!!} ⟩
-          char t {!!} {!!}   ≈⟨  IsTopos.char-iso (Topos.isTopos t) {!!} {!!}  ⟩
-          char t (equalizer (Ker t (Poly.f p))
-             ∙ IsEqualizer.k (isEqualizer (Ker t (Poly.f p))) (equalizer (Ker t (Poly.f q))) ee1) {!!}   ≈⟨  IsTopos.char-cong (Topos.isTopos t) ee ⟩
-          char t (equalizer (Ker t (Poly.f q))) (mm q)   ≈⟨ tt q  ⟩
+          Poly.f p ≈↑⟨ {!!}  ⟩
+          char t ((equalizer (Ker t (Poly.f p)) ∙  pk ) ∙ qk ) {!!} ≈⟨  {!!}  ⟩
+          char t ((equalizer (Ker t (Poly.f q)) ∙  qk ) ∙ pk ) {!!} ≈⟨  {!!}  ⟩
           Poly.f q ∎  where
         ep :  Equalizer A (Poly.f p) (A [ (Topos.⊤ t) o ○ b ])
         ep = Ker t (Poly.f p)
@@ -134,12 +130,14 @@
         pp : Hom A b (Topos.Ω t)
         pp =  Poly.f q
         open import equalizer using ( monic )
+        pqiso : Iso A (equalizer-c (Ker t (Poly.f p))) (equalizer-c (Ker t (Poly.f q)))
+        pqiso = equalizer.equ-iso ( isEqualizer (Ker t (Poly.f p))) {!!} -- (isEqualizer (Ker t (Poly.f q)))
         fp :  A [ A [ Poly.f p o equalizer (Ker t (Poly.f p)) ]  ≈   A [ A [ (Topos.⊤ t) o  ○  b ] o equalizer (Ker t (Poly.f p)) ]  ]
         fp = IsEqualizer.fe=ge (Equalizer.isEqualizer (Ker t (Poly.f p))) 
         fq :  A [ A [ Poly.f q o equalizer (Ker t (Poly.f q)) ]  ≈   A [ A [ (Topos.⊤ t) o  ○  b ] o equalizer (Ker t (Poly.f q)) ]  ]
         fq = IsEqualizer.fe=ge (Equalizer.isEqualizer (Ker t (Poly.f q))) 
-        ee1 :  A [ A [ Poly.f p o equalizer (Ker t (Poly.f q)) ] ≈ A [ A [ ⊤ t o ○ b ] o equalizer (Ker t (Poly.f q)) ] ]
-        ee1 = begin
+        eeq :  A [ A [ Poly.f p o equalizer (Ker t (Poly.f q)) ] ≈ A [ A [ ⊤ t o ○ b ] o equalizer (Ker t (Poly.f q)) ] ]
+        eeq = begin
            Poly.f p o equalizer (Ker t (Poly.f q)) ≈⟨ q<p _ ( begin
             Poly.f q ∙ equalizer (Ker t (Poly.f q)) ≈⟨ fq ⟩
             ( ⊤ t ∙ ○ b ) ∙ equalizer (Ker t (Poly.f q)) ≈↑⟨ assoc ⟩
@@ -148,10 +146,28 @@
            ⊤ t ∙ ○ (equalizer-c (Ker t (Poly.f q))) ≈↑⟨ cdr e2 ⟩
            ⊤ t ∙ ( ○ b ∙  equalizer (Ker t (Poly.f q) ))  ≈⟨ assoc ⟩
            (⊤ t ∙ ○ b) ∙  equalizer (Ker t (Poly.f q) )  ∎  where
-        ee : A [ equalizer (Ker t (Poly.f p)) ∙
-           IsEqualizer.k (Equalizer.isEqualizer (Ker t (Poly.f p))) (equalizer (Ker t (Poly.f q  ))) ee1 
+        pk : Hom A (equalizer-c (Ker t (Poly.f q))) (equalizer-c (Ker t (Poly.f p)))
+        pk = IsEqualizer.k (isEqualizer (Ker t (Poly.f p))) (equalizer (Ker t (Poly.f q))) eeq 
+        epq : A [ equalizer (Ker t (Poly.f p)) ∙
+           IsEqualizer.k (Equalizer.isEqualizer (Ker t (Poly.f p))) (equalizer (Ker t (Poly.f q  ))) eeq 
               ≈ equalizer (Ker t (Poly.f q  ))  ]
-        ee = IsEqualizer.ek=h (Equalizer.isEqualizer (Ker t (Poly.f p))) 
+        epq = IsEqualizer.ek=h (Equalizer.isEqualizer (Ker t (Poly.f p))) 
+        eep :  A [ A [ Poly.f q o equalizer (Ker t (Poly.f p)) ] ≈ A [ A [ ⊤ t o ○ b ] o equalizer (Ker t (Poly.f p)) ] ]
+        eep = begin
+           Poly.f q o equalizer (Ker t (Poly.f p)) ≈⟨ p<q _ ( begin
+            Poly.f p ∙ equalizer (Ker t (Poly.f p)) ≈⟨ fp ⟩
+            ( ⊤ t ∙ ○ b ) ∙ equalizer (Ker t (Poly.f p)) ≈↑⟨ assoc ⟩
+            ⊤ t ∙ ( ○ b  ∙ equalizer (Ker t (Poly.f p))) ≈⟨ cdr e2 ⟩
+            ⊤ t ∙ ○ (equalizer-c (Ker t (Poly.f p)))  ∎ ) ⟩
+           ⊤ t ∙ ○ (equalizer-c (Ker t (Poly.f p))) ≈↑⟨ cdr e2 ⟩
+           ⊤ t ∙ ( ○ b ∙  equalizer (Ker t (Poly.f p) ))  ≈⟨ assoc ⟩
+           (⊤ t ∙ ○ b) ∙  equalizer (Ker t (Poly.f p) )  ∎  where
+        qk : Hom A (equalizer-c (Ker t (Poly.f p))) (equalizer-c (Ker t (Poly.f q)))
+        qk = IsEqualizer.k (isEqualizer (Ker t (Poly.f q))) (equalizer (Ker t (Poly.f p))) eep 
+        eqp : A [ equalizer (Ker t (Poly.f q)) ∙
+           IsEqualizer.k (Equalizer.isEqualizer (Ker t (Poly.f q))) (equalizer (Ker t (Poly.f p  ))) eep 
+              ≈ equalizer (Ker t (Poly.f p  ))  ]
+        eqp = IsEqualizer.ek=h (Equalizer.isEqualizer (Ker t (Poly.f q))) 
         mm : (q : Poly a  (Topos.Ω t) b ) → Mono A  (equalizer (Ker t (Poly.f q)))
         mm q = record { isMono = λ f g →  monic (Ker t (Poly.f q)) }
         tt :  (q : Poly a  (Topos.Ω t) b ) → A [ char t (equalizer (Ker t (Poly.f q))) (mm q) ≈  Poly.f q ]
--- a/src/equalizer.agda	Sat May 08 19:02:57 2021 +0900
+++ b/src/equalizer.agda	Sun May 09 00:20:48 2021 +0900
@@ -287,6 +287,7 @@
     ; iso←  = c-iso-lr eqa eqa'
    }
 
+
 --
 -- we cannot have equalizer ≈ id. we only have Iso A (equalizer-c equ) a
 --