X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambda_delta%2Fbasic_2%2Freducibility%2Fcnf_lift.ma;h=0e1a8551fb962e40e9c54aa965cf75c5fbfb17ce;hb=f6464ba2cffc9936b4d8285604786cd91531e0d0;hp=ecb32ceedd094b78981a976b7be8f094c289ca82;hpb=5ea90cbbb01fe0bf3b77221d9e6c87002982621f;p=helm.git diff --git a/matita/matita/contribs/lambda_delta/basic_2/reducibility/cnf_lift.ma b/matita/matita/contribs/lambda_delta/basic_2/reducibility/cnf_lift.ma index ecb32ceed..0e1a8551f 100644 --- a/matita/matita/contribs/lambda_delta/basic_2/reducibility/cnf_lift.ma +++ b/matita/matita/contribs/lambda_delta/basic_2/reducibility/cnf_lift.ma @@ -13,12 +13,36 @@ (**************************************************************************) include "basic_2/reducibility/cpr_lift.ma". +include "basic_2/reducibility/cpr_cpr.ma". include "basic_2/reducibility/cnf.ma". (* CONTEXT-SENSITIVE NORMAL TERMS *******************************************) (* Advanced inversion lemmas ************************************************) +lemma cnf_inv_delta: ∀L,K,V,i. ⇩[0, i] L ≡ K.ⓓV → L ⊢ 𝐍⦃#i⦄ → ⊥. +#L #K #V #i #HLK #H +elim (lift_total V 0 (i+1)) #W #HVW +lapply (H W ?) -H [ /3 width=6/ ] -HLK #H destruct +elim (lift_inv_lref2_be … HVW ? ?) -HVW // +qed-. + +lemma cnf_inv_abst: ∀a,L,V,T. L ⊢ 𝐍⦃ⓛ{a}V.T⦄ → L ⊢ 𝐍⦃V⦄ ∧ L.ⓛV ⊢ 𝐍⦃T⦄. +#a #L #V1 #T1 #HVT1 @conj +[ #V2 #HV2 lapply (HVT1 (ⓛ{a}V2.T1) ?) -HVT1 /2 width=2/ -HV2 #H destruct // +| #T2 #HT2 lapply (HVT1 (ⓛ{a}V1.T2) ?) -HVT1 /2 width=2/ -HT2 #H destruct // +] +qed-. + +lemma cnf_inv_abbr: ∀L,V,T. L ⊢ 𝐍⦃-ⓓV.T⦄ → L ⊢ 𝐍⦃V⦄ ∧ L.ⓓV ⊢ 𝐍⦃T⦄. +#L #V1 #T1 #HVT1 @conj +[ #V2 #HV2 lapply (HVT1 (-ⓓV2.T1) ?) -HVT1 /2 width=2/ -HV2 #H destruct // +| #T2 #HT2 lapply (HVT1 (-ⓓV1.T2) ?) -HVT1 /2 width=2/ -HT2 #H destruct // +] +qed-. + +(* Advanced properties ******************************************************) + (* Basic_1: was only: nf2_csort_lref *) lemma cnf_lref_atom: ∀L,i. ⇩[0, i] L ≡ ⋆ → L ⊢ 𝐍⦃#i⦄. #L #i #HLK #X #H @@ -36,8 +60,8 @@ lapply (ldrop_mono … HLK … HLK0) -L #H destruct qed. (* Basic_1: was: nf2_abst *) -lemma cnf_abst: ∀I,L,V,W,T. L ⊢ 𝐍⦃W⦄ → L. ⓑ{I} V ⊢ 𝐍⦃T⦄ → L ⊢ 𝐍⦃ⓛW.T⦄. -#I #L #V #W #T #HW #HT #X #H +lemma cnf_abst: ∀a,I,L,V,W,T. L ⊢ 𝐍⦃W⦄ → L. ⓑ{I} V ⊢ 𝐍⦃T⦄ → L ⊢ 𝐍⦃ⓛ{a}W.T⦄. +#a #I #L #V #W #T #HW #HT #X #H elim (cpr_inv_abst1 … H I V) -H #W0 #T0 #HW0 #HT0 #H destruct >(HW … HW0) -W0 >(HT … HT0) -T0 // qed.