--- /dev/null
+Require drop_props.
+Require pc3_props.
+Require ty0_defs.
+Require ty0_lift.
+
+ Section ty0_correct. (****************************************************)
+
+(*#* #caption "correctness of types" *)
+(*#* #cap #cap c, t1, t2 #alpha t in T3 *)
+
+ Theorem ty0_correct : (g:?; c:?; t1,t2:?)
+ (ty0 g c t1 t2) -> (EX t | (ty0 g c t2 t)).
+
+(*#* #stop file *)
+
+ Intros; XElim H; Intros.
+(* case 1 : ty0_conv *)
+ XEAuto.
+(* case 2 : ty0_sort *)
+ XEAuto.
+(* case 3 : ty0_abbr *)
+ XElim H2; XEAuto.
+(* case 4 : ty0_abst *)
+ XEAuto.
+(* case 5 : ty0_bind *)
+ XElim H4; XEAuto.
+(* case 6 : ty0_appl *)
+ XElim H0; XElim H2; Intros.
+ Ty0GenBase; XEAuto.
+(* case 7 : ty0_cast *)
+ XAuto.
+ Qed.
+
+ End ty0_correct.
+
+ Tactic Definition Ty0Correct :=
+ Match Context With
+ [ _: (ty0 ?1 ?2 ?3 ?4) |- ? ] ->
+ LApply (ty0_correct ?1 ?2 ?3 ?4); [ Intros H_x | XAuto ];
+ XElim H_x; Intros.
+
+(*#* #start file *)
+
+ Section ty0_shift. (******************************************************)
+
+(*#* #caption "shift lemma for types" *)
+(*#* #cap #cap t1, t2 #alpha c in C1, e in C2 *)
+
+ Theorem ty0_shift : (h:?; c,e:?) (drop h (0) c e) ->
+ (g:?; t1,t2:?) (ty0 g c t1 t2) -> (wf0 g e) ->
+ (ty0 g e (app c h t1) (app c h t2)).
+
+(*#* #stop file *)
+
+ XElim h.
+(* case 1 : h = 0 *)
+ Intros; DropGenBase; Rewrite <- H.
+ Repeat Rewrite app_O; XAuto.
+(* case 2 : h > 0 *)
+ Intros h IHh; XElim c.
+(* case 2.1 : CSort *)
+ Intros; DropGenBase; Rewrite H.
+ Simpl; XAuto.
+(* case 2.2 : CTail k *)
+ Intros c IHc; Clear IHc; XElim k; Intros; Wf0Ty0.
+ DropGenBase; Move H0 after H2; Ty0Correct.
+ Simpl; Apply IHh; [ Idtac | EApply ty0_bind | Idtac ]; XEAuto.
+ Qed.
+
+ End ty0_shift.
+
+ Hints Resolve ty0_shift : ltlc.
+
+(*#* #start file *)
+
+ Section ty0_unique. (*****************************************************)
+
+(*#* #caption "uniqueness of types" *)
+(*#* #cap #cap c, t1, t2 #alpha u in T *)
+
+ Theorem ty0_unique : (g:?; c:?; u,t1:?) (ty0 g c u t1) ->
+ (t2:?) (ty0 g c u t2) -> (pc3 c t1 t2).
+
+(*#* #stop file *)
+
+ Intros until 1; XElim H; Intros.
+(* case 1 : ty0_conv *)
+ XEAuto.
+(* case 2 : ty0_sort *)
+ Ty0GenBase; XAuto.
+(* case 3 : ty0_abbr *)
+ Ty0GenBase; DropDis; Inversion H4.
+ Rewrite H7 in H2; Rewrite H8 in H2; XEAuto.
+(* case 4 : ty0_abst *)
+ Ty0GenBase; DropDis; Inversion H4.
+ Rewrite H7 in H2; Rewrite H8 in H2; XEAuto.
+(* case 5 : ty0_bind *)
+ Ty0GenBase; XEAuto.
+(* case 6 : ty0_appl *)
+ Ty0GenBase; EApply pc3_t; [ Idtac | EApply H3 ]; XEAuto.
+(* case 7 : ty0_cast *)
+ Ty0GenBase; XEAuto.
+ Qed.
+
+ End ty0_unique.
+
+ Hints Resolve ty0_unique : ltlc.