add some comments in category.ctt and csystem.ctt
authorRafaël Bocquet <rafael.bocquet@ens.fr>
Thu, 7 Jul 2016 15:33:06 +0000 (17:33 +0200)
committerRafaël Bocquet <rafael.bocquet@ens.fr>
Thu, 7 Jul 2016 15:33:06 +0000 (17:33 +0200)
examples/category.ctt
examples/csystem.ctt
examples/equiv.ctt
examples/prelude.ctt

index 0bf48dedc22c9a49873dfa269936283485dbf326..7209535f345a948d6cbbd8e656def7ea58db418d 100644 (file)
@@ -63,6 +63,7 @@ opaque lemTransEquiv
 
 categoryData : U = (A : U) * (A -> A -> U)
 
+-- Propositional data of a precategory
 isPrecategory2 (C : categoryData) (id : (x : C.1) -> C.2 x x) (c : (x y z : C.1) -> C.2 x y -> C.2 y z -> C.2 x z) : U
   = let A : U = C.1
         hom : A -> A -> U = C.2
@@ -126,322 +127,69 @@ cIdR (C : precategory) (x y : cA C) (f : cH C x y)
 cIdC (C : precategory) (x y z w : cA C) (f : cH C x y) (g : cH C y z) (h : cH C z w)
   : Id (cH C x w) (cC C x z w (cC C x y z f g) h) (cC C x y w f (cC C y z w g h)) = C.2.2.2.2.2.2 x y z w f g h
 
-catIso3 (A B : precategory) : U = (e1 : Id U (cA A) (cA B))
-                                * (e2 : IdP (<i>(x y : e1@i)->U) (cH A) (cH B))
-                                * (_ : IdP (<i> (x:e1@i)->(e2@i) x x) (cId A) (cId B))
-                                * (IdP (<i> (x y z:e1@i)->(e2@i) x y->(e2@i) y z->(e2@i) x z) (cC A) (cC B))
+--
+-- Isomorphisms
+--
 
-eCatIso3 (A B : precategory) : Id U (Id precategory A B) (catIso3 A B)
-  = isoId (Id precategory A B) (catIso3 A B)
-    F G FG GF
-  where
-    F (e:Id precategory A B):catIso3 A B = (<i>(e@i).1.1, <i>(e@i).1.2, <i>(e@i).2.1, <i>(e@i).2.2.1)
-    G (e:catIso3 A B):Id precategory A B = <i> ((e.1@i, e.2.1@i), e.2.2.1@i, e.2.2.2@i
-                                               ,lemIdPProp (isPrecategory2 A.1 A.2.1 A.2.2.1)
-                                                           (isPrecategory2 B.1 B.2.1 B.2.2.1)
-                                                           (propIsPrecategory2 A.1 A.2.1 A.2.2.1)
-                                                           (<i>isPrecategory2 (e.1@i, e.2.1@i) (e.2.2.1@i) (e.2.2.2@i))
-                                                           A.2.2.2 B.2.2.2 @ i)
-    FG(e:catIso3 A B):Id (catIso3 A B) (F (G e)) e=<_>e
-    GF(e:Id precategory A B):Id (Id precategory A B) (G (F e)) e
-      =<i j>((e@j).1, (e@j).2.1, (e@j).2.2.1
-            ,lemIdPSet (isPrecategory2 A.1 A.2.1 A.2.2.1)
-                       (isPrecategory2 B.1 B.2.1 B.2.2.1)
-                       (propSet (isPrecategory2 A.1 A.2.1 A.2.2.1) (propIsPrecategory2 A.1 A.2.1 A.2.2.1))
-                       (<i>isPrecategory2 (e@i).1 (e@i).2.1 (e@i).2.2.1)
-                       A.2.2.2 B.2.2.2
-                       (<j> (G (F e)@j).2.2.2) (<j>(e@j).2.2.2)
-                       @ i @ j)
+iso (C : precategory) (A B : cA C) : U
+  = (f : cH C A B) * (g : cH C B A)
+  * (_ : Id (cH C A A) (cC C A B A f g) (cId C A))
+  * (Id (cH C B B) (cC C B A B g f) (cId C B))
 
-catIso30 (A B : precategory) : U = (e1 : Id U (cA A) (cA B))
-                                 * (e2 : Id ((x y : cA A)->U) (cH A) (\(x y:cA A)->cH B (transport e1 x) (transport e1 y)))
-                                 * (_ : Id ((x:cA A)->cH A x x)
-                                           (cId A)
-                                           (\(x : cA A) -> transport (<j>(e2@-j) x x) (cId B (transport e1 x))))
-                                 * (Id ((x y z:cA A)->cH A x y->cH A y z->cH A x z)
-                                       (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->cC A x y z f g)
-                                       (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
-                                       transport (<i>(e2@-i) x z)
-                                        (cC B (transport e1 x) (transport e1 y) (transport e1 z)
-                                           (transport (<i>(e2@i) x y) f)
-                                           (transport (<i>(e2@i) y z) g))))
 
-eCatIso30 (A B : precategory) : Id U (catIso3 A B) (catIso30 A B)
-  = <i> (e1 : Id U (cA A) (cA B))
-      * (let e21 : (x y : e1@-i) -> U
-                 = comp (<_> (x y : e1@-i) -> U)
-                   (\(x y : e1@-i) -> cH B (transport (<j>e1@-i\/j) x) (transport (<j>e1@-i\/j) y))
-                   [(i=1)-><_>\(x y:cA A) -> cH B (transport e1 x) (transport e1 y)
-                   ,(i=0)-><j>\(x y:cA B) -> cH B (transRefl (cA B) x @ j) (transRefl (cA B) y @ j)
-                   ]
-             f21 : Id ((x y : e1@-i) -> U)
-                   (\(x y : e1@-i) -> cH B (transport (<j>e1@-i\/j) x) (transport (<j>e1@-i\/j) y))
-                   e21
-                 = fill (<_> (x y : e1@-i) -> U)
-                   (\(x y : e1@-i) -> cH B (transport (<j>e1@-i\/j) x) (transport (<j>e1@-i\/j) y))
-                   [(i=1)-><_>\(x y:cA A) -> cH B (transport e1 x) (transport e1 y)
-                   ,(i=0)-><j>\(x y:cA B) -> cH B (transRefl (cA B) x @ j) (transRefl (cA B) y @ j)
-                   ]
-         in
-        (e2 : IdP (<j> (x y : e1@j/\-i) -> U) (cH A) e21)
-      * (_ : IdP (<j> (x : e1@j/\-i) -> (e2@j/\-i) x x)
-                 (cId A)
-                 (comp (<_> (x:e1@-i)->(e2@-i) x x)
-                       (\(x : e1@-i) -> transport (<j>(e2@-i\/-j) x x) (transport (<j>(f21@j) x x) (cId B (transport (<j>e1@-i\/j) x))))
-                       [(i=1)-><j>\(x:cA A) -> transport (<j>(e2@-j) x x) (transRefl ((f21@0) x x) (cId B (transport e1 x)) @ j)
-                       ,(i=0)-><j>\(x:cA B) ->
-                               transRefl ((e2@1) x x)
-                               (compId (cH B x x)
-                                (transport (<k>cH B (transRefl (cA B) x@k) (transRefl (cA B) x@k))
-                                           (cId B (transport (<_> cA B) x)))
-                                (transport (<_>cH B x x) (cId B x))
-                                (cId B x)
-                                (<j>transport (<k>cH B (transRefl (cA B) x@j\/k) (transRefl (cA B) x@j\/k))
-                                              (cId B (transRefl (cA B) x @ j)))
-                                (transRefl (cH B x x) (cId B x))
-                                @ j) @ j
-                       ]))
-      * (IdP (<j> (x y z : e1@j/\-i) (f : (e2@j/\-i) x y) (g : (e2@j/\-i) y z) -> (e2@j/\-i) x z)
-             (cC A)
-             (comp (<_> (x y z : e1@-i) (f : (e2@-i) x y) (g : (e2@-i) y z) -> (e2@-i) x z)
-                   (\(x y z : e1@-i) (f : (e2@-i) x y) (g : (e2@-i) y z) ->
-                     transport (<j>(e2@-i\/-j) x z) (transport (<j>(f21@j) x z)
-                 (cC B (transport (<j>e1@-i\/j) x) (transport (<j>e1@-i\/j) y) (transport (<j>e1@-i\/j) z)
-                      (transport (<j>(f21@-j) x y) (transport (<j>(e2@-i\/j) x y) f))
-                      (transport (<j>(f21@-j) y z) (transport (<j>(e2@-i\/j) y z) g)))))
-                   [(i=1)-><j>\(x y z : cA A) (f : cH A x y) (g : cH A y z) ->
-                     transport (<j>(e2@-j) x z) (transRefl ((f21@0) x z)
-                     (cC B (transport e1 x) (transport e1 y) (transport e1 z)
-                      (transRefl ((f21@0) x y) (transport (<j>(e2@j) x y) f) @ j)
-                      (transRefl ((f21@0) y z) (transport (<j>(e2@j) y z) g) @ j)) @ j)
-                   ,(i=0)-><j>\(x y z : cA B) (f : cH B x y) (g : cH B y z) ->
-                           transRefl ((e2@1) x z)
-                           (compId (cH B x z)
-                           (transport (<k>cH B (transRefl (cA B) x@k) (transRefl (cA B) z@k))
-                            (cC B (transport (<_>cA B) x) (transport (<_>cA B) y) (transport (<_>cA B) z)
-                             (transport (<k>cH B (transRefl (cA B) x@-k) (transRefl (cA B) y@-k)) (transport (<j>(e2@1) x y) f))
-                             (transport (<k>cH B (transRefl (cA B) y@-k) (transRefl (cA B) z@-k)) (transport (<j>(e2@1) y z) g))))
-                           (transport (<_>cH B x z)
-                            (cC B x y z
-                             (transport (<_>cH B x y) f)
-                             (transport (<_>cH B y z) g)))
-                           (cC B x y z f g)
-                           (<j>transport (<k>cH B (transRefl (cA B) x@j\/k) (transRefl (cA B) z@j\/k))
-                            (cC B (transRefl (cA B) x@j) (transRefl (cA B) y@j) (transRefl (cA B) z@j)
-                             (transport (<k>cH B (transRefl (cA B) x@j\/-k) (transRefl (cA B) y@j\/-k)) (transRefl ((e2@1) x y) f@j))
-                             (transport (<k>cH B (transRefl (cA B) y@j\/-k) (transRefl (cA B) z@j\/-k)) (transRefl ((e2@1) y z) g@j))))
-                           (<j>transRefl (cH B x z) (cC B x y z (transRefl (cH B x y) f @ j) (transRefl (cH B y z) g @ j)) @ j)
-                           @ j) @ j
-                   ])))
+isoEq (C : precategory) (A B : cA C) (f g : iso C A B) (p1 : Id (cH C A B) f.1 g.1) (p2 : Id (cH C B A) f.2.1 g.2.1)
+  : Id (iso C A B) f g
+  = <i> (p1@i,p2@i
+        ,lemIdPProp (Id (cH C A A) (cC C A B A (p1@0) (p2@0)) (cId C A))
+                    (Id (cH C A A) (cC C A B A (p1@1) (p2@1)) (cId C A))
+                    (cHSet C A A (cC C A B A (p1@0) (p2@0)) (cId C A))
+                    (<i>Id (cH C A A) (cC C A B A (p1@i) (p2@i)) (cId C A))
+                    f.2.2.1 g.2.2.1 @ i
+        ,lemIdPProp (Id (cH C B B) (cC C B A B (p2@0) (p1@0)) (cId C B))
+                    (Id (cH C B B) (cC C B A B (p2@1) (p1@1)) (cId C B))
+                    (cHSet C B B (cC C B A B (p2@0) (p1@0)) (cId C B))
+                    (<i>Id (cH C B B) (cC C B A B (p2@i) (p1@i)) (cId C B))
+                    f.2.2.2 g.2.2.2 @ i)
+opaque isoEq
 
