(* BASIC SLICING FOR LOCAL ENVIRONMENTS *************************************)
definition dedropable_sn: predicate (relation lenv) ≝
- λR. â\88\80L1,K1,s,d,e. â\87©[s, d, e] L1 ≡ K1 → ∀K2. R K1 K2 →
- â\88\83â\88\83L2. R L1 L2 & â\87©[s, d, e] L2 ≡ K2 & L1 ⩬[d, e] L2.
+ λR. â\88\80L1,K1,s,d,e. â¬\87[s, d, e] L1 ≡ K1 → ∀K2. R K1 K2 →
+ â\88\83â\88\83L2. R L1 L2 & â¬\87[s, d, e] L2 ≡ K2 & L1 ⩬[d, e] L2.
(* Properties on equivalence ************************************************)
lemma leq_drop_trans_be: ∀L1,L2,d,e. L1 ⩬[d, e] L2 →
- â\88\80I,K2,W,s,i. â\87©[s, 0, i] L2 ≡ K2.ⓑ{I}W →
+ â\88\80I,K2,W,s,i. â¬\87[s, 0, i] L2 ≡ K2.ⓑ{I}W →
d ≤ i → i < d + e →
- â\88\83â\88\83K1. K1 ⩬[0, â«°(d+e-i)] K2 & â\87©[s, 0, i] L1 ≡ K1.ⓑ{I}W.
+ â\88\83â\88\83K1. K1 ⩬[0, â«°(d+e-i)] K2 & â¬\87[s, 0, i] L1 ≡ K1.ⓑ{I}W.
#L1 #L2 #d #e #H elim H -L1 -L2 -d -e
[ #d #e #J #K2 #W #s #i #H
elim (drop_inv_atom1 … H) -H #H destruct
qed-.
lemma leq_drop_conf_be: ∀L1,L2,d,e. L1 ⩬[d, e] L2 →
- â\88\80I,K1,W,s,i. â\87©[s, 0, i] L1 ≡ K1.ⓑ{I}W →
+ â\88\80I,K1,W,s,i. â¬\87[s, 0, i] L1 ≡ K1.ⓑ{I}W →
d ≤ i → i < d + e →
- â\88\83â\88\83K2. K1 ⩬[0, â«°(d+e-i)] K2 & â\87©[s, 0, i] L2 ≡ K2.ⓑ{I}W.
+ â\88\83â\88\83K2. K1 ⩬[0, â«°(d+e-i)] K2 & â¬\87[s, 0, i] L2 ≡ K2.ⓑ{I}W.
#L1 #L2 #d #e #HL12 #I #K1 #W #s #i #HLK1 #Hdi #Hide
elim (leq_drop_trans_be … (leq_sym … HL12) … HLK1) // -L1 -Hdi -Hide
/3 width=3 by leq_sym, ex2_intro/
qed-.
lemma drop_O1_ex: ∀K2,i,L1. |L1| = |K2| + i →
- â\88\83â\88\83L2. L1 ⩬[0, i] L2 & â\87©[i] L2 ≡ K2.
+ â\88\83â\88\83L2. L1 ⩬[0, i] L2 & â¬\87[i] L2 ≡ K2.
#K2 #i @(nat_ind_plus … i) -i
[ /3 width=3 by leq_O2, ex2_intro/
| #i #IHi #Y #Hi elim (drop_O1_lt (Ⓕ) Y 0) //
(* Inversion lemmas on equivalence ******************************************)
-lemma drop_O1_inj: â\88\80i,L1,L2,K. â\87©[i] L1 â\89¡ K â\86\92 â\87©[i] L2 ≡ K → L1 ⩬[i, ∞] L2.
+lemma drop_O1_inj: â\88\80i,L1,L2,K. â¬\87[i] L1 â\89¡ K â\86\92 â¬\87[i] L2 ≡ K → L1 ⩬[i, ∞] L2.
#i @(nat_ind_plus … i) -i
[ #L1 #L2 #K #H <(drop_inv_O2 … H) -K #H <(drop_inv_O2 … H) -L1 //
| #i #IHi * [2: #L1 #I1 #V1 ] * [2,4: #L2 #I2 #V2 ] #K #HLK1 #HLK2 //