X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambda_delta%2FBasic_2%2Freducibility%2Ftwhnf.ma;h=fe6b66447ae96eac4bf52faa30219a704d5902b3;hb=de392360825733c1c865d748f7711f34bfc027f3;hp=c96bf4762f1316c07a6e1b80b8ec54b826c4e100;hpb=f841a6a906de888ee54f4c3bf95cd444e9bc06b0;p=helm.git diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/twhnf.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/twhnf.ma index c96bf4762..fe6b66447 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/twhnf.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/twhnf.ma @@ -1,12 +1,56 @@ +(**************************************************************************) +(* ___ *) +(* ||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/grammar/thom.ma". include "Basic_2/reducibility/tpr.ma". (* CONTEXT-FREE WEAK HEAD NORMAL TERMS **************************************) -definition twhnf: term → Prop ≝ - NF … tpr (thom …). +definition twhnf: predicate term ≝ NF … tpr thom. interpretation "context-free weak head normality (term)" 'WHdNormal T = (twhnf T). +(* Basic inversion lemmas ***************************************************) + +lemma twhnf_inv_thom: ∀T. 𝕎ℍℕ[T] → T ≈ T. +normalize /2 width=1/ +qed-. + (* Basic properties *********************************************************) + +lemma tpr_thom: ∀T1,T2. T1 ⇒ T2 → T1 ≈ T1 → T1 ≈ T2. +#T1 #T2 #H elim H -T1 -T2 // +[ #I #V1 #V2 #T1 #T2 #_ #_ #_ #IHT12 #H + elim (thom_inv_flat1 … H) -H #W2 #U2 #HT1U2 #HT1 #_ #H1 #H2 destruct + lapply (IHT12 HT1U2) -IHT12 -HT1U2 #HUT2 + lapply (simple_thom_repl_dx … HUT2 HT1) /2 width=1/ +| #V1 #V2 #W #T1 #T2 #_ #_ #_ #_ #H + elim (thom_inv_flat1 … H) -H #W2 #U2 #_ #H + elim (simple_inv_bind … H) +| #I #V1 #V2 #T1 #T #T2 #_ #_ #_ #_ #_ #H + elim (thom_inv_bind1 … H) -H #W2 #U2 #H destruct // +| #V2 #V1 #V #W1 #W2 #T1 #T2 #_ #_ #_ #_ #_ #_ #_ #H + elim (thom_inv_flat1 … H) -H #U1 #U2 #_ #H + elim (simple_inv_bind … H) +| #V #T #T1 #T2 #_ #_ #_ #H + elim (thom_inv_bind1 … H) -H #W2 #U2 #H destruct +| #V #T1 #T2 #_ #_ #H + elim (thom_inv_flat1 … H) -H #W2 #U2 #_ #_ #_ #H destruct +] +qed. + +lemma twhnf_thom: ∀T. T ≈ T → 𝕎ℍℕ[T]. +/2 width=1/ qed.