-catIso311 (A B : precategory) (e1:Id U (cA A) (cA B)) : U
-  = Id ((x y : cA A)->U) (cH A) (\(x y:cA A)->cH B (transport e1 x) (transport e1 y))
-catIso312 (A B : precategory) (e1:Id U (cA A) (cA B)) (e2:catIso311 A B e1) : U
-  = Id ((x:cA A)->cH B (transport e1 x) (transport e1 x))
-       (\(x:cA A)->transport (<i> (e2@i) x x) (cId A x))
-       (\(x : cA A) -> cId B (transport e1 x))
-catIso313 (A B : precategory) (e1:Id U (cA A) (cA B)) (e2:catIso311 A B e1) : U
-  = Id ((x y z:cA A)->cH A x y->cH A y z->cH B (transport e1 x) (transport e1 z))
-       (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->transport (<i>(e2@i)x z) (cC A x y z f g))
-       (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
-         cC B (transport e1 x) (transport e1 y) (transport e1 z)
-         (transport (<i>(e2@i) x y) f)
-         (transport (<i>(e2@i) y z) g))
-catIso31 (A B : precategory) : U = (e1 : Id U (cA A) (cA B))
-                                 * (e2 : catIso311 A B e1)
-                                 * (_ : catIso312 A B e1 e2)
-                                 * ( catIso313 A B e1 e2)
+invIso (C : precategory) (A B : cA C) (f : iso C A B) : iso C B A = (f.2.1, f.1, f.2.2.2, f.2.2.1)
+idIso (C : precategory) (A : cA C) : iso C A A = (cId C A, cId C A, cIdL C A A (cId C A), cIdL C A A (cId C A))
 
-eCatIso31 (A B : precategory) : Id U (catIso30 A B) (catIso31 A B)
-  = <i> (e1 : Id U (cA A) (cA B))
-      * (e2 : Id ((x y : cA A)->U) (cH A) (\(x y:cA A)->cH B (transport e1 x) (transport e1 y)))
-      * (_:comp (<_> U)
-            (Id ((x:cA A)->(e2@i) x x)
-                (\(x:cA A)->transport (<j> (e2@i/\j) x x) (cId A x))
-                (\(x:cA A)->transport (<j> (e2@i\/-j) x x) (cId B (transport e1 x))))
-            [(i=0)-><k>Id ((x:cA A)->cH A x x)
-                          (\(x:cA A)->transRefl (cH A x x) (cId A x) @ k)
-                          (\(x:cA A)->transport (<j> (e2@-j) x x) (cId B (transport e1 x)))
-            ,(i=1)-><k>Id ((x:cA A)->(e2@i) x x)
-                          (\(x:cA A)->transport (<j> (e2@j) x x) (cId A x))
-                          (\(x:cA A)->transRefl ((e2@1) x x) (cId B (transport e1 x)) @ k)
-            ])
-      * (comp (<_> U)
-          (Id ((x y z:cA A)->cH A x y->cH A y z->(e2@i) x z)
-              (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
-                transport (<j> (e2@i/\j) x z) (cC A x y z f g))
-              (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
-                transport (<j>(e2@i\/-j) x z)
-                (cC B (transport e1 x) (transport e1 y) (transport e1 z)
-                 (transport (<j>(e2@j) x y) f)
-                 (transport (<j>(e2@j) y z) g))))
-          [(i=0)-><k>Id ((x y z:cA A)->cH A x y->cH A y z->cH A x z)
-                        (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
-                          transRefl ((e2@0) x z) (cC A x y z f g) @ k)
-                        (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
-                          transport (<j>(e2@-j) x z)
-                          (cC B (transport e1 x) (transport e1 y) (transport e1 z)
-                           (transport (<j>(e2@j) x y) f)
-                           (transport (<j>(e2@j) y z) g)))
-          ,(i=1)-><k>Id ((x y z:cA A)->cH A x y->cH A y z->(e2@1) x z)
-                        (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
-                          transport (<j>(e2@j) x z) (cC A x y z f g))
-                        (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
-                          transRefl ((e2@1) x z)
-                          (cC B (transport e1 x) (transport e1 y) (transport e1 z)
-                           (transport (<j>(e2@j) x y) f)
-                           (transport (<j>(e2@j) y z) g)) @ k)
-          ])
+invIsoEquiv (C : precategory) (A B : cA C) : isEquiv (iso C A B) (iso C B A) (invIso C A B)
+  = gradLemma (iso C A B) (iso C B A) (invIso C A B) (invIso C B A) (\(x : iso C B A) -> <_> x) (\(x : iso C A B) -> <_> x)
 
-lemEquivCoh (A B:U) (e:equiv A B) (x:A)
-  : Id (Id B (e.1 x) (e.1 (invEq A B e (e.1 x))))
-       (<j>e.1(secEq A B e x@-j))
-       (<j>retEq A B e (e.1 x)@-j)
-  = <i> comp (<j> Id B (e.1 x) (e.1 (secEq A B e x @ -i /\ -j)))
-             (((e.2 (e.1 x)).2 (x,<_>e.1 x)@-i).2)
-             [(i=0)-><j><k>e.1 (secEq A B e x@-k\/-j)
-             ,(i=1)-><j><k>retEq A B e (e.1 x)@-k
-             ]
+invIsoEq (C : precategory) (A B : cA C) : Id U (iso C A B) (iso C B A)
+  = equivId (iso C A B) (iso C B A) (invIso C A B) (invIsoEquiv C A B)
 
