+++ /dev/null
-(*#* #stop file *)
-
-Require Export subst0_defs.
-
- Inductive subst1 [i:nat; v:T; t1:T] : T -> Prop :=
- | subst1_refl : (subst1 i v t1 t1)
- | subst1_single : (t2:?) (subst0 i v t1 t2) -> (subst1 i v t1 t2).
-
- Hint subst1 : ltlc := Constructors subst1.
-
- Section subst1_props. (***************************************************)
-
- Theorem subst1_tail: (v,u1,u2:?; i:?) (subst1 i v u1 u2) ->
- (k:?; t1,t2:?) (subst1 (s k i) v t1 t2) ->
- (subst1 i v (TTail k u1 t1) (TTail k u2 t2)).
- Intros until 1; XElim H; Clear u2.
-(* case 1: csubst1_refl *)
- Intros until 1; XElim H; Clear t2; XAuto.
-(* case 2: csubst1_single *)
- Intros until 2; XElim H0; Clear t3; XAuto.
- Qed.
-
- End subst1_props.
-
- Hints Resolve subst1_tail : ltlc.
-
- Section subst1_gen_base. (************************************************)
-
- Theorem subst1_gen_sort : (v,x:?; i,n:?) (subst1 i v (TSort n) x) ->
- x = (TSort n).
- Intros; XElim H; Clear x; Intros;
- Try Subst0GenBase; XAuto.
- Qed.
-
- Theorem subst1_gen_lref : (v,x:?; i,n:?) (subst1 i v (TLRef n) x) ->
- x = (TLRef n) \/
- n = i /\ x = (lift (S n) (0) v).
- Intros; XElim H; Clear x; Intros;
- Try Subst0GenBase; XAuto.
- Qed.
-
- Theorem subst1_gen_tail : (k:?; v,u1,t1,x:?; i:?)
- (subst1 i v (TTail k u1 t1) x) ->
- (EX u2 t2 | x = (TTail k u2 t2) &
- (subst1 i v u1 u2) &
- (subst1 (s k i) v t1 t2)
- ).
- Intros; XElim H; Clear x; Intros;
- Try Subst0GenBase; XEAuto.
- Qed.
-
- End subst1_gen_base.
-
- Tactic Definition Subst1GenBase :=
- Match Context With
- | [ H: (subst1 ?1 ?2 (TTail ?3 ?4 ?5) ?6) |- ? ] ->
- LApply (subst1_gen_tail ?3 ?2 ?4 ?5 ?6 ?1); [ Clear H; Intros H | XAuto ];
- XElim H; Intros.