changeset 977:8ffdc897f29b

fix Topos equalizer iso
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 02 Mar 2021 17:56:31 +0900
parents 73fd14a73d49
children db288effad97
files src/CCC.agda src/ToposEx.agda src/cat-utility.agda
diffstat 3 files changed, 66 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/CCC.agda	Tue Mar 02 09:48:12 2021 +0900
+++ b/src/CCC.agda	Tue Mar 02 17:56:31 2021 +0900
@@ -171,7 +171,7 @@
      field
          char-ker  : {a b : Obj A } {h : Hom A a Ω}  (m :  Hom A b a) → (mono : Mono A m)  
              → A [ char m mono  ≈ h ]
-         ker-char : {a b : Obj A} →  (m :  Hom A b a) → (mono : Mono A m)  → Iso A b (  equalizer-c (Ker ( char m mono ))) 
+         ker-char : {a b : Obj A} →  (m :  Hom A b a) → (mono : Mono A m)  → IsoL A m (equalizer (Ker ( char m mono ))) 
 
 record Topos {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ)  (c : CCC A)  :  Set ( suc c₁  ⊔  suc c₂ ⊔ suc ℓ ) where
      field
--- a/src/ToposEx.agda	Tue Mar 02 09:48:12 2021 +0900
+++ b/src/ToposEx.agda	Tue Mar 02 17:56:31 2021 +0900
@@ -21,6 +21,15 @@
 --
 --   Ker t h : Equalizer A h (A [ ⊤ o (○ a) ])
 
