X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fapps_2%2Fmodels%2Fmodel_props.ma;h=f6c8d4c585f2b4c57ea7565be49c29275d939435;hb=bd53c4e895203eb049e75434f638f26b5a161a2b;hp=26a34783265df483e696b21e10fac459e7c709f2;hpb=41b61472d2c475e0f69e3dfc85539da3ad2bac1e;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma b/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma index 26a347832..f6c8d4c58 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "apps_2/models/model_vlift.ma". +include "apps_2/models/model_vpush.ma". (* MODEL ********************************************************************) @@ -21,33 +21,44 @@ record is_model (M): Prop ≝ { mr: reflexive … (sq M); (* Note: equivalence: compatibility *) mq: replace_2 … (sq M) (sq M) (sq M); +(* Note: conjunction: compatibility *) + mc: ∀p. compatible_3 … (co M p) (sq M) (sq M) (sq M); (* Note: application: compatibility *) mp: compatible_3 … (ap M) (sq M) (sq M) (sq M); (* Note: interpretation: sort *) - ms: ∀gv,lv,s. ⟦⋆s⟧{M}[gv, lv] ≗ sv M s; + ms: ∀gv,lv,s. ⟦⋆s⟧{M}[gv,lv] ≗ sv M s; (* Note: interpretation: local reference *) - ml: ∀gv,lv,i. ⟦#i⟧{M}[gv, lv] ≗ lv i; + ml: ∀gv,lv,i. ⟦#i⟧{M}[gv,lv] ≗ lv i; (* Note: interpretation: global reference *) - mg: ∀gv,lv,l. ⟦§l⟧{M}[gv, lv] ≗ gv l; -(* Note: interpretation: local δ-equivalence *) - md: ∀gv,lv,p,V,T. ⟦ⓓ{p}V.T⟧{M}[gv, lv] ≗ ⟦T⟧[gv, ⫯[0←⟦V⟧[gv, lv]]lv]; -(* Note: interpretation: intensional abstraction *) - mi: ∀gv1,gv2,lv1,lv2,p,W,T. ⟦W⟧{M}[gv1, lv1] ≗ ⟦W⟧{M}[gv2, lv2] → - (∀d. ⟦T⟧{M}[gv1, ⫯[0←d]lv1] ≗ ⟦T⟧{M}[gv2, ⫯[0←d]lv2]) → - ⟦ⓛ{p}W.T⟧[gv1, lv1] ≗ ⟦ⓛ{p}W.T⟧[gv2, lv2]; + mg: ∀gv,lv,l. ⟦§l⟧{M}[gv,lv] ≗ gv l; +(* Note: interpretation: intensional binder *) + mi: ∀p,gv1,gv2,lv1,lv2,W,T. ⟦W⟧{M}[gv1,lv1] ≗ ⟦W⟧{M}[gv2,lv2] → + (∀d. ⟦T⟧{M}[gv1,⫯[0←d]lv1] ≗ ⟦T⟧{M}[gv2,⫯[0←d]lv2]) → + ⟦ⓛ[p]W.T⟧[gv1,lv1] ≗ ⟦ⓛ[p]W.T⟧[gv2,lv2]; +(* Note: interpretation: abbreviation *) + md: ∀p,gv,lv,V,T. ⟦ⓓ[p]V.T⟧{M}[gv,lv] ≗ ⟦V⟧[gv,lv] ⊕[p] ⟦T⟧[gv,⫯[0←⟦V⟧[gv,lv]]lv]; (* Note: interpretation: application *) - ma: ∀gv,lv,V,T. ⟦ⓐV.T⟧{M}[gv, lv] ≗ ⟦V⟧[gv, lv] @ ⟦T⟧[gv, lv]; + ma: ∀gv,lv,V,T. ⟦ⓐV.T⟧{M}[gv,lv] ≗ ⟦V⟧[gv,lv] @ ⟦T⟧[gv,lv]; +(* Note: interpretation: ζ-equivalence *) + mz: ∀d1,d2. d1 ⊕{M}[Ⓣ] d2 ≗ d2; (* Note: interpretation: ϵ-equivalence *) - me: ∀gv,lv,W,T. ⟦ⓝW.T⟧{M}[gv, lv] ≗ ⟦T⟧[gv, lv]; + me: ∀gv,lv,W,T. ⟦ⓝW.T⟧{M}[gv,lv] ≗ ⟦T⟧[gv,lv]; (* Note: interpretation: β-requivalence *) - mb: ∀gv,lv,d,p,W,T. d @ ⟦ⓛ{p}W.T⟧{M}[gv, lv] ≗ ⟦T⟧[gv, ⫯[0←d]lv] + mb: ∀p,gv,lv,d,W,T. d @ ⟦ⓛ[p]W.T⟧{M}[gv,lv] ≗ d ⊕[p] ⟦T⟧[gv,⫯[0←d]lv]; +(* Note: interpretation: θ-requivalence *) + mh: ∀p,d1,d2,d3. d1 @ (d2 ⊕{M}[p] d3) ≗ d2 ⊕[p] (d1 @ d3) }. record is_extensional (M): Prop ≝ { (* Note: interpretation: extensional abstraction *) - mx: ∀gv1,gv2,lv1,lv2,p,W1,W2,T1,T2. ⟦W1⟧{M}[gv1, lv1] ≗ ⟦W2⟧{M}[gv2, lv2] → - (∀d. ⟦T1⟧{M}[gv1, ⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2, ⫯[0←d]lv2]) → - ⟦ⓛ{p}W1.T1⟧[gv1, lv1] ≗ ⟦ⓛ{p}W2.T2⟧[gv2, lv2] + mx: ∀p,gv1,gv2,lv1,lv2,W1,W2,T1,T2. ⟦W1⟧{M}[gv1,lv1] ≗ ⟦W2⟧{M}[gv2,lv2] → + (∀d. ⟦T1⟧{M}[gv1,⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2,⫯[0←d]lv2]) → + ⟦ⓛ[p]W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ[p]W2.T2⟧[gv2,lv2] +}. + +record is_injective (M): Prop ≝ { +(* Note: conjunction: injectivity *) + mj: ∀d1,d3,d2,d4. d1 ⊕[Ⓕ] d2 ≗{M} d3 ⊕[Ⓕ] d4 → d2 ≗ d4 }. (* Basic properties *********************************************************) @@ -64,26 +75,42 @@ lemma seq_canc_sn (M): is_model M → left_cancellable … (sq M). lemma seq_canc_dx (M): is_model M → right_cancellable … (sq M). /3 width=3 by seq_trans, seq_sym/ qed-. -lemma ti_lref_vlift_eq (M): is_model M → +lemma co_inv_dx (M): is_model M → is_injective M → + ∀p,d1,d3,d2,d4. d1⊕[p]d2 ≗{M} d3⊕[p]d4 → d2 ≗ d4. +#M #H1M #H2M * #d1 #d3 #d2 #d4 #Hd +/3 width=5 by mj, mz, mq/ +qed-. + +lemma ti_lref_vpush_eq (M): is_model M → ∀gv,lv,d,i. ⟦#i⟧[gv,⫯[i←d]lv] ≗{M} d. #M #HM #gv #lv #d #i @(seq_trans … HM) [2: @ml // | skip ] ->vlift_eq /2 width=1 by mr/ +>vpush_eq /2 width=1 by mr/ qed. -lemma ti_lref_vlift_gt (M): is_model M → +lemma ti_lref_vpush_gt (M): is_model M → ∀gv,lv,d,i. ⟦#(↑i)⟧[gv,⫯[0←d]lv] ≗{M} ⟦#i⟧[gv,lv]. #M #HM #gv #lv #d #i @(mq … HM) [4,5: @(seq_sym … HM) /2 width=2 by ml/ |1,2: skip ] ->vlift_gt /2 width=1 by mr/ +>vpush_gt /2 width=1 by mr/ qed. (* Basic Forward lemmas *****************************************************) -lemma ti_fwd_mx_dx (M): is_model M → - ∀gv1,gv2,lv1,lv2,p,W1,W2,T1,T2. - ⟦ⓛ{p}W1.T1⟧[gv1, lv1] ≗ ⟦ⓛ{p}W2.T2⟧[gv2, lv2] → - ∀d. ⟦T1⟧{M}[gv1, ⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2, ⫯[0←d]lv2]. -#M #HM #gv1 #gv2 #lv1 #lv2 #p #W1 #W2 #T1 #T2 #H12 #d -@(mq … HM) /3 width=5 by mb, mp, mr/ +lemma ti_fwd_mx_dx (M): is_model M → is_injective M → + ∀p,gv1,gv2,lv1,lv2,W1,W2,T1,T2. + ⟦ⓛ[p]W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ[p]W2.T2⟧[gv2,lv2] → + ∀d. ⟦T1⟧{M}[gv1,⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2,⫯[0←d]lv2]. +#M #H1M #H2M #p #gv1 #gv2 #lv1 #lv2 #W1 #W2 #T1 #T2 #H12 #d +@(co_inv_dx … p d d) +/4 width=5 by mb, mp, mq, mr/ +qed-. + +lemma ti_fwd_abbr_dx (M): is_model M → is_injective M → + ∀p,gv1,gv2,lv1,lv2,V1,V2,T1,T2. + ⟦ⓓ[p]V1.T1⟧[gv1,lv1] ≗ ⟦ⓓ[p]V2.T2⟧[gv2,lv2] → + ⟦T1⟧{M}[gv1,⫯[0←⟦V1⟧[gv1,lv1]]lv1] ≗ ⟦T2⟧{M}[gv2,⫯[0←⟦V2⟧[gv2,lv2]]lv2]. +#M #H1M #H2M #p #gv1 #gv2 #lv1 #lv2 #V1 #V2 #T1 #T2 #H12 +@(co_inv_dx … p (⟦V1⟧[gv1,lv1]) (⟦V2⟧[gv2,lv2])) +/3 width=5 by md, mq/ qed-.