]> matita.cs.unibo.it Git - helm.git/commitdiff
update in delayed_updating
authorFerruccio Guidi <ferruccio.guidi@unibo.it>
Thu, 28 Apr 2022 15:34:11 +0000 (17:34 +0200)
committerFerruccio Guidi <ferruccio.guidi@unibo.it>
Thu, 28 Apr 2022 15:34:11 +0000 (17:34 +0200)
+ alternative definition of unwind based on lift

matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift.ma
matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_path.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_path_structure.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_rmap.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_rmap_eq.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_path.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_path_structure.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_rmap.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_rmap_eq.ma [new file with mode: 0644]

index 5865fe6ad67fd6349bfa53879db740140e6348d8..e6e1e661eb2a3374f97999cd9ab0218495bdd594 100644 (file)
@@ -111,6 +111,14 @@ lemma lift_rmap_S_sn (f) (p):
       ā†‘[p]f = ā†‘[š—¦ā——p]f.
 // qed.
 
+(* Advanced cinstructionswith proj_rmap and tr_id ***************************)
+
+lemma lift_rmap_id (p):
+      (š¢) = ā†‘[p]š¢.
+#p elim p -p //
+* [ #n ] #p #IH //
+qed.
+
 (* Advanced constructions with proj_rmap and path_append ********************)
 
 lemma lift_rmap_append (p2) (p1) (f):
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_path.ma b/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_path.ma
new file mode 100644 (file)
index 0000000..b23db01
--- /dev/null
@@ -0,0 +1,108 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "delayed_updating/substitution/lift_length.ma".
+include "delayed_updating/notation/functions/black_downtriangle_1.ma".
+include "ground/relocation/tr_uni.ma".
+
+(* BASIC UNWIND FOR PATH ****************************************************)
+
+rec definition unwind1_path_pnat (n) (p) on n ā‰
+match n with
+[ punit   ā‡’ p
+| psucc m ā‡’
+  match p with
+  [ list_empty     ā‡’ šž
+  | list_lcons l q ā‡’
+    match l with
+    [ label_d n ā‡’
+      match q with
+      [ list_empty     ā‡’ lā——(unwind1_path_pnat m q)
+      | list_lcons _ _ ā‡’ unwind1_path_pnat m (ā†‘[š®āØnā©]q)
+      ]
+    | label_m   ā‡’ unwind1_path_pnat m q
+    | label_L   ā‡’ š—Ÿā——(unwind1_path_pnat m q)
+    | label_A   ā‡’ š—”ā——(unwind1_path_pnat m q)
+    | label_S   ā‡’ š—¦ā——(unwind1_path_pnat m q)
+    ]
+  ]
+].
+
+definition unwind1_path (p) ā‰
+           unwind1_path_pnat (ā†‘ā˜pā˜) p.
+
+interpretation
+  "basic unwind (path)"
+  'BlackDownTriangle p = (unwind1_path p).
+
+(* Basic constructions ******************************************************)
+
+lemma unwind1_path_unfold (p):
+      unwind1_path_pnat (ā†‘ā˜pā˜) p = ā–¼p.
+// qed-.
+
+lemma unwind1_path_empty:
+      (šž) = ā–¼šž.
+// qed.
+
+lemma unwind1_path_d_empty (n):
+      (š—±nā——šž) = ā–¼(š—±nā——šž).
+// qed.
+
+lemma unwind1_path_d_lcons (p) (l) (n:pnat):
+      ā–¼(ā†‘[š®āØnā©](lā——p)) = ā–¼(š—±nā——lā——p).
+#p #l #n
+<unwind1_path_unfold <lift_path_length //
+qed.
+
+lemma unwind1_path_m_sn (p):
+      ā–¼p = ā–¼(š—ŗā——p).
+// qed.
+
+lemma unwind1_path_L_sn (p):
+      (š—Ÿā——ā–¼p) = ā–¼(š—Ÿā——p).
+// qed.
+
+lemma unwind1_path_A_sn (p):
+      (š—”ā——ā–¼p) = ā–¼(š—”ā——p).
+// qed.
+
+lemma unwind1_path_S_sn (p):
+      (š—¦ā——ā–¼p) = ā–¼(š—¦ā——p).
+// qed.
+
+(* Main constructions *******************************************************)
+
+fact unwind1_path_fix_aux (k) (p):
+     k = ā˜pā˜ ā†’ ā–¼p = ā–¼ā–¼p.
+#k @(nat_ind_succ ā€¦ k) -k
+[ #p #H0 >(list_length_inv_zero_sn ā€¦ H0) -p //
+| #k #IH *
+  [ #H0 elim (eq_inv_nsucc_zero ā€¦ H0)
+  | * [ #n ] #p #H0
+    lapply (eq_inv_nsucc_bi ā€¦ H0) -H0
+    [ cases p -p [ -IH | #l #p ] #H0 destruct //
+      <unwind1_path_d_lcons <IH -IH //
+    | #H0 destruct <unwind1_path_m_sn <IH -IH //
+    | #H0 destruct <unwind1_path_L_sn <unwind1_path_L_sn <IH -IH //
+    | #H0 destruct <unwind1_path_A_sn <unwind1_path_A_sn <IH -IH //
+    | #H0 destruct <unwind1_path_S_sn <unwind1_path_S_sn <IH -IH //
+    ]
+  ]
+]
+qed-.
+
+theorem unwind1_path_fix (p):
+        ā–¼p = ā–¼ā–¼p.
+/2 width=2 by unwind1_path_fix_aux/ qed.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_path_structure.ma b/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_path_structure.ma
new file mode 100644 (file)
index 0000000..3a838eb
--- /dev/null
@@ -0,0 +1,48 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "delayed_updating/unwind0/unwind1_rmap_eq.ma".
+include "delayed_updating/unwind0/unwind1_path.ma".
+include "delayed_updating/substitution/lift_structure.ma".
+
+(* BASIC UNWIND FOR PATH ****************************************************)
+
+(* Constructions with structure *********************************************)
+
+fact unwind1_path_d_dx_aux (k) (p) (n):
+     k = ā˜pā˜ ā†’ (āŠ—p)ā—–š—±((ā–¶p)@āØnā©) = ā–¼(pā—–š—±n).
+#k @(nat_ind_succ ā€¦ k) -k
+[ #p #n #H0 >(list_length_inv_zero_sn ā€¦ H0) -p //
+| #k #IH *
+  [ #n #H0 elim (eq_inv_nsucc_zero ā€¦ H0)
+  | * [ #m ] #p #n #H0
+    lapply (eq_inv_nsucc_bi ā€¦ H0) -H0
+    [ cases p -p [ -IH | #l #p ] #H0 destruct <unwind1_path_d_lcons
+      [ <lift_path_d_sn <lift_path_empty <unwind1_path_d_empty
+        <list_cons_comm <(tr_pap_eq_repl ā€¦ (unwind1_rmap_d_empty ā€¦)) //
+      | >list_cons_shift <lift_path_d_dx <IH -IH //
+        <structure_lift <structure_d_sn /3 width=1 by eq_f2/
+      ]
+    | #H0 destruct <unwind1_path_m_sn <IH -IH //
+    | #H0 destruct <unwind1_path_L_sn <IH -IH //
+    | #H0 destruct <unwind1_path_A_sn <IH -IH //
+    | #H0 destruct <unwind1_path_S_sn <IH -IH //
+    ]
+  ]
+]
+qed-.
+
+lemma unwind1_path_d_dx (p) (n):
+      (āŠ—p)ā—–š—±((ā–¶p)@āØnā©) = ā–¼(pā—–š—±n).
+/2 width=2 by unwind1_path_d_dx_aux/ qed.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_rmap.ma b/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_rmap.ma
new file mode 100644 (file)
index 0000000..66a77d1
--- /dev/null
@@ -0,0 +1,76 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "delayed_updating/substitution/lift_length.ma".
+include "delayed_updating/notation/functions/black_righttriangle_1.ma".
+include "ground/relocation/tr_uni.ma".
+include "ground/relocation/tr_compose.ma".
+
+(* BASIC UNWIND FOR RELOCATION MAP ******************************************)
+
+rec definition unwind1_rmap_pnat (n) (p) on n ā‰
+match n with
+[ punit   ā‡’ š¢
+| psucc m ā‡’
+  match p with
+  [ list_empty     ā‡’ š¢
+  | list_lcons l q ā‡’
+    match l with
+    [ label_d n ā‡’ (unwind1_rmap_pnat m (ā†‘[š®āØnā©]q))āˆ˜(ā†‘[q]š®āØnā©)
+    | label_m   ā‡’ unwind1_rmap_pnat m q
+    | label_L   ā‡’ unwind1_rmap_pnat m q
+    | label_A   ā‡’ unwind1_rmap_pnat m q
+    | label_S   ā‡’ unwind1_rmap_pnat m q
+    ]
+  ]
+].
+
+definition unwind1_rmap (p) ā‰
+           unwind1_rmap_pnat (ā†‘ā˜pā˜) p.
+
+interpretation
+  "basic unwind (relocation map)"
+  'BlackRightTriangle p = (unwind1_rmap p).
+
+(* Basic constructions ******************************************************)
+
+lemma unwind1_rmap_unfold (p):
+      unwind1_rmap_pnat (ā†‘ā˜pā˜) p = ā–¶p.
+// qed-.
+
+lemma unwind1_rmap_empty:
+      (š¢) = ā–¶(šž).
+// qed.
+
+lemma unwind1_rmap_d_sn (p) (n:pnat):
+      (ā–¶(ā†‘[š®āØnā©]p))āˆ˜(ā†‘[p]š®āØnā©) = ā–¶(š—±nā——p).
+#p #n
+<unwind1_rmap_unfold <lift_path_length //
+qed.
+
+lemma unwind1_rmap_m_sn (p):
+      ā–¶p = ā–¶(š—ŗā——p).
+// qed.
+
+lemma unwind1_rmap_L_sn (p):
+      ā–¶p = ā–¶(š—Ÿā——p).
+// qed.
+
+lemma unwind1_rmap_A_sn (p):
+      ā–¶p = ā–¶(š—”ā——p).
+// qed.
+
+lemma unwind1_rmap_S_sn (p):
+      ā–¶p = ā–¶(š—¦ā——p).
+// qed.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_rmap_eq.ma b/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind1_rmap_eq.ma
new file mode 100644 (file)
index 0000000..113e0cc
--- /dev/null
@@ -0,0 +1,24 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "delayed_updating/unwind0/unwind1_rmap.ma".
+include "ground/relocation/tr_id_compose.ma".
+
+(* BASIC UNWIND FOR RELOCATION MAP ******************************************)
+
+(* Constructions with stream_eq *********************************************)
+
+lemma unwind1_rmap_d_empty (n:pnat):
+      (š®āØnā©) ā‰— ā–¶(š—±nā——šž).
+// qed.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_path.ma b/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_path.ma
new file mode 100644 (file)
index 0000000..859c1b8
--- /dev/null
@@ -0,0 +1,109 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "delayed_updating/unwind0/unwind1_path.ma".
+include "delayed_updating/notation/functions/black_downtriangle_2.ma".
+
+(* EXTENDED UNWIND FOR PATH *************************************************)
+
+definition unwind2_path (f) (p) ā‰
+           ā–¼ā†‘[f]p.
+
+interpretation
+  "extended unwind (path)"
+  'BlackDownTriangle f p = (unwind2_path f p).
+
+(* Basic constructions ******************************************************)
+
+lemma unwind2_path_unfold (f) (p):
+      ā–¼ā†‘[f]p = ā–¼[f]p.
+// qed.
+
+lemma unwind2_path_id (p):
+      ā–¼p = ā–¼[š¢]p.
+// qed.
+
+lemma unwind2_path_empty (f):
+      (šž) = ā–¼[f]šž.
+// qed.
+
+lemma unwind2_path_d_empty (f) (n):
+      (š—±(f@āØnā©)ā——šž) = ā–¼[f](š—±nā——šž).
+// qed.
+
+lemma unwind2_path_d_lcons (f) (p) (l) (n:pnat):
+      ā–¼[š®āØf@āØnā©ā©](lā——p) = ā–¼[f](š—±nā——lā——p).
+#f #p #l #n
+<unwind2_path_unfold in āŠ¢ (???%);
+<lift_path_d_sn <lift_path_id <unwind1_path_d_lcons //
+qed.
+
+lemma unwind2_path_m_sn (f) (p):
+      ā–¼[f]p = ā–¼[f](š—ŗā——p).
+#f #p
+<unwind2_path_unfold in āŠ¢ (???%);
+<lift_path_m_sn //
+qed.
+
+lemma unwind2_path_L_sn (f) (p):
+      (š—Ÿā——ā–¼[ā«Æf]p) = ā–¼[f](š—Ÿā——p).
+#f #p
+<unwind2_path_unfold in āŠ¢ (???%);
+<lift_path_L_sn //
+qed.
+
+lemma unwind2_path_A_sn (f) (p):
+      (š—”ā——ā–¼[f]p) = ā–¼[f](š—”ā——p).
+#f #p
+<unwind2_path_unfold in āŠ¢ (???%);
+<lift_path_A_sn //
+qed.
+
+lemma unwind2_path_S_sn (f) (p):
+      (š—¦ā——ā–¼[f]p) = ā–¼[f](š—¦ā——p).
+#f #p
+<unwind2_path_unfold in āŠ¢ (???%);
+<lift_path_S_sn //
+qed.
+
+(* Main constructions *******************************************************)
+
+theorem unwind2_path_after_id_sn (p) (f):
+        ā–¼[f]p = ā–¼ā–¼[f]p.
+// qed.
+
+(* Constructions with stream_eq *********************************************)
+
+lemma unwind2_path_eq_repl (p):
+      stream_eq_repl ā€¦ (Ī»f1,f2. ā–¼[f1]p = ā–¼[f2]p).
+#p #f1 #f2 #Hf
+<unwind2_path_unfold <unwind2_path_unfold
+<(lift_path_eq_repl ā€¦ Hf) -Hf //
+qed.
+
+(* Advanced eliminations with path ******************************************)
+
+lemma path_ind_unwind2 (Q:predicate ā€¦):
+      Q (šž) ā†’
+      (āˆ€n. Q (šž) ā†’ Q (š—±nā——šž)) ā†’
+      (āˆ€n,l,p. Q (lā——p) ā†’ Q (š—±nā——lā——p)) ā†’
+      (āˆ€p. Q p ā†’ Q (š—ŗā——p)) ā†’
+      (āˆ€p. Q p ā†’ Q (š—Ÿā——p)) ā†’
+      (āˆ€p. Q p ā†’ Q (š—”ā——p)) ā†’
+      (āˆ€p. Q p ā†’ Q (š—¦ā——p)) ā†’
+      āˆ€p. Q p.
+#Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #p
+elim p -p [| * [ #n * ] ]
+/2 width=1 by/
+qed-.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_path_structure.ma b/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_path_structure.ma
new file mode 100644 (file)
index 0000000..3ed2406
--- /dev/null
@@ -0,0 +1,28 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "delayed_updating/unwind0/unwind2_rmap.ma".
+include "delayed_updating/unwind0/unwind2_path.ma".
+include "delayed_updating/unwind0/unwind1_path_structure.ma".
+
+(* EXTENDED UNWIND FOR PATH *************************************************)
+
+(* Constructions with structure *********************************************)
+
+lemma unwind2_path_d_dx (f) (p) (n):
+      (āŠ—p)ā—–š—±((ā–¶[f]p)@āØnā©) = ā–¼[f](pā—–š—±n).
+#f #p #n
+<unwind2_path_unfold <lift_path_d_dx <unwind1_path_d_dx
+<structure_lift >tr_compose_pap //
+qed.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_rmap.ma b/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_rmap.ma
new file mode 100644 (file)
index 0000000..9bb2675
--- /dev/null
@@ -0,0 +1,59 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "delayed_updating/unwind0/unwind1_rmap.ma".
+include "delayed_updating/notation/functions/black_righttriangle_2.ma".
+
+(* EXTENDED UNWIND FOR RELOCATION MAP ***************************************)
+
+definition unwind2_rmap (f) (p): tr_map ā‰
+           (ā–¶ā†‘[f]p)āˆ˜(ā†‘[p]f).
+
+interpretation
+  "extended unwind (relocation map)"
+  'BlackRightTriangle f p = (unwind2_rmap f p).
+
+(* Basic constructions ******************************************************)
+
+lemma unwind2_rmap_unfold (f) (p):
+      (ā–¶ā†‘[f]p)āˆ˜(ā†‘[p]f) = ā–¶[f]p.
+// qed.
+
+lemma unwind2_rmap_m_sn (f) (p):
+      ā–¶[f]p = ā–¶[f](š—ŗā——p).
+#f #p
+<unwind2_rmap_unfold in āŠ¢ (???%);
+<lift_rmap_m_sn <lift_path_m_sn //
+qed.
+
+lemma unwind2_rmap_L_sn (f) (p):
+      ā–¶[ā«Æf]p = ā–¶[f](š—Ÿā——p).
+#f #p
+<unwind2_rmap_unfold in āŠ¢ (???%);
+<lift_rmap_L_sn <lift_path_L_sn //
+qed.
+
+lemma unwind2_rmap_A_sn (f) (p):
+      ā–¶[f]p = ā–¶[f](š—”ā——p).
+#f #p
+<unwind2_rmap_unfold in āŠ¢ (???%);
+<lift_rmap_A_sn <lift_path_A_sn //
+qed.
+
+lemma unwind2_rmap_S_sn (f) (p):
+      ā–¶[f]p = ā–¶[f](š—¦ā——p).
+#f #p
+<unwind2_rmap_unfold in āŠ¢ (???%);
+<lift_rmap_S_sn <lift_path_S_sn //
+qed.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_rmap_eq.ma b/matita/matita/contribs/lambdadelta/delayed_updating/unwind0/unwind2_rmap_eq.ma
new file mode 100644 (file)
index 0000000..7666c1c
--- /dev/null
@@ -0,0 +1,36 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||M||                                                             *)
+(*      ||A||       A project by Andrea Asperti                           *)
+(*      ||T||                                                             *)
+(*      ||I||       Developers:                                           *)
+(*      ||T||         The HELM team.                                      *)
+(*      ||A||         http://helm.cs.unibo.it                             *)
+(*      \   /                                                             *)
+(*       \ /        This file is distributed under the terms of the       *)
+(*        v         GNU General Public License Version 2                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+include "delayed_updating/unwind0/unwind2_rmap.ma".
+include "ground/relocation/tr_id_compose.ma".
+
+(* EXTENDED UNWIND FOR RELOCATION MAP ***************************************)
+
+(* Advanced constructions ***************************************************)
+
+lemma unwind2_rmap_id (p):
+      ā–¶p ā‰— ā–¶[š¢]p.
+// qed.
+
+lemma unwind2_rmap_empty (f):
+      f ā‰— ā–¶[f]šž.
+// qed.
+
+lemma unwind2_rmap_d_sn (f) (p) (n):
+      ā–¶[š®āØf@āØnā©ā©]p ā‰— ā–¶[f](š—±nā——p).
+#f #p #n
+<unwind2_rmap_unfold <unwind2_rmap_unfold
+<lift_rmap_d_sn <lift_rmap_id
+<lift_path_d_sn <lift_path_id <unwind1_rmap_d_sn //
+qed.