X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fdelayed_updating%2Fsyntax%2Fpath_closed.ma;h=620db955c30943a906f75ca63045380069e576e0;hb=829e3a8af3229c4e625245f7265dd67939da98c4;hp=d8b00cabc8e8ec67d1a721c0580de19d2c8fab08;hpb=2c68dcfee2c3fe819c8f92a9609620a85909ce8a;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 d8b00cabc..620db955c 100644 --- a/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma +++ b/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma @@ -14,35 +14,188 @@ include "delayed_updating/syntax/path.ma". include "delayed_updating/notation/functions/class_c_1.ma". +include "ground/arith/nat_plus.ma". +include "ground/arith/nat_pred_succ.ma". include "ground/lib/subset.ma". - -include "delayed_updating/syntax/path_depth.ma". -include "delayed_updating/syntax/path_height.ma". +include "ground/generated/insert_eq_1.ma". (* CLOSED CONDITION FOR PATH ************************************************) -axiom pcc: relation2 nat path. +inductive pcc: relation2 nat path ≝ +| pcc_empty: + pcc (𝟎) (𝐞) +| pcc_d_dx (p) (n) (k): + pcc (n+ninj k) p → pcc n (p◖𝗱k) +| pcc_m_dx (p) (n): + pcc n p → pcc n (p◖𝗺) +| pcc_L_dx (p) (n): + pcc n p → pcc (↑n) (p◖𝗟) +| pcc_A_dx (p) (n): + pcc n p → pcc n (p◖𝗔) +| pcc_S_dx (p) (n): + pcc n p → pcc n (p◖𝗦) +. interpretation "closed condition (path)" 'ClassC n = (pcc n). -(* Basic destructions *******************************************************) +(* Basic inversions ********************************************************) + +lemma pcc_inv_empty (n): + (𝐞) ϵ 𝐂❨n❩ → 𝟎 = n. +#n @(insert_eq_1 … (𝐞)) +#x * -n // +#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)) +#x * -x -n +[|*: #x #n [ #k ] #Hx ] #H0 destruct // +qed-. + +lemma pcc_inv_m_dx (p) (n): + p◖𝗺 ϵ 𝐂❨n❩ → p ϵ 𝐂❨n❩. +#p #n @(insert_eq_1 … (p◖𝗺)) +#x * -x -n +[|*: #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◖𝗟)) +#x * -x -n +[|*: #x #n [ #k ] #Hx ] #H0 destruct +(IH … Hn2) -q1 // +| lapply (pcc_inv_A_dx … Hn2) -Hn2 #Hn2 + <(IH … Hn2) -q1 -n2 // +| lapply (pcc_inv_S_dx … Hn2) -Hn2 #Hn2 + <(IH … Hn2) -q1 -n2 // +] +qed-. -axiom pcc_S (p) (d): - p ϵ 𝐂❨d❩ → p◖𝗦 ϵ 𝐂❨d❩. +theorem pcc_inj_L_sn (p1) (p2) (q1) (n): + q1 ϵ 𝐂❨n❩ → ∀q2. q2 ϵ 𝐂❨n❩ → + p1●𝗟◗q1 = p2●𝗟◗q2 → q1 = q2. +#p1 #p2 #q1 #n #Hq1 elim Hq1 -q1 -n +[|*: #q1 #n1 [ #k1 ] #_ #IH ] * // +[1,3,5,7,9,11: #l2 #q2 ] #Hq2 +