-ndefinition R0 ≝ λT:Type[0].λt:T.t.
-
-ndefinition R1 ≝ eq_rect_Type0.
-
-ndefinition R2 :
- ∀T0:Type[0].
- ∀a0:T0.
- ∀T1:∀x0:T0. a0=x0 → Type[0].
- ∀a1:T1 a0 (refl ? a0).
- ∀T2:∀x0:T0. ∀p0:a0=x0. ∀x1:T1 x0 p0. R1 ?? T1 a1 ? p0 = x1 → Type[0].
- ∀a2:T2 a0 (refl ? a0) a1 (refl ? a1).
- ∀b0:T0.
- ∀e0:a0 = b0.
- ∀b1: T1 b0 e0.
- ∀e1:R1 ?? T1 a1 ? e0 = b1.
- T2 b0 e0 b1 e1.
-#T0;#a0;#T1;#a1;#T2;#a2;#b0;#e0;#b1;#e1;
-napply (eq_rect_Type0 ????? e1);
-napply (R1 ?? ? ?? e0);
-napply a2;
-nqed.
-
-ndefinition R3 :
- ∀T0:Type[0].
- ∀a0:T0.
- ∀T1:∀x0:T0. a0=x0 → Type[0].
- ∀a1:T1 a0 (refl ? a0).
- ∀T2:∀x0:T0. ∀p0:a0=x0. ∀x1:T1 x0 p0. R1 ?? T1 a1 ? p0 = x1 → Type[0].
- ∀a2:T2 a0 (refl ? a0) a1 (refl ? a1).
- ∀T3:∀x0:T0. ∀p0:a0=x0. ∀x1:T1 x0 p0.∀p1:R1 ?? T1 a1 ? p0 = x1.
- ∀x2:T2 x0 p0 x1 p1.R2 ???? T2 a2 x0 p0 ? p1 = x2 → Type[0].
- ∀a3:T3 a0 (refl ? a0) a1 (refl ? a1) a2 (refl ? a2).
- ∀b0:T0.
- ∀e0:a0 = b0.
- ∀b1: T1 b0 e0.
- ∀e1:R1 ?? T1 a1 ? e0 = b1.
- ∀b2: T2 b0 e0 b1 e1.
- ∀e2:R2 ???? T2 a2 b0 e0 ? e1 = b2.
- T3 b0 e0 b1 e1 b2 e2.
-#T0;#a0;#T1;#a1;#T2;#a2;#T3;#a3;#b0;#e0;#b1;#e1;#b2;#e2;
-napply (eq_rect_Type0 ????? e2);
-napply (R2 ?? ? ???? e0 ? e1);
-napply a3;
-nqed.
-
-(* include "nat/nat.ma".
-
-ninductive nlist : nat → Type[0] ≝
-| nnil : nlist O
-| ncons : ∀n:nat.nat → nlist n → nlist (S n).
-
-ninductive wrapper : Type[0] ≝
-| kw1 : ∀x.∀y:nlist x.wrapper
-| kw2 : ∀x.∀y:nlist x.wrapper.
-
-nlemma fie : ∀a,b,c,d.∀e:eq ? (kw1 a b) (kw1 c d).
- ∀P:(∀x1.∀x2:nlist x1. ∀y1.∀y2:nlist y1.eq ? (kw1 x1 x2) (kw1 y1 y2) → Prop).
- P a b a b (refl ??) → P a b c d e.
-#a;#b;#c;#d;#e;#P;#HP;
-ndiscriminate e;#e0;
-nsubst e0;#e1;
-nsubst e1;#E;
-(* nsubst E; purtroppo al momento funziona solo nel verso sbagliato *)
-nrewrite > E;
-napply HP;
-nqed.*)
-
-(***************)
-