X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fdelayed_updating%2Funwind_k%2Funwind2_preterm_eq.ma;fp=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fdelayed_updating%2Funwind_k%2Funwind2_preterm_eq.ma;h=8264293d11711ea1396c0bf170616186faa2da5b;hb=2815c74c03f38089d0e27aba00e2280223b0f76f;hp=0000000000000000000000000000000000000000;hpb=cf2a049a6cc888f6c5d0637ab0523f186058fc8f;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/unwind_k/unwind2_preterm_eq.ma b/matita/matita/contribs/lambdadelta/delayed_updating/unwind_k/unwind2_preterm_eq.ma new file mode 100644 index 000000000..8264293d1 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/delayed_updating/unwind_k/unwind2_preterm_eq.ma @@ -0,0 +1,67 @@ +(**************************************************************************) +(* ___ *) +(* ||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/unwind_k/unwind2_prototerm.ma". +include "delayed_updating/unwind_k/unwind2_path_append.ma". +include "delayed_updating/syntax/preterm.ma". +include "delayed_updating/syntax/path_structure_inner.ma". +include "ground/lib/subset_equivalence.ma". + +(* TAILED UNWIND FOR PRETERM ************************************************) + +(* Constructions with subset_equivalence ************************************) + +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 +(Ht … Hp0) [|*: /2 width=2 by ex_intro/ ] -p +/2 width=1 by in_comp_unwind2_path_term/ +qed-. + +lemma unwind2_term_grafted (f) (t) (p): p ϵ 𝐈 → p ϵ ▵t → t ϵ 𝐓 → + ▼[▶[f]p](t⋔p) ⇔ (▼[f]t)⋔(⊗p). +/3 width=1 by unwind2_term_grafted_sn, unwind2_term_grafted_dx, conj/ qed. + +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_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 +#r1 #r2 #Hr1 #Hr2 #H0 destruct +lapply (preterm_in_root_append_inv_structure_empty_dx … p0 … Ht Hr1) +[ /2 width=2 by ex_intro/ ] -Hr1 #Hr1 destruct +/2 width=1 by in_comp_unwind2_path_term/ +qed-. + +lemma unwind2_term_grafted_S (f) (t) (p): p ϵ ▵t → t ϵ 𝐓 → + ▼[▶[f]p](t⋔(p◖𝗦)) ⇔ (▼[f]t)⋔((⊗p)◖𝗦). +#f #t #p #Hp #Ht +@conj +[ >unwind2_rmap_S_dx >structure_S_dx + @unwind2_term_grafted_sn // (**) (* auto fails *) +| /2 width=1 by unwind2_term_grafted_S_dx/ +] +qed.