(* *)
(**************************************************************************)
-include "basic_2/notation/relations/lazyeq_4.ma".
+include "basic_2/notation/relations/stareq_4.ma".
include "basic_2/syntax/item_sd.ma".
-include "basic_2/syntax/lenv.ma".
+include "basic_2/syntax/term.ma".
(* DEGREE-BASED EQUIVALENCE ON TERMS ****************************************)
.
interpretation
- "degree-based equivalence (terms)"
- 'LazyEq h o T1 T2 = (tdeq h o T1 T2).
-
-definition cdeq: ∀h. sd h → relation3 lenv term term ≝
- λh,o,L. tdeq h o.
+ "context-free degree-based equivalence (term)"
+ 'StarEq h o T1 T2 = (tdeq h o T1 T2).
(* Basic inversion lemmas ***************************************************)
-fact tdeq_inv_sort1_aux: â\88\80h,o,X,Y. X â\89¡[h, o] Y → ∀s1. X = ⋆s1 →
+fact tdeq_inv_sort1_aux: â\88\80h,o,X,Y. X â\89\9b[h, o] Y → ∀s1. X = ⋆s1 →
∃∃s2,d. deg h o s1 d & deg h o s2 d & Y = ⋆s2.
#h #o #X #Y * -X -Y
[ #s1 #s2 #d #Hs1 #Hs2 #s #H destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma tdeq_inv_sort1: â\88\80h,o,Y,s1. â\8b\86s1 â\89¡[h, o] Y →
+lemma tdeq_inv_sort1: â\88\80h,o,Y,s1. â\8b\86s1 â\89\9b[h, o] Y →
∃∃s2,d. deg h o s1 d & deg h o s2 d & Y = ⋆s2.
/2 width=3 by tdeq_inv_sort1_aux/ qed-.
-fact tdeq_inv_lref1_aux: â\88\80h,o,X,Y. X â\89¡[h, o] Y → ∀i. X = #i → Y = #i.
+fact tdeq_inv_lref1_aux: â\88\80h,o,X,Y. X â\89\9b[h, o] Y → ∀i. X = #i → Y = #i.
#h #o #X #Y * -X -Y //
[ #s1 #s2 #d #_ #_ #j #H destruct
| #I #V1 #V2 #T1 #T2 #_ #_ #j #H destruct
]
qed-.
-lemma tdeq_inv_lref1: â\88\80h,o,Y,i. #i â\89¡[h, o] Y → Y = #i.
+lemma tdeq_inv_lref1: â\88\80h,o,Y,i. #i â\89\9b[h, o] Y → Y = #i.
/2 width=5 by tdeq_inv_lref1_aux/ qed-.
-fact tdeq_inv_gref1_aux: â\88\80h,o,X,Y. X â\89¡[h, o] Y → ∀l. X = §l → Y = §l.
+fact tdeq_inv_gref1_aux: â\88\80h,o,X,Y. X â\89\9b[h, o] Y → ∀l. X = §l → Y = §l.
#h #o #X #Y * -X -Y //
[ #s1 #s2 #d #_ #_ #k #H destruct
| #I #V1 #V2 #T1 #T2 #_ #_ #k #H destruct
]
qed-.
-lemma tdeq_inv_gref1: â\88\80h,o,Y,l. §l â\89¡[h, o] Y → Y = §l.
+lemma tdeq_inv_gref1: â\88\80h,o,Y,l. §l â\89\9b[h, o] Y → Y = §l.
/2 width=5 by tdeq_inv_gref1_aux/ qed-.
-fact tdeq_inv_pair1_aux: â\88\80h,o,X,Y. X â\89¡[h, o] Y → ∀I,V1,T1. X = ②{I}V1.T1 →
- â\88\83â\88\83V2,T2. V1 â\89¡[h, o] V2 & T1 â\89¡[h, o] T2 & Y = ②{I}V2.T2.
+fact tdeq_inv_pair1_aux: â\88\80h,o,X,Y. X â\89\9b[h, o] Y → ∀I,V1,T1. X = ②{I}V1.T1 →
+ â\88\83â\88\83V2,T2. V1 â\89\9b[h, o] V2 & T1 â\89\9b[h, o] T2 & Y = ②{I}V2.T2.
#h #o #X #Y * -X -Y
[ #s1 #s2 #d #_ #_ #J #W1 #U1 #H destruct
| #i #J #W1 #U1 #H destruct
]
qed-.
-lemma tdeq_inv_pair1: â\88\80h,o,I,V1,T1,Y. â\91¡{I}V1.T1 â\89¡[h, o] Y →
- â\88\83â\88\83V2,T2. V1 â\89¡[h, o] V2 & T1 â\89¡[h, o] T2 & Y = ②{I}V2.T2.
+lemma tdeq_inv_pair1: â\88\80h,o,I,V1,T1,Y. â\91¡{I}V1.T1 â\89\9b[h, o] Y →
+ â\88\83â\88\83V2,T2. V1 â\89\9b[h, o] V2 & T1 â\89\9b[h, o] T2 & Y = ②{I}V2.T2.
/2 width=3 by tdeq_inv_pair1_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma tdeq_inv_sort1_deg: â\88\80h,o,Y,s1. â\8b\86s1 â\89¡[h, o] Y → ∀d. deg h o s1 d →
+lemma tdeq_inv_sort1_deg: â\88\80h,o,Y,s1. â\8b\86s1 â\89\9b[h, o] Y → ∀d. deg h o s1 d →
∃∃s2. deg h o s2 d & Y = ⋆s2.
#h #o #Y #s1 #H #d #Hs1 elim (tdeq_inv_sort1 … H) -H
#s2 #x #Hx <(deg_mono h o … Hx … Hs1) -s1 -d /2 width=3 by ex2_intro/
qed-.
-lemma tdeq_inv_sort_deg: â\88\80h,o,s1,s2. â\8b\86s1 â\89¡[h, o] ⋆s2 →
+lemma tdeq_inv_sort_deg: â\88\80h,o,s1,s2. â\8b\86s1 â\89\9b[h, o] ⋆s2 →
∀d1,d2. deg h o s1 d1 → deg h o s2 d2 →
d1 = d2.
#h #o #s1 #y #H #d1 #d2 #Hs1 #Hy
<(deg_mono h o … Hy … Hs2) -s2 -d1 //
qed-.
-lemma tdeq_inv_pair: â\88\80h,o,I1,I2,V1,V2,T1,T2. â\91¡{I1}V1.T1 â\89¡[h, o] ②{I2}V2.T2 →
- â\88§â\88§ I1 = I2 & V1 â\89¡[h, o] V2 & T1 â\89¡[h, o] T2.
+lemma tdeq_inv_pair: â\88\80h,o,I1,I2,V1,V2,T1,T2. â\91¡{I1}V1.T1 â\89\9b[h, o] ②{I2}V2.T2 →
+ â\88§â\88§ I1 = I2 & V1 â\89\9b[h, o] V2 & T1 â\89\9b[h, o] T2.
#h #o #I1 #I2 #V1 #V2 #T1 #T2 #H elim (tdeq_inv_pair1 … H) -H
#V0 #T0 #HV #HT #H destruct /2 width=1 by and3_intro/
qed-.
-lemma tdeq_inv_pair_xy_y: â\88\80h,o,I,T,V. â\91¡{I}V.T â\89¡[h, o] T → ⊥.
+lemma tdeq_inv_pair_xy_y: â\88\80h,o,I,T,V. â\91¡{I}V.T â\89\9b[h, o] T → ⊥.
#h #o #I #T elim T -T
[ #J #V #H elim (tdeq_inv_pair1 … H) -H #X #Y #_ #_ #H destruct
| #J #X #Y #_ #IHY #V #H elim (tdeq_inv_pair … H) -H #H #_ #HY destruct /2 width=2 by/
(* Basic forward lemmas *****************************************************)
-lemma tdeq_fwd_atom1: â\88\80h,o,I,Y. â\93ª{I} â\89¡[h, o] Y → ∃J. Y = ⓪{J}.
+lemma tdeq_fwd_atom1: â\88\80h,o,I,Y. â\93ª{I} â\89\9b[h, o] Y → ∃J. Y = ⓪{J}.
#h #o * #x #Y #H [ elim (tdeq_inv_sort1 … H) -H ]
/3 width=4 by tdeq_inv_gref1, tdeq_inv_lref1, ex_intro/
qed-.
/2 width=3 by tdeq_sort, tdeq_lref, tdeq_gref, tdeq_pair/
qed-.
-lemma tdeq_dec: â\88\80h,o,T1,T2. Decidable (T1 â\89¡[h, o] T2).
+lemma tdeq_dec: â\88\80h,o,T1,T2. Decidable (T1 â\89\9b[h, o] T2).
#h #o #T1 elim T1 -T1 [ * #s1 | #I1 #V1 #T1 #IHV #IHT ] * [1,3,5,7: * #s2 |*: #I2 #V2 #T2 ]
[ elim (deg_total h o s1) #d1 #H1
elim (deg_total h o s2) #d2 #H2
(* Negated inversion lemmas *************************************************)
lemma tdneq_inv_pair: ∀h,o,I1,I2,V1,V2,T1,T2.
- (â\91¡{I1}V1.T1 â\89¡[h, o] ②{I2}V2.T2 → ⊥) →
+ (â\91¡{I1}V1.T1 â\89\9b[h, o] ②{I2}V2.T2 → ⊥) →
∨∨ I1 = I2 → ⊥
- | V1 ≡[h, o] V2 → ⊥
- | (T1 â\89¡[h, o] T2 → ⊥).
+ | (V1 ≛[h, o] V2 → ⊥)
+ | (T1 â\89\9b[h, o] T2 → ⊥).
#h #o #I1 #I2 #V1 #V2 #T1 #T2 #H12
elim (eq_item2_dec I1 I2) /3 width=1 by or3_intro0/ #H destruct
elim (tdeq_dec h o V1 V2) /3 width=1 by or3_intro1/