X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fground_2%2Frelocation%2Frtmap_isid.ma;h=65e111bbf9d3e209bbb6516965ff215c934dd339;hb=24ba1bb3f67505d3e384747ff90d26d3996bd3f5;hp=5ad6aa83c32edb6c8c37599dad3974473f5e4f8c;hpb=ad3d1cac216cf3882e4adf691b27c00838c6b9b1;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma index 5ad6aa83c..65e111bbf 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma @@ -43,7 +43,9 @@ lemma isid_inv_next: ∀g. 𝐈⦃g⦄ → ∀f. ⫯f = g → ⊥. #f #Hf * -g #g #H elim (discr_next_push … H) qed-. -let corec isid_inv_eq_repl: ∀f1,f2. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → f1 ≗ f2 ≝ ?. +(* Main inversion lemmas ****************************************************) + +corec theorem isid_inv_eq_repl: ∀f1,f2. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → f1 ≗ f2. #f1 #f2 #H1 #H2 cases (isid_inv_gen … H1) -H1 cases (isid_inv_gen … H2) -H2 @@ -52,7 +54,7 @@ qed-. (* Basic properties *********************************************************) -let corec isid_eq_repl_back: eq_repl_back … isid ≝ ?. +corec lemma isid_eq_repl_back: eq_repl_back … isid. #f1 #H cases (isid_inv_gen … H) -H #g1 #Hg1 #H1 #f2 #Hf cases (eq_inv_px … Hf … H1) -f1 /3 width=3 by isid_push/ @@ -63,12 +65,39 @@ lemma isid_eq_repl_fwd: eq_repl_fwd … isid. (* Alternative definition ***************************************************) -let corec eq_push_isid: ∀f. ↑f ≗ f → 𝐈⦃f⦄ ≝ ?. +corec lemma eq_push_isid: ∀f. ↑f ≗ f → 𝐈⦃f⦄. #f #H cases (eq_inv_px … H) -H /4 width=3 by isid_push, eq_trans/ qed. -let corec eq_push_inv_isid: ∀f. 𝐈⦃f⦄ → ↑f ≗ f ≝ ?. +corec lemma eq_push_inv_isid: ∀f. 𝐈⦃f⦄ → ↑f ≗ f. #f * -f #f #g #Hf #Hg @(eq_push … Hg) [2: @eq_push_inv_isid // | skip ] @eq_f // qed-. + +(* Properties with iterated push ********************************************) + +lemma isid_pushs: ∀n,f. 𝐈⦃f⦄ → 𝐈⦃↑*[n]f⦄. +#n elim n -n /3 width=3 by isid_push/ +qed. + +(* Inversion lemmas with iterated push **************************************) + +lemma isid_inv_pushs: ∀n,g. 𝐈⦃↑*[n]g⦄ → 𝐈⦃g⦄. +#n elim n -n /3 width=3 by isid_inv_push/ +qed. + +(* Properties with tail *****************************************************) + +lemma isid_tl: ∀f. 𝐈⦃f⦄ → 𝐈⦃⫱f⦄. +#f cases (pn_split f) * #g * -f #H +[ /2 width=3 by isid_inv_push/ +| elim (isid_inv_next … H) -H // +] +qed. + +(* Properties with iterated tail ********************************************) + +lemma isid_tls: ∀n,g. 𝐈⦃g⦄ → 𝐈⦃⫱*[n]g⦄. +#n elim n -n /3 width=1 by isid_tl/ +qed.