+  mh=⊤ : {a d : Obj A} (h : Hom A a (Ω t))  (p1 : Hom A d a) (p2 : Hom A d 1) (eq : A [ A [ h o p1 ] ≈ A [ ⊤ t o p2 ] ] )
+        → A [ A [ h o p1 ] ≈ A [ A [ ⊤ t o ○ a ] o p1 ] ]
+  mh=⊤ {a} {d} h p1 p2 eq = begin
+            h o p1                      ≈⟨ eq ⟩
+            ⊤ t o p2                    ≈⟨ cdr (IsCCC.e2 isCCC) ⟩
+            ⊤ t o  (○ d)                ≈↑⟨ cdr (IsCCC.e2 isCCC) ⟩
+            ⊤ t o ( ○ a o p1 )          ≈⟨ assoc ⟩
+           (⊤ t o ○ a ) o p1            ∎ 
+
   topos-pullback :  {a : Obj A}  → (h : Hom A a (Ω t)) → Pullback A h (⊤ t)
   topos-pullback {a} h = record {
       ab = equalizer-c (Ker t h)         -- b
@@ -28,7 +37,7 @@
     ; π2 = ○ ( equalizer-c (Ker t h) )   -- ○ b
     ; isPullback = record {
               commute = comm
-         ;    pullback = λ {d} {p1} {p2} eq → IsEqualizer.k (isEqualizer (Ker t h)) p1 (lemma1 p1 p2 eq )
+         ;    pullback = λ {d} {p1} {p2} eq → IsEqualizer.k (isEqualizer (Ker t h)) p1 (mh=⊤ h  p1 p2 eq )
          ;    π1p=π1 = IsEqualizer.ek=h (isEqualizer (Ker t h))
          ;    π2p=π2 = λ {d} {p1'} {p2'} {eq} → lemma2 eq
          ;    uniqueness = uniq
@@ -41,25 +50,17 @@
             (⊤ t o ○ a ) o equalizer (Ker t h) ≈↑⟨ assoc ⟩
             ⊤ t o (○ a  o equalizer (Ker t h)) ≈⟨ cdr e2  ⟩
             ⊤ t o ○ (equalizer-c (Ker t h))   ∎
-    lemma1 : {d : Obj A}  (p1 : Hom A d a) (p2 : Hom A d 1) (eq : A [ A [ h o p1 ] ≈ A [ ⊤ t o p2 ] ] )
-        → A [ A [ h o p1 ] ≈ A [ A [ ⊤ t o ○ a ] o p1 ] ]
-    lemma1 {d} p1 p2 eq = begin
-            h o p1                      ≈⟨ eq ⟩
-            ⊤ t o p2                    ≈⟨ cdr e2 ⟩
-            ⊤ t o  (○ d)                ≈↑⟨ cdr e2 ⟩
-            ⊤ t o ( ○ a o p1 )          ≈⟨ assoc ⟩
-           (⊤ t o ○ a ) o p1            ∎ 
     lemma2 : {d : Obj A}  {p1' : Hom A d a} {p2' : Hom A d 1} (eq : A [ A [ h o p1' ] ≈ A [ ⊤ t o p2' ] ] )
-        →   A [ A [  ○ (equalizer-c (Ker t h)) o IsEqualizer.k (isEqualizer (Ker t h)) p1'(lemma1 p1' p2' eq) ] ≈ p2' ]
+        →   A [ A [  ○ (equalizer-c (Ker t h)) o IsEqualizer.k (isEqualizer (Ker t h)) p1'(mh=⊤ h p1' p2' eq) ] ≈ p2' ]
     lemma2 {d} {p1'} {p2'} eq = begin
-             ○ (equalizer-c (Ker t h)) o IsEqualizer.k (isEqualizer (Ker t h)) p1'(lemma1 p1' p2' eq)          ≈⟨ e2 ⟩
+             ○ (equalizer-c (Ker t h)) o IsEqualizer.k (isEqualizer (Ker t h)) p1'(mh=⊤ h p1' p2' eq)          ≈⟨ e2 ⟩
              ○ d ≈↑⟨ e2 ⟩
              p2' ∎ 
     uniq :  {d : Obj A} (p' : Hom A d (equalizer-c (Ker t h))) (π1' : Hom A d a) (π2' : Hom A d 1) (eq : A [ A [ h o π1' ] ≈ A [ ⊤ t o π2' ] ])
             (π1p=π1' : A [ A [ equalizer (Ker t h) o p' ] ≈ π1' ]) (π2p=π2' : A [ A [ ○ (equalizer-c (Ker t h)) o p' ] ≈ π2' ])
-             → A [ IsEqualizer.k (isEqualizer (Ker t h)) π1' (lemma1 π1' π2' eq) ≈ p' ]
+             → A [ IsEqualizer.k (isEqualizer (Ker t h)) π1' (mh=⊤ h π1' π2' eq) ≈ p' ]
     uniq {d} (p') p1' p2' eq pe1 pe2 = begin
-             IsEqualizer.k (isEqualizer (Ker t h)) p1' (lemma1 p1' p2' eq)  ≈⟨ IsEqualizer.uniqueness  (isEqualizer (Ker t h)) pe1 ⟩
+             IsEqualizer.k (isEqualizer (Ker t h)) p1' (mh=⊤ h p1' p2' eq)  ≈⟨ IsEqualizer.uniqueness  (isEqualizer (Ker t h)) pe1 ⟩
              p' ∎ 
 
   topos-m-pullback : {a b : Obj A}  → (m : Hom A b a) → (mono : Mono A m ) → Pullback A (char t m mono )  (⊤ t)
@@ -69,12 +70,23 @@
     ; π2 = ○ b   
     ; isPullback = record {
               commute = char-m=⊤ t m mono
-         ;    pullback = λ {d} {p1} {p2} eq → {!!} -- Iso.≅← (IsTopos.ker-char (isTopos t) ? ? )  -- IsEqualizer.k (isEqualizer (Ker t ?)) ? ?
-         ;    π1p=π1 = {!!} -- IsEqualizer.ek=h (isEqualizer (Ker t h))
-         ;    π2p=π2 = {!!} -- λ {d} {p1'} {p2'} {eq} → lemma2 eq
+         ;    pullback = λ {d} {p1} {p2} eq →  
+             Iso.≅← (IsoL.iso-L (IsTopos.ker-char (isTopos t) m mono ))  o IsEqualizer.k (isEqualizer (Ker t (char t m mono))) p1 (mh=⊤ (char t m mono) p1 p2 eq )
+         ;    π1p=π1 = λ {d} {p1'} {p2'} {eq} → lemma3 p1' p2' eq
+         ;    π2p=π2 = λ {d} {p1'} {p2'} {eq} → trans-hom (IsCCC.e2 isCCC) (sym (IsCCC.e2 isCCC))
          ;    uniqueness = {!!}
       }
     } where
+        f← = Iso.≅← (IsoL.iso-L (IsTopos.ker-char (isTopos t) m mono ))
+        k : {d : Obj A} (p1 : Hom A d a) → (p2 : Hom A d 1) →  A [ A [ char t m mono o p1 ] ≈ A [ ⊤ t o p2 ] ] → Hom A d (equalizer-c (Ker t (char t m mono)))
+        k p1 p2 eq = IsEqualizer.k (isEqualizer (Ker t (char t m mono))) p1 (mh=⊤ (char t m mono) p1 p2 eq )
+        lemma3 : {d : Obj A} (p1 : Hom A d a) → (p2 : Hom A d 1)
+            →  (eq : A [ A [ char t m mono o p1 ] ≈ A [ ⊤ t o p2 ] ] ) → m o (f← o k p1 p2 eq ) ≈ p1 
+        lemma3 {d} p1 p2 eq = begin
+           m o (f← o k p1 p2 eq ) ≈⟨ assoc ⟩
+           (m o f← ) o k p1 p2 eq ≈⟨ car (IsoL.iso≈L (IsTopos.ker-char (isTopos t) m mono )) ⟩
+           equalizer (Ker t (char t m mono)) o k p1 p2 eq ≈⟨ IsEqualizer.ek=h (isEqualizer (Ker t (char t m mono))) ⟩
+           p1 ∎
 
   δmono : {b : Obj A } → Mono A < id1 A b , id1 A b >
   δmono  = record {
@@ -112,10 +124,14 @@
        ip = topos-m-pullback < id1 A b , id1 A b >  δmono
        k : Hom A a b
        k = IsPullback.pullback (Pullback.isPullback ip ) eq 
-       -- δb o (A Category.o Pullback.π1 ip) k  ≈  ⊤ t o ○ a 
-       -- Pullback.π1 ip o k  ≈ < f , g >
+       p0 : δb o ( Pullback.π1 ip o  k )  ≈  ⊤ t o ○ a 
+       p0 = begin
+            δb o ( Pullback.π1 ip o k ) ≈⟨⟩
+            char t < id1 A b , id1 A b > δmono o ( Pullback.π1 ip o k ) ≈⟨  {!!}  ⟩
+            char t < id1 A b , id1 A b > δmono o < f , g >  ≈⟨   eq ⟩
+            ⊤ t o ○ a  ∎
        pf :  f ≈ id1 A b o k
-       pf =  IsPullback.uniqueness (Pullback.isPullback ip ) k < f , g >  (○  a) eq {!!} (IsCCC.e2 isCCC)
+       pf =  {!!} -- IsPullback.uniqueness (Pullback.isPullback ip ) k  (Pullback.π1 ip o k )  (○  a) p0 refl-hom (IsCCC.e2 isCCC)
        p2 :  < f , g > ≈ ( < id1 A b , id1 A b > o k )
        p2 = begin
             < f , g >   ≈⟨  IsCCC.π-cong isCCC  pf {!!} ⟩
--- a/src/cat-utility.agda	Tue Mar 02 09:48:12 2021 +0900
+++ b/src/cat-utility.agda	Tue Mar 02 17:56:31 2021 +0900
@@ -22,6 +22,36 @@
                  iso→  :  C [ C [ ≅← o ≅→  ] ≈  id1 C x ]
                  iso←  :  C [ C [ ≅→ o ≅←  ] ≈  id1 C y ]
 
+        record IsoR  {c₁ c₂ ℓ : Level} (C : Category c₁ c₂ ℓ)
+                 {a b c : Obj C }
+                 ( f :  Hom C a b )
+                 ( g :  Hom C a c )
+                : Set ( suc  (c₁ ⊔ c₂ ⊔ ℓ ⊔ c₁)) where
+           field
+                 iso-R   : Iso C b c
+                 iso≈R  :  C [ C [ Iso.≅→ iso-R  o f  ] ≈  g ]
+           R≈iso  :  C [ C [ Iso.≅← iso-R o g ] ≈  f ]
+           R≈iso  = begin  Iso.≅← iso-R o g ≈↑⟨ cdr iso≈R ⟩
+                Iso.≅← iso-R  o (Iso.≅→ iso-R o f) ≈⟨ assoc ⟩
+                (Iso.≅← iso-R  o Iso.≅→ iso-R ) o f ≈⟨ car (Iso.iso→ iso-R ) ⟩
+                id1 C _  o f  ≈⟨ idL ⟩
+                f ∎  where open ≈-Reasoning C
+
+        record IsoL  {c₁ c₂ ℓ : Level} (C : Category c₁ c₂ ℓ)
+                 {a b c : Obj C }
+                 ( f :  Hom C b a )
+                 ( g :  Hom C c a )
+                : Set ( suc  (c₁ ⊔ c₂ ⊔ ℓ ⊔ c₁)) where
+           field
+                 iso-L   : Iso C b c
+                 iso≈L  :  C [ C [ f o Iso.≅← iso-L ] ≈  g ]
+           L≈iso  :  C [ C [ g o Iso.≅→ iso-L ] ≈  f ]
+           L≈iso  = begin  g o Iso.≅→ iso-L ≈↑⟨ car iso≈L ⟩
+                (f o Iso.≅← iso-L ) o Iso.≅→ iso-L ≈↑⟨ assoc ⟩
+                f  o (Iso.≅← iso-L  o Iso.≅→ iso-L ) ≈⟨ cdr (Iso.iso→ iso-L ) ⟩
+                f  o id1 C _ ≈⟨ idR ⟩
+                f ∎  where open ≈-Reasoning C
+
 
         record IsUniversalMapping  {c₁ c₂ ℓ c₁' c₂' ℓ' : Level} (A : Category c₁ c₂ ℓ) (B : Category c₁' c₂' ℓ')
                          ( U : Functor B A )