X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fground_2%2Frelocation%2Frtmap_isid.ma;h=7fea33f0021f8a370c1d37b89d181a2f08f42e10;hb=bd53c4e895203eb049e75434f638f26b5a161a2b;hp=d713c1618f048967f1af54cc1e96635a88821738;hpb=756e320c149ae141dffbf5d75202c8e46c4a49b9;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 d713c1618..7fea33f00 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma @@ -18,7 +18,7 @@ include "ground_2/relocation/rtmap_tls.ma". (* RELOCATION MAP ***********************************************************) coinductive isid: predicate rtmap ≝ -| isid_push: ∀f,g. isid f → ↑f = g → isid g +| isid_push: ∀f,g. isid f → ⫯f = g → isid g . interpretation "test for identity (rtmap)" @@ -26,26 +26,26 @@ interpretation "test for identity (rtmap)" (* Basic inversion lemmas ***************************************************) -lemma isid_inv_gen: ∀g. 𝐈⦃g⦄ → ∃∃f. 𝐈⦃f⦄ & ↑f = g. +lemma isid_inv_gen: ∀g. 𝐈❪g❫ → ∃∃f. 𝐈❪f❫ & ⫯f = g. #g * -g #f #g #Hf * /2 width=3 by ex2_intro/ qed-. (* Advanced inversion lemmas ************************************************) -lemma isid_inv_push: ∀g. 𝐈⦃g⦄ → ∀f. ↑f = g → 𝐈⦃f⦄. +lemma isid_inv_push: ∀g. 𝐈❪g❫ → ∀f. ⫯f = g → 𝐈❪f❫. #g #H elim (isid_inv_gen … H) -H #f #Hf * -g #g #H >(injective_push … H) -H // qed-. -lemma isid_inv_next: ∀g. 𝐈⦃g⦄ → ∀f. ⫯f = g → ⊥. +lemma isid_inv_next: ∀g. 𝐈❪g❫ → ∀f. ↑f = g → ⊥. #g #H elim (isid_inv_gen … H) -H #f #Hf * -g #g #H elim (discr_next_push … H) qed-. (* Main inversion lemmas ****************************************************) -corec theorem isid_inv_eq_repl: ∀f1,f2. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → f1 ≗ f2. +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 @@ -65,19 +65,31 @@ lemma isid_eq_repl_fwd: eq_repl_fwd … isid. (* Alternative definition ***************************************************) -corec lemma 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. -corec lemma 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⦄. +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 // @@ -86,6 +98,6 @@ qed. (* Properties with iterated tail ********************************************) -lemma isid_tls: ∀n,g. 𝐈⦃g⦄ → 𝐈⦃⫱*[n]g⦄. +lemma isid_tls: ∀n,g. 𝐈❪g❫ → 𝐈❪⫱*[n]g❫. #n elim n -n /3 width=1 by isid_tl/ qed.