-sigEquivLem (A A':U) (B:A->U) (B':A'->U)
-            (e:equiv A A')
-            (f:(x:A)->equiv (B x) (B' (e.1 x)))
-          : equiv (Sigma A B) (Sigma A' B')
-          = (F, gradLemma (Sigma A B) (Sigma A' B') F G FG GF)
-  where
-    F (x:Sigma A B):Sigma A' B' = (e.1 x.1, (f x.1).1 x.2)
-    G (x:Sigma A' B'):Sigma A B = ((e.2 x.1).1.1, ((f (e.2 x.1).1.1).2 (transport (<i> B' ((e.2 x.1).1.2 @ i)) x.2)).1.1)
-    FG (x:Sigma A' B'):Id (Sigma A' B') (F (G x)) x
-      = <i> ((e.2 x.1).1.2 @ -i
-            ,comp (<_> B' ((e.2 x.1).1.2 @ -i))
-              (transport (<j> B' ((e.2 x.1).1.2 @ j/\-i)) x.2)
-              [(i=0)-><j>((f (e.2 x.1).1.1).2 (transport (<i> B' ((e.2 x.1).1.2 @ i)) x.2)).1.2 @ j
-              ,(i=1)-><j>transRefl (B' ((e.2 x.1).1.2 @ 0)) x.2@j
-              ])
-    GF (x:Sigma A B):Id (Sigma A B) (G (F x)) x
-      = <i> (secEq A A' e x.1 @ i
-            ,comp (<_> B (secEq A A' e x.1 @ i))
-             ((f (secEq A A' e x.1 @ i)).2 (transport (<j> B' (e.1 (secEq A A' e x.1 @ i\/-j))) ((f x.1).1 x.2))).1.1
-             [(i=0)-><k>((f (secEq A A' e x.1 @ 0)).2 (transport (<i> B' (lemEquivCoh A A' e x.1@k@i)) ((f x.1).1 x.2))).1.1
-             ,(i=1)-><k>compId (B x.1)
-                        ((f x.1).2 (transport (<j> B' (e.1 x.1)) ((f x.1).1 x.2))).1.1
-                        ((f x.1).2 ((f x.1).1 x.2)).1.1
-                        x.2
-                        (<k>((f x.1).2 (transRefl (B' (e.1 x.1)) ((f x.1).1 x.2)@k)).1.1)
-                        (secEq (B x.1) (B' (e.1 x.1)) (f x.1) x.2) @ k
-             ])
+compIsoHelper (X : precategory) (A B C : cA X) (f : iso X A B) (g : iso X B C)
+  : Id (cH X A A) (cC X A C A (cC X A B C f.1 g.1) (cC X C B A g.2.1 f.2.1)) (cId X A)
+  = compId (cH X A A)
+            (cC X A C A (cC X A B C f.1 g.1) (cC X C B A g.2.1 f.2.1))
+            (cC X A B A f.1 (cC X B C A g.1 (cC X C B A g.2.1 f.2.1)))
+            (cId X A)
+            (cIdC X A B C A f.1 g.1 (cC X C B A g.2.1 f.2.1))
+    (compId (cH X A A)
+            (cC X A B A f.1 (cC X B C A g.1 (cC X C B A g.2.1 f.2.1)))
+            (cC X A B A f.1 (cC X B B A (cC X B C B g.1 g.2.1) f.2.1))
+            (cId X A)
+            (<i>cC X A B A f.1 (cIdC X B C B A g.1 g.2.1 f.2.1 @ -i))
+    (compId (cH X A A)
+            (cC X A B A f.1 (cC X B B A (cC X B C B g.1 g.2.1) f.2.1))
+            (cC X A B A f.1 (cC X B B A (cId X B) f.2.1))
+            (cId X A)
+            (<i>cC X A B A f.1 (cC X B B A (g.2.2.1 @ i) f.2.1))
+    (compId (cH X A A)
+            (cC X A B A f.1 (cC X B B A (cId X B) f.2.1))
+            (cC X A B A f.1 f.2.1)
+            (cId X A)
+            (<i>cC X A B A f.1 (cIdL X B A f.2.1 @ i))
+            f.2.2.1)))
+opaque compIsoHelper
 
-sigEquivLem' (A A':U) (B:A->U) (B':A'->U)
-             (e:equiv A A')
-             (f:(x:A)->Id U (B x) (B' (e.1 x)))
-           : Id U (Sigma A B) (Sigma A' B')
-           = transEquivToId (Sigma A B) (Sigma A' B') (sigEquivLem A A' B B' e (\(x:A)->transEquiv' (B' (e.1 x)) (B x) (f x)))
-
-catIso321 (A B : precategory) (e1:Id U (cA A) (cA B)) : U
-  = (x y:cA A) -> Id U (cH A x y) (cH B (transport e1 x) (transport e1 y))
-catIso322 (A B : precategory) (e1:Id U (cA A) (cA B)) (e2:catIso321 A B e1) : U
-  = (x:cA A) -> Id (cH B (transport e1 x) (transport e1 x))
-       (transport (e2 x x) (cId A x))
-       (cId B (transport e1 x))
-catIso323 (A B : precategory) (e1:Id U (cA A) (cA B)) (e2:catIso321 A B e1) : U
-  = (x y z:cA A)(f:cH A x y)(g:cH A y z)->
-    Id (cH B (transport e1 x) (transport e1 z))
-       (transport (e2 x z) (cC A x y z f g))
-       (cC B (transport e1 x) (transport e1 y) (transport e1 z)
-        (transport (e2 x y) f)
-        (transport (e2 y z) g))
-catIso32 (A B : precategory) : U = (e1 : Id U (cA A) (cA B))
-                                 * (e2 : catIso321 A B e1)
-                                 * (_ : catIso322 A B e1 e2)
-                                 * ( catIso323 A B e1 e2)
-
-eCatIso32 (A B : precategory) : Id U (catIso31 A B) (catIso32 A B)
-  = <i> (e1 : Id U (cA A) (cA B))
-      * (let F(e2:catIso311 A B e1):catIso321 A B e1 = \(x y:cA A)-><i>(e2@i) x y in
-      transEquivToId
-        ((e2 : catIso311 A B e1) * (_ : catIso312 A B e1 e2) * ( catIso313 A B e1 e2))
-        ((e2 : catIso321 A B e1) * (_ : catIso322 A B e1 e2) * ( catIso323 A B e1 e2))
-        (sigEquivLem (catIso311 A B e1) (catIso321 A B e1)
-         (\(e2 : catIso311 A B e1) -> (_ : catIso312 A B e1 e2) * ( catIso313 A B e1 e2))
-         (\(e2 : catIso321 A B e1) -> (_ : catIso322 A B e1 e2) * ( catIso323 A B e1 e2))
-          (F, gradLemma (catIso311 A B e1) (catIso321 A B e1)
-               F (\(e2:catIso321 A B e1)-><i>\(x y:cA A)->(e2 x y)@i)
-               (\(e2:catIso321 A B e1)-><_>e2) (\(e2:catIso311 A B e1)-><_>e2))
-        (\(e2:catIso311 A B e1)->
-        (sigEquivLem (catIso312 A B e1 e2) (catIso322 A B e1 (F e2))
-         (\(_ : catIso312 A B e1 e2) -> (catIso313 A B e1 e2))
-         (\(_ : catIso322 A B e1 (F e2)) -> (catIso323 A B e1 (F e2)))
-          (let F2(e:catIso312 A B e1 e2):catIso322 A B e1 (F e2)=\(x:cA A)-><i>(e@i)x in
-           (F2, gradLemma (catIso312 A B e1 e2) (catIso322 A B e1 (F e2))
-                 F2 (\(e:catIso322 A B e1 (F e2))-><i>\(x:cA A)->(e x)@i)
-                 (\(e:catIso322 A B e1 (F e2))-><_>e) (\(e:catIso312 A B e1 e2)-><_>e)))
-        (\(_:catIso312 A B e1 e2)->
-         (let F3(e:catIso313 A B e1 e2):catIso323 A B e1 (F e2)=\(x y z:cA A)(f:cH A x y)(g:cH A y z)-><i>(e@i)x y z f g in
-          (F3, gradLemma (catIso313 A B e1 e2) (catIso323 A B e1 (F e2))
-                F3 (\(e:catIso323 A B e1 (F e2))-><i>\(x y z:cA A)(f:cH A x y)(g:cH A y z)->(e x y z f g)@i)
-                (\(e:catIso323 A B e1 (F e2))-><_>e) (\(e:catIso313 A B e1 e2)-><_>e))
-        )))))) @ i
-
---
-
-iso (C : precategory) (A B : cA C) : U
-  = (f : cH C A B) * (g : cH C B A)
-  * (_ : Id (cH C A A) (cC C A B A f g) (cId C A))
-  * (Id (cH C B B) (cC C B A B g f) (cId C B))
-
-isoEq (C : precategory) (A B : cA C) (f g : iso C A B) (p1 : Id (cH C A B) f.1 g.1) (p2 : Id (cH C B A) f.2.1 g.2.1)
-  : Id (iso C A B) f g
-  = <i> (p1@i,p2@i
-        ,lemIdPProp (Id (cH C A A) (cC C A B A (p1@0) (p2@0)) (cId C A))
-                    (Id (cH C A A) (cC C A B A (p1@1) (p2@1)) (cId C A))
-                    (cHSet C A A (cC C A B A (p1@0) (p2@0)) (cId C A))
-                    (<i>Id (cH C A A) (cC C A B A (p1@i) (p2@i)) (cId C A))
-                    f.2.2.1 g.2.2.1 @ i
-        ,lemIdPProp (Id (cH C B B) (cC C B A B (p2@0) (p1@0)) (cId C B))
-                    (Id (cH C B B) (cC C B A B (p2@1) (p1@1)) (cId C B))
-                    (cHSet C B B (cC C B A B (p2@0) (p1@0)) (cId C B))
-                    (<i>Id (cH C B B) (cC C B A B (p2@i) (p1@i)) (cId C B))
-                    f.2.2.2 g.2.2.2 @ i)
-opaque isoEq
-
-invIso (C : precategory) (A B : cA C) (f : iso C A B) : iso C B A = (f.2.1, f.1, f.2.2.2, f.2.2.1)
-idIso (C : precategory) (A : cA C) : iso C A A = (cId C A, cId C A, cIdL C A A (cId C A), cIdL C A A (cId C A))
-
-invIsoEquiv (C : precategory) (A B : cA C) : isEquiv (iso C A B) (iso C B A) (invIso C A B)
-  = gradLemma (iso C A B) (iso C B A) (invIso C A B) (invIso C B A) (\(x : iso C B A) -> <_> x) (\(x : iso C A B) -> <_> x)
-
-invIsoEq (C : precategory) (A B : cA C) : Id U (iso C A B) (iso C B A)
-  = equivId (iso C A B) (iso C B A) (invIso C A B) (invIsoEquiv C A B)
-
-compIsoHelper (X : precategory) (A B C : cA X) (f : iso X A B) (g : iso X B C)
-  : Id (cH X A A) (cC X A C A (cC X A B C f.1 g.1) (cC X C B A g.2.1 f.2.1)) (cId X A)
-  = compId (cH X A A)
-            (cC X A C A (cC X A B C f.1 g.1) (cC X C B A g.2.1 f.2.1))
-            (cC X A B A f.1 (cC X B C A g.1 (cC X C B A g.2.1 f.2.1)))
-            (cId X A)
-            (cIdC X A B C A f.1 g.1 (cC X C B A g.2.1 f.2.1))
-    (compId (cH X A A)
-            (cC X A B A f.1 (cC X B C A g.1 (cC X C B A g.2.1 f.2.1)))
-            (cC X A B A f.1 (cC X B B A (cC X B C B g.1 g.2.1) f.2.1))
-            (cId X A)
-            (<i>cC X A B A f.1 (cIdC X B C B A g.1 g.2.1 f.2.1 @ -i))
-    (compId (cH X A A)
-            (cC X A B A f.1 (cC X B B A (cC X B C B g.1 g.2.1) f.2.1))
-            (cC X A B A f.1 (cC X B B A (cId X B) f.2.1))
-            (cId X A)
-            (<i>cC X A B A f.1 (cC X B B A (g.2.2.1 @ i) f.2.1))
-    (compId (cH X A A)
-            (cC X A B A f.1 (cC X B B A (cId X B) f.2.1))
-            (cC X A B A f.1 f.2.1)
-            (cId X A)
-            (<i>cC X A B A f.1 (cIdL X B A f.2.1 @ i))
-            f.2.2.1)))
-opaque compIsoHelper
-
-compIso (X : precategory) (A B C : cA X) (f : iso X A B) (g : iso X B C) : iso X A C
-  = (cC X A B C f.1 g.1, cC X C B A g.2.1 f.2.1
-    ,compIsoHelper X A B C f g
-    ,compIsoHelper X C B A (invIso X B C g) (invIso X A B f))
+compIso (X : precategory) (A B C : cA X) (f : iso X A B) (g : iso X B C) : iso X A C
+  = (cC X A B C f.1 g.1, cC X C B A g.2.1 f.2.1
+    ,compIsoHelper X A B C f g
+    ,compIsoHelper X C B A (invIso X B C g) (invIso X A B f))
 
 IdLIso (C : precategory) (A B : cA C) (f : iso C A B) : Id (iso C A B) (compIso C A A B (idIso C A) f) f
   = isoEq C A B (compIso C A A B (idIso C A) f) f (cIdL C A B f.1) (cIdR C B A f.2.1)
@@ -460,6 +208,10 @@ opaque IdInvLIso
 
 opaque compIso
 
+--
+-- Categories
+--
+
 eqToIso (C : precategory) (A B : cA C) (p : Id (cA C) A B) : iso C A B
   = J (cA C) A (\(B : cA C) -> \(p : Id (cA C) A B) -> iso C A B) (idIso C A) B p
 
@@ -490,7 +242,9 @@ setCat : precategory
     ,\(a b c d : hSet) (f : a.1 -> b.1) (g : b.1 -> c.1) (h : c.1 -> d.1) -> <_> \(x : a.1) -> h (g (f x)))
   where hSet : U = Sigma U set
 
--- sip
+--
+-- the structure identity principle
+--
 
 structure (X : precategory) : U
   = (P : cA X -> U)
@@ -553,6 +307,7 @@ isContrProp (A : U) (p : isContr A) (x y : A) : Id A x y = compId A x p.1 y (<i>
 isContrSig (A:U) (B:A-> U) (cA:isContr A) (cB : (x:A) -> isContr (B x)) : isContr (Sigma A B)
   = ((cA.1, (cB cA.1).1), \(x:Sigma A B) -> propSig A B (isContrProp A cA) (\(x:A)->isContrProp (B x) (cB x)) (cA.1, (cB cA.1).1) x)
 
+-- the uncommented definition is a bit slow to typecheck
 sip (X : precategory) (isC : isCategory X) (S : structure X) (isS : isStandardStructure X S) : isCategory (sipPrecategory X S)
   = undefined
   -- = hole
@@ -647,6 +402,8 @@ sip (X : precategory) (isC : isCategory X) (S : structure X) (isS : isStandardSt
   --   hole (A : cA D) : isContr ((B : cA D) * iso D A B) = transport (<i>isContr(eq1 A@-i)) (hole0 A)
 opaque sip
 
+--
+-- Functors
 --
 
 functor (A B : precategory) : U
@@ -704,149 +461,411 @@ lem10' (A B : U) (e : equiv A B) (x y : A) (p : Id B (e.1 x) (e.1 y)) : Id A x y
     (mapOnPath B A (invEq A B e) (e.1 x) (e.1 y) p)
 opaque lem10'
 
-lemFF (A B : precategory) (F : functor A B) (ff : ffFunctor A B F) (x y : cA A)
-  : Id U (iso A x y) (iso B (F.1 x) (F.1 y))
-  = hole
-  where
-    F0 (f : iso A x y) : iso B (F.1 x) (F.1 y)
-      = (F.2.1 x y f.1, F.2.1 y x f.2.1
-        ,compId (cH B (F.1 x) (F.1 x))
-                (cC B (F.1 x) (F.1 y) (F.1 x) (F.2.1 x y f.1) (F.2.1 y x f.2.1))
-                (F.2.1 x x (cC A x y x f.1 f.2.1))
-                (cId B (F.1 x))
-                (<i>F.2.2.2 x y x f.1 f.2.1 @-i)
-        (compId (cH B (F.1 x) (F.1 x))
-                (F.2.1 x x (cC A x y x f.1 f.2.1))
-                (F.2.1 x x (cId A x))
-                (cId B (F.1 x))
-                (<i>F.2.1 x x (f.2.2.1@i))
-                (F.2.2.1 x))
-        ,compId (cH B (F.1 y) (F.1 y))
-                (cC B (F.1 y) (F.1 x) (F.1 y) (F.2.1 y x f.2.1) (F.2.1 x y f.1))
-                (F.2.1 y y (cC A y x y f.2.1 f.1))
-                (cId B (F.1 y))
-                (<i>F.2.2.2 y x y f.2.1 f.1 @-i)
-        (compId (cH B (F.1 y) (F.1 y))
-                (F.2.1 y y (cC A y x y f.2.1 f.1))
-                (F.2.1 y y (cId A y))
-                (cId B (F.1 y))
-                (<i>F.2.1 y y (f.2.2.2@i))
-                (F.2.2.1 y)))
-    G0 (g : iso B (F.1 x) (F.1 y)) : iso A x y
-      = ((ff x y g.1).1.1
-        ,(ff y x g.2.1).1.1
-        ,lem10' (cH A x x) (cH B (F.1 x) (F.1 x)) (F.2.1 x x, ff x x) (cC A x y x (ff x y g.1).1.1 (ff y x g.2.1).1.1) (cId A x)
-          (compId (cH B (F.1 x) (F.1 x))
-                  (F.2.1 x x (cC A x y x (ff x y g.1).1.1 (ff y x g.2.1).1.1))
-                  (cC B (F.1 x) (F.1 y) (F.1 x) (F.2.1 x y (ff x y g.1).1.1) (F.2.1 y x (ff y x g.2.1).1.1))
-                  (F.2.1 x x (cId A x))
-                  (F.2.2.2 x y x (ff x y g.1).1.1 (ff y x g.2.1).1.1)
-          (compId (cH B (F.1 x) (F.1 x))
-                  (cC B (F.1 x) (F.1 y) (F.1 x) (F.2.1 x y (ff x y g.1).1.1) (F.2.1 y x (ff y x g.2.1).1.1))
-                  (cC B (F.1 x) (F.1 y) (F.1 x) g.1 g.2.1)
-                  (F.2.1 x x (cId A x))
-                  (<i>cC B (F.1 x) (F.1 y) (F.1 x) ((ff x y g.1).1.2@-i) ((ff y x g.2.1).1.2@-i))
-          (compId (cH B (F.1 x) (F.1 x))
-                  (cC B (F.1 x) (F.1 y) (F.1 x) g.1 g.2.1)
-                  (cId B (F.1 x))
-                  (F.2.1 x x (cId A x))
-                  g.2.2.1
-                  (<i>F.2.2.1 x @ -i))))
-        ,lem10' (cH A y y) (cH B (F.1 y) (F.1 y)) (F.2.1 y y, ff y y) (cC A y x y (ff y x g.2.1).1.1 (ff x y g.1).1.1) (cId A y)
-          (compId (cH B (F.1 y) (F.1 y))
-                  (F.2.1 y y (cC A y x y (ff y x g.2.1).1.1 (ff x y g.1).1.1))
-                  (cC B (F.1 y) (F.1 x) (F.1 y) (F.2.1 y x (ff y x g.2.1).1.1) (F.2.1 x y (ff x y g.1).1.1))
-                  (F.2.1 y y (cId A y))
-                  (F.2.2.2 y x y (ff y x g.2.1).1.1 (ff x y g.1).1.1)
-          (compId (cH B (F.1 y) (F.1 y))
-                  (cC B (F.1 y) (F.1 x) (F.1 y) (F.2.1 y x (ff y x g.2.1).1.1) (F.2.1 x y (ff x y g.1).1.1))
-                  (cC B (F.1 y) (F.1 x) (F.1 y) g.2.1 g.1)
-                  (F.2.1 y y (cId A y))
-                  (<i>cC B (F.1 y) (F.1 x) (F.1 y) ((ff y x g.2.1).1.2@-i) ((ff x y g.1).1.2@-i))
-          (compId (cH B (F.1 y) (F.1 y))
-                  (cC B (F.1 y) (F.1 x) (F.1 y) g.2.1 g.1)
-                  (cId B (F.1 y))
-                  (F.2.1 y y (cId A y))
-                  g.2.2.2
-                  (<i>F.2.2.1 y @ -i))))
-        )
-    FG (g : iso B (F.1 x) (F.1 y)) : Id (iso B (F.1 x) (F.1 y)) (F0 (G0 g)) g
-      = isoEq B (F.1 x) (F.1 y) (F0 (G0 g)) g
-        (<i>(ff x y g.1).1.2@-i) (<i>(ff y x g.2.1).1.2@-i)
-    GF (f : iso A x y) : Id (iso A x y) (G0 (F0 f)) f
-      = isoEq A x y (G0 (F0 f)) f
-        (<i> ((ff x y (F.2.1 x y f.1)).2 (f.1,<j>F.2.1 x y f.1)@i).1)
-        (<i> ((ff y x (F.2.1 y x f.2.1)).2 (f.2.1,<j>F.2.1 y x f.2.1)@i).1)
-    hole : Id U (iso A x y) (iso B (F.1 x) (F.1 y)) = isoId (iso A x y) (iso B (F.1 x) (F.1 y)) F0 G0 FG GF
-opaque lemFF
+lemFF (A B : precategory) (F : functor A B) (ff : ffFunctor A B F) (x y : cA A)
+  : Id U (iso A x y) (iso B (F.1 x) (F.1 y))
+  = hole
+  where
+    F0 (f : iso A x y) : iso B (F.1 x) (F.1 y)
+      = (F.2.1 x y f.1, F.2.1 y x f.2.1
+        ,compId (cH B (F.1 x) (F.1 x))
+                (cC B (F.1 x) (F.1 y) (F.1 x) (F.2.1 x y f.1) (F.2.1 y x f.2.1))
+                (F.2.1 x x (cC A x y x f.1 f.2.1))
+                (cId B (F.1 x))
+                (<i>F.2.2.2 x y x f.1 f.2.1 @-i)
+        (compId (cH B (F.1 x) (F.1 x))
+                (F.2.1 x x (cC A x y x f.1 f.2.1))
+                (F.2.1 x x (cId A x))
+                (cId B (F.1 x))
+                (<i>F.2.1 x x (f.2.2.1@i))
+                (F.2.2.1 x))
+        ,compId (cH B (F.1 y) (F.1 y))
+                (cC B (F.1 y) (F.1 x) (F.1 y) (F.2.1 y x f.2.1) (F.2.1 x y f.1))
+                (F.2.1 y y (cC A y x y f.2.1 f.1))
+                (cId B (F.1 y))
+                (<i>F.2.2.2 y x y f.2.1 f.1 @-i)
+        (compId (cH B (F.1 y) (F.1 y))
+                (F.2.1 y y (cC A y x y f.2.1 f.1))
+                (F.2.1 y y (cId A y))
+                (cId B (F.1 y))
+                (<i>F.2.1 y y (f.2.2.2@i))
+                (F.2.2.1 y)))
+    G0 (g : iso B (F.1 x) (F.1 y)) : iso A x y
+      = ((ff x y g.1).1.1
+        ,(ff y x g.2.1).1.1
+        ,lem10' (cH A x x) (cH B (F.1 x) (F.1 x)) (F.2.1 x x, ff x x) (cC A x y x (ff x y g.1).1.1 (ff y x g.2.1).1.1) (cId A x)
+          (compId (cH B (F.1 x) (F.1 x))
+                  (F.2.1 x x (cC A x y x (ff x y g.1).1.1 (ff y x g.2.1).1.1))
+                  (cC B (F.1 x) (F.1 y) (F.1 x) (F.2.1 x y (ff x y g.1).1.1) (F.2.1 y x (ff y x g.2.1).1.1))
+                  (F.2.1 x x (cId A x))
+                  (F.2.2.2 x y x (ff x y g.1).1.1 (ff y x g.2.1).1.1)
+          (compId (cH B (F.1 x) (F.1 x))
+                  (cC B (F.1 x) (F.1 y) (F.1 x) (F.2.1 x y (ff x y g.1).1.1) (F.2.1 y x (ff y x g.2.1).1.1))
+                  (cC B (F.1 x) (F.1 y) (F.1 x) g.1 g.2.1)
+                  (F.2.1 x x (cId A x))
+                  (<i>cC B (F.1 x) (F.1 y) (F.1 x) ((ff x y g.1).1.2@-i) ((ff y x g.2.1).1.2@-i))
+          (compId (cH B (F.1 x) (F.1 x))
+                  (cC B (F.1 x) (F.1 y) (F.1 x) g.1 g.2.1)
+                  (cId B (F.1 x))
+                  (F.2.1 x x (cId A x))
+                  g.2.2.1
+                  (<i>F.2.2.1 x @ -i))))
+        ,lem10' (cH A y y) (cH B (F.1 y) (F.1 y)) (F.2.1 y y, ff y y) (cC A y x y (ff y x g.2.1).1.1 (ff x y g.1).1.1) (cId A y)
+          (compId (cH B (F.1 y) (F.1 y))
+                  (F.2.1 y y (cC A y x y (ff y x g.2.1).1.1 (ff x y g.1).1.1))
+                  (cC B (F.1 y) (F.1 x) (F.1 y) (F.2.1 y x (ff y x g.2.1).1.1) (F.2.1 x y (ff x y g.1).1.1))
+                  (F.2.1 y y (cId A y))
+                  (F.2.2.2 y x y (ff y x g.2.1).1.1 (ff x y g.1).1.1)
+          (compId (cH B (F.1 y) (F.1 y))
+                  (cC B (F.1 y) (F.1 x) (F.1 y) (F.2.1 y x (ff y x g.2.1).1.1) (F.2.1 x y (ff x y g.1).1.1))
+                  (cC B (F.1 y) (F.1 x) (F.1 y) g.2.1 g.1)
+                  (F.2.1 y y (cId A y))
+                  (<i>cC B (F.1 y) (F.1 x) (F.1 y) ((ff y x g.2.1).1.2@-i) ((ff x y g.1).1.2@-i))
+          (compId (cH B (F.1 y) (F.1 y))
+                  (cC B (F.1 y) (F.1 x) (F.1 y) g.2.1 g.1)
+                  (cId B (F.1 y))
+                  (F.2.1 y y (cId A y))
+                  g.2.2.2
+                  (<i>F.2.2.1 y @ -i))))
+        )
+    FG (g : iso B (F.1 x) (F.1 y)) : Id (iso B (F.1 x) (F.1 y)) (F0 (G0 g)) g
+      = isoEq B (F.1 x) (F.1 y) (F0 (G0 g)) g
+        (<i>(ff x y g.1).1.2@-i) (<i>(ff y x g.2.1).1.2@-i)
+    GF (f : iso A x y) : Id (iso A x y) (G0 (F0 f)) f
+      = isoEq A x y (G0 (F0 f)) f
+        (<i> ((ff x y (F.2.1 x y f.1)).2 (f.1,<j>F.2.1 x y f.1)@i).1)
+        (<i> ((ff y x (F.2.1 y x f.2.1)).2 (f.2.1,<j>F.2.1 y x f.2.1)@i).1)
+    hole : Id U (iso A x y) (iso B (F.1 x) (F.1 y)) = isoId (iso A x y) (iso B (F.1 x) (F.1 y)) F0 G0 FG GF
+opaque lemFF
+
+F12 (A B : precategory) (isC : isCategory A) (F : functor A B)
+    (p1 : ffFunctor A B F) (x : cA A) : isContr ((y : cA A) * iso B (F.1 y) (F.1 x))
+  = transport (<i>isContr ((y : cA A) * (invIsoEq B (F.1 x) (F.1 y)@i))) hole
+  where
+    hole2 (y : cA A) : Id U (iso A x y) (iso B (F.1 x) (F.1 y))
+          = lemFF A B F p1 x y
+    hole : isContr ((y : cA A) * iso B (F.1 x) (F.1 y))
+         = transport (<i> isContr ((y : cA A) * (hole2 y @ i))) (isC x)
+opaque F12
+
+-- the uncommented definition is a bit slow to typecheck
+F23 (A B : precategory) (F : functor A B) (p2 : (x : cA A) -> isContr ((y : cA A) * iso B (F.1 y) (F.1 x)))
+    (x : cA B)
+    (a b : (y : cA A) * iso B (F.1 y) x) : Id ((y : cA A) * iso B (F.1 y) x) a b
+    = undefined
+--     = transport p hole3
+--   where
+--     hole2 : Id ((y : cA A) * iso B (F.1 y) (F.1 a.1))
+--             (a.1, idIso B (F.1 a.1)) (b.1, compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2))
+--       = isContrProp ((y : cA A) * iso B (F.1 y) (F.1 a.1)) (p2 a.1)
+--             (a.1, idIso B (F.1 a.1)) (b.1, compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2))
+--     opaque hole2
+--     hole3 : Id ((y : cA A) * iso B (F.1 y) x)
+--             (a.1, compIso B (F.1 a.1) (F.1 a.1) x (idIso B (F.1 a.1)) a.2)
+--             (b.1, compIso B (F.1 b.1) (F.1 a.1) x (compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2)) a.2)
+--           = <i> ((hole2@i).1, compIso B (F.1 (hole2@i).1) (F.1 a.1) x (hole2@i).2 a.2)
+--     opaque hole3
+--     p : Id U (Id ((y : cA A) * iso B (F.1 y) x)
+--               (a.1, compIso B (F.1 a.1) (F.1 a.1) x (idIso B (F.1 a.1)) a.2)
+--               (b.1, compIso B (F.1 b.1) (F.1 a.1) x (compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2)) a.2))
+--              (Id ((y : cA A) * iso B (F.1 y) x) a b)
+--       = (<i>Id ((y : cA A) * iso B (F.1 y) x)
+--                (a.1, IdLIso B (F.1 a.1) x a.2 @ i)
+--                (b.1, compId (iso B (F.1 b.1) x)
+--                        (compIso B (F.1 b.1) (F.1 a.1) x (compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2)) a.2)
+--                        (compIso B (F.1 b.1) x x b.2 (compIso B x (F.1 a.1) x (invIso B (F.1 a.1) x a.2) a.2))
+--                        b.2
+--                        (IdCIso B (F.1 b.1) x (F.1 a.1) x b.2 (invIso B (F.1 a.1) x a.2) a.2)
+--                     (compId (iso B (F.1 b.1) x)
+--                        (compIso B (F.1 b.1) x x b.2 (compIso B x (F.1 a.1) x (invIso B (F.1 a.1) x a.2) a.2))
+--                        (compIso B (F.1 b.1) x x b.2 (idIso B x))
+--                        b.2
+--                        (<i>compIso B (F.1 b.1) x x b.2 (IdInvLIso B (F.1 a.1) x a.2 @ i))
+--                        (IdRIso B (F.1 b.1) x b.2))
+--                        @ i))
+opaque F23
+
+--
+-- Equivalences of precategories
+--
+
+catIsEquiv (A B : precategory) (F : functor A B) : U
+  = (_ : ffFunctor A B F)
+  * ((b : cA B) -> (a : cA A) * iso B (F.1 a) b)
+catEquiv (A B : precategory) : U = (F : functor A B) * catIsEquiv A B F
+catPropIsEquiv (A B : precategory) (isC : isCategory A) (F : functor A B) : prop (catIsEquiv A B F)
+  = propSig (ffFunctor A B F) (\(_ : ffFunctor A B F) -> (b : cA B) -> (a : cA A) * iso B (F.1 a) b)
+            (propFFFunctor A B F)
+            (\(ff : ffFunctor A B F) -> propPi (cA B) (\(b : cA B) -> (a : cA A) * iso B (F.1 a) b)
+               (\(b : cA B) -> F23 A B F (F12 A B isC F ff) b))
+catIdIsEquiv (A : precategory) : catIsEquiv A A (idFunctor A)
+  = (\(a b : cA A) -> idIsEquiv (cH A a b)
+    ,\(b:cA A) -> (b, idIso A b))
+catIdEquiv (A : precategory) : catEquiv A A = (idFunctor A, catIdIsEquiv A)
+
+catIsIso (A B : precategory) (F : functor A B) : U
+  = (_ : ffFunctor A B F) * isEquiv (cA A) (cA B) F.1
+catPropIsIso (A B : precategory) (F : functor A B) : prop (catIsIso A B F)
+  = propSig (ffFunctor A B F) (\(_ : ffFunctor A B F) -> isEquiv (cA A) (cA B) F.1)
+            (propFFFunctor A B F)
+            (\(_ : ffFunctor A B F) -> propIsEquiv (cA A) (cA B) F.1)
+catIso (A B : precategory) : U = (F : functor A B) * catIsIso A B F
+
+--------------------------------------------------------------------------------
+catIso3 (A B : precategory) : U = (e1 : Id U (cA A) (cA B))
+                                * (e2 : IdP (<i>(x y : e1@i)->U) (cH A) (cH B))
+                                * (_ : IdP (<i> (x:e1@i)->(e2@i) x x) (cId A) (cId B))
+                                * (IdP (<i> (x y z:e1@i)->(e2@i) x y->(e2@i) y z->(e2@i) x z) (cC A) (cC B))
+
+eCatIso3 (A B : precategory) : Id U (Id precategory A B) (catIso3 A B)
+  = isoId (Id precategory A B) (catIso3 A B)
+    F G FG GF
+  where
+    F (e:Id precategory A B):catIso3 A B = (<i>(e@i).1.1, <i>(e@i).1.2, <i>(e@i).2.1, <i>(e@i).2.2.1)
+    G (e:catIso3 A B):Id precategory A B = <i> ((e.1@i, e.2.1@i), e.2.2.1@i, e.2.2.2@i
+                                               ,lemIdPProp (isPrecategory2 A.1 A.2.1 A.2.2.1)
+                                                           (isPrecategory2 B.1 B.2.1 B.2.2.1)
+                                                           (propIsPrecategory2 A.1 A.2.1 A.2.2.1)
+                                                           (<i>isPrecategory2 (e.1@i, e.2.1@i) (e.2.2.1@i) (e.2.2.2@i))
+                                                           A.2.2.2 B.2.2.2 @ i)
+    FG(e:catIso3 A B):Id (catIso3 A B) (F (G e)) e=<_>e
+    GF(e:Id precategory A B):Id (Id precategory A B) (G (F e)) e
+      =<i j>((e@j).1, (e@j).2.1, (e@j).2.2.1
+            ,lemIdPSet (isPrecategory2 A.1 A.2.1 A.2.2.1)
+                       (isPrecategory2 B.1 B.2.1 B.2.2.1)
+                       (propSet (isPrecategory2 A.1 A.2.1 A.2.2.1) (propIsPrecategory2 A.1 A.2.1 A.2.2.1))
+                       (<i>isPrecategory2 (e@i).1 (e@i).2.1 (e@i).2.2.1)
+                       A.2.2.2 B.2.2.2
+                       (<j> (G (F e)@j).2.2.2) (<j>(e@j).2.2.2)
+                       @ i @ j)
+
+catIso30 (A B : precategory) : U = (e1 : Id U (cA A) (cA B))
+                                 * (e2 : Id ((x y : cA A)->U) (cH A) (\(x y:cA A)->cH B (transport e1 x) (transport e1 y)))
+                                 * (_ : Id ((x:cA A)->cH A x x)
+                                           (cId A)
+                                           (\(x : cA A) -> transport (<j>(e2@-j) x x) (cId B (transport e1 x))))
+                                 * (Id ((x y z:cA A)->cH A x y->cH A y z->cH A x z)
+                                       (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->cC A x y z f g)
+                                       (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
+                                       transport (<i>(e2@-i) x z)
+                                        (cC B (transport e1 x) (transport e1 y) (transport e1 z)
+                                           (transport (<i>(e2@i) x y) f)
+                                           (transport (<i>(e2@i) y z) g))))
+
+eCatIso30 (A B : precategory) : Id U (catIso3 A B) (catIso30 A B)
+  = <i> (e1 : Id U (cA A) (cA B))
+      * (let e21 : (x y : e1@-i) -> U
+                 = comp (<_> (x y : e1@-i) -> U)
+                   (\(x y : e1@-i) -> cH B (transport (<j>e1@-i\/j) x) (transport (<j>e1@-i\/j) y))
+                   [(i=1)-><_>\(x y:cA A) -> cH B (transport e1 x) (transport e1 y)
+                   ,(i=0)-><j>\(x y:cA B) -> cH B (transRefl (cA B) x @ j) (transRefl (cA B) y @ j)
+                   ]
+             f21 : Id ((x y : e1@-i) -> U)
+                   (\(x y : e1@-i) -> cH B (transport (<j>e1@-i\/j) x) (transport (<j>e1@-i\/j) y))
+                   e21
+                 = fill (<_> (x y : e1@-i) -> U)
+                   (\(x y : e1@-i) -> cH B (transport (<j>e1@-i\/j) x) (transport (<j>e1@-i\/j) y))
+                   [(i=1)-><_>\(x y:cA A) -> cH B (transport e1 x) (transport e1 y)
+                   ,(i=0)-><j>\(x y:cA B) -> cH B (transRefl (cA B) x @ j) (transRefl (cA B) y @ j)
+                   ]
+         in
+        (e2 : IdP (<j> (x y : e1@j/\-i) -> U) (cH A) e21)
+      * (_ : IdP (<j> (x : e1@j/\-i) -> (e2@j/\-i) x x)
+                 (cId A)
+                 (comp (<_> (x:e1@-i)->(e2@-i) x x)
+                       (\(x : e1@-i) -> transport (<j>(e2@-i\/-j) x x) (transport (<j>(f21@j) x x) (cId B (transport (<j>e1@-i\/j) x))))
+                       [(i=1)-><j>\(x:cA A) -> transport (<j>(e2@-j) x x) (transRefl ((f21@0) x x) (cId B (transport e1 x)) @ j)
+                       ,(i=0)-><j>\(x:cA B) ->
+                               transRefl ((e2@1) x x)
+                               (compId (cH B x x)
+                                (transport (<k>cH B (transRefl (cA B) x@k) (transRefl (cA B) x@k))
+                                           (cId B (transport (<_> cA B) x)))
+                                (transport (<_>cH B x x) (cId B x))
+                                (cId B x)
+                                (<j>transport (<k>cH B (transRefl (cA B) x@j\/k) (transRefl (cA B) x@j\/k))
+                                              (cId B (transRefl (cA B) x @ j)))
+                                (transRefl (cH B x x) (cId B x))
+                                @ j) @ j
+                       ]))
+      * (IdP (<j> (x y z : e1@j/\-i) (f : (e2@j/\-i) x y) (g : (e2@j/\-i) y z) -> (e2@j/\-i) x z)
+             (cC A)
+             (comp (<_> (x y z : e1@-i) (f : (e2@-i) x y) (g : (e2@-i) y z) -> (e2@-i) x z)
+                   (\(x y z : e1@-i) (f : (e2@-i) x y) (g : (e2@-i) y z) ->
+                     transport (<j>(e2@-i\/-j) x z) (transport (<j>(f21@j) x z)
+                 (cC B (transport (<j>e1@-i\/j) x) (transport (<j>e1@-i\/j) y) (transport (<j>e1@-i\/j) z)
+                      (transport (<j>(f21@-j) x y) (transport (<j>(e2@-i\/j) x y) f))
+                      (transport (<j>(f21@-j) y z) (transport (<j>(e2@-i\/j) y z) g)))))
+                   [(i=1)-><j>\(x y z : cA A) (f : cH A x y) (g : cH A y z) ->
+                     transport (<j>(e2@-j) x z) (transRefl ((f21@0) x z)
+                     (cC B (transport e1 x) (transport e1 y) (transport e1 z)
+                      (transRefl ((f21@0) x y) (transport (<j>(e2@j) x y) f) @ j)
+                      (transRefl ((f21@0) y z) (transport (<j>(e2@j) y z) g) @ j)) @ j)
+                   ,(i=0)-><j>\(x y z : cA B) (f : cH B x y) (g : cH B y z) ->
+                           transRefl ((e2@1) x z)
+                           (compId (cH B x z)
+                           (transport (<k>cH B (transRefl (cA B) x@k) (transRefl (cA B) z@k))
+                            (cC B (transport (<_>cA B) x) (transport (<_>cA B) y) (transport (<_>cA B) z)
+                             (transport (<k>cH B (transRefl (cA B) x@-k) (transRefl (cA B) y@-k)) (transport (<j>(e2@1) x y) f))
+                             (transport (<k>cH B (transRefl (cA B) y@-k) (transRefl (cA B) z@-k)) (transport (<j>(e2@1) y z) g))))
+                           (transport (<_>cH B x z)
+                            (cC B x y z
+                             (transport (<_>cH B x y) f)
+                             (transport (<_>cH B y z) g)))
+                           (cC B x y z f g)
+                           (<j>transport (<k>cH B (transRefl (cA B) x@j\/k) (transRefl (cA B) z@j\/k))
+                            (cC B (transRefl (cA B) x@j) (transRefl (cA B) y@j) (transRefl (cA B) z@j)
+                             (transport (<k>cH B (transRefl (cA B) x@j\/-k) (transRefl (cA B) y@j\/-k)) (transRefl ((e2@1) x y) f@j))
+                             (transport (<k>cH B (transRefl (cA B) y@j\/-k) (transRefl (cA B) z@j\/-k)) (transRefl ((e2@1) y z) g@j))))
+                           (<j>transRefl (cH B x z) (cC B x y z (transRefl (cH B x y) f @ j) (transRefl (cH B y z) g @ j)) @ j)
+                           @ j) @ j
+                   ])))
+
+catIso311 (A B : precategory) (e1:Id U (cA A) (cA B)) : U
+  = Id ((x y : cA A)->U) (cH A) (\(x y:cA A)->cH B (transport e1 x) (transport e1 y))
+catIso312 (A B : precategory) (e1:Id U (cA A) (cA B)) (e2:catIso311 A B e1) : U
+  = Id ((x:cA A)->cH B (transport e1 x) (transport e1 x))
+       (\(x:cA A)->transport (<i> (e2@i) x x) (cId A x))
+       (\(x : cA A) -> cId B (transport e1 x))
+catIso313 (A B : precategory) (e1:Id U (cA A) (cA B)) (e2:catIso311 A B e1) : U
+  = Id ((x y z:cA A)->cH A x y->cH A y z->cH B (transport e1 x) (transport e1 z))
+       (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->transport (<i>(e2@i)x z) (cC A x y z f g))
+       (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
+         cC B (transport e1 x) (transport e1 y) (transport e1 z)
+         (transport (<i>(e2@i) x y) f)
+         (transport (<i>(e2@i) y z) g))
+catIso31 (A B : precategory) : U = (e1 : Id U (cA A) (cA B))
+                                 * (e2 : catIso311 A B e1)
+                                 * (_ : catIso312 A B e1 e2)
+                                 * ( catIso313 A B e1 e2)
+
+eCatIso31 (A B : precategory) : Id U (catIso30 A B) (catIso31 A B)
+  = <i> (e1 : Id U (cA A) (cA B))
+      * (e2 : Id ((x y : cA A)->U) (cH A) (\(x y:cA A)->cH B (transport e1 x) (transport e1 y)))
+      * (_:comp (<_> U)
+            (Id ((x:cA A)->(e2@i) x x)
+                (\(x:cA A)->transport (<j> (e2@i/\j) x x) (cId A x))
+                (\(x:cA A)->transport (<j> (e2@i\/-j) x x) (cId B (transport e1 x))))
+            [(i=0)-><k>Id ((x:cA A)->cH A x x)
+                          (\(x:cA A)->transRefl (cH A x x) (cId A x) @ k)
+                          (\(x:cA A)->transport (<j> (e2@-j) x x) (cId B (transport e1 x)))
+            ,(i=1)-><k>Id ((x:cA A)->(e2@i) x x)
+                          (\(x:cA A)->transport (<j> (e2@j) x x) (cId A x))
+                          (\(x:cA A)->transRefl ((e2@1) x x) (cId B (transport e1 x)) @ k)
+            ])
+      * (comp (<_> U)
+          (Id ((x y z:cA A)->cH A x y->cH A y z->(e2@i) x z)
+              (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
+                transport (<j> (e2@i/\j) x z) (cC A x y z f g))
+              (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
+                transport (<j>(e2@i\/-j) x z)
+                (cC B (transport e1 x) (transport e1 y) (transport e1 z)
+                 (transport (<j>(e2@j) x y) f)
+                 (transport (<j>(e2@j) y z) g))))
+          [(i=0)-><k>Id ((x y z:cA A)->cH A x y->cH A y z->cH A x z)
+                        (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
+                          transRefl ((e2@0) x z) (cC A x y z f g) @ k)
+                        (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
+                          transport (<j>(e2@-j) x z)
+                          (cC B (transport e1 x) (transport e1 y) (transport e1 z)
+                           (transport (<j>(e2@j) x y) f)
+                           (transport (<j>(e2@j) y z) g)))
+          ,(i=1)-><k>Id ((x y z:cA A)->cH A x y->cH A y z->(e2@1) x z)
+                        (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
+                          transport (<j>(e2@j) x z) (cC A x y z f g))
+                        (\(x y z:cA A)(f:cH A x y)(g:cH A y z)->
+                          transRefl ((e2@1) x z)
+                          (cC B (transport e1 x) (transport e1 y) (transport e1 z)
+                           (transport (<j>(e2@j) x y) f)
+                           (transport (<j>(e2@j) y z) g)) @ k)
+          ])
+
+lemEquivCoh (A B:U) (e:equiv A B) (x:A)
+  : Id (Id B (e.1 x) (e.1 (invEq A B e (e.1 x))))
+       (<j>e.1(secEq A B e x@-j))
+       (<j>retEq A B e (e.1 x)@-j)
+  = <i> comp (<j> Id B (e.1 x) (e.1 (secEq A B e x @ -i /\ -j)))
+             (((e.2 (e.1 x)).2 (x,<_>e.1 x)@-i).2)
+             [(i=0)-><j><k>e.1 (secEq A B e x@-k\/-j)
+             ,(i=1)-><j><k>retEq A B e (e.1 x)@-k
+             ]
 
-F12 (A B : precategory) (isC : isCategory A) (F : functor A B)
-    (p1 : ffFunctor A B F) (x : cA A) : isContr ((y : cA A) * iso B (F.1 y) (F.1 x))
-  = transport (<i>isContr ((y : cA A) * (invIsoEq B (F.1 x) (F.1 y)@i))) hole
+sigEquivLem (A A':U) (B:A->U) (B':A'->U)
+            (e:equiv A A')
+            (f:(x:A)->equiv (B x) (B' (e.1 x)))
+          : equiv (Sigma A B) (Sigma A' B')
+          = (F, gradLemma (Sigma A B) (Sigma A' B') F G FG GF)
   where
-    hole2 (y : cA A) : Id U (iso A x y) (iso B (F.1 x) (F.1 y))
-          = lemFF A B F p1 x y
-    hole : isContr ((y : cA A) * iso B (F.1 x) (F.1 y))
-         = transport (<i> isContr ((y : cA A) * (hole2 y @ i))) (isC x)
-opaque F12
+    F (x:Sigma A B):Sigma A' B' = (e.1 x.1, (f x.1).1 x.2)
+    G (x:Sigma A' B'):Sigma A B = ((e.2 x.1).1.1, ((f (e.2 x.1).1.1).2 (transport (<i> B' ((e.2 x.1).1.2 @ i)) x.2)).1.1)
+    FG (x:Sigma A' B'):Id (Sigma A' B') (F (G x)) x
+      = <i> ((e.2 x.1).1.2 @ -i
+            ,comp (<_> B' ((e.2 x.1).1.2 @ -i))
+              (transport (<j> B' ((e.2 x.1).1.2 @ j/\-i)) x.2)
+              [(i=0)-><j>((f (e.2 x.1).1.1).2 (transport (<i> B' ((e.2 x.1).1.2 @ i)) x.2)).1.2 @ j
+              ,(i=1)-><j>transRefl (B' ((e.2 x.1).1.2 @ 0)) x.2@j
+              ])
+    GF (x:Sigma A B):Id (Sigma A B) (G (F x)) x
+      = <i> (secEq A A' e x.1 @ i
+            ,comp (<_> B (secEq A A' e x.1 @ i))
+             ((f (secEq A A' e x.1 @ i)).2 (transport (<j> B' (e.1 (secEq A A' e x.1 @ i\/-j))) ((f x.1).1 x.2))).1.1
+             [(i=0)-><k>((f (secEq A A' e x.1 @ 0)).2 (transport (<i> B' (lemEquivCoh A A' e x.1@k@i)) ((f x.1).1 x.2))).1.1
+             ,(i=1)-><k>compId (B x.1)
+                        ((f x.1).2 (transport (<j> B' (e.1 x.1)) ((f x.1).1 x.2))).1.1
+                        ((f x.1).2 ((f x.1).1 x.2)).1.1
+                        x.2
+                        (<k>((f x.1).2 (transRefl (B' (e.1 x.1)) ((f x.1).1 x.2)@k)).1.1)
+                        (secEq (B x.1) (B' (e.1 x.1)) (f x.1) x.2) @ k
+             ])
 
-F23 (A B : precategory) (F : functor A B) (p2 : (x : cA A) -> isContr ((y : cA A) * iso B (F.1 y) (F.1 x)))
-    (x : cA B)
-    (a b : (y : cA A) * iso B (F.1 y) x) : Id ((y : cA A) * iso B (F.1 y) x) a b
-    = undefined
---     = transport p hole3
---   where
---     hole2 : Id ((y : cA A) * iso B (F.1 y) (F.1 a.1))
---             (a.1, idIso B (F.1 a.1)) (b.1, compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2))
---       = isContrProp ((y : cA A) * iso B (F.1 y) (F.1 a.1)) (p2 a.1)
---             (a.1, idIso B (F.1 a.1)) (b.1, compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2))
---     opaque hole2
---     hole3 : Id ((y : cA A) * iso B (F.1 y) x)
---             (a.1, compIso B (F.1 a.1) (F.1 a.1) x (idIso B (F.1 a.1)) a.2)
---             (b.1, compIso B (F.1 b.1) (F.1 a.1) x (compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2)) a.2)
---           = <i> ((hole2@i).1, compIso B (F.1 (hole2@i).1) (F.1 a.1) x (hole2@i).2 a.2)
---     opaque hole3
---     p : Id U (Id ((y : cA A) * iso B (F.1 y) x)
---               (a.1, compIso B (F.1 a.1) (F.1 a.1) x (idIso B (F.1 a.1)) a.2)
---               (b.1, compIso B (F.1 b.1) (F.1 a.1) x (compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2)) a.2))
---              (Id ((y : cA A) * iso B (F.1 y) x) a b)
---       = (<i>Id ((y : cA A) * iso B (F.1 y) x)
---                (a.1, IdLIso B (F.1 a.1) x a.2 @ i)
---                (b.1, compId (iso B (F.1 b.1) x)
---                        (compIso B (F.1 b.1) (F.1 a.1) x (compIso B (F.1 b.1) x (F.1 a.1) b.2 (invIso B (F.1 a.1) x a.2)) a.2)
---                        (compIso B (F.1 b.1) x x b.2 (compIso B x (F.1 a.1) x (invIso B (F.1 a.1) x a.2) a.2))
---                        b.2
---                        (IdCIso B (F.1 b.1) x (F.1 a.1) x b.2 (invIso B (F.1 a.1) x a.2) a.2)
---                     (compId (iso B (F.1 b.1) x)
---                        (compIso B (F.1 b.1) x x b.2 (compIso B x (F.1 a.1) x (invIso B (F.1 a.1) x a.2) a.2))
---                        (compIso B (F.1 b.1) x x b.2 (idIso B x))
---                        b.2
---                        (<i>compIso B (F.1 b.1) x x b.2 (IdInvLIso B (F.1 a.1) x a.2 @ i))
---                        (IdRIso B (F.1 b.1) x b.2))
---                        @ i))
-opaque F23
+sigEquivLem' (A A':U) (B:A->U) (B':A'->U)
+             (e:equiv A A')
+             (f:(x:A)->Id U (B x) (B' (e.1 x)))
+           : Id U (Sigma A B) (Sigma A' B')
+           = transEquivToId (Sigma A B) (Sigma A' B') (sigEquivLem A A' B B' e (\(x:A)->transEquiv' (B' (e.1 x)) (B x) (f x)))
 
-catIsEquiv (A B : precategory) (F : functor A B) : U
-  = (_ : ffFunctor A B F)
-  * ((b : cA B) -> (a : cA A) * iso B (F.1 a) b)
-catEquiv (A B : precategory) : U = (F : functor A B) * catIsEquiv A B F
-catPropIsEquiv (A B : precategory) (isC : isCategory A) (F : functor A B) : prop (catIsEquiv A B F)
-  = propSig (ffFunctor A B F) (\(_ : ffFunctor A B F) -> (b : cA B) -> (a : cA A) * iso B (F.1 a) b)
-            (propFFFunctor A B F)
-            (\(ff : ffFunctor A B F) -> propPi (cA B) (\(b : cA B) -> (a : cA A) * iso B (F.1 a) b)
-               (\(b : cA B) -> F23 A B F (F12 A B isC F ff) b))
-catIdIsEquiv (A : precategory) : catIsEquiv A A (idFunctor A)
-  = (\(a b : cA A) -> idIsEquiv (cH A a b)
-    ,\(b:cA A) -> (b, idIso A b))
-catIdEquiv (A : precategory) : catEquiv A A = (idFunctor A, catIdIsEquiv A)
+catIso321 (A B : precategory) (e1:Id U (cA A) (cA B)) : U
+  = (x y:cA A) -> Id U (cH A x y) (cH B (transport e1 x) (transport e1 y))
+catIso322 (A B : precategory) (e1:Id U (cA A) (cA B)) (e2:catIso321 A B e1) : U
+  = (x:cA A) -> Id (cH B (transport e1 x) (transport e1 x))
+       (transport (e2 x x) (cId A x))
+       (cId B (transport e1 x))
+catIso323 (A B : precategory) (e1:Id U (cA A) (cA B)) (e2:catIso321 A B e1) : U
+  = (x y z:cA A)(f:cH A x y)(g:cH A y z)->
+    Id (cH B (transport e1 x) (transport e1 z))
+       (transport (e2 x z) (cC A x y z f g))
+       (cC B (transport e1 x) (transport e1 y) (transport e1 z)
+        (transport (e2 x y) f)
+        (transport (e2 y z) g))
+catIso32 (A B : precategory) : U = (e1 : Id U (cA A) (cA B))
+                                 * (e2 : catIso321 A B e1)
+                                 * (_ : catIso322 A B e1 e2)
+                                 * ( catIso323 A B e1 e2)
 
-catIsIso (A B : precategory) (F : functor A B) : U
-  = (_ : ffFunctor A B F) * isEquiv (cA A) (cA B) F.1
-catPropIsIso (A B : precategory) (F : functor A B) : prop (catIsIso A B F)
-  = propSig (ffFunctor A B F) (\(_ : ffFunctor A B F) -> isEquiv (cA A) (cA B) F.1)
-            (propFFFunctor A B F)
-            (\(_ : ffFunctor A B F) -> propIsEquiv (cA A) (cA B) F.1)
-catIso (A B : precategory) : U = (F : functor A B) * catIsIso A B F
+eCatIso32 (A B : precategory) : Id U (catIso31 A B) (catIso32 A B)
+  = <i> (e1 : Id U (cA A) (cA B))
+      * (let F(e2:catIso311 A B e1):catIso321 A B e1 = \(x y:cA A)-><i>(e2@i) x y in
+      transEquivToId
+        ((e2 : catIso311 A B e1) * (_ : catIso312 A B e1 e2) * ( catIso313 A B e1 e2))
+        ((e2 : catIso321 A B e1) * (_ : catIso322 A B e1 e2) * ( catIso323 A B e1 e2))
+        (sigEquivLem (catIso311 A B e1) (catIso321 A B e1)
+         (\(e2 : catIso311 A B e1) -> (_ : catIso312 A B e1 e2) * ( catIso313 A B e1 e2))
+         (\(e2 : catIso321 A B e1) -> (_ : catIso322 A B e1 e2) * ( catIso323 A B e1 e2))
+          (F, gradLemma (catIso311 A B e1) (catIso321 A B e1)
+               F (\(e2:catIso321 A B e1)-><i>\(x y:cA A)->(e2 x y)@i)
+               (\(e2:catIso321 A B e1)-><_>e2) (\(e2:catIso311 A B e1)-><_>e2))
+        (\(e2:catIso311 A B e1)->
+        (sigEquivLem (catIso312 A B e1 e2) (catIso322 A B e1 (F e2))
+         (\(_ : catIso312 A B e1 e2) -> (catIso313 A B e1 e2))
+         (\(_ : catIso322 A B e1 (F e2)) -> (catIso323 A B e1 (F e2)))
+          (let F2(e:catIso312 A B e1 e2):catIso322 A B e1 (F e2)=\(x:cA A)-><i>(e@i)x in
+           (F2, gradLemma (catIso312 A B e1 e2) (catIso322 A B e1 (F e2))
+                 F2 (\(e:catIso322 A B e1 (F e2))-><i>\(x:cA A)->(e x)@i)
+                 (\(e:catIso322 A B e1 (F e2))-><_>e) (\(e:catIso312 A B e1 e2)-><_>e)))
+        (\(_:catIso312 A B e1 e2)->
+         (let F3(e:catIso313 A B e1 e2):catIso323 A B e1 (F e2)=\(x y z:cA A)(f:cH A x y)(g:cH A y z)-><i>(e@i)x y z f g in
+          (F3, gradLemma (catIso313 A B e1 e2) (catIso323 A B e1 (F e2))
+                F3 (\(e:catIso323 A B e1 (F e2))-><i>\(x y z:cA A)(f:cH A x y)(g:cH A y z)->(e x y z f g)@i)
+                (\(e:catIso323 A B e1 (F e2))-><_>e) (\(e:catIso313 A B e1 e2)-><_>e))
+        )))))) @ i
 
 catIso21 (A B : precategory) (e1:equiv (cA A) (cA B)) : U
   = (x y:cA A) -> equiv (cH A x y) (cH B (e1.1 x) (e1.1 y))
@@ -930,6 +949,7 @@ eCatIso2 (A B:precategory):Id U (catIso32 A B) (catIso2 A B)
                  (cC B (transport e1 x) (transport e1 y) (transport e1 z) (p2 x y f@i) (p2 y z g@i)))
       )))
 
+--------------------------------------------------------------------------------
 
 catIsoIsEquiv (A B : precategory) (F : functor A B) (e : catIsIso A B F) : catIsEquiv A B F
   = (e.1,\(b:cA B)->((e.2 b).1.1, eqToIso B (F.1 (e.2 b).1.1) b (<i>(e.2 b).1.2@-i)))
@@ -971,6 +991,7 @@ catIsoEqId (A B : precategory) : Id U (catIso A B) (Id precategory A B)
 
 catEquivEqId (A B : precategory) (isCA : isCategory A) (isCB : isCategory B) : Id U (catEquiv A B) (Id precategory A B)
   = compId U (catEquiv A B) (catIso A B) (Id precategory A B) (catEquivEqIso A B isCA isCB) (catIsoEqId A B)
+opaque catEquivEqId
 
 catEquivEqId' (A : category) : isContr ((B : category) * catEquiv A.1 B.1)
   = transport (<i> isContr ((B : category) * catEquivEqId A.1 B.1 A.2 B.2@-i))
@@ -983,6 +1004,11 @@ catEquivEqId' (A : category) : isContr ((B : category) * catEquiv A.1 B.1)
                      (<i> isCategory (BB.2@i))
                      A.2 BB.1.2 @ i)
         ,<j> BB.2@i/\j))
+opaque catEquivEqId'
+
+--
+-- Pullbacks
+--
 
 --         f'
 --    W -----> Z
index 7fd2875b4d641ccf13a062be8353f496f357641e..d4ade76fc0c18258a4ae1e41d8b706a03862c069 100644 (file)
@@ -9,6 +9,20 @@ mkFt (ob : nat -> U) (ft0 : (n : nat) -> ob (suc n) -> ob n) : (n : nat) -> ob n
   zero  -> \(x : ob zero) -> (zero, x)
   suc n -> \(x : ob (suc n)) -> (n, ft0 n x)
 
+--
+-- C0-Systems
+-- Objects of C0-systems are given by a length indexed family "ob : nat -> U", to avoid equalities on object lengths
+-- The ??? morphisms (p : (x y : A) -> Id A (ft x) y -> hom x y) depend on a path in "Id A (ft x) y" because we can't
+-- enforce a definitional equality in "Id A (ft f*(X)) Y" in this square :
+--
+--      q(f, X)
+-- f*(X) ----> X
+-- |           |
+-- |           | p_X
+-- |           |
+-- Y -------> ft(X)
+--      f
+--
 isC0System (ob : nat -> U) (hom : Sigma nat ob -> Sigma nat ob -> U) (isC : isPrecategory (Sigma nat ob, hom)) : U
   = let A : U = Sigma nat ob
         CD : categoryData = (A,hom)
@@ -74,30 +88,39 @@ c0Square (C : C0System) (T : c0CanSq C)
 c0FtH (C : C0System) (Y X : cA (c0C C)) (f : cH (c0C C) Y X) : cH (c0C C) Y (c0Ft C X)
   = cC (c0C C) Y X (c0Ft C X) f (c0P C X (c0Ft C X) (<_> c0Ft C X))
 
-isCSystem2Cospan (C : C0System) (T : c0CanSq C) : cospan (c0C C)
+--
+-- A C0-system is a C-system if all of its canonical squares ("c0CanSq C") are pullback squares
+--
+
+isCSystemCospan (C : C0System) (T : c0CanSq C) : cospan (c0C C)
   = let X : cA (c0C C) = (suc T.1, T.2.1) in
     (c0Ft C X,
      (T.2.2.1, T.2.2.2),
      (X, c0P C X (c0Ft C X) (<_>c0Ft C X)))
 
-isCSystem2CospanCone (C : C0System) (T : c0CanSq C) : cospanCone (c0C C) (isCSystem2Cospan C T)
+isCSystemCospanCone (C : C0System) (T : c0CanSq C) : cospanCone (c0C C) (isCSystemCospan C T)
   = (c0Star C T,
      c0P C (c0Star C T) T.2.2.1 (c0FtStar C T),
      c0Q C T,
      c0Square C T)
 
-isCSystem2Type (C : C0System) (T : c0CanSq C) : U
+isCSystemType (C : C0System) (T : c0CanSq C) : U
   = isPullback (c0C C)
-      (isCSystem2Cospan C T)
-      (isCSystem2CospanCone C T)
-isCSystem2 (C : C0System) : U
-  = (T : c0CanSq C) -> isCSystem2Type C T
+      (isCSystemCospan C T)
+      (isCSystemCospanCone C T)
+isCSystem (C : C0System) : U
+  = (T : c0CanSq C) -> isCSystemType C T
+
+isCSystemProp (C : C0System) : prop (isCSystem C)
+  = propPi (c0CanSq C) (\(T : c0CanSq C) -> isCSystemType C T)
+    (\(T : c0CanSq C) -> isPullbackProp (c0C C) (isCSystemCospan C T) (isCSystemCospanCone C T))
 
-isCSystem2Prop (C : C0System) : prop (isCSystem2 C)
-  = propPi (c0CanSq C) (\(T : c0CanSq C) -> isCSystem2Type C T)
-    (\(T : c0CanSq C) -> isPullbackProp (c0C C) (isCSystem2Cospan C T) (isCSystem2CospanCone C T))
+CSystem : U = (ob : nat -> U) * (hom : Sigma nat ob -> Sigma nat ob -> U) * (isC : isPrecategory (Sigma nat ob, hom))
+            * (c0 : isC0System ob hom isC) * isCSystem (ob, hom, isC, c0)
 
 --
+-- Definition of a universe category
+--
 
 uc : U
    = (C : precategory)
@@ -106,6 +129,7 @@ uc : U
    * (V : cA C) * (VT : cA C) * (p : cH C VT V)
    * ((f : homTo C V) -> hasPullback C (V, f, VT, p))
 
+-- An equivalence of universe categories is an equivalence of categories compatible with the "p" morphism
 ucEquiv (A B : uc) : U
   = (e : catEquiv A.1 B.1)
   * (V : Id (cA B.1) (e.1.1 A.2.2.2.1) B.2.2.2.1)
@@ -115,6 +139,14 @@ ucEquiv (A B : uc) : U
 ucEquivId (A B : uc) (e : ucEquiv A B) : Id uc A B
   = let p : Id ((C:category)*catEquiv A.1 C.1) ((A.1, A.2.1), catIdEquiv A.1) ((B.1, B.2.1), e.1)
           = isContrProp ((C:category)*catEquiv A.1 C.1) (catEquivEqId' (A.1, A.2.1)) ((A.1, A.2.1), catIdEquiv A.1) ((B.1, B.2.1), e.1)
+        opaque p
+        pFinal : IdP (<i> hasFinal (p@i).1.1) A.2.2.1  B.2.2.1
+               = lemIdPProp (hasFinal A.1)
+                            (hasFinal B.1)
+                            (hasFinalProp A.1 A.2.1)
+                            (<i>hasFinal (p@i).1.1)
+                            A.2.2.1 B.2.2.1
+        opaque pFinal
         pV : IdP (<i> cA (p@i).1.1) A.2.2.2.1 B.2.2.2.1
            = <i> comp (<_> cA (p@i).1.1) ((p@i).2.1.1 A.2.2.2.1)
                   [(i=0)-><_>A.2.2.2.1 ,(i=1)-><k>e.2.1@k]
@@ -127,22 +159,29 @@ ucEquivId (A B : uc) (e : ucEquiv A B) : Id uc A B
                        (fill (<_> cA (p@i).1.1) ((p@i).2.1.1 A.2.2.2.1) [(i=0)-><_>A.2.2.2.1 ,(i=1)-><k>e.2.1@k]@k))
                   ((p@i).2.1.2.1 A.2.2.2.2.1 A.2.2.2.1 A.2.2.2.2.2.1)
                   [(i=0)-><_>A.2.2.2.2.2.1, (i=1)-><k>e.2.2.2@k]
+        opaque pV
+        opaque pVT
+        opaque pP
+        pPb : IdP (<i> (f : homTo (p@i).1.1 (pV@i)) -> hasPullback (p@i).1.1 (pV@i, f, pVT@i, pP@i)) A.2.2.2.2.2.2 B.2.2.2.2.2.2
+            = lemIdPProp ((f : homTo A.1 (pV@0)) -> hasPullback A.1 (pV@0, f, pVT@0, pP@0))
+                         ((f : homTo B.1 (pV@1)) -> hasPullback B.1 (pV@1, f, pVT@1, pP@1))
+                         (propPi (homTo A.1 (pV@0)) (\(f : homTo A.1 (pV@0)) -> hasPullback A.1 (pV@0, f, pVT@0, pP@0))
+                          (\(f : homTo A.1 (pV@0)) -> hasPullbackProp A.1 A.2.1 (pV@0, f, pVT@0, pP@0)))
+                         (<i>(f : homTo (p@i).1.1 (pV@i)) -> hasPullback (p@i).1.1 (pV@i, f, pVT@i, pP@i))
+                         A.2.2.2.2.2.2 B.2.2.2.2.2.2
+        opaque pPb
+        t:nat=zero
     in <i> ((p@i).1.1
            ,(p@i).1.2
-           ,lemIdPProp (hasFinal A.1)
-                       (hasFinal B.1)
-                       (hasFinalProp A.1 A.2.1)
-                       (<i>hasFinal (p@i).1.1)
-                       A.2.2.1 B.2.2.1 @ i
+           ,pFinal@i
            ,pV@i, pVT@i, pP@i
-           ,lemIdPProp ((f : homTo A.1 (pV@0)) -> hasPullback A.1 (pV@0, f, pVT@0, pP@0))
-                       ((f : homTo B.1 (pV@1)) -> hasPullback B.1 (pV@1, f, pVT@1, pP@1))
-                       (propPi (homTo A.1 (pV@0)) (\(f : homTo A.1 (pV@0)) -> hasPullback A.1 (pV@0, f, pVT@0, pP@0))
-                        (\(f : homTo A.1 (pV@0)) -> hasPullbackProp A.1 A.2.1 (pV@0, f, pVT@0, pP@0)))
-                       (<i>(f : homTo (p@i).1.1 (pV@i)) -> hasPullback (p@i).1.1 (pV@i, f, pVT@i, pP@i))
-                       A.2.2.2.2.2.2 B.2.2.2.2.2.2 @ i)
-
-ucToC0 (C : uc) : C0System = hole
+           ,pPb@i)
+
+
+--
+-- Definition of a C0-system from a universe category
+--
+ucToC0 (C : uc) : CSystem = hole
   where
     V : cA C.1 = C.2.2.2.1
     VT : cA C.1 = C.2.2.2.2.1
@@ -176,6 +215,7 @@ ucToC0 (C : uc) : C0System = hole
     D : isPrecategory DD
       = (DId, DC, homDSet, DIdL, DIdR, DIdC)
     DC : precategory = (DD, D)
+    -- ^ Definition of the precategory
 
     ft0 (n : nat) (x : ob (suc n)) : ob n = x.1
     ft (x : obD) : obD = mkFt ob ft0 x.1 x.2
@@ -187,6 +227,11 @@ ucToC0 (C : uc) : C0System = hole
     fstar (n : nat) (X : ob (suc n)) (Y : obD) (f : homD Y (n, X.1)) : obD
       = (suc Y.1, Y.2, cC C.1 (intD Y) (int n X.1) V f X.2)
 
+    -- The C-system constructed from the universe category has the definitional equality ft(f*(X)) = Y,
+    -- but this cannot be required to hold definitionally in the definition of C-systems, so what we need
+    -- to prove contains transports by reflexivity.
+    -- To simplify the proofs, the proofs are done without this transport first, and transported to the
+    -- right types afterwards.
     q_ (n : nat) (X : ob (suc n)) (Y : obD) (f : homD Y (n, X.1))
       : (q : homD (fstar n X Y f) (suc n, X))
       * (qSq : Id (homD (fstar n X Y f) (n, X.1))
@@ -257,18 +302,41 @@ ucToC0 (C : uc) : C0System = hole
               pbD (intD A.1, A.2.1, A.2.2.1, A.2.2.2)
            )
 
+    sqD0 (n : nat) (X : ob (suc n)) (Y : obD) (f : homD Y (n, X.1))
+      : (f_star : ob (suc Y.1)) * (ftf : Id obD (Y.1, ft0 Y.1 f_star) Y)
+      * (q : homD (suc Y.1, f_star) (suc n, X))
+      * (qSq : Id (homD (suc Y.1, f_star) (n, X.1))
+                  (cC DC (suc Y.1, f_star) Y (n, X.1) (pD (suc Y.1, f_star) Y ftf) f)
+                  (cC DC (suc Y.1, f_star) (suc n, X) (n, X.1) q (pD (suc n, X) (n, X.1) (<_> (n, X.1)))))
+      * isPullback DC ((n, X.1), (Y, f), ((suc n, X), pD (suc n, X) (n, X.1) (<_> (n, X.1))))
+                      ((suc Y.1, f_star), pD (suc Y.1, f_star) Y ftf, q, qSq)
+      = ((fstar n X Y f).2, <_> Y, (q_ n X Y f).1,
+          transport
+            (<i> (qSq : Id (homD (fstar n X Y f) (n, X.1))
+                           (cC DC (fstar n X Y f) Y (n, X.1) (transRefl (cH DC (fstar n X Y f) Y) (p0 (suc Y.1) (fstar n X Y f).2) @ -i) f)
+                           (cC DC (fstar n X Y f) (suc n, X) (n, X.1) (q_ n X Y f).1 (transRefl (cH DC (suc n, X) (n, X.1)) (p0 (suc n) X) @ -i))
+                 )
+               * isPullback DC ((n, X.1), (Y, f), ((suc n, X), (transRefl (cH DC (suc n, X) (n, X.1)) (p0 (suc n) X) @ -i)))
+                               (fstar n X Y f, (transRefl (cH DC (fstar n X Y f) Y) (p0 (suc Y.1) (fstar n X Y f).2) @ -i), (q_ n X Y f).1, qSq)
+                    )
+            ((q_ n X Y f).2.1, (q_ n X Y f).2.2.2))
+
+    -- Projections of the previous proof to the actual datum of the C system
     sqD (n : nat) (X : ob (suc n)) (Y : obD) (f : homD Y (n, X.1))
       : (f_star : ob (suc Y.1)) * (ftf : Id obD (Y.1, ft0 Y.1 f_star) Y)
       * (q : homD (suc Y.1, f_star) (suc n, X))
       * Id (homD (suc Y.1, f_star) (n, X.1))
            (cC DC (suc Y.1, f_star) Y (n, X.1) (pD (suc Y.1, f_star) Y ftf) f)
            (cC DC (suc Y.1, f_star) (suc n, X) (n, X.1) q (pD (suc n, X) (n, X.1) (<_> (n, X.1))))
-      = ((fstar n X Y f).2, <_> Y, (q_ n X Y f).1,
-          transport
-            (<i> Id (homD (fstar n X Y f) (n, X.1))
-              (cC DC (fstar n X Y f) Y (n, X.1) (transRefl (cH DC (fstar n X Y f) Y) (p0 (suc Y.1) (fstar n X Y f).2) @ -i) f)
-              (cC DC (fstar n X Y f) (suc n, X) (n, X.1) (q_ n X Y f).1 (transRefl (cH DC (suc n, X) (n, X.1)) (p0 (suc n) X) @ -i)))
-            (q_ n X Y f).2.1)
+      = ((sqD0 n X Y f).1, (sqD0 n X Y f).2.1, (sqD0 n X Y f).2.2.1, (sqD0 n X Y f).2.2.2.1)
+
+    pbSq (sq : (n : nat) * (X : ob (suc n)) * (Y : obD) * (homD Y (n, X.1)))
+       : isPullback DC ((sq.1, sq.2.1.1), (sq.2.2.1, sq.2.2.2), ((suc sq.1, sq.2.1), pD (suc sq.1, sq.2.1) (sq.1, sq.2.1.1) (<_> (sq.1, sq.2.1.1))))
+                       (fstar sq.1 sq.2.1 sq.2.2.1 sq.2.2.2
+                       ,pD (suc sq.2.2.1.1, (fstar sq.1 sq.2.1 sq.2.2.1 sq.2.2.2).2) sq.2.2.1 (sqD sq.1 sq.2.1 sq.2.2.1 sq.2.2.2).2.1
+                       ,(sqD sq.1 sq.2.1 sq.2.2.1 sq.2.2.2).2.2.1
+                       ,(sqD sq.1 sq.2.1 sq.2.2.1 sq.2.2.2).2.2.2)
+       = (sqD0 sq.1 sq.2.1 sq.2.2.1 sq.2.2.2).2.2.2.2
 
     qId (n : nat) (X : ob (suc n)) :
         (p0 : Id obD (fstar n X (n, X.1) (cId DC (n, X.1))) (suc n, X))
@@ -491,5 +559,5 @@ ucToC0 (C : uc) : C0System = hole
                    (q_ n X Z (cC DC Z Y (n, X.1) g f)).1)
           (qComp n X Y f Z g)
 
-    hole : C0System
-         = (ob, homD, D, obSet, ft0, pD, sqD, qId, qComp')
+    hole : CSystem
+         = (ob, homD, D, (obSet, ft0, pD, sqD, qId, qComp'), pbSq)
index d8c110576c12dcb099a27c72b4d45d8880e55bf4..2856e2352f7d8d08ae0c21194246f3227fbfa7ed 100644 (file)
@@ -12,7 +12,7 @@ isEquiv (A B : U) (f : A -> B) : U = (y : B) -> isContr (fiber A B f y)
 equiv (A B : U) : U = (f : A -> B) * isEquiv A B f
 
 propIsEquiv (A B : U) (f : A -> B)
-  : prop (isEquiv A B f) = 
+  : prop (isEquiv A B f) =
   \ (u0 u1:isEquiv A B f) -> <i> \ (y:B) -> propIsContr (fiber A B f y) (u0 y) (u1 y) @ i
 
 equivLemma (A B : U)
@@ -34,6 +34,7 @@ retEq (A B:U) (w:equiv A B) (y:B) : Id B (w.1 (invEq A B w y)) y =
 
 secEq (A B:U) (w:equiv A B) (x:A) : Id A (invEq A B w (w.1 x)) x =
  <i> ((w.2 (w.1 x)).2 (x,<j>w.1 x)@i).1
+ --
 
 transEquiv (A B:U) (p:Id U A B) : equiv A B = (f,p)
  where
@@ -161,4 +162,3 @@ isoId (A B : U) (f : A -> B) (g : B -> A)
 
 idIsEquivGrad (A : U) : isEquiv A A (idfun A) =
   gradLemma A A (idfun A) (idfun A) (\(a : A) -> <i> a) (\(a : A) -> <i> a)
-
index 75f2bce27afa95d7a200829d904128e255d1e7fd..44a4fac54c7fc231499f55ca3cf1abb2ffb66a0a 100644 (file)
@@ -80,7 +80,7 @@ lemCompInv (A:U) (a b c:A) (p:Id A a b) (q:Id A b c)
 
 lemInv (A:U) (a b:A) (p:Id A a b) : Id (Id A b b) (compId A b a b (inv A a b p) p)  (refl A b) =
    <j i> comp (<k>A) (p @ (-i \/ j)) [(i=0) -> <l>b, (j=1) -> <l>b, (i=1) -> <k> p @ (j \/ k)]
-   
+
 test0 (A : U) (a b : A) (p : Id A a b) : Id A a a = refl A (p @ 0)
 test1 (A : U) (a b : A) (p : Id A a b) : Id A b b = refl A (p @ 1)
 
@@ -107,7 +107,7 @@ lemSimpl (A : U) (a b c : A) (p : Id A a b) (q q' : Id A b c)
            , (k = 1)  -> s @ j ]
 
 IdPathTest1 (A : U) (a b : A) (p : Id A a b) :
-  Id (Id A a b) p (<i> comp (<j> A) (p @ i) [(i=0) -> <j> a,(i=1) -> <j> b]) = 
+  Id (Id A a b) p (<i> comp (<j> A) (p @ i) [(i=0) -> <j> a,(i=1) -> <j> b]) =
   <j i> fill (<k> A) (p @ i) [(i=0) -> <k> a,(i=1) -> <k> b] @ j
 
 idfun (A : U) (a : A) : A = a
@@ -162,12 +162,12 @@ propPi (A : U) (B : A -> U) (h : (x : A) -> prop (B x))
        (f0 f1 : (x : A) -> B x) : Id ((x : A) -> B x) f0 f1
   = <i> \ (x:A) -> (h x (f0 x) (f1 x)) @ i
 
-lemPropF (A : U) (P : A -> U) (pP : (x : A) -> prop (P x)) (a0 a1 :A) 
+lemPropF (A : U) (P : A -> U) (pP : (x : A) -> prop (P x)) (a0 a1 :A)
          (p : Id A a0 a1) (b0 : P a0) (b1 : P a1) : IdP (<i>P (p@i)) b0 b1 =
  <i>pP (p@i) (comp (<j>P (p@i/\j)) b0 [(i=0) -> <_>b0]) (comp (<j>P (p@i\/-j)) b1 [(i=1) -> <_>b1])@i
 
 -- other proof
--- lemPropF (A : U) (P : A -> U) (pP : (x : A) -> prop (P x)) (a :A) : 
+-- lemPropF (A : U) (P : A -> U) (pP : (x : A) -> prop (P x)) (a :A) :
 --          (a1 : A) (p : Id A a a1) (b0 : P a) (b1 : P a1) -> IdP (<i>P (p@i)) b0 b1 =
 -- J A a (\ (a1 : A) (p : Id A a a1) ->
 --          (b0 : P a) (b1 : P a1) -> IdP (<i>P (p@i)) b0 b1)
@@ -285,4 +285,3 @@ and (A B : U) : U = (_ : A) * B
 
 propAnd (A B : U) (pA : prop A) (pB : prop B) : prop (and A B) =
   propSig A (\(_ : A) -> B) pA (\(_ : A) -> pB)
-