changeset 417:1e76e611d454

with inv-f, distribution law passed.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 24 Mar 2016 01:48:13 +0900
parents e4a2544d468c
children 7091104a8cb4
files limit-to.agda
diffstat 1 files changed, 279 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- a/limit-to.agda	Wed Mar 23 22:47:32 2016 +0900
+++ b/limit-to.agda	Thu Mar 24 01:48:13 2016 +0900
@@ -7,7 +7,6 @@
 open import HomReasoning
 open import Relation.Binary.Core
 open import Data.Maybe
-open import maybeCat
 open Functor
 
 
@@ -28,31 +27,230 @@
    t0 : TwoObject
    t1 : TwoObject
 
+data Arrow {c₁ c₂ : Level } ( t00 t11 :  TwoObject {c₁} ) : TwoObject {c₁}  -> TwoObject {c₁} -> Set c₂ where
+   id-t0 : Arrow t00 t11 t00 t00
+   id-t1 : Arrow t00 t11 t11 t11
+   arrow-f :  Arrow t00 t11 t00 t11
+   arrow-g :  Arrow t00 t11 t00 t11
+   inv-f :  Arrow t00 t11 t11 t00
 
-record TwoCat  {ℓ c₁ c₂ : Level  } (A : Category  c₁ c₂ ℓ)  ( a b : Obj A ) ( f g : Hom A a b ): Set  (c₂ ⊔ c₁ ⊔ ℓ)  where
-    field
-         obj→ : Obj A  -> TwoObject  { c₁}
-         hom→ : {a b : Obj A} -> Hom A a b -> TwoObject { c₁}
-         inv : {a b : Obj A} -> Hom A a b -> Hom A b a
-         iso→ : {a b : Obj A} -> ( h : Hom A a b ) -> A [ A [ inv h o h ]  ≈  id1 A a ]
-         iso← : {a b : Obj A} -> ( h : Hom A a b ) -> A [ A [ h o inv h ]  ≈  id1 A b ]
-    obj← : TwoObject  {c₁} -> Obj A  
-    obj←  t0 = a
-    obj←  t1 = b
-    hom← :  TwoObject  {c₁} -> Hom A a b 
-    hom← t0 = f
-    hom← t1 = g
+record TwoHom {c₁ c₂ : Level} (a b : TwoObject {c₁}  ) : Set   c₂ where
+   field
+       RawHom   :   Maybe ( Arrow {c₁} {c₂} t0 t1 a b )
+
+open TwoHom
+
+hom :  ∀{ c₁ c₂ }  {  a b : TwoObject  {c₁} } -> 
+       ∀ (f :  TwoHom {c₁}  {c₂ } a b ) → Maybe ( Arrow {c₁} {c₂} t0 t1 a b )
+hom {_} {_} {a} {b} f with RawHom  f
+hom {_} {_} {t0} {t0} _ | just id-t0 = just id-t0
+hom {_} {_} {t1} {t1} _ | just id-t1 = just id-t1
+hom {_} {_} {t0} {t1} _ | just arrow-f = just arrow-f
+hom {_} {_} {t0} {t1} _ | just arrow-g = just arrow-g
+hom {_} {_} {t1} {t0} _ | just inv-f = just inv-f
+hom {_} {_} {_ } {_ } _ | _ = nothing
+
+
+open TwoHom
+
+-- arrow composition
+
+
+_×_ :  ∀ {c₁  c₂}  -> {a b c : TwoObject {c₁}} →  ( TwoHom {c₁}  {c₂} b c ) →  ( TwoHom {c₁} {c₂} a b )  →  ( TwoHom {c₁}  {c₂} a c )
+_×_  {c₁}  {c₂}  {a} {b} {c} f g with hom f | hom g
+_×_  {_}  {_}  {_} {_} {_} f g | nothing    | _                = record { RawHom =  nothing }
+_×_  {_}  {_}  {_} {_} {_} f g | just _     | nothing          = record { RawHom =  nothing }
+_×_  {_}  {_}  {t0} {t1} {t1} f g | just id-t1 | just arrow-f  = record { RawHom =  just arrow-f }
+_×_  {_}  {_}  {t0} {t1} {t1} f g | just id-t1 | just arrow-g  = record { RawHom =  just arrow-g }
+_×_  {_}  {_}  {t1} {t1} {t1} f g | just id-t1 | just id-t1    = record { RawHom =  just id-t1 }
+_×_  {_}  {_}  {t1} {t1} {t0} f g | just inv-f | just id-t1    = record { RawHom =  just inv-f }
+_×_  {_}  {_}  {t0} {t0} {t1} f g | just arrow-f | just id-t0    = record { RawHom =  just arrow-f }
+_×_  {_}  {_}  {t0} {t0} {t1} f g | just arrow-g | just id-t0    = record { RawHom =  just arrow-g }
+_×_  {_}  {_}  {t0} {t0} {t0} f g | just id-t0 | just id-t0    = record { RawHom =  just id-t0 }
+_×_  {_}  {_}  {t1} {t0} {t0} f g | just id-t0 | just inv-f    = record { RawHom =  just inv-f }
+_×_  {_}  {_}  {_} {_} {_} f g | just _ | just _   = record { RawHom =  nothing }
+
+
+_==_ :  ∀{ c₁ c₂ a b }   ->  Rel (Maybe (Arrow {c₁} {c₂} t0 t1 a b )) (c₂)
+_==_   =  Eq   _≡_
 
