(**************************************************************************) (* ___ *) (* ||M|| *) (* ||A|| A project by Andrea Asperti *) (* ||T|| *) (* ||I|| Developers: *) (* ||T|| The HELM team. *) (* ||A|| http://helm.cs.unibo.it *) (* \ / *) (* \ / This file is distributed under the terms of the *) (* v GNU General Public License Version 2 *) (* *) (**************************************************************************) include "basic_2/substitution/cpys_lift.ma". include "basic_2/substitution/cofrees.ma". (* CONTEXT-SENSITIVE EXCLUSION FROM FREE VARIABLES **************************) (* Advanced inversion lemmas ************************************************) lemma cofrees_inv_lref_lt: ∀L,i,j. L ⊢ i ~ϵ 𝐅*⦃#j⦄ → j < i → ∀I,K,W. ⇩[j]L ≡ K.ⓑ{I}W → K ⊢ i-j-1 ~ϵ 𝐅*⦃W⦄. #L #i #j #Hj #Hji #I #K #W1 #HLK #W2 #HW12 elim (lift_total W2 0 (j+1)) #X2 #HWX2 elim (Hj X2) /2 width=7 by cpys_delta/ -I -L -K -W1 #Z2 #HZX2 elim (lift_div_le … HWX2 (i-j-1) 1 Z2) -HWX2 /2 width=2 by ex_intro/ >minus_plus minus_plus_plus_l // | #J #W #U #Hn #i #H1 #j #H2 #I #K #V #HLK #Hji destruct elim (cofrees_inv_flat … H1) -H1 #HW #HU elim (nlift_inv_flat … H2) -H2 [ /3 width=7 by/ ] #HnU @(IH … HU … HnU … HLK) // (**) (* full auto fails *) ] qed-. (* Advanced properties ******************************************************) lemma cofrees_lref_gt: ∀L,i,j. i < j → L ⊢ i ~ϵ 𝐅*⦃#j⦄. #L #i #j #Hij #X #H elim (cpys_inv_lref1 … H) -H [ #H destruct /3 width=2 by lift_lref_ge_minus, ex_intro/ | * #I #K #V1 #V2 #_ #_ #H -I -L -K -V1 elim (lift_split … H i j) /2 width=2 by lt_to_le, ex_intro/ ] qed. lemma cofrees_lref_lt: ∀I,L,K,W,i,j. j < i → ⇩[j] L ≡ K.ⓑ{I}W → K ⊢ (i-j-1) ~ϵ 𝐅*⦃W⦄ → L ⊢ i ~ϵ 𝐅*⦃#j⦄. #I #L #K #W1 #i #j #Hji #HLK #HW1 #X #H elim (cpys_inv_lref1 … H) -H [ #H destruct /3 width=2 by lift_lref_lt, ex_intro/ | * #I0 #K0 #W0 #W2 #HLK0 #HW12 #HW2 lapply (ldrop_mono … HLK0 … HLK) -L #H destruct elim (HW1 … HW12) -I -K -W1 #V2 #HVW2 elim (lift_trans_le … HVW2 … HW2) -W2 // >minus_plus minus_plus