]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/delayed_updating/unwind/unwind2_rmap.ma
partial commit in delayed_updating
[helm.git] / matita / matita / contribs / lambdadelta / delayed_updating / unwind / unwind2_rmap.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/unwind/preunwind2_rmap.ma".
16 include "delayed_updating/syntax/path.ma".
17
18 (* TAILED UNWIND FOR RELOCATION MAP *****************************************)
19
20 rec definition unwind2_rmap (f) (p) on p: tr_map ≝
21 match p with
22 [ list_empty     ⇒ f
23 | list_lcons l q ⇒ ▶[unwind2_rmap f q]l
24 ].
25
26 interpretation
27   "tailed unwind (relocation map)"
28   'BlackRightTriangle f p = (unwind2_rmap f p).
29
30 (* Basic constructions ******************************************************)
31
32 lemma unwind2_rmap_empty (f):
33       f = ▶[f]𝐞.
34 // qed.
35
36 lemma unwind2_rmap_rcons (f) (p) (l):
37       ▶[▶[f]p]l = ▶[f](p◖l).
38 // qed.
39
40 lemma unwind2_rmap_d_dx (f) (p) (k:pnat):
41       ▶[f]p∘𝐮❨k❩ = ▶[f](p◖𝗱k).
42 // qed.
43
44 lemma unwind2_rmap_m_dx (f) (p):
45       ▶[f]p = ▶[f](p◖𝗺).
46 // qed.
47
48 lemma unwind2_rmap_L_dx (f) (p):
49       (⫯▶[f]p) = ▶[f](p◖𝗟).
50 // qed.
51
52 lemma unwind2_rmap_A_dx (f) (p):
53       ▶[f]p = ▶[f](p◖𝗔).
54 // qed.
55
56 lemma unwind2_rmap_S_dx (f) (p):
57       ▶[f]p = ▶[f](p◖𝗦).
58 // qed.
59
60 (* Constructions with path_append *******************************************)
61
62 lemma unwind2_rmap_append (f) (p) (q):
63       ▶[▶[f]p]q = ▶[f](p●q).
64 #f #p #q elim q -q // #l #q #IH
65 <unwind2_rmap_rcons <unwind2_rmap_rcons //
66 qed.
67
68 (* Constructions with path_lcons ********************************************)
69
70 lemma unwind2_rmap_lcons (f) (p) (l):
71       ▶[▶[f]l]p = ▶[f](l◗p).
72 // qed.
73
74 lemma unwind2_rmap_d_sn (f) (p) (k:pnat):
75       ▶[f∘𝐮❨k❩]p = ▶[f](𝗱k◗p).
76 // qed.
77
78 lemma unwind2_rmap_m_sn (f) (p):
79       ▶[f]p = ▶[f](𝗺◗p).
80 // qed.
81
82 lemma unwind2_rmap_L_sn (f) (p):
83       ▶[⫯f]p = ▶[f](𝗟◗p).
84 // qed.
85
86 lemma unwind2_rmap_A_sn (f) (p):
87       ▶[f]p = ▶[f](𝗔◗p).
88 // qed.
89
90 lemma unwind2_rmap_S_sn (f) (p):
91       ▶[f]p = ▶[f](𝗦◗p).
92 // qed.