]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/basic_2/substitution/gget.ma
- some renaming according to the written version of basic_2
[helm.git] / matita / matita / contribs / lambdadelta / basic_2 / substitution / gget.ma
index acf9602be26d724d701b468fa78cc029837b0b49..eb5c8fdabc78625e42fe64a2787c6b5f620fa66a 100644 (file)
@@ -17,19 +17,19 @@ include "basic_2/grammar/genv.ma".
 
 (* GLOBAL ENVIRONMENT READING ***********************************************)
 
-inductive gget (e:nat): relation genv ≝
-| gget_gt: ∀G. |G| ≤ e → gget e G (⋆)
-| gget_eq: ∀G. |G| = e + 1 → gget e G G
-| gget_lt: ∀I,G1,G2,V. e < |G1| → gget e G1 G2 → gget e (G1. ⓑ{I} V) G2
+inductive gget (m:nat): relation genv ≝
+| gget_gt: ∀G. |G| ≤ m → gget m G (⋆)
+| gget_eq: ∀G. |G| = m + 1 → gget m G G
+| gget_lt: ∀I,G1,G2,V. m < |G1| → gget m G1 G2 → gget m (G1. ⓑ{I} V) G2
 .
 
 interpretation "global reading"
-   'RDrop e G1 G2 = (gget e G1 G2).
+   'RDrop m G1 G2 = (gget m G1 G2).
 
 (* basic inversion lemmas ***************************************************)
 
-lemma gget_inv_gt: ∀G1,G2,e. ⬇[e] G1 ≡ G2 → |G1| ≤ e → G2 = ⋆.
-#G1 #G2 #e * -G1 -G2 //
+lemma gget_inv_gt: ∀G1,G2,m. ⬇[m] G1 ≡ G2 → |G1| ≤ m → G2 = ⋆.
+#G1 #G2 #m * -G1 -G2 //
 [ #G #H >H -H >commutative_plus #H (**) (* lemma needed here *)
   lapply (le_plus_to_le_r … 0 H) -H #H
   lapply (le_n_O_to_eq … H) -H #H destruct
@@ -40,8 +40,8 @@ lemma gget_inv_gt: ∀G1,G2,e. ⬇[e] G1 ≡ G2 → |G1| ≤ e → G2 = ⋆.
 ]
 qed-.
 
-lemma gget_inv_eq: ∀G1,G2,e. ⬇[e] G1 ≡ G2 → |G1| = e + 1 → G1 = G2.
-#G1 #G2 #e * -G1 -G2 //
+lemma gget_inv_eq: ∀G1,G2,m. ⬇[m] G1 ≡ G2 → |G1| = m + 1 → G1 = G2.
+#G1 #G2 #m * -G1 -G2 //
 [ #G #H1 #H2 >H2 in H1; -H2 >commutative_plus #H (**) (* lemma needed here *)
   lapply (le_plus_to_le_r … 0 H) -H #H
   lapply (le_n_O_to_eq … H) -H #H destruct
@@ -51,9 +51,9 @@ lemma gget_inv_eq: ∀G1,G2,e. ⬇[e] G1 ≡ G2 → |G1| = e + 1 → G1 = G2.
 ]
 qed-.
 
-fact gget_inv_lt_aux: ∀I,G,G1,G2,V,e. ⬇[e] G ≡ G2 → G = G1. ⓑ{I} V →
-                      e < |G1| → ⬇[e] G1 ≡ G2.
-#I #G #G1 #G2 #V #e * -G -G2
+fact gget_inv_lt_aux: ∀I,G,G1,G2,V,m. ⬇[m] G ≡ G2 → G = G1. ⓑ{I} V →
+                      m < |G1| → ⬇[m] G1 ≡ G2.
+#I #G #G1 #G2 #V #m * -G -G2
 [ #G #H1 #H destruct #H2
   lapply (le_to_lt_to_lt … H1 H2) -H1 -H2 normalize in ⊢ (? % ? → ?); >commutative_plus #H
   lapply (lt_plus_to_lt_l … 0 H) -H #H
@@ -64,18 +64,18 @@ fact gget_inv_lt_aux: ∀I,G,G1,G2,V,e. ⬇[e] G ≡ G2 → G = G1. ⓑ{I} V →
 ]
 qed-.
 
-lemma gget_inv_lt: ∀I,G1,G2,V,e.
-                    ⬇[e] G1. ⓑ{I} V ≡ G2 → e < |G1| → ⬇[e] G1 ≡ G2.
+lemma gget_inv_lt: ∀I,G1,G2,V,m.
+                    ⬇[m] G1. ⓑ{I} V ≡ G2 → m < |G1| → ⬇[m] G1 ≡ G2.
 /2 width=5 by gget_inv_lt_aux/ qed-.
 
 (* Basic properties *********************************************************)
 
-lemma gget_total: ∀e,G1. ∃G2. ⬇[e] G1 ≡ G2.
-#e #G1 elim G1 -G1 /3 width=2/
+lemma gget_total: ∀m,G1. ∃G2. ⬇[m] G1 ≡ G2.
+#m #G1 elim G1 -G1 /3 width=2 by gget_gt, ex_intro/
 #I #V #G1 * #G2 #HG12
-elim (lt_or_eq_or_gt e (|G1|)) #He
+elim (lt_or_eq_or_gt m (|G1|)) #Hm
 [ /3 width=2/
-| destruct /3 width=2/
-| @ex_intro [2: @gget_gt normalize /2 width=1/ | skip ] (**) (* explicit constructor *)
+| destruct /3 width=2 by gget_eq, ex_intro/
+| @ex_intro [2: @gget_gt normalize /2 width=1 by/ | skip ] (**) (* explicit constructor *)
 ]
 qed-.