-open TwoCat
+map2hom :  ∀{ c₁ c₂ } ->  {a b  : TwoObject {c₁}} →  Maybe ( Arrow  {c₁} {c₂} t0 t1 a b ) ->  TwoHom {c₁}  {c₂ } a b
+map2hom {_} {_} {t1} {t1} (just id-t1)  = record { RawHom =  just id-t1 }
+map2hom {_} {_} {t0} {t1} (just arrow-f) = record { RawHom =  just arrow-f }
+map2hom {_} {_} {t0} {t1} (just arrow-g) = record { RawHom =  just arrow-g }
+map2hom {_} {_} {t0} {t0} (just id-t0)   = record { RawHom =  just id-t0 }
+map2hom {_} {_} {_} {_} _       = record { RawHom =  nothing }
+
+record TwoHom1 {c₁ c₂ : Level}  (a : TwoObject {c₁}  ) (b : TwoObject {c₁}  ) : Set   c₂ where
+   field
+       Map       :   TwoHom {c₁}  {c₂ } a b
+       iso-Map   :   Map ≡  map2hom ( hom Map )
+
+==refl :  ∀{  c₁ c₂ a b }  ->  ∀ {x : Maybe (Arrow  {c₁} {c₂} t0 t1 a b )} → x == x
+==refl {_} {_} {_} {_} {just x}  = just refl
+==refl {_} {_} {_} {_} {nothing} = nothing
+
+==sym :  ∀{  c₁ c₂ a b }   -> ∀ {x y :  Maybe (Arrow  {c₁}  {c₂} t0 t1 a b )} → _==_ x  y → _==_ y  x
+==sym (just x≈y) = just (≡-sym x≈y)
+==sym nothing    = nothing
+
+==trans :  ∀{  c₁ c₂ a b }   -> ∀ {x y z :   Maybe (Arrow  {c₁}  {c₂} t0 t1 a b )  } →
+         x == y → y == z  → x == z
+==trans (just x≈y) (just y≈z) = just (≡-trans x≈y y≈z)
+==trans nothing    nothing    = nothing
+
+
+module ==-Reasoning {c₁ c₂ : Level} where
+
+        infixr  2 _∎
+        infixr 2 _==⟨_⟩_ _==⟨⟩_
+        infix  1 begin_
+
+
+        data _IsRelatedTo_   {c₁ c₂ : Level}  {a b : TwoObject {c₁}  }  (x y : (Maybe (Arrow  {c₁}  {c₂} t0 t1 a b ))) :
+                             Set  c₂ where
+            relTo : (x≈y : x  == y  ) → x IsRelatedTo y
+
+        begin_ :  { a b : TwoObject  {c₁} } {x : Maybe (Arrow  {c₁}  {c₂} t0 t1 a b ) } {y : Maybe (Arrow  {c₁}  {c₂} t0 t1 a b )} →
+                   x IsRelatedTo y →  x ==  y
+        begin relTo x≈y = x≈y
+
+        _==⟨_⟩_ :  { a b : TwoObject  {c₁} } (x :  Maybe (Arrow  {c₁}  {c₂} t0 t1 a b )) {y z :  Maybe (Arrow  {c₁}  {c₂} t0 t1 a b ) } →
+                    x == y  → y IsRelatedTo z → x IsRelatedTo z
+        _ ==⟨ x≈y ⟩ relTo y≈z = relTo (==trans x≈y y≈z)
+
+        _==⟨⟩_ :   { a b : TwoObject  {c₁} }(x : Maybe (Arrow  {c₁}  {c₂} t0 t1 a b )) {y : Maybe (Arrow  {c₁}  {c₂} t0 t1 a b  )}
+                    → x IsRelatedTo y → x IsRelatedTo y
+        _ ==⟨⟩ x≈y = x≈y
+
+        _∎ :   { a b : TwoObject  {c₁} }(x :  Maybe (Arrow  {c₁}  {c₂} t0 t1 a b )) → x IsRelatedTo x
+        _∎ _ = relTo ==refl
+
 
 
-open MaybeHom
+--          f    g    h
+--       d <- c <- b <- a
+
+assoc-× :   {c₁  c₂ : Level } {a b c d : TwoObject  {c₁} }
+       {f : (TwoHom {c₁}  {c₂ } c d )} →
+       {g : (TwoHom {c₁}  {c₂ } b c )} →
+       {h : (TwoHom {c₁}  {c₂ } a b )} →
+       hom ( f × (g × h)) == hom ((f × g) × h )
+assoc-× {c₁} {c₂} {a} {b} {c} {d} {f} {g} {h} with  hom f | hom g | hom h
+assoc-× {c₁} {c₂} {t0} {t0} {t0} {t0} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t0} {t0} {t1} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t0} {t1} {t0} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t0} {t1} {t1} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t1} {t0} {t0} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t1} {t0} {t1} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t1} {t1} {t0} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t1} {t1} {t1} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t0} {t0} {t0} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t0} {t0} {t1} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t0} {t1} {t0} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t0} {t1} {t1} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t1} {t0} {t0} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t1} {t0} {t1} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t1} {t1} {t0} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t1} {t1} {t1} {f} {g} {h} | nothing | _ | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t0} {t0} {t0} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t0} {t0} {t1} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t0} {t1} {t0} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t0} {t1} {t1} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t1} {t0} {t0} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t1} {t0} {t1} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t1} {t1} {t0} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t1} {t1} {t1} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t0} {t0} {t0} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t0} {t0} {t1} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t0} {t1} {t0} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t0} {t1} {t1} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t1} {t0} {t0} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t1} {t0} {t1} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t1} {t1} {t0} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t1} {t1} {t1} {t1} {f} {g} {h} | just _ | nothing | _ = nothing
+assoc-× {c₁} {c₂} {t0} {t0} {t0} {t0} {f} {g} {h} | just id-t0   | just id-t0   | just id-t0  = ==refl
+assoc-× {c₁} {c₂} {t0} {t0} {t0} {t1} {f} {g} {h} | just arrow-f | just id-t0   | just id-t0  = ==refl
+assoc-× {c₁} {c₂} {t0} {t0} {t0} {t1} {f} {g} {h} | just arrow-g | just id-t0   | just id-t0  = ==refl
+assoc-× {c₁} {c₂} {t0} {t0} {t1} {t1} {f} {g} {h} | just id-t1   | just arrow-f | just id-t0  = ==refl
+assoc-× {c₁} {c₂} {t0} {t0} {t1} {t1} {f} {g} {h} | just id-t1   | just arrow-g | just id-t0  = ==refl
+assoc-× {c₁} {c₂} {t0} {t1} {t1} {t1} {f} {g} {h} | just id-t1   | just id-t1   | just arrow-f = ==refl
+assoc-× {c₁} {c₂} {t0} {t1} {t1} {t1} {f} {g} {h} | just id-t1   | just id-t1   | just arrow-g = ==refl
+assoc-× {c₁} {c₂} {t1} {t1} {t1} {t1} {f} {g} {h} | just id-t1   | just id-t1   | just id-t1  = ==refl
+--  remaining all failure case
+assoc-× {c₁} {c₂} {a} {b} {c} {d} {f} {g} {h} | just _ | just _ | nothing = {!!}
+assoc-× {c₁} {c₂} {t1} {t0} {_} {_} {f} {g} {h} | just _   | just _   | just _  = let open ==-Reasoning  {c₁}  {c₂} in
+                begin
+                   {!!}
+                ==⟨ {!!}  ⟩
+                  {!!}
+                ∎
+... | just _ | just _ | just _ =  let open ==-Reasoning  {c₁}  {c₂} in
+                begin
+                   {!!}
+                ==⟨ {!!}  ⟩
+                  {!!}
+                ∎
 
 
-indexFunctor :  {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) ( a b : Obj A) ( f g : Hom A a b ) ->  
-    TwoCat A a b f g ->
-    Functor A (MaybeCat A )
-indexFunctor  {c₁} {c₂} {ℓ} A  a b f g two = record {
+TwoId :  {c₁  c₂ : Level } (a : TwoObject  {c₁} ) ->  (TwoHom {c₁}  {c₂ } a a )
+TwoId {_} {_} t0 = record { RawHom =  just id-t0 }
+TwoId {_} {_} t1 = record { RawHom =  just id-t1 }
+
+open import maybeCat
+
+--        identityL  {c₁}  {c₂}  {_} {b} {nothing}  =   let open ==-Reasoning  {c₁}  {c₂} in
+--                begin
+--                   (TwoId b × nothing)
+--                ==⟨ {!!}  ⟩
+--                  nothing
+--                ∎
+
+open import Relation.Binary
+TwoCat : {c₁ c₂ ℓ : Level  } ->  Category   c₁  c₂  c₂
+TwoCat   {c₁}  {c₂} {ℓ} = record {
+    Obj  = TwoObject  {c₁} ;
+    Hom = λ a b →    ( TwoHom {c₁}  {c₂ } a b ) ;
+    _o_ =  \{a} {b} {c} x y -> _×_ {c₁ } { c₂} {a} {b} {c} x y ;
+    _≈_ =  \x y -> hom x == hom y ;
+    Id  =  \{a} -> TwoId {c₁ } { c₂} a ;
+    isCategory  = record {
+            isEquivalence =  record {refl = ==refl ; trans = ==trans ; sym = ==sym } ;
+            identityL  = \{a b f} -> identityL {c₁}  {c₂ } {a} {b} {f} ;
+            identityR  = \{a b f} -> identityR {c₁}  {c₂ } {a} {b} {f} ;
+            o-resp-≈  = \{a b c f g h i} ->  o-resp-≈  {c₁}  {c₂ } {a} {b} {c} {f} {g} {h} {i} ;
+            associative  = \{a b c d f g h } -> assoc-×   {c₁}  {c₂} {a} {b} {c} {d} {f} {g} {h}
+       }
+   }  where
+        identityL :  {c₁  c₂ : Level } {A B : TwoObject {c₁}} {f : ( TwoHom {c₁}  {c₂ } A B) } →  hom ((TwoId B)  × f)  == hom f
+        identityL  {c₁}  {c₂}  {_} {_} {f}  with hom f
+        identityL  {c₁}  {c₂}  {t0} {t0} {_} | nothing  = nothing
+        identityL  {c₁}  {c₂}  {t0} {t1} {_} | nothing  = nothing
+        identityL  {c₁}  {c₂}  {t1} {t0} {_} | nothing  = nothing
+        identityL  {c₁}  {c₂}  {t1} {t1} {_} | nothing  = nothing
+        identityL  {c₁}  {c₂}  {t1} {t0} {_} | just inv-f  = ==refl
+        identityL  {c₁}  {c₂}  {t1} {t1} {_} | just id-t1  = ==refl
+        identityL  {c₁}  {c₂}  {t0} {t0} {_} | just id-t0 = ==refl
+        identityL  {c₁}  {c₂}  {t0} {t1} {_} | just arrow-f = ==refl
+        identityL  {c₁}  {c₂}  {t0} {t1} {_} | just arrow-g = ==refl
+        identityR :  {c₁  c₂ : Level } {A B : TwoObject {c₁}} {f : ( TwoHom {c₁}  {c₂ } A B) } →   hom ( f × TwoId A )  == hom f
+        identityR  {c₁}  {c₂}  {_} {_} {f}  with hom f
+        identityR  {c₁}  {c₂}  {t0} {t0} {_} | nothing  = nothing
+        identityR  {c₁}  {c₂}  {t0} {t1} {_} | nothing  = nothing
+        identityR  {c₁}  {c₂}  {t1} {t0} {_} | nothing  = nothing
+        identityR  {c₁}  {c₂}  {t1} {t1} {_} | nothing  = nothing
+        identityR  {c₁}  {c₂}  {t1} {t0} {_} | just inv-f  = ==refl
+        identityR  {c₁}  {c₂}  {t1} {t1} {_} | just id-t1  = ==refl
+        identityR  {c₁}  {c₂}  {t0} {t0} {_} | just id-t0 = ==refl
+        identityR  {c₁}  {c₂}  {t0} {t1} {_} | just arrow-f = ==refl
+        identityR  {c₁}  {c₂}  {t0} {t1} {_} | just arrow-g = ==refl
+        o-resp-≈ :  {c₁  c₂ : Level } {A B C : TwoObject  {c₁} } {f g :  ( TwoHom {c₁}  {c₂ } A B)} {h i : ( TwoHom B C)} →
+            hom f == hom g → hom h == hom i → hom ( h × f ) == hom ( i × g )
+        o-resp-≈  {_} {_} {a} {b} {c} {f} {g} {h} {i}  f≡g h≡i  = {!!}
+
+
+indexFunctor :  {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) ( a b : Obj (MaybeCat A )) ( f g : Hom A a b ) ->  Functor (TwoCat {c₁} {c₂} {c₂} ) (MaybeCat A )
+indexFunctor  {c₁} {c₂} {ℓ} A  a b f g = record {
          FObj = λ a → fobj a
        ; FMap = λ {a} {b} f → fmap {a} {b} f
        ; isFunctor = record {
@@ -61,39 +259,66 @@
              ; ≈-cong = \ {a} {b} {c} {f}   -> ≈-cong  {a} {b} {c} {f}
        }
       } where
+          I = TwoCat  {c₁} {c₂} {ℓ}
           MA = MaybeCat A
           open ≈-Reasoning (MA)
-          fobj :  Obj A -> Obj A
-          fobj x with obj→ two x
-          fobj _ | t0 = a
-          fobj _ | t1 = b
-          fmap :  {x y : Obj A } ->  (Hom A  x y  ) -> Hom MA (fobj x) (fobj y)
-          fmap  {x} {y} h with  obj→ two x |  obj→ two y | hom→ two f
-          fmap  {_} {_} h | t0 | t1 | t0 = record { hom = just f }
-          fmap  {_} {_} h | t0 | t1 | t1 = record { hom = just g }
-          fmap  {_} {_} h | t1 | t0 | t0 = record { hom = just (inv two f) }
-          fmap  {_} {_} h | t1 | t0 | t1 = record { hom = just (inv two g) }
-          fmap  {x} {_} h | t0 | t0 | _ = id1 MA ( obj←  two t0 )
-          fmap  {x} {_} h | t1 | t1 | _ = id1 MA ( obj←  two t1 )
-          identity :  {x : Obj A} → MA [ fmap ( id1 A x  )  ≈  id1 MA ( fobj x )  ]
-          identity {x} with  obj→ two x
-          identity | t0  = refl-hom 
-          identity | t1  = refl-hom 
-          distr1 : {a₁ : Obj A} {b₁ : Obj A} {c : Obj A} {f₁ : Hom A a₁ b₁} {g₁ : Hom A b₁ c} →  
-                MA [ fmap (A [ g₁ o f₁ ]) ≈  MA [ fmap g₁ o fmap f₁ ] ]
-          distr1 {a1} {b1} {c} {f1} {g1} with  obj→ two a1 |  obj→ two b1  | obj→ two c | hom→ two f | hom→ two g 
-          distr1 {a1} {b1} {c} {f1} {g1} |  t0 | t0 | t0 | _ | _ =  {!!}
-          distr1 {a1} {b1} {c} {f1} {g1} |  t0 | t0 | t1 | _ | _ =  {!!}
-          distr1 {a1} {b1} {c} {f1} {g1} |  t0 | t1 | t1 | _ | _ =  {!!}
-          distr1 {a1} {b1} {c} {f1} {g1} |  t1 | t1 | t1 | _ | _ =  {!!}
-          distr1 {a1} {b1} {c} {f1} {g1} |  t1 | t0 | t0 | _ | _ =  {!!}
-          distr1 {a1} {b1} {c} {f1} {g1} |  t1 | t1 | t0 | _ | _ =  {!!}
-          -- next  two cases require the inverse of f and g
-          -- if we add invserse, there no nothing part, it generates extra commutaivitiy in nat, which is no good
-          --    so A [ g o  f ] should be nothing in codomain Category
-          distr1 {a1} {b1} {c} {f1} {g1} |  t1 | t0 | t1 | _ | _ =  {!!}
-          distr1 {a1} {b1} {c} {f1} {g1} |  t0 | t1 | t0 | _ | _ =  {!!}
-          ≈-cong :   {a : Obj A} {b : Obj A} {f g : Hom A a b}  → _[_≈_] A f g → {!!}
+          fobj :  Obj I -> Obj A
+          fobj t0 = a
+          fobj t1 = b
+          fmap :  {x y : Obj I } ->  (TwoHom {c₁}  {c₂} x y  ) -> Hom MA (fobj x) (fobj y)
+          fmap  {x} {y} h with hom h
+          fmap  {t0} {t0} h | just id-t0 = id1 MA a
+          fmap  {t1} {t1} h | just id-t1 = id1 MA b
+          fmap  {t0} {t1} h | just arrow-f = record { hom = just f }
+          fmap  {t0} {t1} h | just arrow-g = record { hom = just g }
+          fmap  {_} {_} h | _  = record { hom = nothing }
+          identity :  {x : Obj I} → MA [ fmap ( id1 I x ) ≈  id1 MA (fobj x) ]
+          identity {t0}  =  refl-hom
+          identity {t1}  =  refl-hom
+          distr1 : {a₁ : Obj I} {b₁ : Obj I} {c : Obj I} {f₁ : Hom I a₁ b₁} {g₁ : Hom I b₁ c} → 
+               MA [ fmap (I [ g₁ o f₁ ])  ≈  MA [ fmap g₁ o fmap f₁ ] ]
+          distr1 {a1} {b1} {c1} {f1} {g1}   with hom g1 | hom f1
+          distr1 {t0} {t0} {t0} {f1} {g1} | nothing | nothing   =  nothing
+          distr1 {t0} {t0} {t1} {f1} {g1} | nothing | nothing   =  nothing
+          distr1 {t0} {t1} {t0} {f1} {g1} | nothing | nothing   =  nothing
+          distr1 {t0} {t1} {t1} {f1} {g1} | nothing | nothing   =  nothing
+          distr1 {t1} {t0} {t0} {f1} {g1} | nothing | nothing   =  nothing
+          distr1 {t1} {t0} {t1} {f1} {g1} | nothing | nothing   =  nothing
+          distr1 {t1} {t1} {t0} {f1} {g1} | nothing | nothing   =  nothing
+          distr1 {t1} {t1} {t1} {f1} {g1} | nothing | nothing   =  nothing
+          distr1 {t0} {t0} {t0} {f1} {g1} | nothing | just id-t0   =  nothing
+          distr1 {t0} {t0} {t1} {f1} {g1} | nothing | just id-t0   =  nothing
+          distr1 {t1} {t1} {t0} {f1} {g1} | nothing | just id-t1   =  nothing
+          distr1 {t1} {t1} {t1} {f1} {g1} | nothing | just id-t1   =  nothing
+          distr1 {t0} {t1} {t1} {f1} {g1} | nothing | just arrow-f   =  nothing
+          distr1 {t0} {t1} {t0} {f1} {g1} | nothing | just arrow-f   =  nothing
+          distr1 {t0} {t1} {t1} {f1} {g1} | nothing | just arrow-g   =  nothing
+          distr1 {t0} {t1} {t0} {f1} {g1} | nothing | just arrow-g   =  nothing
+          distr1 {t1} {t0} {t0} {f1} {g1} | nothing | just inv-f   =  nothing
+          distr1 {t1} {t0} {t1} {f1} {g1} | nothing | just inv-f   =  nothing
+          distr1 {t0} {t0} {t0} {f1} {g1} | just id-t0 | nothing    = nothing
+          distr1 {t1} {t0} {t0} {f1} {g1} | just id-t0 | nothing    = nothing
+          distr1 {t0} {t1} {t1} {f1} {g1} | just id-t1 | nothing    = nothing
+          distr1 {t1} {t1} {t1} {f1} {g1} | just id-t1 | nothing    = nothing
+          distr1 {t0} {t0} {t1} {f1} {g1} | just arrow-f | nothing    = nothing
+          distr1 {t1} {t0} {t1} {f1} {g1} | just arrow-f | nothing    = nothing
+          distr1 {t0} {t0} {t1} {f1} {g1} | just arrow-g | nothing    = nothing
+          distr1 {t1} {t0} {t1} {f1} {g1} | just arrow-g | nothing    = nothing
+          distr1 {t0} {t1} {t0} {f1} {g1} | just inv-f | nothing    = nothing
+          distr1 {t1} {t1} {t0} {f1} {g1} | just inv-f | nothing    = nothing
+          distr1 {t0} {t0} {t0} {f1} {g1} | just id-t0 | just id-t0   = sym idL
+          distr1 {t1} {t0} {t0} {f1} {g1} | just id-t0 | just inv-f   = sym idL
+          distr1 {t0} {t0} {t1} {f1} {g1} | just arrow-f | just id-t0   = sym idR
+          distr1 {t0} {t0} {t1} {f1} {g1} | just arrow-g | just id-t0   = sym idR
+          distr1 {t1} {t1} {t1} {f1} {g1} | just id-t1 | just id-t1   = sym idL
+          distr1 {t0} {t1} {t1} {f1} {g1} | just id-t1 | just arrow-f   = sym idL
+          distr1 {t0} {t1} {t1} {f1} {g1} | just id-t1 | just arrow-g   = sym idL
+          distr1 {t1} {t1} {t0} {f1} {g1} | just inv-f | just id-t1   = sym idL
+          distr1 {t0} {t1} {t0} {_} {_} | (just inv-f) | (just _) = nothing
+          distr1 {t1} {t0} {t1} {_} {_} | (just arrow-f) |  (just _) = nothing
+          distr1 {t1} {t0} {t1} {_} {_} | (just arrow-g) |  (just _) = nothing
+
+          ≈-cong :   {a : Obj I} {b : Obj I} {f g : Hom I a b}  → _[_≈_] I f g → {!!}
           ≈-cong   {_} {_} {f1} {g1} f≈g = {!!}
 
 
@@ -119,9 +344,9 @@
         fe=ge =  fe=ge
         ; k = λ {d} h fh=gh → k {d} h fh=gh
         ; ek=h = λ {d} {h} {fh=gh} → ek=h d h fh=gh
-        ; uniqueness = λ {d} {h} {fh=gh} {k'} → uniquness d h fh=gh k' } where
-         I = A
-         MA = MaybeCat A
+        ; uniqueness = λ {d} {h} {fh=gh} {k'} → uniquness d h fh=gh k'
+     } where
+         I = TwoCat {c₁} {c₂} {ℓ }
          Γ = {!!}
          nmap :  (x : Obj I) ( d : Obj A ) (h : Hom A d a ) -> Hom A (FObj (K A I d) x) (FObj Γ x)
          nmap x d h = {!!}