]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/contribs/lambdadelta/basic_2/substitution/cofrees_lift.ma
advances on cofrees allows to prove one direction of
[helm.git] / matita / matita / contribs / lambdadelta / basic_2 / substitution / cofrees_lift.ma
index b8e4542a7973fafbe2a7b7c29750b4fa18dbd096..7dea71858a23b353fc63d69f65d57937b84180ee 100644 (file)
@@ -17,6 +17,37 @@ include "basic_2/substitution/cofrees.ma".
 
 (* CONTEXT-SENSITIVE EXCLUSION FROM FREE VARIABLES **************************)
 
+(* Advanced inversion lemmas ************************************************)
+
+lemma cofrees_inv_lref_be: āˆ€L,d,i,j. L āŠ¢ i ~Ļµ š…*[d]ā¦ƒ#jā¦„ ā†’ d ā‰¤ yinj j ā†’ j < i ā†’
+                           āˆ€I,K,W. ā‡©[j]L ā‰” K.ā“‘{I}W ā†’ K āŠ¢ i-j-1 ~Ļµ š…*[yinj 0]ā¦ƒWā¦„.
+#L #d #i #j #Hj #Hdj #Hji #I #K #W1 #HLK #W2 #HW12 elim (lift_total W2 0 (j+1))
+#X2 #HWX2 elim (Hj X2) /2 width=7 by cpys_subst_Y2/ -I -L -K -W1 -d
+#Z2 #HZX2 elim (lift_div_le ā€¦ HWX2 (i-j-1) 1 Z2) -HWX2 /2 width=2 by ex_intro/
+>minus_plus <plus_minus_m_m //
+qed-.
+
+lemma cofrees_inv_be: āˆ€L,U,d,i. L āŠ¢ i ~Ļµ š…*[d]ā¦ƒUā¦„ ā†’ āˆ€j. (āˆ€T. ā‡§[j, 1] T ā‰” U ā†’ āŠ„) ā†’
+                      āˆ€I,K,W. ā‡©[j]L ā‰” K.ā“‘{I}W ā†’ d ā‰¤ yinj j ā†’ j < i ā†’ K āŠ¢ i-j-1 ~Ļµ š…*[yinj 0]ā¦ƒWā¦„.
+#L #U @(f2_ind ā€¦ rfw ā€¦ L U) -L -U
+#n #IH #L * *
+[ -IH #k #_ #d #i #_ #j #H elim (H (ā‹†k)) -H //
+| -IH #j #_ #d #i #Hi0 #j0 #H <(nlift_inv_lref_be_SO ā€¦ H) -j0
+  /2 width=9 by cofrees_inv_lref_be/
+| -IH #p #_ #d #i #_ #j #H elim (H (Ā§p)) -H //
+| #a #J #W #U #Hn #d #i #H1 #j #H2 #I #K #V #HLK #Hdj #Hji destruct
+  elim (cofrees_inv_bind ā€¦ H1) -H1 #HW #HU
+  elim (nlift_inv_bind ā€¦ H2) -H2 [ -HU /3 width=9 by/ ]
+  -HW #HnU lapply (IH ā€¦ HU ā€¦ HnU I K V ? ? ?)
+  /2 width=1 by ldrop_drop, yle_succ, lt_minus_to_plus/ -a -I -J -L -W -U -d
+  >minus_plus_plus_l //
+| #J #W #U #Hn #d #i #H1 #j #H2 #I #K #V #HLK #Hdj #Hji destruct
+  elim (cofrees_inv_flat ā€¦ H1) -H1 #HW #HU
+  elim (nlift_inv_flat ā€¦ H2) -H2 [ /3 width=9 by/ ]
+  #HnU @(IH ā€¦ HU ā€¦ HnU ā€¦ HLK) // (**) (* full auto fails *)
+]
+qed-.
+
 (* Advanced properties ******************************************************)
 
 lemma cofrees_lref_skip: āˆ€L,d,i,j. j < i ā†’ yinj j < d ā†’ L āŠ¢ i ~Ļµ š…*[d]ā¦ƒ#jā¦„.
@@ -80,7 +111,7 @@ lemma frees_inv_gen: āˆ€L,U,d,i. (L āŠ¢ i ~Ļµ š…*[d]ā¦ƒUā¦„ ā†’ āŠ„) ā†’
   [ -n #Hij elim H -H /2 width=5 by cofrees_lref_lt/
   | -H -n #H destruct /3 width=7 by lift_inv_lref2_be, ex2_intro/
   | #Hji elim (frees_inv_lref_gt ā€¦ H) // -H
-    #I #K #W1 #HLK #H #Hdj elim (IH ā€¦ H) /2 width=2 by ldrop_fwd_rfw/ -H -n
+    #I #K #W1 #HLK #H #Hdj elim (IH ā€¦ H) /2 width=3 by ldrop_fwd_rfw/ -H -n
     #W2 #HW12 #HnW2 elim (lift_total W2 0 (j+1))
     #U2 #HWU2 @(ex2_intro ā€¦ U2) /2 width=7 by cpys_subst_Y2/ -I -L -K -W1 -d
     #T2 #HTU2 elim (lift_div_le ā€¦ HWU2 (i-j-1) 1 T2) /2 width=2 by/ -W2
@@ -103,3 +134,11 @@ lemma frees_ind: āˆ€L,d,i. āˆ€R:predicate term.
 #L #d #i #R #IH1 #IH2 #U1 #H elim (frees_inv_gen ā€¦ H) -H
 #U2 #H #HnU2 @(cpys_ind_dx ā€¦ H) -U1 /4 width=8 by cofrees_inv_gen/
 qed-.
+
+(* Advanced negated properties **********************************************)
+
+lemma frees_be: āˆ€I,L,K,W,j. ā‡©[j]L ā‰” K.ā“‘{I}W ā†’
+                āˆ€i. j < i ā†’ (K āŠ¢ i-j-1 ~Ļµ š…*[yinj 0]ā¦ƒWā¦„ ā†’ āŠ„) ā†’
+                āˆ€U. (āˆ€T. ā‡§[j, 1] T ā‰” U ā†’ āŠ„) ā†’
+                āˆ€d. d ā‰¤ yinj j ā†’ (L āŠ¢ i ~Ļµ š…*[d]ā¦ƒUā¦„ ā†’ āŠ„).
+/4 width=11 by cofrees_inv_be/ qed-.