X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fapps_2%2Fmodels%2Fmodel_props.ma;h=b3acfc26241778918dd58a40b33a411e3c3bdd55;hp=346917ff80f7ffddc9248790e3666f707980de4e;hb=cc600ed1e115d5566947288d532a1e89d989227f;hpb=ea918ec7701db4458c5ca25885e80abc6fed1be7 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 346917ff8..b3acfc262 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma @@ -21,6 +21,8 @@ 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 *) @@ -29,27 +31,36 @@ record is_model (M): Prop ≝ { 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] → +(* 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]; +(* 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]; (* 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] → + 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 *********************************************************) lemma seq_sym (M): is_model M → symmetric … (sq M). @@ -64,6 +75,12 @@ 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 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 @@ -80,10 +97,20 @@ 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-.