]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_depth.ma
2e638b8ac43bfba05ccc9783d2045d130d302a9d
[helm.git] / matita / matita / contribs / lambdadelta / delayed_updating / syntax / path_depth.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/path.ma".
16 include "delayed_updating/notation/functions/flat_1.ma".
17 include "ground/arith/nat_plus.ma".
18
19 (* DEPTH FOR PATH ***********************************************************)
20
21 rec definition depth (p) on p: nat ≝
22 match p with
23 [ list_empty     ⇒ 𝟎
24 | list_lcons l q ⇒
25   match l with
26   [ label_d k    ⇒ depth q
27   | label_d2 k d ⇒ depth q
28   | label_m      ⇒ depth q
29   | label_L      ⇒ ↑(depth q)
30   | label_A      ⇒ depth q
31   | label_S      ⇒ depth q
32   ]
33 ].
34
35 interpretation
36   "depth (path)"
37   'Flat p = (depth p).
38
39 (* Basic constructions ******************************************************)
40
41 lemma depth_empty: 𝟎 = ♭𝐞.
42 // qed.
43
44 lemma depth_d_dx (p) (k):
45       ♭p = ♭(p◖𝗱k).
46 // qed.
47
48 lemma depth_d2_dx (p) (k) (d):
49       ♭p = ♭(p◖𝗱❨k,d❩).
50 // qed.
51
52 lemma depth_m_dx (p):
53       ♭p = ♭(p◖𝗺).
54 // qed.
55
56 lemma depth_L_dx (p):
57       ↑♭p = ♭(p◖𝗟).
58 // qed.
59
60 lemma depth_A_dx (p):
61       ♭p = ♭(p◖𝗔).
62 // qed.
63
64 lemma depth_S_dx (p):
65       ♭p = ♭(p◖𝗦).
66 // qed.
67
68 (* Main constructions *******************************************************)
69
70 theorem depth_append (p) (q):
71         (♭p)+(♭q) = ♭(p●q).
72 #p #q elim q -q //
73 * [ #k | #k #d ] #q #IH <list_append_lcons_sn
74 [ <depth_d_dx <depth_d_dx //
75 | <depth_d2_dx <depth_d2_dx //
76 | <depth_m_dx <depth_m_dx //
77 | <depth_L_dx <depth_L_dx //
78 | <depth_A_dx <depth_A_dx //
79 | <depth_S_dx <depth_S_dx //
80 ]
81 qed.
82
83 (* Constructions with path_lcons ********************************************)
84
85 lemma depth_d_sn (p) (k):
86       ♭p = ♭(𝗱k◗p).
87 // qed.
88
89 lemma depth_d2_sn (p) (k) (d):
90       ♭p = ♭(𝗱❨k,d❩◗p).
91 // qed.
92
93 lemma depth_m_sn (p):
94       ♭p = ♭(𝗺◗p).
95 // qed.
96
97 lemma depth_L_sn (p):
98       ↑♭p = ♭(𝗟◗p).
99 // qed.
100
101 lemma depth_A_sn (p):
102       ♭p = ♭(𝗔◗p).
103 // qed.
104
105 lemma depth_S_sn (p):
106       ♭p = ♭(𝗦◗p).
107 // qed.