]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma
update in static_2 and app_2
[helm.git] / matita / matita / contribs / lambdadelta / apps_2 / models / model_props.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 include "apps_2/models/model_vlift.ma".
16
17 (* MODEL ********************************************************************)
18
19 record is_model (M): Prop ≝ {
20 (* Note: equivalence: reflexivity *)
21    mr: reflexive … (sq M);
22 (* Note: equivalence: compatibility *)
23    mq: replace_2 … (sq M) (sq M) (sq M);
24 (* Note: application: compatibility *)
25    mp: compatible_3 … (ap M) (sq M) (sq M) (sq M);
26 (* Note: interpretation: sort *)
27    ms: ∀gv,lv,s. ⟦⋆s⟧{M}[gv, lv] ≗ sv M s;
28 (* Note: interpretation: local reference *)
29    ml: ∀gv,lv,i. ⟦#i⟧{M}[gv, lv] ≗ lv i;
30 (* Note: interpretation: global reference *)
31    mg: ∀gv,lv,l. ⟦§l⟧{M}[gv, lv] ≗ gv l;
32 (* Note: interpretation: local δ-equivalence *)
33    md: ∀gv,lv,p,V,T. ⟦ⓓ{p}V.T⟧{M}[gv, lv] ≗ ⟦T⟧[gv, ⫯[0←⟦V⟧[gv, lv]]lv];
34 (* Note: interpretation: intensional abstraction *)
35    mi: ∀gv1,gv2,lv1,lv2,p,W,T. ⟦W⟧{M}[gv1, lv1] ≗ ⟦W⟧{M}[gv2, lv2] →
36        (∀d. ⟦T⟧{M}[gv1, ⫯[0←d]lv1] ≗ ⟦T⟧{M}[gv2, ⫯[0←d]lv2]) →
37        ⟦ⓛ{p}W.T⟧[gv1, lv1] ≗ ⟦ⓛ{p}W.T⟧[gv2, lv2];
38 (* Note: interpretation: application *)
39    ma: ∀gv,lv,V,T. ⟦ⓐV.T⟧{M}[gv, lv] ≗ ⟦V⟧[gv, lv] @ ⟦T⟧[gv, lv];
40 (* Note: interpretation: ϵ-equivalence *)
41    me: ∀gv,lv,W,T. ⟦ⓝW.T⟧{M}[gv, lv] ≗ ⟦T⟧[gv, lv];
42 (* Note: interpretation: β-requivalence *)
43    mb: ∀gv,lv,d,p,W,T. d @ ⟦ⓛ{p}W.T⟧{M}[gv, lv] ≗ ⟦T⟧[gv, ⫯[0←d]lv]
44 }.
45
46 record is_extensional (M): Prop ≝ {
47 (* Note: interpretation: extensional abstraction *)
48    mx: ∀gv1,gv2,lv1,lv2,p,W1,W2,T1,T2. ⟦W1⟧{M}[gv1, lv1] ≗ ⟦W2⟧{M}[gv2, lv2] →
49        (∀d. ⟦T1⟧{M}[gv1, ⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2, ⫯[0←d]lv2]) →
50        ⟦ⓛ{p}W1.T1⟧[gv1, lv1] ≗ ⟦ⓛ{p}W2.T2⟧[gv2, lv2]
51 }.
52
53 (* Basic properties *********************************************************)
54
55 lemma seq_sym (M): is_model M → symmetric … (sq M).
56 /3 width=5 by mq, mr/ qed-.
57
58 lemma seq_trans (M): is_model M → Transitive … (sq M).
59 /3 width=5 by mq, mr/ qed-.
60
61 lemma seq_canc_sn (M): is_model M → left_cancellable … (sq M).
62 /3 width=3 by seq_trans, seq_sym/ qed-.
63
64 lemma seq_canc_dx (M): is_model M → right_cancellable … (sq M).
65 /3 width=3 by seq_trans, seq_sym/ qed-.
66
67 lemma ti_lref_vlift_eq (M): is_model M →
68                             ∀gv,lv,d,i. ⟦#i⟧[gv,⫯[i←d]lv] ≗{M} d.
69 #M #HM #gv #lv #d #i
70 @(seq_trans … HM) [2: @ml // | skip ]
71 >vlift_eq /2 width=1 by mr/
72 qed.
73
74 lemma ti_lref_vlift_gt (M): is_model M →
75                             ∀gv,lv,d,i. ⟦#(↑i)⟧[gv,⫯[0←d]lv] ≗{M} ⟦#i⟧[gv,lv].
76 #M #HM #gv #lv #d #i
77 @(mq … HM) [4,5: @(seq_sym … HM) /2 width=2 by ml/ |1,2: skip ]
78 >vlift_gt /2 width=1 by mr/
79 qed.
80
81 (* Basic Forward lemmas *****************************************************)
82
83 lemma ti_fwd_mx_dx (M): is_model M →
84                         ∀gv1,gv2,lv1,lv2,p,W1,W2,T1,T2.
85                         ⟦ⓛ{p}W1.T1⟧[gv1, lv1] ≗ ⟦ⓛ{p}W2.T2⟧[gv2, lv2] →
86                         ∀d. ⟦T1⟧{M}[gv1, ⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2, ⫯[0←d]lv2].
87 #M #HM #gv1 #gv2 #lv1 #lv2 #p #W1 #W2 #T1 #T2 #H12 #d
88 @(mq … HM) /3 width=5 by mb, mp, mr/
89 qed-.