From d7ff8dcf71f18a17fbf66696f0293cd411c1dbca Mon Sep 17 00:00:00 2001 From: Ferruccio Guidi Date: Wed, 22 Jun 2022 13:38:11 +0200 Subject: [PATCH 1/1] update in delayed updating + dfr_lift_bi proved --- .../delayed_updating/reduction/dfr_lift.ma | 56 ++++--------- .../delayed_updating/reduction/ifr.ma | 1 - .../substitution/fsubst_lift.ma | 7 +- .../substitution/lift_constructors.ma | 12 +-- .../delayed_updating/substitution/lift_eq.ma | 79 +++++++++++-------- .../substitution/lift_prototerm_eq.ma | 24 ++++++ .../substitution/lift_rmap_head.ma | 62 +++++++++++++++ 7 files changed, 154 insertions(+), 87 deletions(-) create mode 100644 matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift_rmap_head.ma diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/reduction/dfr_lift.ma b/matita/matita/contribs/lambdadelta/delayed_updating/reduction/dfr_lift.ma index 3c6e4d6d9..9fbf809b3 100644 --- a/matita/matita/contribs/lambdadelta/delayed_updating/reduction/dfr_lift.ma +++ b/matita/matita/contribs/lambdadelta/delayed_updating/reduction/dfr_lift.ma @@ -14,34 +14,19 @@ include "delayed_updating/reduction/dfr.ma". include "delayed_updating/reduction/ifr.ma". -(* -include "delayed_updating/unwind/unwind2_constructors.ma". -include "delayed_updating/unwind/unwind2_preterm_fsubst.ma". -include "delayed_updating/unwind/unwind2_preterm_eq.ma". -include "delayed_updating/unwind/unwind2_prototerm_lift.ma". -include "delayed_updating/unwind/unwind2_rmap_head.ma". -*) + +include "delayed_updating/substitution/fsubst_lift.ma". include "delayed_updating/substitution/fsubst_eq.ma". +include "delayed_updating/substitution/lift_constructors.ma". include "delayed_updating/substitution/lift_prototerm_eq.ma". include "delayed_updating/substitution/lift_path_head.ma". - -include "delayed_updating/syntax/prototerm_proper_constructors.ma". - +include "delayed_updating/substitution/lift_rmap_head.ma". (* DELAYED FOCUSED REDUCTION ************************************************) (* Constructions with lift **************************************************) -(* -lemma pippo (f) (r): - ↑[↑[r]f](rᴿ) = (↑[f]r)ᴿ. -#f #r @(list_ind_rcons … r) -r // -#p * [ #n ] #IH -[ list_append_rcons_sn in H1n; nrplus_inj_dx in ⊢ (???%); list_append_rcons_sn in H1n; #H1n >lift_rmap_A_dx + /2 width=1 by tls_lift_rmap_append_closed/ (* Note: crux of the proof ends *) - | // - | /2 width=2 by ex_intro/ - | // - ] ] qed. -*) \ No newline at end of file diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/reduction/ifr.ma b/matita/matita/contribs/lambdadelta/delayed_updating/reduction/ifr.ma index a63368e1e..fcc12edbf 100644 --- a/matita/matita/contribs/lambdadelta/delayed_updating/reduction/ifr.ma +++ b/matita/matita/contribs/lambdadelta/delayed_updating/reduction/ifr.ma @@ -16,7 +16,6 @@ include "delayed_updating/unwind/unwind2_prototerm.ma". include "delayed_updating/substitution/fsubst.ma". include "delayed_updating/syntax/prototerm_eq.ma". include "delayed_updating/syntax/path_head.ma". -include "delayed_updating/syntax/path_reverse.ma". include "delayed_updating/notation/relations/black_rightarrow_if_4.ma". (* IMMEDIATE FOCUSED REDUCTION ************************************************) diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/substitution/fsubst_lift.ma b/matita/matita/contribs/lambdadelta/delayed_updating/substitution/fsubst_lift.ma index e1be5ded0..383bc24f9 100644 --- a/matita/matita/contribs/lambdadelta/delayed_updating/substitution/fsubst_lift.ma +++ b/matita/matita/contribs/lambdadelta/delayed_updating/substitution/fsubst_lift.ma @@ -14,10 +14,7 @@ include "delayed_updating/substitution/fsubst.ma". include "delayed_updating/substitution/lift_prototerm_eq.ma". -(* -include "delayed_updating/syntax/preterm.ma". -include "delayed_updating/syntax/prototerm_proper.ma". -*) + (* FOCALIZED SUBSTITUTION ***************************************************) (* Constructions with lift for preterm **************************************) @@ -43,7 +40,7 @@ lemma lift_term_fsubst_dx (f) (t) (u) (p): /2 width=3 by ex2_intro/ | #Hq #H0 #H1 destruct @or_intror @conj [ /2 width=1 by in_comp_lift_path_term/ ] -Hq #r #Hr - elim (lift_path_inv_append_dx … Hr) -Hr #s1 #s2 #Hs1 #_ #H1 destruct + elim (lift_path_inv_append_sn … Hr) -Hr #s1 #s2 #Hs1 #_ #H1 destruct lapply (lift_path_inj … Hs1) -Hs1 #H1 destruct /2 width=2 by/ ] diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift_constructors.ma b/matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift_constructors.ma index d7dde19bc..d36698b5f 100644 --- a/matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift_constructors.ma +++ b/matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift_constructors.ma @@ -18,29 +18,29 @@ include "delayed_updating/syntax/prototerm_constructors_eq.ma". (* LIFT FOR PROTOTERM *******************************************************) -lemma lift_iref_sn (f) (t:prototerm) (n:pnat): +lemma lift_term_iref_sn (f) (t:prototerm) (n:pnat): (𝛕f@⧣❨n❩.↑[⇂*[n]f]t) ⊆ ↑[f](𝛕n.t). #f #t #n #p * #q * #r #Hr #H1 #H2 destruct @(ex2_intro … (𝗱n◗𝗺◗r)) /2 width=1 by in_comp_iref/ qed-. -lemma lift_iref_dx (f) (t) (n:pnat): +lemma lift_term_iref_dx (f) (t) (n:pnat): ↑[f](𝛕n.t) ⊆ 𝛕f@⧣❨n❩.↑[⇂*[n]f]t. #f #t #n #p * #q #Hq #H0 destruct elim (in_comp_inv_iref … Hq) -Hq #p #H0 #Hp destruct /3 width=1 by in_comp_iref, in_comp_lift_path_term/ qed-. -lemma lift_iref (f) (t) (n:pnat): +lemma lift_term_iref (f) (t) (n:pnat): (𝛕f@⧣❨n❩.↑[⇂*[n]f]t) ⇔ ↑[f](𝛕n.t). -/3 width=1 by conj, lift_iref_sn, lift_iref_dx/ +/3 width=1 by conj, lift_term_iref_sn, lift_term_iref_dx/ qed. -lemma lift_iref_uni (t) (m) (n): +lemma lift_term_iref_uni (t) (m) (n): (𝛕(n+m).t) ⇔ ↑[𝐮❨m❩](𝛕n.t). #t #m #n -@(subset_eq_trans … (lift_iref …)) +@(subset_eq_trans … (lift_term_iref …)) nsucc_pnpred nrplus_inj_dx >nrplus_inj_sn // +qed. + +(* Advanced inversions with proj_path ***************************************) lemma lift_path_inv_empty (f) (p): (𝐞) = ↑[f]p → 𝐞 = p. @@ -227,7 +250,7 @@ lemma lift_path_inv_S_sn (f) (p) (q): /2 width=3 by ex2_intro/ qed-. -lemma lift_path_inv_append_dx (q2) (q1) (p) (f): +lemma lift_path_inv_append_sn (q2) (q1) (p) (f): q1●q2 = ↑[f]p → ∃∃p1,p2. q1 = ↑[f]p1 & q2 = ↑[↑[p1]f]p2 & p1●p2 = p. #q2 #q1 elim q1 -q1 @@ -235,27 +258,29 @@ lemma lift_path_inv_append_dx (q2) (q1) (p) (f): [ (tr_pap_inj ???? H0) -k [1,3: // ] #Hr #H0 destruct | nrplus_inj_dx -/2 width=1 by tr_tls_compose_uni_dx/ -qed. - -*) diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift_prototerm_eq.ma b/matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift_prototerm_eq.ma index 920a16cf0..afe2ddd01 100644 --- a/matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift_prototerm_eq.ma +++ b/matita/matita/contribs/lambdadelta/delayed_updating/substitution/lift_prototerm_eq.ma @@ -38,3 +38,27 @@ lemma lift_term_after (f1) (f2) (t): | @subset_equivalence_ext_f1_exteq /2 width=5/ ] qed. + +lemma lift_term_grafted_sn (f) (t) (p): + ↑[↑[p]f](t⋔p) ⊆ (↑[f]t)⋔(↑[f]p). +#f #t #p #q * #r #Hr #H0 destruct +@(ex2_intro … Hr) -Hr +nrplus_inj_dx >nrplus_inj_sn >nrplus_inj_sn nsucc_unfold /2 width=1 by/ + | (reverse_reverse p) >(reverse_reverse q) +/2 width=1 by tls_plus_lift_rmap_reverse_closed/ +qed. -- 2.39.2