changeset 487:c257347a27f3

found limit in freyd isLimit introduced
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 12 Mar 2017 19:46:07 +0900
parents 56cf6581c5f6
children 016087cfa75a
files cat-utility.agda freyd.agda freyd1.agda limit-to.agda pullback.agda
diffstat 5 files changed, 121 insertions(+), 171 deletions(-) [+]
line wrap: on
line diff
--- a/cat-utility.agda	Sun Mar 12 14:48:14 2017 +0900
+++ b/cat-utility.agda	Sun Mar 12 19:46:07 2017 +0900
@@ -302,26 +302,60 @@
           }
 
 
-        record Limit { c₁' c₂' ℓ' : Level} { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) ( I : Category c₁' c₂' ℓ' ) ( Γ : Functor I A )
-               : Set (suc (c₁' ⊔ c₂' ⊔ ℓ' ⊔ c₁ ⊔ c₂ ⊔ ℓ )) where
+        record IsLimit { c₁' c₂' ℓ' : Level} { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) ( I : Category c₁' c₂' ℓ' ) ( Γ : Functor I A )
+             (a0 : Obj A ) (t0 : NTrans I A ( K A I a0 ) Γ  ) : Set (suc (c₁' ⊔ c₂' ⊔ ℓ' ⊔ c₁ ⊔ c₂ ⊔ ℓ )) where
           field
-             a0 : Obj A
-             t0 : NTrans I A ( K A I a0 ) Γ 
              limit :  ( a : Obj A ) → ( t : NTrans I A ( K A I a ) Γ ) → Hom A a a0
              t0f=t :  { a : Obj A } → { t : NTrans I A ( K A I a ) Γ } → ∀ { i : Obj I } →
                  A [ A [ TMap t0 i o  limit a t ]  ≈ TMap t i ]
              limit-uniqueness : { a : Obj A } →  { t : NTrans I A ( K A I a ) Γ } → ( f : Hom A a a0 ) → ( ∀ { i : Obj I } →
                  A [ A [ TMap t0 i o  f ]  ≈ TMap t i ] ) → A [ limit a t ≈ f ]
 
+        record Limit { c₁' c₂' ℓ' : Level} { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) ( I : Category c₁' c₂' ℓ' ) ( Γ : Functor I A )
+               : Set (suc (c₁' ⊔ c₂' ⊔ ℓ' ⊔ c₁ ⊔ c₂ ⊔ ℓ )) where
+          field
+             a0 : Obj A
+             t0 : NTrans I A ( K A I a0 ) Γ 
+             isLimit : IsLimit A I Γ a0 t0 
+
+        LimitNat : { c₁' c₂' ℓ' : Level} (B : Category c₁' c₂' ℓ') { c₁ c₂ ℓ : Level} ( I : Category c₁ c₂ ℓ ) { c₁'' c₂'' ℓ'' : Level} 
+             ( C : Category c₁'' c₂'' ℓ'' ) 
+             ( Γ : Functor I B )
+             ( lim : Obj B ) ( tb : NTrans I B ( K B I lim ) Γ ) →
+                 ( U : Functor B C)  → NTrans I C ( K C I (FObj U lim) ) (U  ○  Γ)
+        LimitNat B I C Γ lim tb U = record {
+                       TMap  = TMap (Functor*Nat I C U tb) ;
+                       isNTrans = record { commute = λ {a} {b} {f} → let  open ≈-Reasoning (C) in begin
+                             FMap (U ○ Γ) f o TMap (Functor*Nat I C U tb) a
+                         ≈⟨ nat ( Functor*Nat I C U tb ) ⟩
+                             TMap (Functor*Nat I C U tb) b o FMap (U ○ K B I lim) f
+                         ≈⟨ cdr (IsFunctor.identity (isFunctor U) ) ⟩
+                             TMap (Functor*Nat I C U tb) b o FMap (K C I (FObj U lim)) f
+                         ∎
+                       } }
+
+        open Limit
+        record LimitPreserve { c₁' c₂' ℓ' : Level} { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) ( I : Category c₁' c₂' ℓ' ) 
+             { c₁'' c₂'' ℓ'' : Level} ( C : Category c₁'' c₂'' ℓ'' ) 
+              (G : Functor A C) : Set (suc (c₁' ⊔ c₂' ⊔ ℓ' ⊔ c₁ ⊔ c₂ ⊔ ℓ ⊔ c₁'' ⊔ c₂'' ⊔ ℓ'' )) where
+          field
+             preserve :  ( Γ : Functor I A ) → ( limita : Limit A I Γ  ) → 
+                   IsLimit C I (G ○ Γ) (FObj G (a0 limita ) ) (LimitNat A I C Γ (a0 limita ) (t0 limita) G )
+          plimit :  ( Γ : Functor I A ) → ( limita : Limit A I Γ  ) →  Limit C I (G  ○ Γ  )
+          plimit Γ limita =  record { a0 = (FObj G (a0 limita ))
+             ; t0 =  LimitNat A I C Γ (a0 limita ) (t0 limita) G
+             ; isLimit = preserve Γ limita }
+
         record CreateLimit { c₁' c₂' ℓ' : Level} { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) ( I : Category c₁' c₂' ℓ' )
                 : Set (suc (c₁' ⊔ c₂' ⊔ ℓ' ⊔ c₁ ⊔ c₂ ⊔ ℓ )) where
           field
-             isLimit :  ( Γ : Functor I A ) -> Limit A I Γ 
+             climit :  ( Γ : Functor I A ) -> Limit A I Γ 
 
         record Complete { c₁' c₂' ℓ' : Level} { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) ( I : Category c₁' c₂' ℓ' )
                 : Set (suc (c₁' ⊔ c₂' ⊔ ℓ' ⊔ c₁ ⊔ c₂ ⊔ ℓ )) where
           field
-             isLimit :  ( Γ : Functor I A ) -> Limit A I Γ 
+             climit :  ( Γ : Functor I A ) -> Limit A I Γ 
+             alimit :  ( Γ : Functor I A ) (a0 : Obj A ) ( t0 : NTrans I A ( K A I a0 ) Γ )  -> IsLimit A I Γ a0 t0
 
              product : (a b : Obj A) -> Obj A
              π1 : (a b : Obj A) -> Hom A (product a b ) a
@@ -333,6 +367,6 @@
              isEqualizer : {a b : Obj A} (f g : Hom A a b)  -> IsEqualizer A (equalizer-e f g) f g
           open Limit
           limit-c :  ( Γ : Functor I A ) -> Obj A
-          limit-c  Γ  = a0 ( isLimit Γ)
+          limit-c  Γ  = a0 ( climit Γ)
           limit-u :  ( Γ : Functor I A ) ->  NTrans I A ( K A I (limit-c Γ )) Γ
-          limit-u  Γ  = t0 ( isLimit Γ)
+          limit-u  Γ  = t0 ( climit Γ)
--- a/freyd.agda	Sun Mar 12 14:48:14 2017 +0900
+++ b/freyd.agda	Sun Mar 12 19:46:07 2017 +0900
@@ -40,6 +40,7 @@
 
 open NTrans
 open Limit
+open IsLimit
 open SmallFullSubcategory
 open PreInitial
 open Complete
@@ -61,7 +62,7 @@
       a00 : Obj A
       a00 = limit-c comp F
       lim : ( Γ : Functor A A ) → Limit A A Γ 
-      lim Γ =  isLimit comp Γ 
+      lim Γ =  climit comp Γ 
       u : NTrans A A (K A A a00) F
       u = t0 ( lim F )
       equ : {a b : Obj A} → (f g : Hom A a b)  → IsEqualizer A (equalizer-e comp f g ) f g
@@ -81,9 +82,9 @@
       e=id  {e} uce=uc =  let open ≈-Reasoning (A) in
             begin
               e
-            ≈↑⟨ limit-uniqueness  (lim F) e ( λ {i} → uce=uc ) ⟩
-              limit (lim F) a00 u 
-            ≈⟨ limit-uniqueness (lim F) (id1 A a00) ( λ {i} → idR ) ⟩
+            ≈↑⟨ limit-uniqueness  (isLimit (lim F)) e ( λ {i} → uce=uc ) ⟩
+              limit (isLimit (lim F)) a00 u 
+            ≈⟨ limit-uniqueness (isLimit (lim F)) (id1 A a00) ( λ {i} → idR ) ⟩
               id1 A a00

       kfuc=uc : {c k1 : Obj A} →  {p : Hom A k1 a00} → A [ A [ TMap u  c  o  
--- a/freyd1.agda	Sun Mar 12 14:48:14 2017 +0900
+++ b/freyd1.agda	Sun Mar 12 19:46:07 2017 +0900
@@ -21,6 +21,7 @@
 open CommaObj
 open CommaHom
 open Limit
+open IsLimit
 
 --  F : A → C
 --  G : A → C
@@ -42,138 +43,42 @@
              id1 A  (obj (FObj Γ x))     

 
-NIA : { I : Category c₁ c₂ ℓ } →   ( Γ : Functor I CommaCategory ) 
-     (c : Obj CommaCategory ) ( ta : NTrans I CommaCategory ( K CommaCategory I c ) Γ )  → NTrans I A ( K A I (obj c) )  (FIA Γ)
-NIA  {I} Γ c ta = record {
-        TMap = λ x → arrow (TMap ta x )
-        ; isNTrans = record { commute = comm1 }
-    }  where
-        comm1 : {a b : Obj I} {f : Hom I a b} → 
-             A [ A [ FMap (FIA Γ) f o arrow (TMap ta a) ] ≈ A [ arrow (TMap ta b) o FMap (K A I (obj c)) f ] ]
-        comm1 {a} {b} {f} = IsNTrans.commute (isNTrans ta )
-
-tb : { c₁' c₂' ℓ' : Level} (B : Category c₁' c₂' ℓ') { c₁ c₂ ℓ : Level} ( I : Category c₁ c₂ ℓ ) ( Γ : Functor I B ) 
-     ( lim : Obj B ) ( tb : NTrans I B ( K B I lim ) Γ ) → 
-         ( U : Functor B C)  → NTrans I C ( K C I (FObj U lim) ) (U  ○  Γ)
-tb B I Γ lim tb U = record {
-               TMap  = TMap (Functor*Nat I C U tb) ; 
-               isNTrans = record { commute = λ {a} {b} {f} → let  open ≈-Reasoning (C) in begin
-                     FMap (U ○ Γ) f o TMap (Functor*Nat I C U tb) a 
-                 ≈⟨ nat ( Functor*Nat I C U tb ) ⟩
-                     TMap (Functor*Nat I C U tb) b o FMap (U ○ K B I lim) f 
-                 ≈⟨ cdr (IsFunctor.identity (isFunctor U) ) ⟩
-                     TMap (Functor*Nat I C U tb) b o FMap (K C I (FObj U lim)) f
-                 ∎
-               } }
-
 FICG : { I : Category c₁ c₂ ℓ } →  ( Γ : Functor I CommaCategory )  → Functor I C
 FICG {I} Γ = G  ○  (FIA Γ)
 
 FICF : { I : Category c₁ c₂ ℓ } →  ( Γ : Functor I CommaCategory )  → Functor I C
 FICF {I} Γ = F  ○  (FIA Γ)
 
-FINAT : { I : Category c₁ c₂ ℓ } →  ( Γ : Functor I CommaCategory ) → NTrans I C (FICF Γ) (FICG Γ)
-FINAT {I} Γ = record {
-       TMap = λ i → tmap i
-     ; isNTrans = record { commute = λ {a} {b} {f} → commute {a} {b} {f} } 
-   } where
-        tmap :  (i : Obj I ) → Hom C (FObj (FICF Γ) i) (FObj (FICG Γ) i)
-        tmap i = hom (FObj Γ i )
-        commute : {a b : Obj I} → {f : Hom I a b} → C [ C [ FMap (FICG Γ) f o tmap a ] ≈ C [ tmap b o FMap (FICF Γ) f ] ]
-        commute {a} {b} {f} = comm ( FMap Γ f )
-
-revΓ : { I : Category c₁ c₂ ℓ } →  ( Γ : Functor I CommaCategory )  → Functor I CommaCategory 
-revΓ {I} Γ = record {
-  FObj = λ x → record {
-          obj = obj ( FObj Γ x )
-        ; hom = TMap (FINAT Γ) x
-     }
-  ; FMap = λ {a} {b} f →  record {
-            arrow = arrow ( FMap Γ f )
-          ; comm = IsNTrans.commute ( isNTrans (FINAT Γ) )
-      }
-  ; isFunctor = record {
-             identity = IsFunctor.identity ( isFunctor Γ )
-             ; distr = IsFunctor.distr ( isFunctor Γ )
-             ; ≈-cong = IsFunctor.≈-cong ( isFunctor Γ )
-          }} where
-
-NIC : { I : Category c₁ c₂ ℓ } →   ( Γ : Functor I CommaCategory ) 
-     (c : Obj CommaCategory ) ( ta : NTrans I A ( K A I (obj c) ) (FIA Γ) )  → NTrans I C ( K C I (FObj G (obj c)) ) (G ○ ( FIA Γ) )
-NIC  {I} Γ c ta = tb A I (FIA Γ) (obj c) ta G
+open LimitPreserve
 
 LimitC : { I : Category c₁ c₂ ℓ } → ( comp : Complete A I ) 
-    → ( glimit :  ( Γ : Functor I A ) 
-         → ( limita : Limit A I Γ  ) → Limit C I (G ○ Γ) ) 
     → ( Γ : Functor I CommaCategory ) 
+    → ( glimit :  LimitPreserve A I  C G )
     → Limit C I (FICG Γ) 
-LimitC  {I} comp glimit Γ = glimit (FIA Γ) (isLimit comp (FIA Γ))
-
-revLimitC : { I : Category c₁ c₂ ℓ } → ( comp : Complete A I ) 
-    → ( glimit :  ( Γ : Functor I A ) 
-         → ( limita : Limit A I Γ  ) → Limit C I (G ○ Γ) ) 
-    → ( Γ : Functor I CommaCategory ) 
-    → Limit C I ( G  ○ (FIA (revΓ Γ) )) 
-revLimitC  {I} comp glimit Γ = glimit (FIA (revΓ Γ)) (isLimit comp (FIA (revΓ Γ )))
-
-
-a0F : ( I : Category c₁ c₂ ℓ ) →  (a1 : Obj A) → Functor I A 
-a0F  I a1 =  record {
-  FObj = λ x →  a1
-  ; FMap = λ {a} {b} f →  id1 A a1
-  ; isFunctor = record {
-             identity = let  open ≈-Reasoning (A) in refl-hom
-             ; distr =  let  open ≈-Reasoning (A) in ( sym idL )
-             ; ≈-cong = λ _ →  let  open ≈-Reasoning (A) in refl-hom
-          }} where
-
-t0F :  ( I : Category c₁ c₂ ℓ ) →  (a1 : Obj A ) 
-    → NTrans I A (K A I a1 ) (a0F I a1 )
-t0F  I a1  = record {
-     TMap = λ i → id1 A a1 
-     ; isNTrans = record { commute = λ {a b f} → commute {a} {b} {f} }
-  } where
-      commute : {a b : Obj I} {f : Hom I a b} → A [
-        A [ FMap (a0F I a1  ) f o id1 A a1 ] ≈
-        A [ id1 A a1 o FMap (K A I a1) f ] ]
-      commute {a} {b} {f} =   let  open ≈-Reasoning (A) in begin
-              FMap (a0F I a1 ) f o id1 A a1
-         ≈⟨ idR ⟩
-              FMap (a0F I a1  ) f 
-         ≈⟨⟩
-              id1 A a1
-         ≈⟨⟩
-              FMap (K A I a1) f 
-         ≈↑⟨ idL ⟩
-              id1 A a1 o FMap (K A I a1) f 
-         ∎
-
-hoge :  ( a : Obj A ) →   ( I : Category c₁ c₂ ℓ ) → (comp : Complete A I ) → ∀ { i : Obj I } →  
-     A [ A [ TMap ( limit-u comp (a0F I a)) i o  limit (isLimit comp (a0F I a)) a (t0F I a) ]  ≈ id1 A a ]
-hoge a I comp {i} = t0f=t (isLimit comp (a0F I a)) 
-
+LimitC  {I} comp Γ glimit  = plimit glimit (FIA Γ) (climit comp (FIA Γ))
 
 commaLimit :  { I : Category c₁ c₂ ℓ } →  ( Complete A I) →  ( Γ : Functor I CommaCategory )  
-     → ( glimit :  ( Γ : Functor I A ) → ( limita : Limit A I Γ ) → Limit C I (G ○ Γ) )
-     →  Obj CommaCategory
+    → ( glimit :  LimitPreserve A I C G )
+    →  Obj CommaCategory
 commaLimit {I} comp Γ glimit = record {
       obj = limit-c  comp (FIA Γ)
       ; hom = limitHom
    } where
        frev : {i : Obj I } → Hom A (limit-c comp (FIA Γ)) (obj (FObj Γ i))
-       frev {i} = TMap (t0 ( isLimit comp (FIA Γ)))  i
+       frev {i} = TMap (t0 ( climit comp (FIA Γ)))  i
+       commute : {a b : Obj I} {f : Hom I a b} →
+              C [ C [ FMap (FICG Γ) f o C [ hom (FObj Γ a) o FMap F frev ] ] 
+            ≈ C [ C [ hom (FObj Γ b) o FMap F frev ] o FMap (K C I (FObj F (limit-c comp (FIA Γ)))) f ] ]
+       commute  {a} {b} {f} = ?
        tu : NTrans I C (K C I (FObj F (limit-c comp (FIA Γ)))) (FICG Γ)
        tu  = record {
               TMap  = λ i →  C [ hom ( FObj Γ i ) o  FMap F frev ]
-            ; isNTrans = {!!}
+            ; isNTrans = record { commute = λ {a} {b} {f}→ commute {a} {b} {f} }
           }
-       forward :  Hom C  (FObj G (limit-c comp (FIA Γ))) (a0 (LimitC comp glimit Γ))
-       forward = limit (LimitC comp glimit Γ) (FObj G (limit-c  comp (FIA Γ))) 
-            ( record { TMap = λ i →  C [ FMap G frev  o {!!} ]  ; isNTrans = {!!} } ) 
-       rev :  Hom C (a0 (LimitC comp glimit Γ)) (FObj G (limit-c comp (FIA Γ)))
-       rev = C [ FMap G {!!} o TMap (t0 (LimitC comp glimit Γ)) {!!} ]
+       uHomF :  Hom C  ( FObj F ( limit-c  comp (FIA Γ) )  ) (FObj G ( (a0 (climit comp (FIA Γ) ))))
+       uHomF  =  limit (isLimit (LimitC comp Γ glimit  )) (FObj F ( limit-c  comp (FIA Γ))) tu
        limitHom : Hom C (FObj F (limit-c comp (FIA Γ ) )) (FObj G (limit-c comp (FIA Γ) ))
-       limitHom = C [  rev o limit (LimitC comp glimit Γ) (FObj F (limit-c  comp (FIA Γ))) tu ] 
+       limitHom = uHomF
 
 
 commaNat : { I : Category c₁ c₂ ℓ } →   ( comp : Complete A I) →  ( Γ : Functor I CommaCategory ) 
@@ -192,7 +97,9 @@
 hasLimit {I} comp glimit Γ = record {
      a0 = {!!} ;
      t0 = {!!} ;
-     limit = λ a t → {!!} ;
-     t0f=t = λ {a t i } →  {!!} ;
-     limit-uniqueness =  λ {a} {t} f t=f →  {!!}
+     isLimit = record {
+             limit = λ a t → {!!} ;
+             t0f=t = λ {a t i } →  {!!} ;
+             limit-uniqueness =  λ {a} {t} f t=f →  {!!}
+     }
    }
--- a/limit-to.agda	Sun Mar 12 14:48:14 2017 +0900
+++ b/limit-to.agda	Sun Mar 12 19:46:07 2017 +0900
@@ -34,6 +34,7 @@
 
 open Complete
 open Limit
+open IsLimit
 open NTrans
 
 -- Functor Γ : TwoCat -> A
@@ -176,17 +177,17 @@
          c : Obj A
          c = limit-c comp Γ
          lim : Limit A I Γ 
-         lim =  isLimit comp  Γ
+         lim =  climit comp  Γ
          inat : (d : Obj A) (h : Hom A d a) → A [ A [ f o h ] ≈ A [ g o h ] ] → NTrans I A (K A I d) Γ
          inat = IndexNat A f g
          k : {d : Obj A}  (h : Hom A d a) → A [ A [ f  o  h ] ≈ A [ g  o h ] ] → Hom A d c
-         k {d} h fh=gh  =  limit lim d (inat d h fh=gh )
+         k {d} h fh=gh  =  limit (isLimit lim) d (inat d h fh=gh )
          ek=h :  (d : Obj A ) (h : Hom A d a ) →  ( fh=gh : A [ A [ f  o  h ] ≈ A [ g  o h ] ] )  → A [ A [ e o k h fh=gh ] ≈ h ]
          ek=h d h fh=gh = let open  ≈-Reasoning A in  begin
                     e o k h fh=gh
                 ≈⟨⟩
                     TMap (limit-u comp Γ) discrete.t0  o k h fh=gh
-                ≈⟨ t0f=t lim {d} {inat d h fh=gh } {discrete.t0}  ⟩
+                ≈⟨ t0f=t (isLimit lim) {d} {inat d h fh=gh } {discrete.t0}  ⟩
                     TMap (inat d h fh=gh) discrete.t0
                 ≈⟨⟩
                     h
@@ -225,7 +226,7 @@
                 → A [ A [ e o k' ] ≈ h ] → A [ k h  fh=gh   ≈ k' ]
          uniquness d h fh=gh k' ek'=h =  let open  ≈-Reasoning A in  begin
                     k h fh=gh
-                ≈⟨ limit-uniqueness lim k' ( λ{i} → uniq-nat {i} d h k' fh=gh ek'=h ) ⟩
+                ≈⟨ limit-uniqueness (isLimit lim) k' ( λ{i} → uniq-nat {i} d h k' fh=gh ek'=h ) ⟩
                     k'

 
@@ -278,26 +279,26 @@
    } where
         D =  DiscreteCat   S
         I = Obj ( DiscreteCat S )
-        lim = isLimit comp Γ
+        lim = climit comp Γ
         ai = λ i → FObj Γ i
         p = limit-c comp Γ
         pi =  λ i → TMap (limit-u  comp Γ) i
         iproduct : {q : Obj A}  → ( qi : (i : I) → Hom A q (ai i) ) → Hom A q p
-        iproduct {q} qi = limit lim q (pnat A S Γ qi )
+        iproduct {q} qi = limit (isLimit lim) q (pnat A S Γ qi )
         pif=q :   {q : Obj A}  → ( qi : (i : I) → Hom A q (ai i) ) → ∀ { i : I } → A [ A [ ( pi i )  o ( iproduct qi ) ] ≈  (qi i) ]
-        pif=q {q} qi {i} = t0f=t lim  {q} {pnat A S Γ qi } {i}
+        pif=q {q} qi {i} = t0f=t (isLimit lim)  {q} {pnat A S Γ qi } {i}
         ipu : {i : Obj D} → (q : Obj A) (h : Hom A q p ) → A [ A [ TMap (limit-u comp Γ) i o h ] ≈ A [ pi i o h ] ]
         ipu {i} q h = let open  ≈-Reasoning A in  refl-hom
         ip-uniqueness :  {q : Obj A} { h : Hom A q p } → A [ iproduct ( λ (i : I) →  A [ (pi i)  o h ] )  ≈  h ]
-        ip-uniqueness {q} {h} = limit-uniqueness lim {q} {pnat A S Γ (λ i → A [ pi i  o h ]  )} h (ipu q h)
+        ip-uniqueness {q} {h} = limit-uniqueness (isLimit lim) {q} {pnat A S Γ (λ i → A [ pi i  o h ]  )} h (ipu q h)
         ipc : {q : Obj A}   → { qi : (i : I) → Hom A q (ai i) } → { qi' : (i : I) → Hom A q (ai i) } 
              → (i : I ) →  A [ qi i ≈ qi' i ]  → 
              A [ A [ TMap (limit-u comp Γ) i o iproduct qi' ] ≈ TMap (pnat A S Γ qi) i ]
         ipc {q} {qi} {qi'} i qi=qi' = let open  ≈-Reasoning A in begin
                   TMap (limit-u comp Γ) i o iproduct qi' 
                 ≈⟨⟩
-                  TMap (limit-u comp Γ) i o limit lim q (pnat A S Γ qi' )
-                ≈⟨ t0f=t lim {q} {pnat A S Γ qi'} {i} ⟩
+                  TMap (limit-u comp Γ) i o limit (isLimit lim) q (pnat A S Γ qi' )
+                ≈⟨ t0f=t (isLimit lim) {q} {pnat A S Γ qi'} {i} ⟩
                   TMap (pnat A S Γ qi') i
                 ≈⟨⟩
                   qi' i
@@ -308,4 +309,4 @@

         ip-cong : {q : Obj A}   → { qi : (i : I) → Hom A q (ai i) } → { qi' : (i : I) → Hom A q (ai i) }
                         → ( ∀ (i : I ) →  A [ qi i ≈ qi' i ] ) → A [ iproduct qi ≈ iproduct qi' ]
-        ip-cong {q} {qi} {qi'} qi=qi' =  limit-uniqueness lim {q} {pnat A S Γ qi} (iproduct qi' ) (λ {i} → ipc {q} {qi} {qi'} i (qi=qi' i))
+        ip-cong {q} {qi} {qi'} qi=qi' =  limit-uniqueness (isLimit lim) {q} {pnat A S Γ qi} (iproduct qi' ) (λ {i} → ipc {q} {qi} {qi'} i (qi=qi' i))
--- a/pullback.agda	Sun Mar 12 14:48:14 2017 +0900
+++ b/pullback.agda	Sun Mar 12 19:46:07 2017 +0900
@@ -134,17 +134,18 @@
 -- If we have two limits on c and c', there are isomorphic pair h, h'
 
 open Limit
+open IsLimit
 open NTrans
 
 iso-l :  { c₁' c₂' ℓ' : Level} ( I : Category c₁' c₂' ℓ' ) ( Γ : Functor I A )
        ( lim : Limit A I Γ ) → ( lim' :  Limit A I Γ )
       → Hom A (a0 lim )(a0 lim')
-iso-l  I Γ  lim lim' = limit lim' (a0 lim) ( t0 lim)
+iso-l  I Γ  lim lim' = limit (isLimit lim') (a0 lim) ( t0 lim)
 
 iso-r :  { c₁' c₂' ℓ' : Level} ( I : Category c₁' c₂' ℓ' ) ( Γ : Functor I A )
        ( lim : Limit A I Γ ) → ( lim' :  Limit A I Γ  )
       → Hom A (a0 lim') (a0 lim)
-iso-r  I Γ lim lim' = limit lim (a0 lim') (t0 lim')
+iso-r  I Γ lim lim' = limit (isLimit lim) (a0 lim') (t0 lim')
 
 
 iso-lr :  { c₁' c₂' ℓ' : Level} ( I : Category c₁' c₂' ℓ' ) ( Γ : Functor I A )
@@ -153,18 +154,18 @@
 iso-lr  I Γ lim lim' {i} =  let open ≈-Reasoning (A) in begin
            iso-l I Γ lim lim' o iso-r I Γ lim lim'
       ≈⟨⟩
-           limit lim' (a0 lim) ( t0 lim) o  limit lim (a0 lim') (t0 lim')
-      ≈↑⟨ limit-uniqueness lim' ( limit lim' (a0 lim) (t0 lim) o limit lim (a0 lim') (t0 lim') )( λ {i} → ( begin
-          TMap (t0 lim') i o ( limit lim' (a0 lim) (t0 lim) o limit lim (a0 lim') (t0 lim') )
+           limit (isLimit lim') (a0 lim) ( t0 lim) o  limit (isLimit lim) (a0 lim') (t0 lim')
+      ≈↑⟨ limit-uniqueness (isLimit lim') ( limit (isLimit lim') (a0 lim) (t0 lim) o limit (isLimit lim )(a0 lim') (t0 lim') )( λ {i} → ( begin
+          TMap (t0 lim') i o ( limit (isLimit lim') (a0 lim) (t0 lim) o limit (isLimit lim) (a0 lim') (t0 lim') )
       ≈⟨ assoc  ⟩
-          ( TMap (t0 lim') i o  limit lim' (a0 lim) (t0 lim) ) o limit lim (a0 lim') (t0 lim')
-      ≈⟨ car ( t0f=t lim' ) ⟩
-          TMap (t0 lim)  i o limit lim (a0 lim') (t0 lim')
-      ≈⟨ t0f=t lim ⟩
+          ( TMap (t0 lim') i o  limit (isLimit lim') (a0 lim) (t0 lim) ) o limit (isLimit lim) (a0 lim') (t0 lim')
+      ≈⟨ car ( t0f=t (isLimit lim') ) ⟩
+          TMap (t0 lim)  i o limit (isLimit lim) (a0 lim') (t0 lim')
+      ≈⟨ t0f=t (isLimit lim) ⟩
           TMap (t0 lim') i
       ∎) ) ⟩
-           limit lim' (a0 lim') (t0 lim')
-      ≈⟨ limit-uniqueness lim' (id (a0 lim')) idR ⟩
+           limit (isLimit lim') (a0 lim') (t0 lim')
+      ≈⟨ limit-uniqueness (isLimit lim') (id (a0 lim')) idR ⟩
            id (a0 lim' )

 
@@ -225,27 +226,27 @@
      → ( aΓ : ( Γ : Functor I A ) → Obj A ) ( tΓ :  ( Γ : Functor I A ) → NTrans I A ( K A I (aΓ Γ) ) Γ )
      →  coUniversalMapping A ( A ^ I ) (KI I) (λ b → a0 ( lim b) )  ( λ b → t0 (lim b)  )
 limit2couniv lim aΓ tΓ = record {  -- F             U                            ε
-       _*' = λ {b} {a} k → limit (lim b ) a k ; -- η
+       _*' = λ {b} {a} k → limit (isLimit (lim b )) a k ; -- η
        iscoUniversalMapping = record {
            couniversalMapping = λ{ b a f} → couniversalMapping1 {b} {a} {f} ;
            couniquness = couniquness2
        }
   } where
    couniversalMapping1 :  {b : Obj (A ^ I)} {a : Obj A} {f : Hom (A ^ I) (FObj (KI I) a) b} →
-        A ^ I [ A ^ I [ t0 (lim b) o FMap (KI I) (limit (lim b) a f) ] ≈ f ]
+        A ^ I [ A ^ I [ t0 (lim b) o FMap (KI I) (limit (isLimit (lim b)) a f) ] ≈ f ]
    couniversalMapping1 {b} {a} {f} {i} = let  open ≈-Reasoning (A) in begin
-            TMap (t0 (lim b )) i o TMap ( FMap (KI I) (limit (lim b ) a f) ) i
+            TMap (t0 (lim b )) i o TMap ( FMap (KI I) (limit (isLimit (lim b )) a f) ) i
         ≈⟨⟩
-            TMap (t0 (lim b)) i o (limit (lim b) a f)
-        ≈⟨ t0f=t (lim b) ⟩
+            TMap (t0 (lim b)) i o (limit (isLimit (lim b)) a f)
+        ≈⟨ t0f=t (isLimit (lim b)) ⟩
             TMap f i  -- i comes from   ∀{i} → B [ TMap f i  ≈  TMap g i  ]

    couniquness2 : {b : Obj (A ^ I)} {a : Obj A} {f : Hom (A ^ I) (FObj (KI I) a) b} {g : Hom A a (a0 (lim b ))} →
         ( ∀ { i : Obj I } → A [ A [ TMap (t0 (lim b )) i  o TMap ( FMap (KI I) g) i  ] ≈ TMap f i ] )
-         → A [ limit (lim b ) a f ≈ g ]
+         → A [ limit (isLimit (lim b )) a f ≈ g ]
    couniquness2 {b} {a} {f} {g} lim-g=f  =  let  open ≈-Reasoning (A) in begin
-            limit (lim b ) a f
-        ≈⟨ limit-uniqueness ( lim b ) g lim-g=f ⟩
+            limit (isLimit (lim b )) a f
+        ≈⟨ limit-uniqueness (isLimit ( lim b )) g lim-g=f ⟩
             g

 
@@ -262,9 +263,11 @@
 univ2limit U ε univ Γ = record {
      a0 = U Γ ;
      t0 = ε Γ ;
-     limit = λ a t → limit1 a t ;
-     t0f=t = λ {a t i } → t0f=t1 {a} {t} {i}  ;
-     limit-uniqueness =  λ {a} {t} f t=f → limit-uniqueness1 {a} {t} {f} t=f
+     isLimit = record {
+             limit = λ a t → limit1 a t ;
+             t0f=t = λ {a t i } → t0f=t1 {a} {t} {i}  ;
+             limit-uniqueness =  λ {a} {t} f t=f → limit-uniqueness1 {a} {t} {f} t=f
+     }
  } where
      limit1 :  (a : Obj A) → NTrans I A (K A I a) Γ → Hom A a (U Γ)
      limit1 a t = _*' univ {_} {a} t
@@ -356,9 +359,11 @@
 limit-from prod eqa lim p e proj = record {
      a0 = lim ;
      t0 = limit-ε eqa lim p e proj ;
-     limit = λ a t → limit1 a t ;
-     t0f=t = λ {a t i } → t0f=t1 {a} {t} {i}  ;
-     limit-uniqueness =  λ {a} {t} f t=f → limit-uniqueness1 {a} {t} {f} t=f
+     isLimit = record {
+             limit = λ a t → limit1 a t ;
+             t0f=t = λ {a t i } → t0f=t1 {a} {t} {i}  ;
+             limit-uniqueness =  λ {a} {t} f t=f → limit-uniqueness1 {a} {t} {f} t=f
+     }
     }  where
          limit1 :  (a : Obj A) → NTrans I A (K A I a) Γ → Hom A a lim
          limit1 a t = let  open ≈-Reasoning (A) in k (eqa e (id1 A p) (id1 A p )) (iproduct ( prod p (FObj Γ)  proj ) (TMap t) ) refl-hom
@@ -429,9 +434,11 @@
 adjoint-preseve-limit B Γ limitb {U} {F} {η} {ε} adj = record {
      a0 = FObj U lim ;
      t0 = ta1 B Γ lim tb U ;
-     limit = λ a t → limit1 a t ;
-     t0f=t = λ {a t i } → t0f=t1 {a} {t} {i}  ;
-     limit-uniqueness =  λ {a} {t} f t=f → limit-uniqueness1 {a} {t} {f} t=f
+     isLimit = record {
+             limit = λ a t → limit1 a t ;
+             t0f=t = λ {a t i } → t0f=t1 {a} {t} {i}  ;
+             limit-uniqueness =  λ {a} {t} f t=f → limit-uniqueness1 {a} {t} {f} t=f
+     }
     } where
          ta = ta1 B Γ (a0 limitb) (t0 limitb) U
          tb = t0 limitb
@@ -466,18 +473,18 @@

           } }
          limit1 :  (a : Obj A) → NTrans I A (K A I a) (U ○ Γ) → Hom A a (FObj U (a0 limitb) )
-         limit1 a t = A [ FMap U (limit limitb (FObj F a) (tF a t )) o TMap η a ]
+         limit1 a t = A [ FMap U (limit (isLimit limitb) (FObj F a) (tF a t )) o TMap η a ]
          t0f=t1 :  {a : Obj A} {t : NTrans I A (K A I a) (U ○ Γ)} {i : Obj I} →
                 A [ A [ TMap ta i o limit1 a t ] ≈ TMap t i ]
          t0f=t1 {a} {t} {i} = let  open ≈-Reasoning (A) in  begin
                  TMap ta i o limit1 a t 
                ≈⟨⟩
-                  FMap U ( TMap tb i )  o ( FMap U (limit limitb (FObj F a) (tF a t )) o TMap η a  )
+                  FMap U ( TMap tb i )  o ( FMap U (limit (isLimit limitb) (FObj F a) (tF a t )) o TMap η a  )
                ≈⟨ assoc ⟩
-                  ( FMap U ( TMap tb i )  o  FMap U (limit limitb (FObj F a) (tF a t ))) o TMap η a  
+                  ( FMap U ( TMap tb i )  o  FMap U (limit (isLimit limitb) (FObj F a) (tF a t ))) o TMap η a  
                ≈↑⟨ car ( distr U ) ⟩
-                  FMap U ( B [ TMap tb i  o limit limitb (FObj F a) (tF a t ) ] ) o TMap η a  
-               ≈⟨ car ( fcong U ( t0f=t limitb ) ) ⟩
+                  FMap U ( B [ TMap tb i  o limit (isLimit limitb) (FObj F a) (tF a t ) ] ) o TMap η a  
+               ≈⟨ car ( fcong U ( t0f=t (isLimit limitb) ) ) ⟩
                   FMap U (TMap (tF a t) i) o TMap η a  
                ≈⟨⟩
                   FMap U ( B [ TMap ε (FObj Γ i) o FMap F (TMap t i) ] ) o TMap η a  
@@ -501,8 +508,8 @@
          limit-uniqueness1 {a} {t} {f} lim=t = let  open ≈-Reasoning (A) in  begin
                  limit1 a t
                ≈⟨⟩
-                 FMap U (limit limitb (FObj F a) (tF a t )) o TMap η a  
-               ≈⟨ car ( fcong U (limit-uniqueness limitb (B [ TMap ε lim o FMap F f ] ) ( λ {i} →  lemma1 i) )) ⟩
+                 FMap U (limit (isLimit limitb) (FObj F a) (tF a t )) o TMap η a  
+               ≈⟨ car ( fcong U (limit-uniqueness (isLimit limitb) (B [ TMap ε lim o FMap F f ] ) ( λ {i} →  lemma1 i) )) ⟩
                  FMap U ( B [ TMap ε lim o FMap F f ] ) o TMap η a   -- Universal mapping 
                ≈⟨ car (distr U ) ⟩
                  ( (FMap U (TMap ε lim))  o (FMap U ( FMap F f )) ) o TMap η a