X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=matita%2Fmatita%2Fcontribs%2Flambda%2Fpointer_order.ma;h=ddcc3fd9ec2c2ee1d19370b5b7631222c620ccf8;hb=23e75ebc00553e178e090ca1373ac075ee650a60;hp=9d79e9dc61b11a60cd60341e7fb484e52a83db6b;hpb=178820be7648a60af17837727e51fd1f3f2791db;p=helm.git diff --git a/matita/matita/contribs/lambda/pointer_order.ma b/matita/matita/contribs/lambda/pointer_order.ma index 9d79e9dc6..ddcc3fd9e 100644 --- a/matita/matita/contribs/lambda/pointer_order.ma +++ b/matita/matita/contribs/lambda/pointer_order.ma @@ -33,6 +33,13 @@ notation "hvbox(a break ≺ b)" non associative with precedence 45 for @{ 'prec $a $b }. +lemma pprec_fwd_in_head: ∀p,q. p ≺ q → in_head q → in_head p. +#p #q #H elim H -p -q // /2 width=1/ +[ #p #q * #H destruct +| #c #p #q #_ #IHpq * #H destruct /3 width=1/ +] +qed-. + (* Note: this is p < q *) definition plt: relation ptr ≝ TC … pprec. @@ -45,11 +52,15 @@ definition ple: relation ptr ≝ star … pprec. interpretation "'less or equal to' on redex pointers" 'leq p q = (ple p q). -lemma pprec_ple: ∀p,q. p ≺ q → p ≤ q. +lemma ple_step_rc: ∀p,q. p ≺ q → p ≤ q. /2 width=1/ qed. -lemma ple_dx: dx::◊ ≤ ◊. +lemma ple_step_sn: ∀p1,p,p2. p1 ≺ p → p ≤ p2 → p1 ≤ p2. +/2 width=3/ +qed-. + +lemma ple_skip: dx::◊ ≤ ◊. /2 width=1/ qed. @@ -60,3 +71,21 @@ qed. lemma ple_comp: ∀p1,p2. p1 ≤ p2 → ∀c. (c::p1) ≤ (c::p2). #p1 #p2 #H elim H -p2 // /3 width=3/ qed. + +lemma ple_skip_ple: ∀p. p ≤ ◊ → dx::p ≤ ◊. +#p #H @(star_ind_l ??????? H) -p // +#p #q #Hpq #_ #H @(ple_step_sn … H) -H /2 width=1/ +qed. + +lemma in_head_ple_nil: ∀p. in_head p → p ≤ ◊. +#p #H @(in_head_ind … H) -p // /2 width=1/ +qed. + +theorem in_head_ple: ∀p. in_head p → ∀q. in_head q → p ≤ q. +#p #H @(in_head_ind … H) -p // +#p #Hp #IHp #q #H @(in_head_ind … H) -q /3 width=1/ +qed. + +lemma ple_nil_inv_in_head: ∀p. p ≤ ◊ → in_head p. +#p #H @(star_ind_l ??????? H) -p // /2 width=3 by pprec_fwd_in_head/ +qed-.