X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fdelayed_updating%2Fsyntax%2Fpath_closed.ma;h=37a2b26186e814e70e9fb5e966bd7294dcfaf013;hp=620db955c30943a906f75ca63045380069e576e0;hb=d06053844638d88936d711b66fddbcca2a9add1c;hpb=9e31ac1f3f868349154b0ce2e550e2476aaf6a30 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 620db955c..37a2b2618 100644 --- a/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma +++ b/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma @@ -13,148 +13,211 @@ (**************************************************************************) include "delayed_updating/syntax/path.ma". -include "delayed_updating/notation/functions/class_c_1.ma". +include "delayed_updating/notation/functions/class_c_2.ma". include "ground/arith/nat_plus.ma". include "ground/arith/nat_pred_succ.ma". include "ground/lib/subset.ma". +include "ground/lib/bool_and.ma". include "ground/generated/insert_eq_1.ma". (* CLOSED CONDITION FOR PATH ************************************************) -inductive pcc: relation2 nat path ≝ +inductive pcc (o): relation2 nat path ≝ | pcc_empty: - pcc (𝟎) (𝐞) + pcc o (𝟎) (𝐞) | pcc_d_dx (p) (n) (k): - pcc (n+ninj k) p → pcc n (p◖𝗱k) + (Ⓣ = o → n = ↑↓n) → + pcc o (n+ninj k) p → pcc o n (p◖𝗱k) | pcc_m_dx (p) (n): - pcc n p → pcc n (p◖𝗺) + pcc o n p → pcc o n (p◖𝗺) | pcc_L_dx (p) (n): - pcc n p → pcc (↑n) (p◖𝗟) + pcc o n p → pcc o (↑n) (p◖𝗟) | pcc_A_dx (p) (n): - pcc n p → pcc n (p◖𝗔) + pcc o n p → pcc o n (p◖𝗔) | pcc_S_dx (p) (n): - pcc n p → pcc n (p◖𝗦) + pcc o n p → pcc o n (p◖𝗦) . interpretation "closed condition (path)" - 'ClassC n = (pcc n). + 'ClassC o n = (pcc o n). + +(* Advanced constructions ***************************************************) + +lemma pcc_false_d_dx (p) (n) (k:pnat): + p ϵ 𝐂❨Ⓕ,n+k❩ → p◖𝗱k ϵ 𝐂❨Ⓕ,n❩. +#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❩. +/2 width=1 by pcc_d_dx/ +qed. (* Basic inversions ********************************************************) -lemma pcc_inv_empty (n): - (𝐞) ϵ 𝐂❨n❩ → 𝟎 = n. -#n @(insert_eq_1 … (𝐞)) +lemma pcc_inv_empty (o) (n): + (𝐞) ϵ 𝐂❨o,n❩ → 𝟎 = n. +#o #n @(insert_eq_1 … (𝐞)) #x * -n // -#p #n [ #k ] #_ #H0 destruct +#p #n [ #k #_ ] #_ #H0 destruct qed-. -lemma pcc_inv_d_dx (p) (n) (k): - p◖𝗱k ϵ 𝐂❨n❩ → p ϵ 𝐂❨n+k❩. -#p #n #h @(insert_eq_1 … (p◖𝗱h)) +(**) (* alias *) +alias symbol "DownArrow" (instance 4) = "predecessor (non-negative integers)". +alias symbol "UpArrow" (instance 3) = "successor (non-negative integers)". +alias symbol "and" (instance 1) = "logical and". + +lemma pcc_inv_d_dx (o) (p) (n) (k): + p◖𝗱k ϵ 𝐂❨o, n❩ → + ∧∧ (Ⓣ = o → n = ↑↓n) + & p ϵ 𝐂❨o, n+k❩. +#o #p #n #h @(insert_eq_1 … (p◖𝗱h)) #x * -x -n -[|*: #x #n [ #k ] #Hx ] #H0 destruct // +[|*: #x #n [ #k #Ho ] #Hx ] #H0 destruct +/3 width=1 by conj/ qed-. -lemma pcc_inv_m_dx (p) (n): - p◖𝗺 ϵ 𝐂❨n❩ → p ϵ 𝐂❨n❩. -#p #n @(insert_eq_1 … (p◖𝗺)) +lemma pcc_inv_m_dx (o) (p) (n): + p◖𝗺 ϵ 𝐂❨o,n❩ → p ϵ 𝐂❨o,n❩. +#o #p #n @(insert_eq_1 … (p◖𝗺)) #x * -x -n -[|*: #x #n [ #k ] #Hx ] #H0 destruct // +[|*: #x #n [ #k #_ ] #Hx ] #H0 destruct // qed-. -lemma pcc_inv_L_dx (p) (n): - p◖𝗟 ϵ 𝐂❨n❩ → - ∧∧ p ϵ 𝐂❨↓n❩ & n = ↑↓n. -#p #n @(insert_eq_1 … (p◖𝗟)) +lemma pcc_inv_L_dx (o) (p) (n): + p◖𝗟 ϵ 𝐂❨o,n❩ → + ∧∧ p ϵ 𝐂❨o,↓n❩ & n = ↑↓n. +#o #p #n @(insert_eq_1 … (p◖𝗟)) #x * -x -n -[|*: #x #n [ #k ] #Hx ] #H0 destruct +[|*: #x #n [ #k #_ ] #Hx ] #H0 destruct Ho2 // +