X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fdelayed_updating%2Fsyntax%2Fpath_closed.ma;h=fd3b4086a933c1ec5421404dcd2be86e2471ba67;hb=e6ef5581641345f1c5c72f3c8b6040a9c6e5aecb;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..fd3b4086a 100644 --- a/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma +++ b/matita/matita/contribs/lambdadelta/delayed_updating/syntax/path_closed.ma @@ -13,36 +13,282 @@ (**************************************************************************) 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_pred.ma". include "ground/lib/subset.ma". - -include "delayed_updating/syntax/path_depth.ma". -include "delayed_updating/syntax/path_height.ma". +include "ground/lib/bool_and.ma". +include "ground/generated/insert_eq_1.ma". +include "ground/xoa/ex_3_2.ma". (* CLOSED CONDITION FOR PATH ************************************************) -axiom pcc: relation2 nat path. +inductive pcc (o): relation2 nat path ≝ +| pcc_empty: + pcc o (𝟎) (𝐞) +| pcc_d_dx (p) (n) (k): + (Ⓣ = o → n = ↑↓n) → + pcc o (n+ninj k) p → pcc o n (p◖𝗱k) +| pcc_m_dx (p) (n): + pcc o n p → pcc o n (p◖𝗺) +| pcc_L_dx (p) (n): + pcc o n p → pcc o (↑n) (p◖𝗟) +| pcc_A_dx (p) (n): + pcc o n p → pcc o n (p◖𝗔) +| pcc_S_dx (p) (n): + 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 (o) (n): + (𝐞) ϵ 𝐂❨o,n❩ → 𝟎 = n. +#o #n @(insert_eq_1 … (𝐞)) +#x * -n // +#p #n [ #k #_ ] #_ #H0 destruct +qed-. + +(**) (* 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 #Ho ] #Hx ] #H0 destruct +/3 width=1 by conj/ +qed-. + +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 // +qed-. + +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 +Ho2 // + (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 (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 +