]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/coq-contribs/LAMBDA-TYPES/ty0_subst0.v
we restored the scripts of \lambda\delta version 1
[helm.git] / helm / coq-contribs / LAMBDA-TYPES / ty0_subst0.v
diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_subst0.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_subst0.v
deleted file mode 100644 (file)
index ffd8011..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-Require drop_props.
-Require csubst0_defs.
-Require fsubst0_defs.
-Require pc3_props.
-Require pc3_subst0.
-Require ty0_defs.
-Require ty0_gen.
-Require ty0_lift.
-Require ty0_props.
-
-   Section ty0_fsubst0. (****************************************************)
-
-(*#* #stop macro *)
-
-      Tactic Definition IH H0 v1 v2 v3 v4 v5 :=
-         LApply (H0 v1 v2 v3 v4); [ Intros H_x | XEAuto ];
-         LApply H_x; [ Clear H_x; Intros H_x | XEAuto ];
-         LApply (H_x v5); [ Clear H_x; Intros | XEAuto ].
-
-      Tactic Definition IHT :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 ?1 ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) ?1 (CTail e (Bind Abbr) u0)) -> ?;
-              _: (subst0 ?4 ?5 ?2 ?6);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H ?4 ?5 ?1 ?6 ?9.
-
-      Tactic Definition IHTb1 :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?;
-              _: (subst0 ?4 ?5 ?10 ?6);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H '(S ?4) ?5 '(CTail ?1 (Bind ?11) ?6) ?2 ?9.
-
-      Tactic Definition IHTb2 :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?;
-              _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?6);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H '(S ?4) ?5 '(CTail ?1 (Bind ?11) ?10) ?6 ?9.
-
-      Tactic Definition IHC :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 ?1 ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) ?1 (CTail e (Bind Abbr) u0)) -> ?;
-              _: (csubst0 ?4 ?5 ?1 ?6);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H ?4 ?5 ?6 ?2 ?9.
-
-      Tactic Definition IHCb :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?;
-              _: (csubst0 ?4 ?5 ?1 ?6);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?10) ?2 ?9.
-
-      Tactic Definition IHTTb :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?;
-              _: (subst0 ?4 ?5 ?10 ?6);
-              _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?7);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H '(S ?4) ?5 '(CTail ?1 (Bind ?11) ?6) ?7 ?9.
-
-      Tactic Definition IHCT :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 ?1 ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) ?1 (CTail e (Bind Abbr) u0)) -> ?;
-              _: (csubst0 ?4 ?5 ?1 ?6);
-              _: (subst0 ?4 ?5 ?2 ?7);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H ?4 ?5 ?6 ?7 ?9.
-
-      Tactic Definition IHCTb1 :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?;
-              _: (csubst0 ?4 ?5 ?1 ?6);
-              _: (subst0 ?4 ?5 ?10 ?7);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?7) ?2 ?9.
-
-      Tactic Definition IHCTb2 :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?;
-              _: (csubst0 ?4 ?5 ?1 ?6);
-              _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?7);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?10) ?7 ?9.
-
-      Tactic Definition IHCTTb :=
-         Match Context With
-            [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) ->
-                 (wf0 ?3 c2) ->
-                 (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?;
-              _: (csubst0 ?4 ?5 ?1 ?6);
-              _: (subst0 ?4 ?5 ?10 ?7);
-              _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?8);
-              _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] ->
-               IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?7) ?8 ?9.
-
-(*#* #start macro *)
-
-(*#* #caption "substitution preserves types" *)
-(*#* #cap #cap c1, c2, e, t1, t2, t #alpha u in V *)
-
-(* NOTE: This breaks the mutual recursion between ty0_subst0 and ty0_csubst0 *)
-      Theorem ty0_fsubst0: (g:?; c1:?; t1,t:?) (ty0 g c1 t1 t) ->
-                           (i:?; u,c2,t2:?) (fsubst0 i u c1 t1 c2 t2) ->
-                           (wf0 g c2) ->
-                           (e:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) ->
-                           (ty0 g c2 t2 t).
-
-(*#* #stop file *)
-
-      Intros until 1; XElim H.
-(* case 1: ty0_conv *)
-      Intros until 6; XElim H4; Intros.
-(* case 1.1: fsubst0_snd *)
-      IHT; EApply ty0_conv; XEAuto.
-(* case 1.2: fsubst0_fst *)
-      IHC; EApply ty0_conv; Try EApply pc3_fsubst0; XEAuto.
-(* case 1.3: fsubst0_both *)
-      IHCT; IHCT; EApply ty0_conv; Try EApply pc3_fsubst0; XEAuto.
-(* case 2: ty0_sort *)
-      Intros until 2; XElim H0; Intros.
-(* case 2.1: fsubst0_snd *)
-      Subst0GenBase.
-(* case 2.2: fsubst0_fst *)
-      XAuto.
-(* case 2.3: fsubst0_both *)
-      Subst0GenBase.
-(* case 3: ty0_abbr *)
-      Intros until 5; XElim H3; Intros; Clear c1 c2 t t1 t2.
-(* case 3.1: fsubst0_snd *)
-      Subst0GenBase; Rewrite H6; Rewrite <- H3 in H5; Clear H3 H6 i t3.
-      DropDis; Inversion H5; Rewrite <- H6 in H0; Rewrite H7 in H1; XEAuto.
-(* case 3.2: fsubst0_fst *)
-      Apply (lt_le_e n i); Intros; CSubst0Drop.
-(* case 3.2.1: n < i, none *)
-      EApply ty0_abbr; XEAuto.
-(* case 3.2.2: n < i, csubst0_snd *)
-      Inversion H0; CSubst0Drop.
-      Rewrite <- H10 in H7; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H8;
-      Clear H0 H10 H11 H12 x0 x1 x2.
-      DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase | XAuto ].
-      IHT; EApply ty0_abbr; XEAuto.
-(* case 3.2.3: n < i, csubst0_fst *)
-      Inversion H0; CSubst0Drop.
-      Rewrite <- H10 in H8; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7;
-      Clear H0 H10 H11 H12 x0 x1 x3.
-      DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ].
-      IHC; EApply ty0_abbr; XEAuto.
-(* case 3.2.4: n < i, csubst0_both *)
-      Inversion H0; CSubst0Drop.
-      Rewrite <- H11 in H9; Rewrite <- H12 in H7; Rewrite <- H12 in H8; Rewrite <- H12 in H9; Rewrite <- H13 in H8;
-      Clear H0 H11 H12 H13 x0 x1 x3.
-      DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ].
-      IHCT; EApply ty0_abbr; XEAuto.
-(* case 3.2.5: n >= i *)
-      EApply ty0_abbr; XEAuto.
-(* case 3.3: fsubst0_both *)
-      Subst0GenBase; Rewrite H7; Rewrite <- H3 in H4; Rewrite <- H3 in H6; Clear H3 H7 i t3.
-      DropDis; Inversion H6; Rewrite <- H7 in H0; Rewrite H8 in H1.
-      CSubst0Drop; XEAuto.
-(* case 4: ty0_abst *)
-      Intros until 5; XElim H3; Intros; Clear c1 c2 t t1 t2.
-(* case 4.1: fsubst0_snd *)
-      Subst0GenBase; Rewrite H3 in H0; DropDis; Inversion H0.
-(* case 4.2: fsubst0_fst *)
-      Apply (lt_le_e n i); Intros; CSubst0Drop.
-(* case 4.2.1: n < i, none *)
-      EApply ty0_abst; XEAuto.
-(* case 4.2.2: n < i, csubst0_snd *)
-      Inversion H0; CSubst0Drop.
-      Rewrite <- H10 in H7; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H8; Rewrite <- H12;
-      Clear H0 H10 H11 H12 x0 x1 x2.
-      DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase | XAuto ].
-      IHT; EApply ty0_conv;
-      [ EApply ty0_lift | EApply ty0_abst | EApply pc3_lift ]; XEAuto.
-(* case 4.2.3: n < i, csubst0_fst *)
-      Inversion H0; CSubst0Drop.
-      Rewrite <- H10 in H8; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7; Rewrite <- H12;
-      Clear H0 H10 H11 H12 x0 x1 x3.
-      DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ].
-      IHC; EApply ty0_abst; XEAuto.
-(* case 4.2.4: n < i, csubst0_both *)
-      Inversion H0; CSubst0Drop.
-      Rewrite <- H11 in H9; Rewrite <- H12 in H7; Rewrite <- H12 in H8; Rewrite <- H12 in H9; Rewrite <- H13 in H8; Rewrite <- H13;
-      Clear H0 H11 H12 H13 x0 x1 x3.
-      DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ].
-      IHCT; IHC; EApply ty0_conv;
-      [ EApply ty0_lift | EApply ty0_abst
-      | EApply pc3_lift; Try EApply pc3_fsubst0; Try Apply H0
-      ]; XEAuto.
-(* case 4.2.4: n >= i *)
-      EApply ty0_abst; XEAuto.
-(* case 4.3: fsubst0_both *)
-      Subst0GenBase; Rewrite H3 in H0; DropDis; Inversion H0.
-(* case 5: ty0_bind *)
-      Intros until 7; XElim H5; Intros; Clear H4.
-(* case 5.1: fsubst0_snd *)
-      Subst0GenBase; Rewrite H4; Clear H4 t6.
-(* case 5.1.1: subst0 on left argument *)
-      Ty0Correct; IHT; IHTb1; Ty0Correct.
-      EApply ty0_conv;
-      [ EApply ty0_bind | EApply ty0_bind | EApply pc3_fsubst0 ]; XEAuto.
-(* case 5.1.2: subst0 on right argument *)
-      IHTb2; Ty0Correct; EApply ty0_bind; XEAuto.
-(* case 5.1.3: subst0 on both arguments *)
-      Ty0Correct; IHT; IHTb1; IHTTb; Ty0Correct.
-      EApply ty0_conv;
-      [ EApply ty0_bind | EApply ty0_bind | EApply pc3_fsubst0 ]; XEAuto.
-(* case 5.2: fsubst0_fst *)
-      IHC; IHCb; Ty0Correct; EApply ty0_bind; XEAuto.
-(* case 5.3: fsubst0_both *)
-      Subst0GenBase; Rewrite H4; Clear H4 t6.
-(* case 5.3.1: subst0 on left argument *)
-      IHC; IHCb; Ty0Correct; Ty0Correct; IHCT; IHCTb1; Ty0Correct.
-      EApply ty0_conv;
-      [ EApply ty0_bind | EApply ty0_bind
-      | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto.
-(* case 5.3.2: subst0 on right argument *)
-      IHC; IHCTb2; Ty0Correct; EApply ty0_bind; XEAuto.
-(* case 5.3.3: subst0 on both arguments *)
-      IHC; IHCb; Ty0Correct; Ty0Correct; IHCT; IHCTTb; Ty0Correct.
-      EApply ty0_conv;
-      [ EApply ty0_bind | EApply ty0_bind
-      | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto.
-(* case 6: ty0_appl *)
-      Intros until 5; XElim H3; Intros.
-(* case 6.1: fsubst0_snd *)
-      Subst0GenBase; Rewrite H3; Clear H3 c1 c2 t t1 t2 t3.
-(* case 6.1.1: subst0 on left argument *)
-      Ty0Correct; Ty0GenBase; IHT; Ty0Correct.
-      EApply ty0_conv;
-      [ EApply ty0_appl | EApply ty0_appl | EApply pc3_fsubst0 ]; XEAuto.
-(* case 6.1.2: subst0 on right argument *)
-      IHT; EApply ty0_appl; XEAuto.
-(* case 6.1.3: subst0 on both arguments *)
-      Ty0Correct; Ty0GenBase; Move H after H10; Ty0Correct; IHT; Clear H2; IHT.
-      EApply ty0_conv;
-      [ EApply ty0_appl | EApply ty0_appl | EApply pc3_fsubst0 ]; XEAuto.
-(* case 6.2: fsubst0_fst *)
-      IHC; Clear H2; IHC; EApply ty0_appl; XEAuto.
-(* case 6.3: fsubst0_both *)
-      Subst0GenBase; Rewrite H3; Clear H3 c1 c2 t t1 t2 t3.
-(* case 6.3.1: subst0 on left argument *)
-      IHC; Ty0Correct; Ty0GenBase; Clear H2; IHC; IHCT.
-      EApply ty0_conv;
-      [ EApply ty0_appl | EApply ty0_appl
-      | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto.
-(* case 6.3.2: subst0 on right argument *)
-      IHCT; Clear H2; IHC; EApply ty0_appl; XEAuto.
-(* case 6.3.3: subst0 on both arguments *)
-      IHC; Ty0Correct; Ty0GenBase; IHCT; Clear H2; IHC; Ty0Correct; IHCT.
-      EApply ty0_conv;
-      [ EApply ty0_appl | EApply ty0_appl
-      | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto.
-(* case 7: ty0_cast *)
-      Clear c1 t t1; Intros until 5; XElim H3; Intros; Clear c2 t3.
-(* case 7.1: fsubst0_snd *)
-      Subst0GenBase; Rewrite H3; Clear H3 t4.
-(* case 7.1.1: subst0 on left argument *)
-      IHT; EApply ty0_conv;
-      [ Idtac
-      | EApply ty0_cast;
-        [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0 ]
-        | Idtac ]
-      | EApply pc3_fsubst0 ]; XEAuto.
-(* case 7.1.2: subst0 on right argument *)
-      IHT; EApply ty0_cast; XEAuto.
-(* case 7.1.3: subst0 on both arguments *)
-      IHT; Clear H2; IHT.
-      EApply ty0_conv;
-      [ Idtac
-      | EApply ty0_cast;
-        [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0 ]
-        | Idtac ]
-      | EApply pc3_fsubst0 ]; XEAuto.
-(* case 7.2: fsubst0_fst *)
-      IHC; Clear H2; IHC; EApply ty0_cast; XEAuto.
-(* case 6.3: fsubst0_both *)
-      Subst0GenBase; Rewrite H3; Clear H3 t4.
-(* case 7.3.1: subst0 on left argument *)
-      IHC; IHCT; Clear H2; IHC.
-      EApply ty0_conv;
-      [ Idtac
-      | EApply ty0_cast;
-        [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]
-        | Idtac ]
-      | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto.
-(* case 7.3.2: subst0 on right argument *)
-      IHCT; IHC; EApply ty0_cast; XEAuto.
-(* case 7.3.3: subst0 on both arguments *)
-      IHC; IHCT; Clear H2; IHCT.
-      EApply ty0_conv;
-      [ Idtac
-      | EApply ty0_cast;
-        [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]
-        | Idtac ]
-      | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto.
-      Qed.
-
-      Theorem ty0_csubst0: (g:?; c1:?; t1,t2:?) (ty0 g c1 t1 t2) ->
-                           (e:?; u:?; i:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) ->
-                           (c2:?) (wf0 g c2) -> (csubst0 i u c1 c2) ->
-                           (ty0 g c2 t1 t2).
-      Intros; EApply ty0_fsubst0; XEAuto.
-      Qed.
-
-      Theorem ty0_subst0: (g:?; c:?; t1,t:?) (ty0 g c t1 t) ->
-                          (e:?; u:?; i:?) (drop i (0) c (CTail e (Bind Abbr) u)) ->
-                          (t2:?) (subst0 i u t1 t2) -> (ty0 g c t2 t).
-      Intros; EApply ty0_fsubst0; XEAuto.
-      Qed.
-
-   End ty0_fsubst0.
-
-      Hints Resolve ty0_subst0 : ltlc.