X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fdelayed_updating%2Fsyntax%2Fpath_closed.ma;h=3597b29d8a49b61280d4f6991022e47596d01c96;hb=ea71486fd1aab2eae2bab42729a66ae775c7f248;hp=fd3b4086a933c1ec5421404dcd2be86e2471ba67;hpb=73cc0c523c5264f2883c25f6735be325e5cfd1da;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma b/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma index fd3b4086a..3597b29d8 100644 --- a/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma +++ b/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma @@ -13,7 +13,7 @@ (**************************************************************************) include "delayed_updating/syntax/path.ma". -include "delayed_updating/notation/functions/class_c_2.ma". +include "delayed_updating/notation/functions/class_c_3.ma". include "ground/arith/nat_plus_pred.ma". include "ground/lib/subset.ma". include "ground/lib/bool_and.ma". @@ -22,45 +22,55 @@ include "ground/xoa/ex_3_2.ma". (* CLOSED CONDITION FOR PATH ************************************************) -inductive pcc (o): relation2 nat path ≝ +inductive pcc (o) (e): relation2 nat path ≝ | pcc_empty: - pcc o (𝟎) (𝐞) + pcc o e e (𝐞) | pcc_d_dx (p) (n) (k): (Ⓣ = o → n = ↑↓n) → - pcc o (n+ninj k) p → pcc o n (p◖𝗱k) + pcc o e (n+ninj k) p → pcc o e n (p◖𝗱k) | pcc_m_dx (p) (n): - pcc o n p → pcc o n (p◖𝗺) + pcc o e n p → pcc o e n (p◖𝗺) | pcc_L_dx (p) (n): - pcc o n p → pcc o (↑n) (p◖𝗟) + pcc o e n p → pcc o e (↑n) (p◖𝗟) | pcc_A_dx (p) (n): - pcc o n p → pcc o n (p◖𝗔) + pcc o e n p → pcc o e n (p◖𝗔) | pcc_S_dx (p) (n): - pcc o n p → pcc o n (p◖𝗦) + pcc o e n p → pcc o e n (p◖𝗦) . interpretation "closed condition (path)" - 'ClassC o n = (pcc o n). + 'ClassC o n e = (pcc o e n). (* Advanced constructions ***************************************************) -lemma pcc_false_d_dx (p) (n) (k:pnat): - p ϵ 𝐂❨Ⓕ,n+k❩ → p◖𝗱k ϵ 𝐂❨Ⓕ,n❩. -#p #n #k #H0 +lemma pcc_false_d_dx (e) (p) (n) (k:pnat): + p ϵ 𝐂❨Ⓕ,n+k,e❩ → p◖𝗱k ϵ 𝐂❨Ⓕ,n,e❩. +#e #p #n #k #H0 @pcc_d_dx [| // ] #H0 destruct qed. -lemma pcc_true_d_dx (p) (n:pnat) (k:pnat): - p ϵ 𝐂❨Ⓣ,n+k❩ → p◖𝗱k ϵ 𝐂❨Ⓣ,n❩. +lemma pcc_true_d_dx (e) (p) (n:pnat) (k:pnat): + p ϵ 𝐂❨Ⓣ,n+k,e❩ → p◖𝗱k ϵ 𝐂❨Ⓣ,n,e❩. /2 width=1 by pcc_d_dx/ qed. +lemma pcc_plus_bi_dx (o) (e) (p) (n): + p ϵ 𝐂❨o,n,e❩ → + ∀m. p ϵ 𝐂❨o,n+m,e+m❩. +#o #e #p #n #H0 elim H0 -p -n // +#p #n [ #k #Ho ] #_ #IH #m +[|*: /2 width=1 by pcc_m_dx, pcc_L_dx, pcc_A_dx, pcc_S_dx/ ] +@pcc_d_dx // -IH #H0 +>Ho -Ho // Ho2 // @@ -182,9 +192,9 @@ qed. (* Inversions with path_append **********************************************) -lemma pcc_false_inv_append_bi (x) (m) (n): - x ϵ 𝐂❨Ⓕ,m+n❩ → - ∃∃p,q. p ϵ 𝐂❨Ⓕ,m❩ & q ϵ 𝐂❨Ⓕ,n❩ & p●q = x. +lemma pcc_false_zero_dx_inv_append_bi (x) (m) (n): + x ϵ 𝐂❨Ⓕ,m+n,𝟎❩ → + ∃∃p,q. p ϵ 𝐂❨Ⓕ,m,𝟎❩ & q ϵ 𝐂❨Ⓕ,n,𝟎❩ & p●q = x. #x #m #n #Hx @(insert_eq_1 … (m+n) … Hx) -Hx #y #Hy generalize in match n; -n @@ -212,39 +222,39 @@ qed-. (* Constructions with path_lcons ********************************************) -lemma pcc_m_sn (o) (q) (n): - q ϵ 𝐂❨o,n❩ → (𝗺◗q) ϵ 𝐂❨o,n❩. -#o #q #n #Hq -lapply (pcc_append_bi (Ⓣ) … (𝐞◖𝗺) … Hq) -Hq +lemma pcc_m_sn (o) (e) (q) (n): + q ϵ 𝐂❨o,n,e❩ → (𝗺◗q) ϵ 𝐂❨o,n,e❩. +#o #e #q #n #Hq +lapply (pcc_append_bi (Ⓣ) … (𝟎) e … (𝐞◖𝗺) … Hq) -Hq /2 width=3 by pcc_m_dx/ qed. -lemma pcc_L_sn (o) (q) (n): - q ϵ 𝐂❨o,n❩ → (𝗟◗q) ϵ 𝐂❨o,↑n❩. -#o #q #n #Hq -lapply (pcc_append_bi (Ⓣ) … (𝐞◖𝗟) … Hq) -Hq +lemma pcc_L_sn (o) (e) (q) (n): + q ϵ 𝐂❨o,n,e❩ → (𝗟◗q) ϵ 𝐂❨o,↑n,e❩. +#o #e #q #n #Hq +lapply (pcc_append_bi (Ⓣ) … (𝟎) e … (𝐞◖𝗟) … Hq) -Hq /2 width=3 by pcc_L_dx/ qed. -lemma pcc_A_sn (o) (q) (n): - q ϵ 𝐂❨o,n❩ → (𝗔◗q) ϵ 𝐂❨o,n❩. -#o #q #n #Hq -lapply (pcc_append_bi (Ⓣ) … (𝐞◖𝗔) … Hq) -Hq +lemma pcc_A_sn (o) (e) (q) (n): + q ϵ 𝐂❨o,n,e❩ → (𝗔◗q) ϵ 𝐂❨o,n,e❩. +#o #e #q #n #Hq +lapply (pcc_append_bi (Ⓣ) … (𝟎) e … (𝐞◖𝗔) … Hq) -Hq /2 width=3 by pcc_A_dx/ qed. -lemma pcc_S_sn (o) (q) (n): - q ϵ 𝐂❨o,n❩ → (𝗦◗q) ϵ 𝐂❨o,n❩. -#o #q #n #Hq -lapply (pcc_append_bi (Ⓣ) … (𝐞◖𝗦) … Hq) -Hq +lemma pcc_S_sn (o) (e) (q) (n): + q ϵ 𝐂❨o,n,e❩ → (𝗦◗q) ϵ 𝐂❨o,n,e❩. +#o #e #q #n #Hq +lapply (pcc_append_bi (Ⓣ) … (𝟎) e … (𝐞◖𝗦) … Hq) -Hq /2 width=3 by pcc_S_dx/ qed. (* Main inversions **********************************************************) -theorem pcc_mono (o1) (o2) (q) (n1): - q ϵ 𝐂❨o1,n1❩ → ∀n2. q ϵ 𝐂❨o2,n2❩ → n1 = n2. -#o1 #o2 #q1 #n1 #Hn1 elim Hn1 -q1 -n1 +theorem pcc_mono (o1) (o2) (e) (q) (n1): + q ϵ 𝐂❨o1,n1,e❩ → ∀n2. q ϵ 𝐂❨o2,n2,e❩ → n1 = n2. +#o1 #o2 #e #q1 #n1 #Hn1 elim Hn1 -q1 -n1 [|*: #q1 #n1 [ #k1 #_ ] #_ #IH ] #n2 #Hn2 [ <(pcc_inv_empty … Hn2) -n2 // | lapply (pcc_des_d_dx … Hn2) -Hn2 #Hn2 @@ -261,15 +271,15 @@ theorem pcc_mono (o1) (o2) (q) (n1): ] qed-. -theorem pcc_inj_L_sn (o1) (o2) (p1) (p2) (q1) (n): - q1 ϵ 𝐂❨o1,n❩ → ∀q2. q2 ϵ 𝐂❨o2,n❩ → +theorem pcc_zero_dx_inj_L_sn (o1) (o2) (p1) (p2) (q1) (n): + q1 ϵ 𝐂❨o1,n,𝟎❩ → ∀q2. q2 ϵ 𝐂❨o2,n,𝟎❩ → p1●𝗟◗q1 = p2●𝗟◗q2 → q1 = q2. #o1 #o2 #p1 #p2 #q1 #n #Hq1 elim Hq1 -q1 -n [|*: #q1 #n1 [ #k1 #_ ] #_ #IH ] * // [1,3,5,7,9,11: #l2 #q2 ] #Hq2