]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/delayed_updating/syntax/prototerm_constructors.ma
update in delayed_updating
[helm.git] / matita / matita / contribs / lambdadelta / delayed_updating / syntax / prototerm_constructors.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 "delayed_updating/syntax/prototerm.ma".
16 include "delayed_updating/notation/functions/m_hook_1.ma".
17 include "delayed_updating/notation/functions/hash_1.ma".
18 include "delayed_updating/notation/functions/tau_2.ma".
19 include "delayed_updating/notation/functions/lamda_1.ma".
20 include "delayed_updating/notation/functions/at_2.ma".
21
22 (* CONSTRUCTORS FOR PROTOTERM ***********************************************)
23
24 definition prototerm_node_0 (l): prototerm ā‰
25            Ī»p. lā——šž = p.
26
27 definition prototerm_node_1 (l): prototerm ā†’ prototerm ā‰
28            Ī»t,p. āˆƒāˆƒq. q Ļµ t & lā——q = p.
29
30 definition prototerm_node_1_2 (l1) (l2): prototerm ā†’ prototerm ā‰
31            Ī»t,p. āˆƒāˆƒq. q Ļµ t & l1ā——l2ā——q = p.
32
33 definition prototerm_node_2 (l1) (l2): prototerm ā†’ prototerm ā†’ prototerm ā‰
34            Ī»t1,t2,p.
35            āˆØāˆØ āˆƒāˆƒq. q Ļµ t1 & l1ā——q = p
36             | āˆƒāˆƒq. q Ļµ t2 & l2ā——q = p.
37
38 interpretation
39   "mark (prototerm)"
40   'MHook t = (prototerm_node_1 label_m t).
41
42 interpretation
43   "outer variable reference by depth (prototerm)"
44   'Hash k = (prototerm_node_0 (label_d k)).
45
46 interpretation
47   "inner variable reference by depth (prototerm)"
48   'Tau k t = (prototerm_node_1_2 (label_d k) label_m t).
49
50 interpretation
51   "name-free functional abstraction (prototerm)"
52   'Lamda t = (prototerm_node_1 label_L t).
53
54 interpretation
55   "application (prototerm)"
56   'At u t = (prototerm_node_2 label_S label_A u t).
57
58 (* Basic constructions *******************************************************)
59
60 lemma in_comp_oref_hd (k):
61       (š—±kā——šž) Ļµ ā§£k.
62 // qed.
63
64 lemma in_comp_iref_hd (t) (q) (k):
65       q Ļµ t ā†’ š—±kā——š—ŗā——q Ļµ š›•k.t.
66 /2 width=3 by ex2_intro/ qed.
67
68 lemma in_comp_abst_hd (t) (q):
69       q Ļµ t ā†’ š—Ÿā——q Ļµ š›Œ.t.
70 /2 width=3 by ex2_intro/ qed.
71
72 lemma in_comp_appl_sd (u) (t) (q):
73       q Ļµ u ā†’ š—¦ā——q Ļµ ļ¼ u.t.
74 /3 width=3 by ex2_intro, or_introl/ qed.
75
76 lemma in_comp_appl_hd (u) (t) (q):
77       q Ļµ t ā†’ š—”ā——q Ļµ ļ¼ u.t.
78 /3 width=3 by ex2_intro, or_intror/ qed.
79
80 (* Basic inversions *********************************************************)
81
82 lemma in_comp_inv_iref (t) (p) (k):
83       p Ļµ š›•k.t ā†’
84       āˆƒāˆƒq. š—±kā——š—ŗā——q = p & q Ļµ t.
85 #t #p #k * #q #Hq #Hp
86 /2 width=3 by ex2_intro/
87 qed-.
88
89 lemma in_comp_inv_abst (t) (p):
90       p Ļµ š›Œ.t ā†’
91       āˆƒāˆƒq. š—Ÿā——q = p & q Ļµ t.
92 #t #p * #q #Hq #Hp
93 /2 width=3 by ex2_intro/
94 qed-.
95
96 lemma in_comp_inv_appl (u) (t) (p):
97       p Ļµ ļ¼ u.t ā†’
98       āˆØāˆØ āˆƒāˆƒq. š—¦ā——q = p & q Ļµ u
99        | āˆƒāˆƒq. š—”ā——q = p & q Ļµ t.
100 #u #t #p * * #q #Hq #Hp
101 /3 width=3 by ex2_intro, or_introl, or_intror/
102 qed-.
103
104 (* Advanced inversions ******************************************************)
105
106 lemma in_comp_inv_abst_hd (t) (p):
107       (š—Ÿā——p) Ļµ š›Œ.t ā†’ p Ļµ t.
108 #t #p #H0
109 elim (in_comp_inv_abst ā€¦ H0) -H0 #q #H0 #Hq
110 elim (eq_inv_list_rcons_bi ????? H0) -H0 #H1 #H2 destruct //
111 qed-. 
112
113 lemma in_comp_inv_appl_sd (u) (t) (p):
114       (š—¦ā——p) Ļµ ļ¼ u.t ā†’ p Ļµ u.
115 #u #t #p #H0
116 elim (in_comp_inv_appl ā€¦ H0) -H0 * #q #H0 #Hq
117 elim (eq_inv_list_rcons_bi ????? H0) -H0 #H1 #H2 destruct //
118 qed-. 
119
120 lemma in_comp_inv_appl_hd (u) (t) (p):
121       (š—”ā——p) Ļµ ļ¼ u.t ā†’ p Ļµ t.
122 #u #t #p #H0
123 elim (in_comp_inv_appl ā€¦ H0) -H0 * #q #H0 #Hq
124 elim (eq_inv_list_rcons_bi ????? H0) -H0 #H1 #H2 destruct //
125 qed-.