ninductive eq (A: Type[0]) (a: A) : A → CProp[0] ≝
refl: eq A a a.
+nlemma eq_rect_Type0_r':
+ ∀A.∀a,x.∀p:eq ? x a.∀P: ∀x:A. eq ? x a → Type[0]. P a (refl A a) → P x p.
+ #A; #a; #x; #p; ncases p; #P; #H; nassumption.
+nqed.
+
+nlemma eq_rect_Type0_r:
+ ∀A.∀a.∀P: ∀x:A. eq ? x a → Type[0]. P a (refl A a) → ∀x.∀p:eq ? x a.P x p.
+ #A; #a; #P; #p; #x0; #p0; napply (eq_rect_Type0_r' ??? p0); nassumption.
+nqed.
+
nlemma eq_rect_CProp0_r':
∀A.∀a,x.∀p:eq ? x a.∀P: ∀x:A. eq ? x a → CProp[0]. P a (refl A a) → P x p.
#A; #a; #x; #p; ncases p; #P; #H; nassumption.
→ P);
+
ndefinition i2d : ∀a,b.∀x,y:I2 a b.
∀e1:a = a.∀e2:R1 T1 a (λz,p.T2 z) b a e1 = b.
∀e: R2 T1 a (λz,p.T2 z) b (λz1,p1,z2,p2.I2 z1 z2) x a e1 b e2 = y.Type[2] ≝