| [ H1: (lift ?1 ?2 t0) = (lift ?1 ?2 ?3) |- ? ] ->
LApply (H0 ?3 ?1 ?2); [ Clear H0 H1; Intros | XAuto ].
| [ H1: (lift ?1 ?2 t0) = (lift ?1 ?2 ?3) |- ? ] ->
LApply (H0 ?3 ?1 ?2); [ Clear H0 H1; Intros | XAuto ].
(*#* #caption "main properties of lift" #clauses lift_props *)
(*#* #caption "injectivity" *)
(*#* #cap #alpha x in T1, t in T2, d in i *)
Theorem lift_inj : (x,t:?; h,d:?) (lift h d x) = (lift h d t) -> x = t.
(*#* #caption "main properties of lift" #clauses lift_props *)
(*#* #caption "injectivity" *)
(*#* #cap #alpha x in T1, t in T2, d in i *)
Theorem lift_inj : (x,t:?; h,d:?) (lift h d x) = (lift h d t) -> x = t.
(* case 3 : TTail k *)
XElim k; Intros; [ Rewrite lift_bind in H1 | Rewrite lift_flat in H1 ];
LiftGenBase; Rewrite H1; IH; IH; XAuto.
(* case 3 : TTail k *)
XElim k; Intros; [ Rewrite lift_bind in H1 | Rewrite lift_flat in H1 ];
LiftGenBase; Rewrite H1; IH; IH; XAuto.
(*#* #caption "generation lemma for lift" *)
(*#* #cap #cap t1 #alpha t2 in T, x in T2, d1 in i1, d2 in i2 *)
(*#* #caption "generation lemma for lift" *)
(*#* #cap #cap t1 #alpha t2 in T, x in T2, d1 in i1, d2 in i2 *)
Apply (lt_le_e n d2); Intros.
(* case 2.2.1 : n < d2 *)
LiftGenBase; Rewrite H0; Clear H0 x.
Apply (lt_le_e n d2); Intros.
(* case 2.2.1 : n < d2 *)
LiftGenBase; Rewrite H0; Clear H0 x.
(* case 2.2.2 : n >= d2 *)
Apply (lt_le_e n (plus d2 h2)); Intros.
(* case 2.2.2.1 : n < d2 + h2 *)
(* case 2.2.2 : n >= d2 *)
Apply (lt_le_e n (plus d2 h2)); Intros.
(* case 2.2.2.1 : n < d2 + h2 *)
[ XAuto | Rewrite plus_permute_2_in_3; XAuto ].
(* case 2.2.2.2 : n >= d2 + h2 *)
Rewrite (le_plus_minus_sym h2 (plus n h1)) in H0; [ Idtac | XEAuto ].
[ XAuto | Rewrite plus_permute_2_in_3; XAuto ].
(* case 2.2.2.2 : n >= d2 + h2 *)
Rewrite (le_plus_minus_sym h2 (plus n h1)) in H0; [ Idtac | XEAuto ].
EApply ex2_intro;
[ Rewrite le_minus_plus; [ Idtac | XEAuto ]
| Rewrite (le_plus_minus_sym h2 n); [ Idtac | XEAuto ] ];
EApply ex2_intro;
[ Rewrite le_minus_plus; [ Idtac | XEAuto ]
| Rewrite (le_plus_minus_sym h2 n); [ Idtac | XEAuto ] ];