]> matita.cs.unibo.it Git - helm.git/commitdiff
update in delayed_updating
authorFerruccio Guidi <ferruccio.guidi@unibo.it>
Sun, 14 Aug 2022 16:02:46 +0000 (18:02 +0200)
committerFerruccio Guidi <ferruccio.guidi@unibo.it>
Sun, 14 Aug 2022 16:02:46 +0000 (18:02 +0200)
+ focused reduction takes just one focus
+ changed minor premise of ifr_unwind_bi
+ some renaming

15 files changed:
matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_df_3.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_df_4.ma [deleted file]
matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_if_3.ma [new file with mode: 0644]
matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_if_4.ma [deleted file]
matita/matita/contribs/lambdadelta/delayed_updating/reduction/dfr.ma
matita/matita/contribs/lambdadelta/delayed_updating/reduction/dfr_ifr.ma
matita/matita/contribs/lambdadelta/delayed_updating/reduction/dfr_lift.ma
matita/matita/contribs/lambdadelta/delayed_updating/reduction/ifr.ma
matita/matita/contribs/lambdadelta/delayed_updating/reduction/ifr_lift.ma
matita/matita/contribs/lambdadelta/delayed_updating/reduction/ifr_unwind.ma
matita/matita/contribs/lambdadelta/delayed_updating/syntax/prototerm_proper_inner.ma
matita/matita/contribs/lambdadelta/delayed_updating/unwind/unwind2_path_append.ma
matita/matita/contribs/lambdadelta/delayed_updating/unwind/unwind2_preterm_eq.ma
matita/matita/contribs/lambdadelta/delayed_updating/unwind/unwind2_preterm_fsubst.ma
matita/matita/contribs/lambdadelta/delayed_updating/unwind/unwind2_prototerm_inner.ma

diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_df_3.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_df_3.ma
new file mode 100644 (file)
index 0000000..f509620
--- /dev/null
@@ -0,0 +1,19 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* NOTATION FOR DELAYED UPDATING ********************************************)
+
+notation "hvbox( t1 โžก๐๐Ÿ[ break term 46 r ] break term 46 t2 )"
+   non associative with precedence 45
+   for @{ 'BlackRightArrowDF $t1 $r $t2 }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_df_4.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_df_4.ma
deleted file mode 100644 (file)
index ca059fc..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||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                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* NOTATION FOR DELAYED UPDATING ********************************************)
-
-notation "hvbox( t1 โžก๐๐Ÿ[ break term 46 p, break term 46 q ] break term 46 t2 )"
-   non associative with precedence 45
-   for @{ 'BlackRightArrowDF $t1 $p $q $t2 }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_if_3.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_if_3.ma
new file mode 100644 (file)
index 0000000..d256877
--- /dev/null
@@ -0,0 +1,19 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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                  *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* NOTATION FOR DELAYED UPDATING ********************************************)
+
+notation "hvbox( t1 โžก๐ข๐Ÿ[ break term 46 r ] break term 46 t2 )"
+   non associative with precedence 45
+   for @{ 'BlackRightArrowIF $t1 $r $t2 }.
diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_if_4.ma b/matita/matita/contribs/lambdadelta/delayed_updating/notation/relations/black_rightarrow_if_4.ma
deleted file mode 100644 (file)
index 2b35b91..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||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                  *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* NOTATION FOR DELAYED UPDATING ********************************************)
-
-notation "hvbox( t1 โžก๐ข๐Ÿ[ break term 46 p, break term 46 q ] break term 46 t2 )"
-   non associative with precedence 45
-   for @{ 'BlackRightArrowIF $t1 $p $q $t2 }.
index 135a48b1d149f73674405dfdcf4ddf302314d703..a610cd323ed07e5f49c0ec63a2c81ca246facb7d 100644 (file)
@@ -17,17 +17,19 @@ include "delayed_updating/syntax/prototerm_constructors.ma".
 include "delayed_updating/syntax/prototerm_eq.ma".
 include "delayed_updating/syntax/path_head.ma".
 include "delayed_updating/syntax/path_depth.ma".
-include "delayed_updating/notation/relations/black_rightarrow_df_4.ma".
+include "delayed_updating/notation/relations/black_rightarrow_df_3.ma".
+include "ground/xoa/ex_4_3.ma".
 
 (* DELAYED FOCUSED REDUCTION ************************************************)
 
-definition dfr (p) (q): relation2 prototerm prototerm โ‰
-           ฮปt1,t2. โˆƒk:pnat.
-           let r โ‰ pโ—๐—”โ——๐—Ÿโ——q in
-           โˆงโˆง ๐—Ÿโ——q = โ†ณ[k](๐—Ÿโ——q) & rโ—–๐—ฑk ฯต t1 &
-              t1[โ‹”rโ†๐›•k.(t1โ‹”(pโ—–๐—ฆ))] โ‡” t2
+(**) (* explicit ninj because we cannot declare the expectd type of k *)
+definition dfr (r): relation2 prototerm prototerm โ‰
+           ฮปt1,t2.
+           โˆƒโˆƒp,q,k. pโ—๐—”โ——๐—Ÿโ——q = r &
+           (๐—Ÿโ——q) = โ†ณ[ninj k](๐—Ÿโ——q) & rโ—–๐—ฑk ฯต t1 &
+           t1[โ‹”rโ†๐›•k.(t1โ‹”(pโ—–๐—ฆ))] โ‡” t2
 .
 
 interpretation
   "focused reduction with delayed updating (prototerm)"
-  'BlackRightArrowDF t1 p q t2 = (dfr p q t1 t2).
+  'BlackRightArrowDF t1 r t2 = (dfr r t1 t2).
index 638dad75ba4536a39668a0e3cb6a3ffeea464615..68cea487c474ddaf6d9a0bff4f740a3e97953946 100644 (file)
@@ -32,12 +32,13 @@ include "delayed_updating/syntax/path_structure_depth.ma".
 
 (* Main destructions with ifr ***********************************************)
 
-theorem dfr_des_ifr (f) (p) (q) (t1) (t2): t1 ฯต ๐“ โ†’
-        t1 โžก๐๐Ÿ[p,q] t2 โ†’ โ–ผ[f]t1 โžก๐ข๐Ÿ[โŠ—p,โŠ—q] โ–ผ[f]t2.
-#f #p #q #t1 #t2 #H0t1
-* #k * #H1k #Ht1 #Ht2
-@(ex_intro โ€ฆ (โ†‘โ™ญq)) @and3_intro
-[ -H0t1 -Ht1 -Ht2
+theorem dfr_des_ifr (f) (t1) (t2) (r): t1 ฯต ๐“ โ†’
+        t1 โžก๐๐Ÿ[r] t2 โ†’ โ–ผ[f]t1 โžก๐ข๐Ÿ[โŠ—r] โ–ผ[f]t2.
+#f #t1 #t2 #r #H0t1
+* #p #q #k #Hr #H1k #Ht1 #Ht2 destruct
+@(ex4_3_intro โ€ฆ (โŠ—p) (โŠ—q) (โ†‘โ™ญq))
+[ -H0t1 -H1k -Ht1 -Ht2 //
+| -H0t1 -Ht1 -Ht2
   >structure_L_sn
   >H1k in โŠข (??%?); >path_head_structure_depth <H1k -H1k //
 | lapply (in_comp_unwind2_path_term f โ€ฆ Ht1) -Ht2 -Ht1 -H0t1
@@ -47,7 +48,7 @@ theorem dfr_des_ifr (f) (p) (q) (t1) (t2): t1 ฯต ๐“ โ†’
   lapply (eq_inv_ninj_bi โ€ฆ H2k) -H2k #H2k <H2k -H2k #Ht1 //
 | lapply (unwind2_term_eq_repl_dx f โ€ฆ Ht2) -Ht2 #Ht2
   @(subset_eq_trans โ€ฆ Ht2) -t2
-  @(subset_eq_trans โ€ฆ (unwind2_term_fsubst โ€ฆ))
+  @(subset_eq_trans โ€ฆ (unwind2_term_fsubst_ppc โ€ฆ))
   [ @fsubst_eq_repl [ // | // ]
     @(subset_eq_trans โ€ฆ (unwind2_term_iref โ€ฆ))
     @(subset_eq_canc_sn โ€ฆ (lift_term_eq_repl_dx โ€ฆ))
index e8d26308eb81d78b9ffb9405d918173a340605e8..71a599326aeef8a38fec6578e4382153ff7cca6b 100644 (file)
@@ -24,12 +24,15 @@ include "delayed_updating/substitution/lift_rmap_head.ma".
 
 (* Constructions with lift **************************************************)
 
-theorem dfr_lift_bi (f) (p) (q) (t1) (t2):
-        t1 โžก๐๐Ÿ[p,q] t2 โ†’ โ†‘[f]t1 โžก๐๐Ÿ[โ†‘[f]p,โ†‘[โ†‘[pโ—–๐—”โ—–๐—Ÿ]f]q] โ†‘[f]t2.
-#f #p #q #t1 #t2
-* #k * #H1k #Ht1 #Ht2
-@(ex_intro โ€ฆ ((โ†‘[pโ—๐—”โ——๐—Ÿโ——q]f)๏ผ โงฃโจkโฉ)) @and3_intro
-[ -Ht1 -Ht2
+(* โ†‘[โ†‘[pโ—–๐—”โ—–๐—Ÿ]f]q *)
+
+theorem dfr_lift_bi (f) (t1) (t2) (r):
+        t1 โžก๐๐Ÿ[r] t2 โ†’ โ†‘[f]t1 โžก๐๐Ÿ[โ†‘[f]r] โ†‘[f]t2.
+#f #t1 #t2 #r
+* #p #q #k #Hr #H1k #Ht1 #Ht2 destruct
+@(ex4_3_intro โ€ฆ (โ†‘[f]p) (โ†‘[โ†‘[pโ—–๐—”โ—–๐—Ÿ]f]q) ((โ†‘[pโ—๐—”โ——๐—Ÿโ——q]f)๏ผ โงฃโจkโฉ))
+[ -H1k -Ht1 -Ht2 //
+| -Ht1 -Ht2
   <lift_rmap_L_dx >lift_path_L_sn
   <(lift_path_head_closed โ€ฆ H1k) in โŠข (??%?); -H1k //
 | lapply (in_comp_lift_path_term f โ€ฆ Ht1) -Ht2 -Ht1 -H1k
index 6ded5c377268a3e0e7ddbef4a91817d575c2bcf9..b36038141c87ce356fb4296899ef3daac03269cf 100644 (file)
@@ -16,18 +16,20 @@ include "delayed_updating/substitution/fsubst.ma".
 include "delayed_updating/substitution/lift_prototerm.ma".
 include "delayed_updating/syntax/prototerm_eq.ma".
 include "delayed_updating/syntax/path_head.ma".
-include "delayed_updating/notation/relations/black_rightarrow_if_4.ma".
+include "delayed_updating/notation/relations/black_rightarrow_if_3.ma".
 include "ground/relocation/tr_uni.ma".
+include "ground/xoa/ex_4_3.ma".
 
 (* IMMEDIATE FOCUSED REDUCTION ************************************************)
 
-definition ifr (p) (q): relation2 prototerm prototerm โ‰
-           ฮปt1,t2. โˆƒk:pnat.
-           let r โ‰ pโ—๐—”โ——๐—Ÿโ——q in
-           โˆงโˆง ๐—Ÿโ——q = โ†ณ[k](๐—Ÿโ——q) & rโ—–๐—ฑk ฯต t1 &
-              t1[โ‹”rโ†โ†‘[๐ฎโจkโฉ](t1โ‹”(pโ—–๐—ฆ))] โ‡” t2
+(**) (* explicit ninj because we cannot declare the expectd type of k *)
+definition ifr (r): relation2 prototerm prototerm โ‰
+           ฮปt1,t2.
+           โˆƒโˆƒp,q,k. pโ—๐—”โ——๐—Ÿโ——q = r &
+           (๐—Ÿโ——q) = โ†ณ[ninj k](๐—Ÿโ——q) & rโ—–๐—ฑk ฯต t1 &
+           t1[โ‹”rโ†โ†‘[๐ฎโจninj kโฉ](t1โ‹”(pโ—–๐—ฆ))] โ‡” t2
 .
 
 interpretation
   "focused reduction with immediate updating (prototerm)"
-  'BlackRightArrowIF t1 p q t2 = (ifr p q t1 t2).
+  'BlackRightArrowIF t1 r t2 = (ifr r t1 t2).
index 59c9dcc9e6f150ab1d2b8ee15cdc42e2cd08bf0e..7c4d11d73cdc452391e1627a058d93dc06a4fe48 100644 (file)
@@ -27,12 +27,13 @@ include "ground/relocation/tr_compose_eq.ma".
 
 (* Constructions with lift **************************************************)
 
-theorem ifr_lift_bi (f) (p) (q) (t1) (t2):
-        t1 โžก๐ข๐Ÿ[p,q] t2 โ†’ โ†‘[f]t1 โžก๐ข๐Ÿ[โ†‘[f]p,โ†‘[โ†‘[pโ—–๐—”โ—–๐—Ÿ]f]q] โ†‘[f]t2.
-#f #p #q #t1 #t2
-* #k * #H1k #Ht1 #Ht2
-@(ex_intro โ€ฆ ((โ†‘[pโ—๐—”โ——๐—Ÿโ——q]f)๏ผ โงฃโจkโฉ)) @and3_intro
-[ -Ht1 -Ht2
+theorem ifr_lift_bi (f) (t1) (t2) (r):
+        t1 โžก๐ข๐Ÿ[r] t2 โ†’ โ†‘[f]t1 โžก๐ข๐Ÿ[โ†‘[f]r] โ†‘[f]t2.
+#f #t1 #t2 #r
+* #p #q #k #Hr #H1k #Ht1 #Ht2 destruct
+@(ex4_3_intro โ€ฆ (โ†‘[f]p) (โ†‘[โ†‘[pโ—–๐—”โ—–๐—Ÿ]f]q) ((โ†‘[pโ—๐—”โ——๐—Ÿโ——q]f)๏ผ โงฃโจkโฉ))
+[ -H1k -Ht1 -Ht2 //
+| -Ht1 -Ht2
   <lift_rmap_L_dx >lift_path_L_sn
   <(lift_path_head_closed โ€ฆ H1k) in โŠข (??%?); -H1k //
 | lapply (in_comp_lift_path_term f โ€ฆ Ht1) -Ht2 -Ht1 -H1k
index a554bdbe265cd085f11e3d213edece250d39a3b1..e8cc51826179f68191c908417adedae47fd85353 100644 (file)
@@ -20,7 +20,6 @@ include "delayed_updating/unwind/unwind2_prototerm_lift.ma".
 include "delayed_updating/unwind/unwind2_rmap_head.ma".
 
 include "delayed_updating/substitution/fsubst_eq.ma".
-include "delayed_updating/substitution/lift_prototerm_proper.ma".
 include "delayed_updating/substitution/lift_prototerm_eq.ma".
 
 include "delayed_updating/syntax/path_head_structure.ma".
@@ -30,23 +29,24 @@ include "delayed_updating/syntax/path_structure_depth.ma".
 
 (* Constructions with unwind2 ***********************************************)
 
-lemma ifr_unwind_bi (f) (p) (q) (t1) (t2):
-      t1 ฯต ๐“ โ†’ t1โ‹”(pโ—–๐—ฆ) ฯต ๐ โ†’
-      t1 โžก๐ข๐Ÿ[p,q] t2 โ†’ โ–ผ[f]t1 โžก๐ข๐Ÿ[โŠ—p,โŠ—q] โ–ผ[f]t2.
-#f #p #q #t1 #t2 #H1t1 #H2t1
-* #k * #H1k #Ht1 #Ht2
-@(ex_intro โ€ฆ (โ†‘โ™ญq)) @and3_intro
-[ -H1t1 -H2t1 -Ht1 -Ht2
+lemma ifr_unwind_bi (f) (t1) (t2) (r):
+      t1 ฯต ๐“ โ†’ r ฯต ๐ˆ โ†’
+      t1 โžก๐ข๐Ÿ[r] t2 โ†’ โ–ผ[f]t1 โžก๐ข๐Ÿ[โŠ—r] โ–ผ[f]t2.
+#f #t1 #t2 #r #H1t1 #H2r
+* #p #q #k #Hr #H1k #Ht1 #Ht2 destruct
+@(ex4_3_intro โ€ฆ (โŠ—p) (โŠ—q) (โ†‘โ™ญq))
+[ -H1t1 -H2r -H1k -Ht1 -Ht2 //
+| -H1t1 -H2r -Ht1 -Ht2
   >structure_L_sn
   >H1k in โŠข (??%?); >path_head_structure_depth <H1k -H1k //
-| lapply (in_comp_unwind2_path_term f โ€ฆ Ht1) -Ht2 -Ht1 -H1t1 -H2t1
+| lapply (in_comp_unwind2_path_term f โ€ฆ Ht1) -Ht2 -Ht1 -H1t1 -H2r
   <unwind2_path_d_dx <list_append_rcons_sn
   lapply (unwind2_rmap_append_pap_closed f โ€ฆ (pโ—–๐—”) โ€ฆ H1k) -H1k
   <depth_L_sn #H2k
   lapply (eq_inv_ninj_bi โ€ฆ H2k) -H2k #H2k <H2k -H2k #Ht1 //
 | lapply (unwind2_term_eq_repl_dx f โ€ฆ Ht2) -Ht2 #Ht2
   @(subset_eq_trans โ€ฆ Ht2) -t2
-  @(subset_eq_trans โ€ฆ (unwind2_term_fsubst โ€ฆ))
+  @(subset_eq_trans โ€ฆ (unwind2_term_fsubst_pic โ€ฆ))
   [ @fsubst_eq_repl [ // | // ]
     @(subset_eq_canc_sn โ€ฆ (lift_term_eq_repl_dx โ€ฆ))
     [ @unwind2_term_grafted_S /2 width=2 by ex_intro/ | skip ] -Ht1
@@ -64,7 +64,7 @@ lemma ifr_unwind_bi (f) (p) (q) (t1) (t2):
 (* Note: crux of the proof ends *)
   | //
   | /2 width=2 by ex_intro/
-  | /2 width=6 by lift_term_proper/
+  | //
   ]
 ]
 qed.
index e3665476b9e10e1fc08f397eb34a9b9268459f44..9f09200d3708fa7f75b0a49b6e137d1811f37907 100644 (file)
@@ -18,7 +18,7 @@ include "ground/lib/subset_overlap.ma".
 
 (* PROPER CONDITION FOR PROTOTERM *******************************************)
 
-(* Constructions with inner condition for prototerm *************************)
+(* Constructions with pic ***************************************************)
 
 lemma term_proper_outer (t):
       t โงธโ‰ฌ ๐ˆ โ†’ t ฯต ๐.
index 3114e9edd726515efca7a293a92dfe1959bca2ce..8796ce86f860c08785d8e63c4d746ce4edeeda30 100644 (file)
@@ -19,20 +19,20 @@ include "ground/xoa/ex_4_2.ma".
 
 (* TAILED UNWIND FOR PATH ***************************************************)
 
-(* Constructions with inner condition for path ******************************)
+(* Constructions with pic ***************************************************)
 
-lemma unwind2_path_inner (f) (p):
+lemma unwind2_path_pic (f) (p):
       p ฯต ๐ˆ โ†’ โŠ—p = โ–ผ[f]p.
 #f * // * // #k #q #Hq
 elim (pic_inv_d_dx โ€ฆ Hq)
 qed-.
 
-(* Constructions with append and inner condition for path *******************)
+(* Constructions with append and pic ****************************************)
 
-lemma unwind2_path_append_inner_sn (f) (p) (q): p ฯต ๐ˆ โ†’
+lemma unwind2_path_append_pic_sn (f) (p) (q): p ฯต ๐ˆ โ†’
       (โŠ—p)โ—(โ–ผ[โ–ถ[f]p]q) = โ–ผ[f](pโ—q).
 #f #p * [ #Hp | * [ #k ] #q #_ ] //
-[ <(unwind2_path_inner โ€ฆ Hp) -Hp //
+[ <(unwind2_path_pic โ€ฆ Hp) -Hp //
 | <unwind2_path_d_dx <unwind2_path_d_dx
   /2 width=3 by trans_eq/
 | <unwind2_path_L_dx <unwind2_path_L_dx //
@@ -41,9 +41,9 @@ lemma unwind2_path_append_inner_sn (f) (p) (q): p ฯต ๐ˆ โ†’
 ]
 qed.
 
-(* Constructions with append and proper condition for path ******************)
+(* Constructions with append and ppc ****************************************)
 
-lemma unwind2_path_append_proper_dx (f) (p) (q): q ฯต ๐ โ†’
+lemma unwind2_path_append_ppc_dx (f) (p) (q): q ฯต ๐ โ†’
       (โŠ—p)โ—(โ–ผ[โ–ถ[f]p]q) = โ–ผ[f](pโ—q).
 #f #p * [ #Hq | * [ #k ] #q #_ ] //
 [ elim (ppc_inv_empty โ€ฆ Hq)
@@ -63,47 +63,47 @@ lemma unwind2_path_d_empty (f) (k):
 
 lemma unwind2_path_d_lcons (f) (p) (l) (k:pnat):
       โ–ผ[fโˆ˜๐ฎโจkโฉ](lโ——p) = โ–ผ[f](๐—ฑkโ——lโ——p).
-#f #p #l #k <unwind2_path_append_proper_dx in โŠข (???%); //
+#f #p #l #k <unwind2_path_append_ppc_dx in โŠข (???%); //
 qed.
 
 lemma unwind2_path_m_sn (f) (p):
       โ–ผ[f]p = โ–ผ[f](๐—บโ——p).
-#f #p <unwind2_path_append_inner_sn //
+#f #p <unwind2_path_append_pic_sn //
 qed.
 
 lemma unwind2_path_L_sn (f) (p):
       (๐—Ÿโ——โ–ผ[โซฏf]p) = โ–ผ[f](๐—Ÿโ——p).
-#f #p <unwind2_path_append_inner_sn //
+#f #p <unwind2_path_append_pic_sn //
 qed.
 
 lemma unwind2_path_A_sn (f) (p):
       (๐—”โ——โ–ผ[f]p) = โ–ผ[f](๐—”โ——p).
-#f #p <unwind2_path_append_inner_sn //
+#f #p <unwind2_path_append_pic_sn //
 qed.
 
 lemma unwind2_path_S_sn (f) (p):
       (๐—ฆโ——โ–ผ[f]p) = โ–ผ[f](๐—ฆโ——p).
-#f #p <unwind2_path_append_inner_sn //
+#f #p <unwind2_path_append_pic_sn //
 qed.
 
-(* Destructions with inner condition for path *******************************)
+(* Destructions with pic ****************************************************)
 
-lemma unwind2_path_des_inner (f) (p):
+lemma unwind2_path_des_pic (f) (p):
       โ–ผ[f]p ฯต ๐ˆ โ†’ p ฯต ๐ˆ.
 #f * // * [ #k ] #p //
 <unwind2_path_d_dx #H0
 elim (pic_inv_d_dx โ€ฆ H0)
 qed-.
 
-(* Destructions with append and inner condition for path ********************)
+(* Destructions with append and pic *****************************************)
 
-lemma unwind2_path_des_append_inner_sn (f) (p) (q1) (q2):
+lemma unwind2_path_des_append_pic_sn (f) (p) (q1) (q2):
       q1 ฯต ๐ˆ โ†’ q1โ—q2 = โ–ผ[f]p โ†’
       โˆƒโˆƒp1,p2. q1 = โŠ—p1 & q2 = โ–ผ[โ–ถ[f]p1]p2 & p1โ—p2 = p.
 #f #p #q1 * [| * [ #k ] #q2 ] #Hq1
 [ <list_append_empty_sn #H0 destruct
-  lapply (unwind2_path_des_inner โ€ฆ Hq1) -Hq1 #Hp
-  <(unwind2_path_inner โ€ฆ Hp) -Hp
+  lapply (unwind2_path_des_pic โ€ฆ Hq1) -Hq1 #Hp
+  <(unwind2_path_pic โ€ฆ Hp) -Hp
   /2 width=5 by ex3_2_intro/
 | #H0 elim (eq_inv_d_dx_unwind2_path โ€ฆ H0) -H0 #r #h #Hr #H1 #H2 destruct
   elim (eq_inv_append_structure โ€ฆ Hr) -Hr #s1 #s2 #H1 #H2 #H3 destruct
@@ -112,24 +112,24 @@ lemma unwind2_path_des_append_inner_sn (f) (p) (q1) (q2):
 | #H0 elim (eq_inv_L_dx_unwind2_path โ€ฆ H0) -H0 #r1 #r2 #Hr1 #Hr2 #H0 destruct
   elim (eq_inv_append_structure โ€ฆ Hr1) -Hr1 #s1 #s2 #H1 #H2 #H3 destruct
   @(ex3_2_intro โ€ฆ s1 (s2โ—๐—Ÿโ——r2)) //
-  <unwind2_path_append_proper_dx //
+  <unwind2_path_append_ppc_dx //
   <unwind2_path_L_sn <Hr2 -Hr2 //
 | #H0 elim (eq_inv_A_dx_unwind2_path โ€ฆ H0) -H0 #r1 #r2 #Hr1 #Hr2 #H0 destruct
   elim (eq_inv_append_structure โ€ฆ Hr1) -Hr1 #s1 #s2 #H1 #H2 #H3 destruct
   @(ex3_2_intro โ€ฆ s1 (s2โ—๐—”โ——r2)) //
-  <unwind2_path_append_proper_dx //
+  <unwind2_path_append_ppc_dx //
   <unwind2_path_A_sn <Hr2 -Hr2 //
 | #H0 elim (eq_inv_S_dx_unwind2_path โ€ฆ H0) -H0 #r1 #r2 #Hr1 #Hr2 #H0 destruct
   elim (eq_inv_append_structure โ€ฆ Hr1) -Hr1 #s1 #s2 #H1 #H2 #H3 destruct
   @(ex3_2_intro โ€ฆ s1 (s2โ—๐—ฆโ——r2)) //
-  <unwind2_path_append_proper_dx //
+  <unwind2_path_append_ppc_dx //
   <unwind2_path_S_sn <Hr2 -Hr2 //
 ]
 qed-.
 
-(* Inversions with append and proper condition for path *********************)
+(* Inversions with append and ppc *******************************************)
 
-lemma unwind2_path_inv_append_proper_dx (f) (p) (q1) (q2):
+lemma unwind2_path_inv_append_ppc_dx (f) (p) (q1) (q2):
       q2 ฯต ๐ โ†’ q1โ—q2 = โ–ผ[f]p โ†’
       โˆƒโˆƒp1,p2. q1 = โŠ—p1 & q2 = โ–ผ[โ–ถ[f]p1]p2 & p1โ—p2 = p.
 #f #p #q1 * [| * [ #k ] #q2 ] #Hq1
@@ -142,17 +142,17 @@ lemma unwind2_path_inv_append_proper_dx (f) (p) (q1) (q2):
 | #H0 elim (eq_inv_L_dx_unwind2_path โ€ฆ H0) -H0 #r1 #r2 #Hr1 #Hr2 #H0 destruct
   elim (eq_inv_append_structure โ€ฆ Hr1) -Hr1 #s1 #s2 #H1 #H2 #H3 destruct
   @(ex3_2_intro โ€ฆ s1 (s2โ—๐—Ÿโ——r2)) //
-  <unwind2_path_append_proper_dx //
+  <unwind2_path_append_ppc_dx //
   <unwind2_path_L_sn <Hr2 -Hr2 //
 | #H0 elim (eq_inv_A_dx_unwind2_path โ€ฆ H0) -H0 #r1 #r2 #Hr1 #Hr2 #H0 destruct
   elim (eq_inv_append_structure โ€ฆ Hr1) -Hr1 #s1 #s2 #H1 #H2 #H3 destruct
   @(ex3_2_intro โ€ฆ s1 (s2โ—๐—”โ——r2)) //
-  <unwind2_path_append_proper_dx //
+  <unwind2_path_append_ppc_dx //
   <unwind2_path_A_sn <Hr2 -Hr2 //
 | #H0 elim (eq_inv_S_dx_unwind2_path โ€ฆ H0) -H0 #r1 #r2 #Hr1 #Hr2 #H0 destruct
   elim (eq_inv_append_structure โ€ฆ Hr1) -Hr1 #s1 #s2 #H1 #H2 #H3 destruct
   @(ex3_2_intro โ€ฆ s1 (s2โ—๐—ฆโ——r2)) //
-  <unwind2_path_append_proper_dx //
+  <unwind2_path_append_ppc_dx //
   <unwind2_path_S_sn <Hr2 -Hr2 //
 ]
 qed-.
@@ -167,7 +167,7 @@ lemma eq_inv_d_sn_unwind2_path (f) (q) (p) (k):
   elim (eq_inv_d_dx_unwind2_path โ€ฆ H0) -H0 #r1 #r2 #Hr1 #H1 #H2 destruct
   /2 width=5 by ex4_2_intro/
 | >list_cons_comm #H0
-  elim (unwind2_path_inv_append_proper_dx โ€ฆ H0) -H0 // #r1 #r2 #Hr1 #_ #_ -r2
+  elim (unwind2_path_inv_append_ppc_dx โ€ฆ H0) -H0 // #r1 #r2 #Hr1 #_ #_ -r2
   elim (eq_inv_d_dx_structure โ€ฆ Hr1)
 ]
 qed-.
@@ -176,7 +176,7 @@ lemma eq_inv_m_sn_unwind2_path (f) (q) (p):
       (๐—บโ——q) = โ–ผ[f]p โ†’ โŠฅ.
 #f #q #p
 >list_cons_comm #H0
-elim (unwind2_path_des_append_inner_sn โ€ฆ H0) <list_cons_comm in H0; //
+elim (unwind2_path_des_append_pic_sn โ€ฆ H0) <list_cons_comm in H0; //
 #H0 #r1 #r2 #Hr1 #H1 #H2 destruct
 elim (eq_inv_m_dx_structure โ€ฆ Hr1)
 qed-.
@@ -186,11 +186,11 @@ lemma eq_inv_L_sn_unwind2_path (f) (q) (p):
       โˆƒโˆƒr1,r2. ๐ž = โŠ—r1 & q = โ–ผ[โซฏโ–ถ[f]r1]r2 & r1โ—๐—Ÿโ——r2 = p.
 #f #q #p
 >list_cons_comm #H0
-elim (unwind2_path_des_append_inner_sn โ€ฆ H0) <list_cons_comm in H0; //
+elim (unwind2_path_des_append_pic_sn โ€ฆ H0) <list_cons_comm in H0; //
 #H0 #r1 #r2 #Hr1 #H1 #H2 destruct
 elim (eq_inv_L_dx_structure โ€ฆ Hr1) -Hr1 #s1 #s2 #H1 #_ #H3 destruct
 <list_append_assoc in H0; <list_append_assoc
-<unwind2_path_append_proper_dx //
+<unwind2_path_append_ppc_dx //
 <unwind2_path_L_sn <H1 <list_append_empty_dx #H0
 elim (eq_inv_list_rcons_bi ????? H0) -H0 #H0 #_
 /2 width=5 by ex3_2_intro/
@@ -201,11 +201,11 @@ lemma eq_inv_A_sn_unwind2_path (f) (q) (p):
       โˆƒโˆƒr1,r2. ๐ž = โŠ—r1 & q = โ–ผ[โ–ถ[f]r1]r2 & r1โ—๐—”โ——r2 = p.
 #f #q #p
 >list_cons_comm #H0
-elim (unwind2_path_des_append_inner_sn โ€ฆ H0) <list_cons_comm in H0; //
+elim (unwind2_path_des_append_pic_sn โ€ฆ H0) <list_cons_comm in H0; //
 #H0 #r1 #r2 #Hr1 #H1 #H2 destruct
 elim (eq_inv_A_dx_structure โ€ฆ Hr1) -Hr1 #s1 #s2 #H1 #_ #H3 destruct
 <list_append_assoc in H0; <list_append_assoc
-<unwind2_path_append_proper_dx //
+<unwind2_path_append_ppc_dx //
 <unwind2_path_A_sn <H1 <list_append_empty_dx #H0
 elim (eq_inv_list_rcons_bi ????? H0) -H0 #H0 #_
 /2 width=5 by ex3_2_intro/
@@ -216,11 +216,11 @@ lemma eq_inv_S_sn_unwind2_path (f) (q) (p):
       โˆƒโˆƒr1,r2. ๐ž = โŠ—r1 & q = โ–ผ[โ–ถ[f]r1]r2 & r1โ—๐—ฆโ——r2 = p.
 #f #q #p
 >list_cons_comm #H0
-elim (unwind2_path_des_append_inner_sn โ€ฆ H0) <list_cons_comm in H0; //
+elim (unwind2_path_des_append_pic_sn โ€ฆ H0) <list_cons_comm in H0; //
 #H0 #r1 #r2 #Hr1 #H1 #H2 destruct
 elim (eq_inv_S_dx_structure โ€ฆ Hr1) -Hr1 #s1 #s2 #H1 #_ #H3 destruct
 <list_append_assoc in H0; <list_append_assoc
-<unwind2_path_append_proper_dx //
+<unwind2_path_append_ppc_dx //
 <unwind2_path_S_sn <H1 <list_append_empty_dx #H0
 elim (eq_inv_list_rcons_bi ????? H0) -H0 #H0 #_
 /2 width=5 by ex3_2_intro/
index 57a17a894f7cbeae3ab5323291724895593e5ac7..a78d4b9edc18a7e0e01e3750e0c27f0dfd80663e 100644 (file)
@@ -26,13 +26,13 @@ lemma unwind2_term_grafted_sn (f) (t) (p): p ฯต ๐ˆ โ†’
       โ–ผ[โ–ถ[f]p](tโ‹”p) โŠ† (โ–ผ[f]t)โ‹”(โŠ—p).
 #f #t #p #Hp #q * #r #Hr #H0 destruct
 @(ex2_intro โ€ฆ Hr) -Hr
-<unwind2_path_append_inner_sn //
+<unwind2_path_append_pic_sn //
 qed-.
 
 lemma unwind2_term_grafted_dx (f) (t) (p): p ฯต ๐ˆ โ†’ p ฯต โ–ตt โ†’ t ฯต ๐“ โ†’
       (โ–ผ[f]t)โ‹”(โŠ—p) โŠ† โ–ผ[โ–ถ[f]p](tโ‹”p).
 #f #t #p #H1p #H2p #Ht #q * #r #Hr #H0
-elim (unwind2_path_des_append_inner_sn โ€ฆ (sym_eq โ€ฆ H0)) -H0 //
+elim (unwind2_path_des_append_pic_sn โ€ฆ (sym_eq โ€ฆ H0)) -H0 //
 #p0 #q0 #Hp0 #Hq0 #H0 destruct
 >(Ht โ€ฆ Hp0) [|*: /2 width=2 by ex_intro/ ] -p
 /2 width=1 by in_comp_unwind2_path_term/
@@ -46,7 +46,7 @@ lemma unwind2_term_grafted_S_dx (f) (t) (p): p ฯต โ–ตt โ†’ t ฯต ๐“ โ†’
       (โ–ผ[f]t)โ‹”((โŠ—p)โ—–๐—ฆ) โŠ† โ–ผ[โ–ถ[f]p](tโ‹”(pโ—–๐—ฆ)).
 #f #t #p #Hp #Ht #q * #r #Hr
 >list_append_rcons_sn #H0
-elim (unwind2_path_inv_append_proper_dx โ€ฆ (sym_eq โ€ฆ H0)) -H0 //
+elim (unwind2_path_inv_append_ppc_dx โ€ฆ (sym_eq โ€ฆ H0)) -H0 //
 #p0 #q0 #Hp0 #Hq0 #H0 destruct
 >(Ht โ€ฆ Hp0) [|*: /2 width=2 by ex_intro/ ] -p
 elim (eq_inv_S_sn_unwind2_path โ€ฆ Hq0) -Hq0
index 19634dccc1b2a0866c00e12a9194af04738525b4..ecf0eaf0f7d1b131fd80decb6a63ebc9fb39c545 100644 (file)
@@ -20,30 +20,69 @@ include "delayed_updating/syntax/prototerm_proper.ma".
 
 (* TAILED UNWIND FOR PRETERM ************************************************)
 
-(* Constructions with fsubst ************************************************)
+(* Constructions with fsubst and pic ****************************************)
 
-lemma unwind2_term_fsubst_sn (f) (t) (u) (p): u ฯต ๐ โ†’
+lemma unwind2_term_fsubst_pic_sn (f) (t) (u) (p): p ฯต ๐ˆ โ†’
+      (โ–ผ[f]t)[โ‹”(โŠ—p)โ†โ–ผ[โ–ถ[f]p]u] โŠ† โ–ผ[f](t[โ‹”pโ†u]).
+#f #t #u #p #Hp #ql * *
+[ #rl * #r #Hr #H1 #H2 destruct
+  >unwind2_path_append_pic_sn
+  /4 width=3 by in_comp_unwind2_path_term, or_introl, ex2_intro/
+| * #q #Hq #H1 #H0
+  @(ex2_intro โ€ฆ H1) @or_intror @conj // *
+  [ <list_append_empty_sn #H2 destruct
+    elim (unwind2_path_root f q) #r #_ #Hr /2 width=2 by/
+  | #l #r #H2 destruct
+    /3 width=2 by unwind2_path_append_pic_sn/
+  ]
+]
+qed-.
+
+lemma unwind2_term_fsubst_pic_dx (f) (t) (u) (p): p ฯต ๐ˆ โ†’ p ฯต โ–ตt โ†’ t ฯต ๐“ โ†’
+      โ–ผ[f](t[โ‹”pโ†u]) โŠ† (โ–ผ[f]t)[โ‹”(โŠ—p)โ†โ–ผ[โ–ถ[f]p]u].
+#f #t #u #p #Hp #H1p #H2p #ql * #q * *
+[ #r #Hu #H1 #H2 destruct
+  /5 width=3 by unwind2_path_append_pic_sn, ex2_intro, or_introl/
+| #Hq #H0 #H1 destruct
+  @or_intror @conj [ /2 width=1 by in_comp_unwind2_path_term/ ] *
+  [ <list_append_empty_sn #Hr @(H0 โ€ฆ (๐ž)) -H0
+    <list_append_empty_sn @H2p -H2p
+    /2 width=2 by unwind2_path_des_structure, prototerm_in_comp_root/
+  | #l #r #Hr
+    elim (unwind2_path_inv_append_ppc_dx โ€ฆ Hr) -Hr // #s1 #s2 #Hs1 #_ #H1 destruct
+    lapply (H2p โ€ฆ Hs1) -H2p -Hs1 /2 width=2 by ex_intro/
+  ]
+]
+qed-.
+
+lemma unwind2_term_fsubst_pic (f) (t) (u) (p): p ฯต ๐ˆ โ†’ p ฯต โ–ตt โ†’ t ฯต ๐“ โ†’
+      (โ–ผ[f]t)[โ‹”(โŠ—p)โ†โ–ผ[โ–ถ[f]p]u] โ‡” โ–ผ[f](t[โ‹”pโ†u]).
+/4 width=3 by unwind2_term_fsubst_pic_sn, conj, unwind2_term_fsubst_pic_dx/ qed.
+
+(* Constructions with fsubst and ppc ****************************************)
+
+lemma unwind2_term_fsubst_ppc_sn (f) (t) (u) (p): u ฯต ๐ โ†’
       (โ–ผ[f]t)[โ‹”(โŠ—p)โ†โ–ผ[โ–ถ[f]p]u] โŠ† โ–ผ[f](t[โ‹”pโ†u]).
 #f #t #u #p #Hu #ql * *
 [ #rl * #r #Hr #H1 #H2 destruct
-  >unwind2_path_append_proper_dx
+  >unwind2_path_append_ppc_dx
   /4 width=5 by in_comp_unwind2_path_term, in_comp_tpc_trans, or_introl, ex2_intro/
 | * #q #Hq #H1 #H0
   @(ex2_intro โ€ฆ H1) @or_intror @conj // *
   [ <list_append_empty_sn #H2 destruct
     elim (unwind2_path_root f q) #r #_ #Hr /2 width=2 by/
   | #l #r #H2 destruct
-    @H0 -H0 [| <unwind2_path_append_proper_dx /2 width=3 by ppc_rcons/ ]
+    @H0 -H0 [| <unwind2_path_append_ppc_dx /2 width=3 by ppc_rcons/ ]
   ]
 ]
 qed-.
 
-lemma unwind2_term_fsubst_dx (f) (t) (u) (p): u ฯต ๐ โ†’ p ฯต โ–ตt โ†’ t ฯต ๐“ โ†’
+lemma unwind2_term_fsubst_ppc_dx (f) (t) (u) (p): u ฯต ๐ โ†’ p ฯต โ–ตt โ†’ t ฯต ๐“ โ†’
       โ–ผ[f](t[โ‹”pโ†u]) โŠ† (โ–ผ[f]t)[โ‹”(โŠ—p)โ†โ–ผ[โ–ถ[f]p]u].
 #f #t #u #p #Hu #H1p #H2p #ql * #q * *
 [ #r #Hu #H1 #H2 destruct
   @or_introl @ex2_intro
-  [|| <unwind2_path_append_proper_dx /2 width=5 by in_comp_tpc_trans/ ]
+  [|| <unwind2_path_append_ppc_dx /2 width=5 by in_comp_tpc_trans/ ]
   /2 width=3 by ex2_intro/
 | #Hq #H0 #H1 destruct
   @or_intror @conj [ /2 width=1 by in_comp_unwind2_path_term/ ] *
@@ -51,12 +90,12 @@ lemma unwind2_term_fsubst_dx (f) (t) (u) (p): u ฯต ๐ โ†’ p ฯต โ–ตt โ†’ t ฯต 
     <list_append_empty_sn @H2p -H2p
     /2 width=2 by unwind2_path_des_structure, prototerm_in_comp_root/
   | #l #r #Hr
-    elim (unwind2_path_inv_append_proper_dx โ€ฆ Hr) -Hr // #s1 #s2 #Hs1 #_ #H1 destruct
+    elim (unwind2_path_inv_append_ppc_dx โ€ฆ Hr) -Hr // #s1 #s2 #Hs1 #_ #H1 destruct
     lapply (H2p โ€ฆ Hs1) -H2p -Hs1 /2 width=2 by ex_intro/
   ]
 ]
 qed-.
 
-lemma unwind2_term_fsubst (f) (t) (u) (p): u ฯต ๐ โ†’ p ฯต โ–ตt โ†’ t ฯต ๐“ โ†’
+lemma unwind2_term_fsubst_ppc (f) (t) (u) (p): u ฯต ๐ โ†’ p ฯต โ–ตt โ†’ t ฯต ๐“ โ†’
       (โ–ผ[f]t)[โ‹”(โŠ—p)โ†โ–ผ[โ–ถ[f]p]u] โ‡” โ–ผ[f](t[โ‹”pโ†u]).
-/4 width=3 by unwind2_term_fsubst_sn, conj, unwind2_term_fsubst_dx/ qed.
+/4 width=3 by unwind2_term_fsubst_ppc_sn, conj, unwind2_term_fsubst_ppc_dx/ qed.
index cbb32a8b5023b2e61e129ef30abb1a449200bed1..6ad293f0949c401f07c68136aeb0bcb623f374dd 100644 (file)
@@ -18,11 +18,11 @@ include "ground/lib/subset_overlap.ma".
 
 (* TAILED UNWIND FOR PROTOTERM **********************************************)
 
-(* Destructions with inner condition for path *******************************)
+(* Destructions with pic ****************************************************)
 
-lemma unwind2_term_des_inner (f) (t):
+lemma unwind2_term_des_pic (f) (t):
       โ–ผ[f]t โ‰ฌ ๐ˆ โ†’ t โ‰ฌ ๐ˆ.
 #f #t * #p * #q #Hq #H0 #Hp destruct
 @(subset_ol_i โ€ฆ Hq) -Hq (**) (* auto does not work *)
-@(unwind2_path_des_inner โ€ฆ Hp)
+@(unwind2_path_des_pic โ€ฆ Hp)
 qed-.