]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/coq-contribs/LAMBDA-TYPES/subst0_defs.v
ocaml 3.09 transition
[helm.git] / helm / coq-contribs / LAMBDA-TYPES / subst0_defs.v
index 5c9c2e5c8abd580693178dda8da92f2913760f52..d99a405dbb1ca3e6ea07537ae0bf6aa9a3d6048b 100644 (file)
@@ -1,16 +1,24 @@
-(*#* #stop file *)
-
 Require Export lift_defs.
 
+(*#* #caption "axioms for strict substitution in terms",
+   "substituted local reference",
+   "substituted tail item: first operand", 
+   "substituted tail item: second operand", 
+   "substituted tail item: both operands"
+*)
+(*#* #cap #cap t, t1, t2 #alpha v in W, u in V, u1 in V1, u2 in V2, k in z, s in p *)
+
       Inductive subst0 : nat -> T -> T -> T -> Prop :=
-         | subst0_bref : (v:?; i:?) (subst0 i v (TBRef i) (lift (S i) (0) v))
-         | subst0_fst  : (v,w,u:?; i:?) (subst0 i v u w) ->
-                         (t:?; k:?) (subst0 i v (TTail k u t) (TTail k w t))
-         | subst0_snd  : (k:?; v,w,t:?; i:?) (subst0 (s k i) v t w) -> (u:?)
-                         (subst0 i v (TTail k u t) (TTail k u w))
-         | subst0_both : (v,u1,u2:?; i:?) (subst0 i v u1 u2) ->
-                         (k:?; t1,t2:?) (subst0 (s k i) v t1 t2) ->
-                         (subst0 i v (TTail k u1 t1) (TTail k u2 t2)).
+         | subst0_lref: (v:?; i:?) (subst0 i v (TLRef i) (lift (S i) (0) v))
+         | subst0_fst : (v,u2,u1:?; i:?) (subst0 i v u1 u2) ->
+                        (t:?; k:?) (subst0 i v (TTail k u1 t) (TTail k u2 t))
+         | subst0_snd : (k:?; v,t2,t1:?; i:?) (subst0 (s k i) v t1 t2) -> (u:?)
+                        (subst0 i v (TTail k u t1) (TTail k u t2))
+         | subst0_both: (v,u1,u2:?; i:?) (subst0 i v u1 u2) ->
+                        (k:?; t1,t2:?) (subst0 (s k i) v t1 t2) ->
+                        (subst0 i v (TTail k u1 t1) (TTail k u2 t2)).
+
+(*#* #stop file *)
 
       Hint subst0 : ltlc := Constructors subst0.
 
@@ -21,7 +29,7 @@ Require Export lift_defs.
       Intros; Inversion H.
       Qed.
 
-      Theorem subst0_gen_bref : (v,x:?; i,n:?) (subst0 i v (TBRef n) x) ->
+      Theorem subst0_gen_lref : (v,x:?; i,n:?) (subst0 i v (TLRef n) x) ->
                                 n = i /\ x = (lift (S n) (0) v).
       Intros; Inversion H; XAuto.
       Qed.
@@ -46,10 +54,9 @@ Require Export lift_defs.
          Match Context With
             | [ H: (subst0 ?1 ?2 (TSort ?3) ?4) |- ? ] ->
                Apply (subst0_gen_sort ?2 ?4 ?1 ?3); Apply H
-            | [ H: (subst0 ?1 ?2 (TBRef ?3) ?4) |- ? ] ->
-               LApply (subst0_gen_bref ?2 ?4 ?1 ?3); [ Clear H; Intros H | XAuto ];
+            | [ H: (subst0 ?1 ?2 (TLRef ?3) ?4) |- ? ] ->
+               LApply (subst0_gen_lref ?2 ?4 ?1 ?3); [ Clear H; Intros H | XAuto ];
                XElim H; Intros
             | [ H: (subst0 ?1 ?2 (TTail ?3 ?4 ?5) ?6) |- ? ] ->
                LApply (subst0_gen_tail ?3 ?2 ?4 ?5 ?6 ?1); [ Clear H; Intros H | XAuto ];
                XElim H; Intros H; XElim H; Intros.
-