1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 include "ground/xoa/or_5.ma".
16 include "ground/xoa/ex_3_1.ma".
17 include "ground/xoa/ex_4_2.ma".
18 include "ground/xoa/ex_4_3.ma".
19 include "ground/xoa/ex_5_3.ma".
20 include "delayed_updating/syntax/preterm_constructors.ma".
21 include "delayed_updating/notation/relations/in_predicate_d_phi_1.ma".
23 (* BY-DEPTH DELAYED (BDD) TERM **********************************************)
25 inductive bdd: predicate preterm โ
26 | bdd_oref: โn. bdd #n
27 | bdd_iref: โt,n. bdd t โ bdd ๐n.t
28 | bdd_abst: โt. bdd t โ bdd ๐.t
29 | bdd_appl: โu,t. bdd u โ bdd t โ bdd @u.t
33 "well-formed by-depth delayed (preterm)"
34 'InPredicateDPhi t = (bdd t).
36 (* Basic inversions *********************************************************)
38 lemma bdd_inv_in_comp_gen:
39 โt,p. t ฯต ๐๐ โ p ฯตโฌฆ t โ
40 โจโจ โโn. #n = t & ๐ฑโจnโฉ;๐ = p
41 | โโu,q,n. u ฯต ๐๐ & q ฯตโฌฆ u & ๐n.u = t & ๐ฑโจnโฉ;q = p
42 | โโu,q. u ฯต ๐๐ & q ฯตโฌฆ u & ๐.u = t & ๐;q = p
43 | โโv,u,q. v ฯต ๐๐ & u ฯต ๐๐ & q ฯตโฌฆ u & @v.u = t & ๐;q = p
44 | โโv,u,q. v ฯต ๐๐ & u ฯต ๐๐ & q ฯตโฌฆ v & @v.u = t & ๐ฆ;q = p
47 [ #n * /3 width=3 by or5_intro0, ex2_intro/
48 | #u #n #Hu * #q #Hq #Hp /3 width=7 by ex4_3_intro, or5_intro1/
49 | #u #Hu * #q #Hq #Hp /3 width=6 by or5_intro2, ex4_2_intro/
50 | #v #u #Hv #Hu * * #q #Hq #Hp /3 width=8 by ex5_3_intro, or5_intro3, or5_intro4/
54 lemma bdd_inv_in_comp_d:
55 โt,q,n. t ฯต ๐๐ โ ๐ฑโจnโฉ;q ฯตโฌฆ t โ
56 โจโจ โงโง #n = t & ๐ = q
57 | โโu. u ฯต ๐๐ & q ฯตโฌฆ u & ๐n.u = t
60 elim (bdd_inv_in_comp_gen โฆ Ht Hq) -Ht -Hq *
61 [ #n0 #H1 #H2 destruct /3 width=1 by or_introl, conj/
62 | #u0 #q0 #n0 #Hu0 #Hq0 #H1 #H2 destruct /3 width=4 by ex3_intro, or_intror/
63 | #u0 #q0 #_ #_ #_ #H0 destruct
64 | #v0 #u0 #q0 #_ #_ #_ #_ #H0 destruct
65 | #v0 #u0 #q0 #_ #_ #_ #_ #H0 destruct
69 lemma bdd_inv_in_root_d:
70 โt,q,n. t ฯต ๐๐ โ ๐ฑโจnโฉ;q ฯตโต t โ
71 โจโจ โงโง #n = t & ๐ = q
72 | โโu. u ฯต ๐๐ & q ฯตโต u & ๐n.u = t
75 elim (bdd_inv_in_comp_d โฆ Ht Hq) -Ht -Hq *
77 elim (eq_inv_list_empty_append โฆ H2) -H2 #H2 #_ destruct
78 /3 width=1 by or_introl, conj/
79 | #u #Hu #Hq #H0 destruct
80 /4 width=4 by ex3_intro, ex_intro, or_intror/
84 lemma bdd_inv_in_comp_L:
85 โt,q. t ฯต ๐๐ โ ๐;q ฯตโฌฆ t โ
86 โโu. u ฯต ๐๐ & q ฯตโฌฆ u & ๐.u = t
89 elim (bdd_inv_in_comp_gen โฆ Ht Hq) -Ht -Hq *
91 | #u0 #q0 #n0 #_ #_ #_ #H0 destruct
92 | #u0 #q0 #Hu0 #Hq0 #H1 #H2 destruct /2 width=4 by ex3_intro/
93 | #v0 #u0 #q0 #_ #_ #_ #_ #H0 destruct
94 | #v0 #u0 #q0 #_ #_ #_ #_ #H0 destruct
98 lemma bdd_inv_in_root_L:
99 โt,q. t ฯต ๐๐ โ ๐;q ฯตโต t โ
100 โโu. u ฯต ๐๐ & q ฯตโต u & ๐.u = t.
102 elim (bdd_inv_in_comp_L โฆ Ht Hq) -Ht -Hq
103 #u #Hu #Hq #H0 destruct
104 /3 width=4 by ex3_intro, ex_intro/
107 lemma bdd_inv_in_comp_A:
108 โt,q. t ฯต ๐๐ โ ๐;q ฯตโฌฆ t โ
109 โโv,u. v ฯต ๐๐ & u ฯต ๐๐ & q ฯตโฌฆ u & @v.u = t
112 elim (bdd_inv_in_comp_gen โฆ Ht Hq) -Ht -Hq *
113 [ #n0 #_ #H0 destruct
114 | #u0 #q0 #n0 #_ #_ #_ #H0 destruct
115 | #u0 #q0 #_ #_ #_ #H0 destruct
116 | #v0 #u0 #q0 #Hv0 #Hu0 #Hq0 #H1 #H2 destruct /2 width=6 by ex4_2_intro/
117 | #v0 #u0 #q0 #_ #_ #_ #_ #H0 destruct
121 lemma bdd_inv_in_root_A:
122 โt,q. t ฯต ๐๐ โ ๐;q ฯตโต t โ
123 โโv,u. v ฯต ๐๐ & u ฯต ๐๐ & q ฯตโต u & @v.u = t
126 elim (bdd_inv_in_comp_A โฆ Ht Hq) -Ht -Hq
127 #v #u #Hv #Hu #Hq #H0 destruct
128 /3 width=6 by ex4_2_intro, ex_intro/
131 lemma bdd_inv_in_comp_S:
132 โt,q. t ฯต ๐๐ โ ๐ฆ;q ฯตโฌฆ t โ
133 โโv,u. v ฯต ๐๐ & u ฯต ๐๐ & q ฯตโฌฆ v & @v.u = t
136 elim (bdd_inv_in_comp_gen โฆ Ht Hq) -Ht -Hq *
137 [ #n0 #_ #H0 destruct
138 | #u0 #q0 #n0 #_ #_ #_ #H0 destruct
139 | #u0 #q0 #_ #_ #_ #H0 destruct
140 | #v0 #u0 #q0 #_ #_ #_ #_ #H0 destruct
141 | #v0 #u0 #q0 #Hv0 #Hu0 #Hq0 #H1 #H2 destruct /2 width=6 by ex4_2_intro/
145 lemma bdd_inv_in_root_S:
146 โt,q. t ฯต ๐๐ โ ๐ฆ;q ฯตโต t โ
147 โโv,u. v ฯต ๐๐ & u ฯต ๐๐ & q ฯตโต v & @v.u = t
150 elim (bdd_inv_in_comp_S โฆ Ht Hq) -Ht -Hq
151 #v #u #Hv #Hu #Hq #H0 destruct
152 /3 width=6 by ex4_2_intro, ex_intro/
155 (* Advanced inversions ******************************************************)
157 lemma bbd_mono_in_root_d:
158 โl,n,p,t. t ฯต ๐๐ โ p,๐ฑโจnโฉ ฯตโต t โ p,l ฯตโต t โ ๐ฑโจnโฉ = l.
160 [ #t #Ht <list_cons_comm <list_cons_comm #Hn #Hl
161 elim (bdd_inv_in_root_d โฆ Ht Hn) -Ht -Hn *
163 elim (preterm_in_root_inv_lcons_oref โฆ Hl) -Hl //
164 | #u #_ #_ #H0 destruct
165 elim (preterm_in_root_inv_lcons_iref โฆ Hl) -Hl //
167 | * [ #m ] #p #IH #t #Ht
168 <list_cons_shift <list_cons_shift #Hn #Hl
169 [ elim (bdd_inv_in_root_d โฆ Ht Hn) -Ht -Hn *
171 elim (eq_inv_list_empty_rcons ??? H0)
172 | #u #Hu #Hp #H0 destruct
173 elim (preterm_in_root_inv_lcons_iref โฆ Hl) -Hl #_ #Hl
176 | elim (bdd_inv_in_root_L โฆ Ht Hn) -Ht -Hn
177 #u #Hu #Hp #H0 destruct
178 elim (preterm_in_root_inv_lcons_abst โฆ Hl) -Hl #_ #Hl
180 | elim (bdd_inv_in_root_A โฆ Ht Hn) -Ht -Hn
181 #v #u #_ #Hu #Hp #H0 destruct
182 elim (preterm_in_root_inv_lcons_appl โฆ Hl) -Hl * #H0 #Hl destruct
184 | elim (bdd_inv_in_root_S โฆ Ht Hn) -Ht -Hn
185 #v #u #Hv #_ #Hp #H0 destruct
186 elim (preterm_in_root_inv_lcons_appl โฆ Hl) -Hl * #H0 #Hl destruct