theorem aacr_aaa_csubc_lifts: ∀RR,RS,RP.
acp RR RS RP → acr RR RS RP (λG,L,T. RP G L T) →
∀G,L1,T,A. ⦃G, L1⦄ ⊢ T ⁝ A → ∀L0,des. ⇩*[Ⓕ, des] L0 ≡ L1 →
- â\88\80T0. â\87§*[des] T â\89¡ T0 â\86\92 â\88\80L2. G â\8a¢ L2 â\8a\91[RP] L0 →
+ â\88\80T0. â\87§*[des] T â\89¡ T0 â\86\92 â\88\80L2. G â\8a¢ L2 â«\83[RP] L0 →
⦃G, L2, T0⦄ ϵ[RP] 〚A〛.
#RR #RS #RP #H1RP #H2RP #G #L1 #T #A #H elim H -G -L1 -T -A
[ #G #L #k #L0 #des #HL0 #X #H #L2 #HL20
(* Properties on supclosure *************************************************)
-lemma fqu_cpxs_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma fqu_cpxs_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡*[h, g] U2 → (T2 = U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\83 ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\90 ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #V1 #V2 #HV12 #_ elim (lift_total V2 0 1)
#U2 #HVU2 @(ex3_intro … U2)
]
qed-.
-lemma fquq_cpxs_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma fquq_cpxs_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡*[h, g] U2 → (T2 = U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\83⸮ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\90⸮ ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fquq_inv_gen … H12) -H12
[ #H12 elim (fqu_cpxs_trans_neq … H12 … HTU2 H) -T2
/3 width=4 by fqu_fquq, ex3_intro/
]
qed-.
-lemma fqup_cpxs_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma fqup_cpxs_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡*[h, g] U2 → (T2 = U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\83+ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\90+ ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1
[ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_neq … H12 … HTU2 H) -T2
/3 width=4 by fqu_fqup, ex3_intro/
]
qed-.
-lemma fqus_cpxs_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma fqus_cpxs_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡*[h, g] U2 → (T2 = U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\83* ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\90* ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_gen … H12) -H12
[ #H12 elim (fqup_cpxs_trans_neq … H12 … HTU2 H) -T2
/3 width=4 by fqup_fqus, ex3_intro/
(* Properties on supclosure *************************************************)
lemma fqu_cpxs_trans: ∀h,g,G1,G2,L1,L2,T2,U2. ⦃G2, L2⦄ ⊢ T2 ➡*[h, g] U2 →
- â\88\80T1. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83 ⦃G2, L2, U2⦄.
+ â\88\80T1. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90 ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
#T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqu_cpx_trans … HT1 … HT2) -T
#T #HT1 #HT2 elim (IHTU2 … HT2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
qed-.
lemma fquq_cpxs_trans: ∀h,g,G1,G2,L1,L2,T2,U2. ⦃G2, L2⦄ ⊢ T2 ➡*[h, g] U2 →
- â\88\80T1. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83⸮ ⦃G2, L2, U2⦄.
+ â\88\80T1. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90⸮ ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T2 #U2 #HTU2 #T1 #H elim (fquq_inv_gen … H) -H
[ #HT12 elim (fqu_cpxs_trans … HTU2 … HT12) /3 width=3 by fqu_fquq, ex2_intro/
| * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma fquq_lsstas_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma fquq_lsstas_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀U2,l1. ⦃G2, L2⦄ ⊢ T2 •*[h, g, l1] U2 →
∀l2. ⦃G2, L2⦄ ⊢ T2 ▪ [h, g] l2 → l1 ≤ l2 →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83⸮ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90⸮ ⦃G2, L2, U2⦄.
/3 width=5 by fquq_cpxs_trans, lsstas_cpxs/ qed-.
lemma fqup_cpxs_trans: ∀h,g,G1,G2,L1,L2,T2,U2. ⦃G2, L2⦄ ⊢ T2 ➡*[h, g] U2 →
- â\88\80T1. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83+ ⦃G2, L2, U2⦄.
+ â\88\80T1. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90+ ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
#T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqup_cpx_trans … HT1 … HT2) -T
#U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
qed-.
lemma fqus_cpxs_trans: ∀h,g,G1,G2,L1,L2,T2,U2. ⦃G2, L2⦄ ⊢ T2 ➡*[h, g] U2 →
- â\88\80T1. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83* ⦃G2, L2, U2⦄.
+ â\88\80T1. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90* ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T2 #U2 #HTU2 #T1 #H elim (fqus_inv_gen … H) -H
[ #HT12 elim (fqup_cpxs_trans … HTU2 … HT12) /3 width=3 by fqup_fqus, ex2_intro/
| * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma fqus_lsstas_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma fqus_lsstas_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
∀U2,l1. ⦃G2, L2⦄ ⊢ T2 •*[h, g, l1] U2 →
∀l2. ⦃G2, L2⦄ ⊢ T2 ▪ [h, g] l2 → l1 ≤ l2 →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83* ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90* ⦃G2, L2, U2⦄.
/3 width=7 by fqus_cpxs_trans, lsstas_cpxs/ qed-.
]
qed.
-lemma csx_fqu_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma csx_fqu_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
⦃G1, L1⦄ ⊢ ⬊*[h, g] T1 → ⦃G2, L2⦄ ⊢ ⬊*[h, g] T2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
/2 width=8 by csx_inv_lref_bind, csx_inv_lift, csx_fwd_flat_dx, csx_fwd_bind_dx, csx_fwd_pair_sn/
qed-.
-lemma csx_fquq_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma csx_fquq_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
⦃G1, L1⦄ ⊢ ⬊*[h, g] T1 → ⦃G2, L2⦄ ⊢ ⬊*[h, g] T2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H12 #H elim (fquq_inv_gen … H12) -H12
[ /2 width=5 by csx_fqu_conf/
]
qed-.
-lemma csx_fqup_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma csx_fqup_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
⦃G1, L1⦄ ⊢ ⬊*[h, g] T1 → ⦃G2, L2⦄ ⊢ ⬊*[h, g] T2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/3 width=5 by csx_fqu_conf/
qed-.
-lemma csx_fqus_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma csx_fqus_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
⦃G1, L1⦄ ⊢ ⬊*[h, g] T1 → ⦃G2, L2⦄ ⊢ ⬊*[h, g] T2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H12 #H elim (fqus_inv_gen … H12) -H12
[ /2 width=5 by csx_fqup_conf/
/2 width=5 by tri_TC_strap/ qed.
(* Note: this is used in the closure proof *)
-lemma fqup_fpbg: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >⋕[h, g] ⦃G2, L2, T2⦄.
+lemma fqup_fpbg: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ >⋕[h, g] ⦃G2, L2, T2⦄.
/4 width=1 by fpbc_fpbg, fpbu_fpbc, fpbu_fqup/ qed.
(* Basic eliminators ********************************************************)
⦃G, L, T⦄ ≥[h, g] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
/2 width=5 by tri_TC_strap/ qed-.
-lemma fqup_fpbs: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma fqup_fpbs: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/4 width=5 by fqu_fquq, fpb_fquq, tri_step/
qed.
-lemma fqus_fpbs: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma fqus_fpbs: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2
/3 width=5 by fpb_fquq, tri_step/
/3 width=1 by lprs_lpxs, lpxs_fpbs/ qed.
lemma fpbs_fqus_trans: ∀h,g,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1, L1, T1⦄ ≥[h, g] ⦃G, L, T⦄ →
- â¦\83G, L, Tâ¦\84 â\8a\83* ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
+ â¦\83G, L, Tâ¦\84 â\8a\90* ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
#h #g #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H @(fqus_ind … H) -G2 -L2 -T2
/3 width=5 by fpbs_strap1, fpb_fquq/
qed-.
lemma fpbs_fqup_trans: ∀h,g,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1, L1, T1⦄ ≥[h, g] ⦃G, L, T⦄ →
- â¦\83G, L, Tâ¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
+ â¦\83G, L, Tâ¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
/3 width=5 by fpbs_fqus_trans, fqup_fqus/ qed-.
lemma fpbs_cpxs_trans: ∀h,g,G1,G,L1,L,T1,T,T2. ⦃G1, L1, T1⦄ ≥[h, g] ⦃G, L, T⦄ →
/3 width=5 by fpbs_strap1, fpb_lleq/ qed-.
lemma fqus_fpbs_trans: ∀h,g,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G, L, T⦄ ≥[h, g] ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
+ â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G, L, T⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
#h #g #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H @(fqus_ind_dx … H) -G1 -L1 -T1
/3 width=5 by fpbs_strap2, fpb_fquq/
qed-.
/3 width=5 by fpbs_strap2, fpb_lleq/ qed-.
lemma cpxs_fqus_fpbs: ∀h,g,G1,G2,L1,L2,T1,T,T2. ⦃G1, L1⦄ ⊢ T1 ➡*[h, g] T →
- â¦\83G1, L1, Tâ¦\84 â\8a\83* ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
+ â¦\83G1, L1, Tâ¦\84 â\8a\90* ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
/3 width=5 by fpbs_fqus_trans, cpxs_fpbs/ qed.
lemma cpxs_fqup_fpbs: ∀h,g,G1,G2,L1,L2,T1,T,T2. ⦃G1, L1⦄ ⊢ T1 ➡*[h, g] T →
- â¦\83G1, L1, Tâ¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
+ â¦\83G1, L1, Tâ¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
/3 width=5 by fpbs_fqup_trans, cpxs_fpbs/ qed.
-lemma fqus_lpxs_fpbs: â\88\80h,g,G1,G2,L1,L,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L, T2⦄ →
+lemma fqus_lpxs_fpbs: â\88\80h,g,G1,G2,L1,L,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L, T2⦄ →
⦃G2, L⦄ ⊢ ➡*[h, g] L2 → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
/3 width=3 by fpbs_lpxs_trans, fqus_fpbs/ qed.
lemma cpxs_fqus_lpxs_fpbs: ∀h,g,G1,G2,L1,L,L2,T1,T,T2. ⦃G1, L1⦄ ⊢ T1 ➡*[h, g] T →
- â¦\83G1, L1, Tâ¦\84 â\8a\83* ⦃G2, L, T2⦄ → ⦃G2, L⦄ ⊢ ➡*[h, g] L2 → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
+ â¦\83G1, L1, Tâ¦\84 â\8a\90* ⦃G2, L, T2⦄ → ⦃G2, L⦄ ⊢ ➡*[h, g] L2 → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄.
/3 width=5 by cpxs_fqus_fpbs, fpbs_lpxs_trans/ qed.
(* Note: this is used in the closure proof *)
definition fpbsa: ∀h. sd h → tri_relation genv lenv term ≝
λh,g,G1,L1,T1,G2,L2,T2.
∃∃L0,L,T. ⦃G1, L1⦄ ⊢ T1 ➡*[h, g] T &
- â¦\83G1, L1, Tâ¦\84 â\8a\83* ⦃G2, L0, T2⦄ &
+ â¦\83G1, L1, Tâ¦\84 â\8a\90* ⦃G2, L0, T2⦄ &
⦃G2, L0⦄ ⊢ ➡*[h, g] L & L ⋕[T2, 0] L2.
interpretation "'big tree' parallel computation (closure) alternative"
(* Advanced properties ******************************************************)
lemma fpbs_intro_alt: ∀h,g,G1,G2,L1,L0,L,L2,T1,T,T2.
- â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T â\86\92 â¦\83G1, L1, Tâ¦\84 â\8a\83* ⦃G2, L0, T2⦄ →
+ â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T â\86\92 â¦\83G1, L1, Tâ¦\84 â\8a\90* ⦃G2, L0, T2⦄ →
⦃G2, L0⦄ ⊢ ➡*[h, g] L → L ⋕[T2, 0] L2 → ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄ .
/3 width=7 by fpbsa_inv_fpbs, ex4_3_intro/ qed.
lemma fpbs_inv_alt: ∀h,g,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ≥[h, g] ⦃G2, L2, T2⦄ →
∃∃L0,L,T. ⦃G1, L1⦄ ⊢ T1 ➡*[h, g] T &
- â¦\83G1, L1, Tâ¦\84 â\8a\83* ⦃G2, L0, T2⦄ &
+ â¦\83G1, L1, Tâ¦\84 â\8a\90* ⦃G2, L0, T2⦄ &
⦃G2, L0⦄ ⊢ ➡*[h, g] L & L ⋕[T2, 0] L2.
/2 width=1 by fpbs_fpbsa/ qed-.
(* UNITARY "BIG TREE" PROPER PARALLEL COMPUTATION FOR CLOSURES **************)
inductive fpbu (h) (g) (G1) (L1) (T1): relation3 genv lenv term ≝
-| fpbu_fqup: â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → fpbu h g G1 L1 T1 G2 L2 T2
+| fpbu_fqup: â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → fpbu h g G1 L1 T1 G2 L2 T2
| fpbu_cpxs: ∀T2. ⦃G1, L1⦄ ⊢ T1 ➡*[h, g] T2 → (T1 = T2 → ⊥) → fpbu h g G1 L1 T1 G1 L1 T2
| fpbu_lpxs: ∀L2. ⦃G1, L1⦄ ⊢ ➡*[h, g] L2 → (L1 ⋕[T1, 0] L2 → ⊥) → fpbu h g G1 L1 T1 G1 L2 T1
.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-include "basic_2/notation/relations/predsnstaralt_3.ma".
-include "basic_2/computation/cprs_cprs.ma".
-include "basic_2/computation/lprs.ma".
-
-(* SN PARALLEL COMPUTATION ON LOCAL ENVIRONMENTS ****************************)
-
-(* alternative definition *)
-definition lprsa: relation3 genv lenv lenv ≝
- λG. lpx_sn … (cprs G).
-
-interpretation "parallel computation (local environment, sn variant) alternative"
- 'PRedSnStarAlt G L1 L2 = (lprsa G L1 L2).
-
-(* Main properties on the alternative definition ****************************)
-
-theorem lprsa_lprs: ∀G,L1,L2. ⦃G, L1⦄ ⊢ ➡➡* L2 → ⦃G, L1⦄ ⊢ ➡* L2.
-/2 width=1 by lpx_sn_LTC_TC_lpx_sn/ qed-.
-
-(* Main inversion lemmas on the alternative definition **********************)
-
-theorem lprs_inv_lprsa: ∀G,L1,L2. ⦃G, L1⦄ ⊢ ➡* L2 → ⦃G, L1⦄ ⊢ ➡➡* L2.
-/3 width=3 by TC_lpx_sn_inv_lpx_sn_LTC, lpr_cprs_trans/ qed-.
-
-(* Alternative eliminators **************************************************)
-
-lemma lprs_ind_alt: ∀G. ∀R:relation lenv.
- R (⋆) (⋆) → (
- ∀I,K1,K2,V1,V2.
- ⦃G, K1⦄ ⊢ ➡* K2 → ⦃G, K1⦄ ⊢ V1 ➡* V2 →
- R K1 K2 → R (K1.ⓑ{I}V1) (K2.ⓑ{I}V2)
- ) →
- ∀L1,L2. ⦃G, L1⦄ ⊢ ➡* L2 → R L1 L2.
-/3 width=4 by TC_lpx_sn_ind, lpr_cprs_trans/ qed-.
L1 = K1.ⓑ{I}V1.
/3 width=3 by TC_lpx_sn_inv_pair2, lpr_cprs_trans/ qed-.
+(* Advanced eliminators *****************************************************)
+
+lemma lprs_ind_alt: ∀G. ∀R:relation lenv.
+ R (⋆) (⋆) → (
+ ∀I,K1,K2,V1,V2.
+ ⦃G, K1⦄ ⊢ ➡* K2 → ⦃G, K1⦄ ⊢ V1 ➡* V2 →
+ R K1 K2 → R (K1.ⓑ{I}V1) (K2.ⓑ{I}V2)
+ ) →
+ ∀L1,L2. ⦃G, L1⦄ ⊢ ➡* L2 → R L1 L2.
+/3 width=4 by TC_lpx_sn_ind, lpr_cprs_trans/ qed-.
+
(* Properties on context-sensitive parallel computation for terms ***********)
lemma lprs_cpr_trans: ∀G. s_r_transitive … (cpr G) (λ_. lprs G).
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-include "basic_2/notation/relations/predsnstaralt_5.ma".
-include "basic_2/computation/cpxs_cpxs.ma".
-include "basic_2/computation/lpxs.ma".
-
-(* SN EXTENDED PARALLEL COMPUTATION ON LOCAL ENVIRONMENTS *******************)
-
-(* alternative definition *)
-definition lpxsa: ∀h. sd h → relation3 genv lenv lenv ≝
- λh,g,G. lpx_sn … (cpxs h g G).
-
-interpretation "extended parallel computation (local environment, sn variant) alternative"
- 'PRedSnStarAlt h g G L1 L2 = (lpxsa h g G L1 L2).
-
-(* Main properties on the alternative definition ****************************)
-
-theorem lpxsa_lpxs: ∀h,g,G,L1,L2. ⦃G, L1⦄ ⊢ ➡➡*[h, g] L2 → ⦃G, L1⦄ ⊢ ➡*[h, g] L2.
-/2 width=1 by lpx_sn_LTC_TC_lpx_sn/ qed-.
-
-(* Main inversion lemmas on the alternative definition **********************)
-
-theorem lpxs_inv_lpxsa: ∀h,g,G,L1,L2. ⦃G, L1⦄ ⊢ ➡*[h, g] L2 → ⦃G, L1⦄ ⊢ ➡➡*[h, g] L2.
-/3 width=3 by TC_lpx_sn_inv_lpx_sn_LTC, lpx_cpxs_trans/ qed-.
-
-(* Alternative eliminators **************************************************)
-
-lemma lpxs_ind_alt: ∀h,g,G. ∀R:relation lenv.
- R (⋆) (⋆) → (
- ∀I,K1,K2,V1,V2.
- ⦃G, K1⦄ ⊢ ➡*[h, g] K2 → ⦃G, K1⦄ ⊢ V1 ➡*[h, g] V2 →
- R K1 K2 → R (K1.ⓑ{I}V1) (K2.ⓑ{I}V2)
- ) →
- ∀L1,L2. ⦃G, L1⦄ ⊢ ➡*[h, g] L2 → R L1 L2.
-/3 width=4 by TC_lpx_sn_ind, lpx_cpxs_trans/ qed-.
∃∃K1,V1. ⦃G, K1⦄ ⊢ ➡*[h, g] K2 & ⦃G, K1⦄ ⊢ V1 ➡*[h, g] V2 & L1 = K1.ⓑ{I}V1.
/3 width=3 by TC_lpx_sn_inv_pair2, lpx_cpxs_trans/ qed-.
+(* Advanced eliminators *****************************************************)
+
+lemma lpxs_ind_alt: ∀h,g,G. ∀R:relation lenv.
+ R (⋆) (⋆) → (
+ ∀I,K1,K2,V1,V2.
+ ⦃G, K1⦄ ⊢ ➡*[h, g] K2 → ⦃G, K1⦄ ⊢ V1 ➡*[h, g] V2 →
+ R K1 K2 → R (K1.ⓑ{I}V1) (K2.ⓑ{I}V2)
+ ) →
+ ∀L1,L2. ⦃G, L1⦄ ⊢ ➡*[h, g] L2 → R L1 L2.
+/3 width=4 by TC_lpx_sn_ind, lpx_cpxs_trans/ qed-.
+
(* Properties on context-sensitive extended parallel computation for terms **)
lemma lpxs_cpx_trans: ∀h,g,G. s_r_transitive … (cpx h g G) (λ_.lpxs h g G).
(* Properties on supclosure *************************************************)
-lemma lpx_fqup_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma lpx_fqup_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡[h, g] L1 →
- â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\83+ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2.
+ â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\90+ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
[ #G2 #L2 #T2 #H12 #K1 #HKL1 elim (lpx_fqu_trans … H12 … HKL1) -L1
/3 width=5 by cpx_cpxs, fqu_fqup, ex3_2_intro/
]
qed-.
-lemma lpx_fqus_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma lpx_fqus_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡[h, g] L1 →
- â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\83* ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2.
-#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 /2 width=5 by ex3_2_intro/
+ â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\90* ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2.
+#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 [ /2 width=5 by ex3_2_intro/ ]
#G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #K1 #HLK1 elim (IH1 … HLK1) -L1
#L0 #T0 #HT10 #HT0 #HL0 elim (lpx_fquq_trans … H2 … HL0) -L
#L #T3 #HT3 #HT32 #HL2 elim (fqus_cpx_trans … HT0 … HT3) -T
/3 width=7 by cpxs_strap1, fqus_strap1, ex3_2_intro/
qed-.
-lemma lpxs_fquq_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma lpxs_fquq_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡*[h, g] L1 →
- â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\83⸮ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2.
+ â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\90⸮ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #HT12 #K1 #H @(lpxs_ind_dx … H) -K1
[ /2 width=5 by ex3_2_intro/
| #K1 #K #HK1 #_ * #L #T #HT1 #HT2 #HL2 -HT12
]
qed-.
-lemma lpxs_fqup_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma lpxs_fqup_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡*[h, g] L1 →
- â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\83+ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2.
+ â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\90+ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #HT12 #K1 #H @(lpxs_ind_dx … H) -K1
[ /2 width=5 by ex3_2_intro/
| #K1 #K #HK1 #_ * #L #T #HT1 #HT2 #HL2 -HT12
]
qed-.
-lemma lpxs_fqus_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma lpxs_fqus_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡*[h, g] L1 →
- â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\83* ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2.
+ â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡*[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\90* ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 /2 width=5 by ex3_2_intro/
#G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #K1 #HLK1 elim (IH1 … HLK1) -L1
#L0 #T0 #HT10 #HT0 #HL0 elim (lpxs_fquq_trans … H2 … HL0) -L
/3 width=3 by lpxs_strap1, ex2_intro/
qed-.
-lemma lpxs_lleq_fqu_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma lpxs_lleq_fqu_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡*[h, g] L1 → K1 ⋕[T1, 0] L1 →
- â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\83 ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2 & K2 ⋕[T2, 0] L2.
+ â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\90 ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2 & K2 ⋕[T2, 0] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G1 #L1 #V1 #X #H1 #H2 elim (lpxs_inv_pair2 … H1) -H1
#K0 #V0 #H1KL1 #_ #H destruct
]
qed-.
-lemma lpxs_lleq_fquq_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma lpxs_lleq_fquq_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡*[h, g] L1 → K1 ⋕[T1, 0] L1 →
- â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\83⸮ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2 & K2 ⋕[T2, 0] L2.
+ â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\90⸮ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2 & K2 ⋕[T2, 0] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #H1KL1 #H2KL1
elim (fquq_inv_gen … H) -H
[ #H elim (lpxs_lleq_fqu_trans … H … H1KL1 H2KL1) -L1
]
qed-.
-lemma lpxs_lleq_fqup_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma lpxs_lleq_fqup_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡*[h, g] L1 → K1 ⋕[T1, 0] L1 →
- â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\83+ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2 & K2 ⋕[T2, 0] L2.
+ â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\90+ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2 & K2 ⋕[T2, 0] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
[ #G2 #L2 #T2 #H #K1 #H1KL1 #H2KL1 elim (lpxs_lleq_fqu_trans … H … H1KL1 H2KL1) -L1
/3 width=4 by fqu_fqup, ex3_intro/
]
qed-.
-lemma lpxs_lleq_fqus_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma lpxs_lleq_fqus_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡*[h, g] L1 → K1 ⋕[T1, 0] L1 →
- â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\83* ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2 & K2 ⋕[T2, 0] L2.
+ â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\90* ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡*[h, g] L2 & K2 ⋕[T2, 0] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #H1KL1 #H2KL1
elim (fqus_inv_gen … H) -H
[ #H elim (lpxs_lleq_fqup_trans … H … H1KL1 H2KL1) -L1
(* Basic inversion lemmas ***************************************************)
-fact lsubc_inv_atom1_aux: â\88\80RP,G,L1,L2. G â\8a¢ L1 â\8a\91[RP] L2 → L1 = ⋆ → L2 = ⋆.
+fact lsubc_inv_atom1_aux: â\88\80RP,G,L1,L2. G â\8a¢ L1 â«\83[RP] L2 → L1 = ⋆ → L2 = ⋆.
#RP #G #L1 #L2 * -L1 -L2
[ //
| #I #L1 #L2 #V #_ #H destruct
qed-.
(* Basic_1: was just: csubc_gen_sort_r *)
-lemma lsubc_inv_atom1: â\88\80RP,G,L2. G â\8a¢ â\8b\86 â\8a\91[RP] L2 → L2 = ⋆.
+lemma lsubc_inv_atom1: â\88\80RP,G,L2. G â\8a¢ â\8b\86 â«\83[RP] L2 → L2 = ⋆.
/2 width=5 by lsubc_inv_atom1_aux/ qed-.
-fact lsubc_inv_pair1_aux: â\88\80RP,G,L1,L2. G â\8a¢ L1 â\8a\91[RP] L2 → ∀I,K1,X. L1 = K1.ⓑ{I}X →
- (â\88\83â\88\83K2. G â\8a¢ K1 â\8a\91[RP] K2 & L2 = K2.ⓑ{I}X) ∨
+fact lsubc_inv_pair1_aux: â\88\80RP,G,L1,L2. G â\8a¢ L1 â«\83[RP] L2 → ∀I,K1,X. L1 = K1.ⓑ{I}X →
+ (â\88\83â\88\83K2. G â\8a¢ K1 â«\83[RP] K2 & L2 = K2.ⓑ{I}X) ∨
∃∃K2,V,W,A. ⦃G, K1, V⦄ ϵ[RP] 〚A〛 & ⦃G, K1, W⦄ ϵ[RP] 〚A〛 & ⦃G, K2⦄ ⊢ W ⁝ A &
- G â\8a¢ K1 â\8a\91[RP] K2 &
+ G â\8a¢ K1 â«\83[RP] K2 &
L2 = K2. ⓛW & X = ⓝW.V & I = Abbr.
#RP #G #L1 #L2 * -L1 -L2
[ #I #K1 #V #H destruct
qed-.
(* Basic_1: was: csubc_gen_head_r *)
-lemma lsubc_inv_pair1: â\88\80RP,I,G,K1,L2,X. G â\8a¢ K1.â\93\91{I}X â\8a\91[RP] L2 →
- (â\88\83â\88\83K2. G â\8a¢ K1 â\8a\91[RP] K2 & L2 = K2.ⓑ{I}X) ∨
+lemma lsubc_inv_pair1: â\88\80RP,I,G,K1,L2,X. G â\8a¢ K1.â\93\91{I}X â«\83[RP] L2 →
+ (â\88\83â\88\83K2. G â\8a¢ K1 â«\83[RP] K2 & L2 = K2.ⓑ{I}X) ∨
∃∃K2,V,W,A. ⦃G, K1, V⦄ ϵ[RP] 〚A〛 & ⦃G, K1, W⦄ ϵ[RP] 〚A〛 & ⦃G, K2⦄ ⊢ W ⁝ A &
- G â\8a¢ K1 â\8a\91[RP] K2 &
+ G â\8a¢ K1 â«\83[RP] K2 &
L2 = K2.ⓛW & X = ⓝW.V & I = Abbr.
/2 width=3 by lsubc_inv_pair1_aux/ qed-.
-fact lsubc_inv_atom2_aux: â\88\80RP,G,L1,L2. G â\8a¢ L1 â\8a\91[RP] L2 → L2 = ⋆ → L1 = ⋆.
+fact lsubc_inv_atom2_aux: â\88\80RP,G,L1,L2. G â\8a¢ L1 â«\83[RP] L2 → L2 = ⋆ → L1 = ⋆.
#RP #G #L1 #L2 * -L1 -L2
[ //
| #I #L1 #L2 #V #_ #H destruct
qed-.
(* Basic_1: was just: csubc_gen_sort_l *)
-lemma lsubc_inv_atom2: â\88\80RP,G,L1. G â\8a¢ L1 â\8a\91[RP] ⋆ → L1 = ⋆.
+lemma lsubc_inv_atom2: â\88\80RP,G,L1. G â\8a¢ L1 â«\83[RP] ⋆ → L1 = ⋆.
/2 width=5 by lsubc_inv_atom2_aux/ qed-.
-fact lsubc_inv_pair2_aux: â\88\80RP,G,L1,L2. G â\8a¢ L1 â\8a\91[RP] L2 → ∀I,K2,W. L2 = K2.ⓑ{I} W →
- (â\88\83â\88\83K1. G â\8a¢ K1 â\8a\91[RP] K2 & L1 = K1. ⓑ{I} W) ∨
+fact lsubc_inv_pair2_aux: â\88\80RP,G,L1,L2. G â\8a¢ L1 â«\83[RP] L2 → ∀I,K2,W. L2 = K2.ⓑ{I} W →
+ (â\88\83â\88\83K1. G â\8a¢ K1 â«\83[RP] K2 & L1 = K1. ⓑ{I} W) ∨
∃∃K1,V,A. ⦃G, K1, V⦄ ϵ[RP] 〚A〛 & ⦃G, K1, W⦄ ϵ[RP] 〚A〛 & ⦃G, K2⦄ ⊢ W ⁝ A &
- G â\8a¢ K1 â\8a\91[RP] K2 &
+ G â\8a¢ K1 â«\83[RP] K2 &
L1 = K1.ⓓⓝW.V & I = Abst.
#RP #G #L1 #L2 * -L1 -L2
[ #I #K2 #W #H destruct
qed-.
(* Basic_1: was just: csubc_gen_head_l *)
-lemma lsubc_inv_pair2: â\88\80RP,I,G,L1,K2,W. G â\8a¢ L1 â\8a\91[RP] K2.ⓑ{I} W →
- (â\88\83â\88\83K1. G â\8a¢ K1 â\8a\91[RP] K2 & L1 = K1.ⓑ{I} W) ∨
+lemma lsubc_inv_pair2: â\88\80RP,I,G,L1,K2,W. G â\8a¢ L1 â«\83[RP] K2.ⓑ{I} W →
+ (â\88\83â\88\83K1. G â\8a¢ K1 â«\83[RP] K2 & L1 = K1.ⓑ{I} W) ∨
∃∃K1,V,A. ⦃G, K1, V⦄ ϵ[RP] 〚A〛 & ⦃G, K1, W⦄ ϵ[RP] 〚A〛 & ⦃G, K2⦄ ⊢ W ⁝ A &
- G â\8a¢ K1 â\8a\91[RP] K2 &
+ G â\8a¢ K1 â«\83[RP] K2 &
L1 = K1.ⓓⓝW.V & I = Abst.
/2 width=3 by lsubc_inv_pair2_aux/ qed-.
(* Basic properties *********************************************************)
(* Basic_1: was just: csubc_refl *)
-lemma lsubc_refl: â\88\80RP,G,L. G â\8a¢ L â\8a\91[RP] L.
+lemma lsubc_refl: â\88\80RP,G,L. G â\8a¢ L â«\83[RP] L.
#RP #G #L elim L -L // /2 width=1/
qed.
(* Basic_1: was: csubc_drop_conf_O *)
(* Note: the constant 0 can not be generalized *)
-lemma lsubc_ldrop_O1_trans: â\88\80RP,G,L1,L2. G â\8a¢ L1 â\8a\91[RP] L2 → ∀K2,s,e. ⇩[s, 0, e] L2 ≡ K2 →
- â\88\83â\88\83K1. â\87©[s, 0, e] L1 â\89¡ K1 & G â\8a¢ K1 â\8a\91[RP] K2.
+lemma lsubc_ldrop_O1_trans: â\88\80RP,G,L1,L2. G â\8a¢ L1 â«\83[RP] L2 → ∀K2,s,e. ⇩[s, 0, e] L2 ≡ K2 →
+ â\88\83â\88\83K1. â\87©[s, 0, e] L1 â\89¡ K1 & G â\8a¢ K1 â«\83[RP] K2.
#RP #G #L1 #L2 #H elim H -L1 -L2
[ #X #s #e #H elim (ldrop_inv_atom1 … H) -H /4 width=3 by ldrop_atom, ex2_intro/
| #I #L1 #L2 #V #_ #IHL12 #X #s #e #H
(* Basic_1: was: csubc_drop_conf_rev *)
lemma ldrop_lsubc_trans: ∀RR,RS,RP.
acp RR RS RP → acr RR RS RP (λG,L,T. RP G L T) →
- â\88\80G,L1,K1,d,e. â\87©[â\92», d, e] L1 â\89¡ K1 â\86\92 â\88\80K2. G â\8a¢ K1 â\8a\91[RP] K2 →
- â\88\83â\88\83L2. G â\8a¢ L1 â\8a\91[RP] L2 & ⇩[Ⓕ, d, e] L2 ≡ K2.
+ â\88\80G,L1,K1,d,e. â\87©[â\92», d, e] L1 â\89¡ K1 â\86\92 â\88\80K2. G â\8a¢ K1 â«\83[RP] K2 →
+ â\88\83â\88\83L2. G â\8a¢ L1 â«\83[RP] L2 & ⇩[Ⓕ, d, e] L2 ≡ K2.
#RR #RS #RP #Hacp #Hacr #G #L1 #K1 #d #e #H elim H -L1 -K1 -d -e
[ #d #e #He #X #H elim (lsubc_inv_atom1 … H) -H
>He /2 width=3 by ex2_intro/
(* Basic_1: was: csubc_drop1_conf_rev *)
lemma ldrops_lsubc_trans: ∀RR,RS,RP.
acp RR RS RP → acr RR RS RP (λG,L,T. RP G L T) →
- â\88\80G,L1,K1,des. â\87©*[â\92», des] L1 â\89¡ K1 â\86\92 â\88\80K2. G â\8a¢ K1 â\8a\91[RP] K2 →
- â\88\83â\88\83L2. G â\8a¢ L1 â\8a\91[RP] L2 & ⇩*[Ⓕ, des] L2 ≡ K2.
+ â\88\80G,L1,K1,des. â\87©*[â\92», des] L1 â\89¡ K1 â\86\92 â\88\80K2. G â\8a¢ K1 â«\83[RP] K2 →
+ â\88\83â\88\83L2. G â\8a¢ L1 â«\83[RP] L2 & ⇩*[Ⓕ, des] L2 ≡ K2.
#RR #RS #RP #Hacp #Hacr #G #L1 #K1 #des #H elim H -L1 -K1 -des
[ /2 width=3 by ldrops_nil, ex2_intro/
| #L1 #L #K1 #des #d #e #_ #HLK1 #IHL #K2 #HK12
(* properties concerning lenv refinement for atomic arity assignment ********)
lemma lsuba_lsubc: ∀RR,RS,RP. acp RR RS RP → acr RR RS RP (λG,L,T. RP G L T) →
- â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ\8a\91 L2 â\86\92 G â\8a¢ L1 â\8a\91[RP] L2.
+ â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ«\83 L2 â\86\92 G â\8a¢ L1 â«\83[RP] L2.
#RR #RS #RP #H1RP #H2RP #G #L1 #L2 #H elim H -L1 -L2 // /2 width=1/
#L1 #L2 #W #V #A #H elim (aaa_inv_cast … H) -H /3 width=4/
qed.
(* Basic inversion lemmas ***************************************************)
-fact lsubsv_inv_atom1_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 → L1 = ⋆ → L2 = ⋆.
+fact lsubsv_inv_atom1_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 → L1 = ⋆ → L2 = ⋆.
#h #g #G #L1 #L2 * -L1 -L2
[ //
| #I #L1 #L2 #V #_ #H destruct
]
qed-.
-lemma lsubsv_inv_atom1: â\88\80h,g,G,L2. G â\8a¢ â\8b\86 ¡â\8a\91[h, g] L2 → L2 = ⋆.
+lemma lsubsv_inv_atom1: â\88\80h,g,G,L2. G â\8a¢ â\8b\86 ¡â«\83[h, g] L2 → L2 = ⋆.
/2 width=6 by lsubsv_inv_atom1_aux/ qed-.
-fact lsubsv_inv_pair1_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 →
+fact lsubsv_inv_pair1_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 →
∀I,K1,X. L1 = K1.ⓑ{I}X →
- (â\88\83â\88\83K2. G â\8a¢ K1 ¡â\8a\91[h, g] K2 & L2 = K2.ⓑ{I}X) ∨
+ (â\88\83â\88\83K2. G â\8a¢ K1 ¡â«\83[h, g] K2 & L2 = K2.ⓑ{I}X) ∨
∃∃K2,W,V,l. ⦃G, K1⦄ ⊢ W ¡[h, g] & ⦃G, K1⦄ ⊢ V ¡[h, g] &
scast h g l G K1 V W & ⦃G, K2⦄ ⊢ W ¡[h, g] &
⦃G, K1⦄ ⊢ V ▪[h, g] l+1 & ⦃G, K2⦄ ⊢ W ▪[h, g] l &
- G â\8a¢ K1 ¡â\8a\91[h, g] K2 &
+ G â\8a¢ K1 ¡â«\83[h, g] K2 &
I = Abbr & L2 = K2.ⓛW & X = ⓝW.V.
#h #g #G #L1 #L2 * -L1 -L2
[ #J #K1 #X #H destruct
]
qed-.
-lemma lsubsv_inv_pair1: â\88\80h,g,I,G,K1,L2,X. G â\8a¢ K1.â\93\91{I}X ¡â\8a\91[h, g] L2 →
- (â\88\83â\88\83K2. G â\8a¢ K1 ¡â\8a\91[h, g] K2 & L2 = K2.ⓑ{I}X) ∨
+lemma lsubsv_inv_pair1: â\88\80h,g,I,G,K1,L2,X. G â\8a¢ K1.â\93\91{I}X ¡â«\83[h, g] L2 →
+ (â\88\83â\88\83K2. G â\8a¢ K1 ¡â«\83[h, g] K2 & L2 = K2.ⓑ{I}X) ∨
∃∃K2,W,V,l. ⦃G, K1⦄ ⊢ W ¡[h, g] & ⦃G, K1⦄ ⊢ V ¡[h, g] &
scast h g l G K1 V W & ⦃G, K2⦄ ⊢ W ¡[h, g] &
⦃G, K1⦄ ⊢ V ▪[h, g] l+1 & ⦃G, K2⦄ ⊢ W ▪[h, g] l &
- G â\8a¢ K1 ¡â\8a\91[h, g] K2 &
+ G â\8a¢ K1 ¡â«\83[h, g] K2 &
I = Abbr & L2 = K2.ⓛW & X = ⓝW.V.
/2 width=3 by lsubsv_inv_pair1_aux/ qed-.
-fact lsubsv_inv_atom2_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 → L2 = ⋆ → L1 = ⋆.
+fact lsubsv_inv_atom2_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 → L2 = ⋆ → L1 = ⋆.
#h #g #G #L1 #L2 * -L1 -L2
[ //
| #I #L1 #L2 #V #_ #H destruct
]
qed-.
-lemma lsubsv_inv_atom2: â\88\80h,g,G,L1. G â\8a¢ L1 ¡â\8a\91[h, g] ⋆ → L1 = ⋆.
+lemma lsubsv_inv_atom2: â\88\80h,g,G,L1. G â\8a¢ L1 ¡â«\83[h, g] ⋆ → L1 = ⋆.
/2 width=6 by lsubsv_inv_atom2_aux/ qed-.
-fact lsubsv_inv_pair2_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 →
+fact lsubsv_inv_pair2_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 →
∀I,K2,W. L2 = K2.ⓑ{I}W →
- (â\88\83â\88\83K1. G â\8a¢ K1 ¡â\8a\91[h, g] K2 & L1 = K1.ⓑ{I}W) ∨
+ (â\88\83â\88\83K1. G â\8a¢ K1 ¡â«\83[h, g] K2 & L1 = K1.ⓑ{I}W) ∨
∃∃K1,V,l. ⦃G, K1⦄ ⊢ W ¡[h, g] & ⦃G, K1⦄ ⊢ V ¡[h, g] &
scast h g l G K1 V W & ⦃G, K2⦄ ⊢ W ¡[h, g] &
⦃G, K1⦄ ⊢ V ▪[h, g] l+1 & ⦃G, K2⦄ ⊢ W ▪[h, g] l &
- G â\8a¢ K1 ¡â\8a\91[h, g] K2 & I = Abst & L1 = K1. ⓓⓝW.V.
+ G â\8a¢ K1 ¡â«\83[h, g] K2 & I = Abst & L1 = K1. ⓓⓝW.V.
#h #g #G #L1 #L2 * -L1 -L2
[ #J #K2 #U #H destruct
| #I #L1 #L2 #V #HL12 #J #K2 #U #H destruct /3 width=3/
]
qed-.
-lemma lsubsv_inv_pair2: â\88\80h,g,I,G,L1,K2,W. G â\8a¢ L1 ¡â\8a\91[h, g] K2.ⓑ{I}W →
- (â\88\83â\88\83K1. G â\8a¢ K1 ¡â\8a\91[h, g] K2 & L1 = K1.ⓑ{I}W) ∨
+lemma lsubsv_inv_pair2: â\88\80h,g,I,G,L1,K2,W. G â\8a¢ L1 ¡â«\83[h, g] K2.ⓑ{I}W →
+ (â\88\83â\88\83K1. G â\8a¢ K1 ¡â«\83[h, g] K2 & L1 = K1.ⓑ{I}W) ∨
∃∃K1,V,l. ⦃G, K1⦄ ⊢ W ¡[h, g] & ⦃G, K1⦄ ⊢ V ¡[h, g] &
scast h g l G K1 V W & ⦃G, K2⦄ ⊢ W ¡[h, g] &
⦃G, K1⦄ ⊢ V ▪[h, g] l+1 & ⦃G, K2⦄ ⊢ W ▪[h, g] l &
- G â\8a¢ K1 ¡â\8a\91[h, g] K2 & I = Abst & L1 = K1. ⓓⓝW.V.
+ G â\8a¢ K1 ¡â«\83[h, g] K2 & I = Abst & L1 = K1. ⓓⓝW.V.
/2 width=3 by lsubsv_inv_pair2_aux/ qed-.
(* Basic_forward lemmas *****************************************************)
-lemma lsubsv_fwd_lsubr: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 â\86\92 L1 â\8a\91 L2.
+lemma lsubsv_fwd_lsubr: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 â\86\92 L1 â«\83 L2.
#h #g #G #L1 #L2 #H elim H -L1 -L2 // /2 width=1/
qed-.
(* Basic properties *********************************************************)
-lemma lsubsv_refl: â\88\80h,g,G,L. G â\8a¢ L ¡â\8a\91[h, g] L.
+lemma lsubsv_refl: â\88\80h,g,G,L. G â\8a¢ L ¡â«\83[h, g] L.
#h #g #G #L elim L -L // /2 width=1/
qed.
-lemma lsubsv_cprs_trans: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 →
+lemma lsubsv_cprs_trans: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 →
∀T1,T2. ⦃G, L2⦄ ⊢ T1 ➡* T2 → ⦃G, L1⦄ ⊢ T1 ➡* T2.
/3 width=6 by lsubsv_fwd_lsubr, lsubr_cprs_trans/
qed-.
(* Properties on context-sensitive parallel equivalence for terms ***********)
-lemma lsubsv_cpcs_trans: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 →
+lemma lsubsv_cpcs_trans: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 →
∀T1,T2. ⦃G, L2⦄ ⊢ T1 ⬌* T2 → ⦃G, L1⦄ ⊢ T1 ⬌* T2.
/3 width=6 by lsubsv_fwd_lsubr, lsubr_cpcs_trans/
qed-.
(* Properties on decomposed extended parallel computation on terms **********)
lemma lsubsv_cpds_trans: ∀h,g,G,L2,T1,T2. ⦃G, L2⦄ ⊢ T1 •*➡*[h, g] T2 →
- â\88\80L1. G â\8a¢ L1 ¡â\8a\91[h, g] L2 →
+ â\88\80L1. G â\8a¢ L1 ¡â«\83[h, g] L2 →
∃∃T. ⦃G, L1⦄ ⊢ T1 •*➡*[h, g] T & ⦃G, L1⦄ ⊢ T2 ➡* T.
#h #g #G #L2 #T1 #T2 * #T #l1 #l2 #Hl21 #Hl1 #HT1 #HT2 #L1 #HL12
lapply (lsubsv_cprs_trans … HL12 … HT2) -HT2 #HT2
(* Properties concerning basic local environment slicing ********************)
(* Note: the constant 0 cannot be generalized *)
-lemma lsubsv_ldrop_O1_conf: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 →
+lemma lsubsv_ldrop_O1_conf: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 →
∀K1,s,e. ⇩[s, 0, e] L1 ≡ K1 →
- â\88\83â\88\83K2. G â\8a¢ K1 ¡â\8a\91[h, g] K2 & ⇩[s, 0, e] L2 ≡ K2.
+ â\88\83â\88\83K2. G â\8a¢ K1 ¡â«\83[h, g] K2 & ⇩[s, 0, e] L2 ≡ K2.
#h #g #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #V #_ #IHL12 #K1 #s #e #H
qed-.
(* Note: the constant 0 cannot be generalized *)
-lemma lsubsv_ldrop_O1_trans: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 →
+lemma lsubsv_ldrop_O1_trans: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 →
∀K2,s, e. ⇩[s, 0, e] L2 ≡ K2 →
- â\88\83â\88\83K1. G â\8a¢ K1 ¡â\8a\91[h, g] K2 & ⇩[s, 0, e] L1 ≡ K1.
+ â\88\83â\88\83K1. G â\8a¢ K1 ¡â«\83[h, g] K2 & ⇩[s, 0, e] L1 ≡ K1.
#h #g #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #V #_ #IHL12 #K2 #s #e #H
lemma lsubsv_lsstas_trans: ∀h,g,G,L2,T,U2,l1. ⦃G, L2⦄ ⊢ T •*[h, g, l1] U2 →
∀l2. l1 ≤ l2 → ⦃G, L2⦄ ⊢ T ▪[h, g] l2 →
- â\88\80L1. G â\8a¢ L1 ¡â\8a\91[h, g] L2 →
+ â\88\80L1. G â\8a¢ L1 ¡â«\83[h, g] L2 →
∃∃U1. ⦃G, L1⦄ ⊢ T •*[h, g, l1] U1 & ⦃G, L1⦄ ⊢ U1 ⬌* U2.
#h #g #G #L2 #T #U #l1 #H @(lsstas_ind_alt … H) -G -L2 -T -U -l1
[1,2: /2 width=3 by lstar_O, ex2_intro/
lemma lsubsv_ssta_trans: ∀h,g,G,L2,T,U2. ⦃G, L2⦄ ⊢ T •[h, g] U2 →
∀l. ⦃G, L2⦄ ⊢ T ▪[h, g] l+1 →
- â\88\80L1. G â\8a¢ L1 ¡â\8a\91[h, g] L2 →
+ â\88\80L1. G â\8a¢ L1 ¡â«\83[h, g] L2 →
∃∃U1. ⦃G, L1⦄ ⊢ T •[h, g] U1 & ⦃G, L1⦄ ⊢ U1 ⬌* U2.
#h #g #G #L2 #T #U2 #H #l #HTl #L1 #HL12
elim ( lsubsv_lsstas_trans … U2 1 … HTl … HL12)
(* Forward lemmas on lenv refinement for atomic arity assignment ************)
-lemma lsubsv_fwd_lsuba: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 â\86\92 G â\8a¢ L1 â\81\9dâ\8a\91 L2.
+lemma lsubsv_fwd_lsuba: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 â\86\92 G â\8a¢ L1 â\81\9dâ«\83 L2.
#h #g #G #L1 #L2 #H elim H -L1 -L2 // /2 width=1/
#L1 #L2 #W #V #l #H1W #HV #HVW #H2W #H1l #_ #_ #IHL12
lapply (snv_scast … HV H1W HVW H1l) -HV -H1W -HVW -H1l #HV
(* Forward lemmas on lenv refinement for degree assignment ******************)
-lemma lsubsv_fwd_lsubd: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â\8a\91[h, g] L2 â\86\92 G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2.
+lemma lsubsv_fwd_lsubd: â\88\80h,g,G,L1,L2. G â\8a¢ L1 ¡â«\83[h, g] L2 â\86\92 G â\8a¢ L1 â\96ªâ«\83[h, g] L2.
#h #g #G #L1 #L2 #H elim H -L1 -L2 // /2 width=1/ /2 width=3/
qed-.
(* Properties concerning stratified native validity *************************)
lemma lsubsv_snv_trans: ∀h,g,G,L2,T. ⦃G, L2⦄ ⊢ T ¡[h, g] →
- â\88\80L1. G â\8a¢ L1 ¡â\8a\91[h, g] L2 → ⦃G, L1⦄ ⊢ T ¡[h, g].
+ â\88\80L1. G â\8a¢ L1 ¡â«\83[h, g] L2 → ⦃G, L1⦄ ⊢ T ¡[h, g].
#h #g #G #L2 #T #H elim H -G -L2 -T //
[ #I #G #L2 #K2 #V #i #HLK2 #_ #IHV #L1 #HL12
elim (lsubsv_ldrop_O1_trans … HL12 … HLK2) -L2 #X #H #HLK1
(* Advanced properties ******************************************************)
-lemma snv_fqu_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma snv_fqu_conf: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
⦃G1, L1⦄ ⊢ T1 ¡[h, g] → ⦃G2, L2⦄ ⊢ T2 ¡[h, g].
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I1 #G1 #L1 #V1 #H
qed.
lemma lsubr_cpcs_trans: ∀G,L1,T1,T2. ⦃G, L1⦄ ⊢ T1 ⬌* T2 →
- â\88\80L2. L2 â\8a\91 L1 → ⦃G, L2⦄ ⊢ T1 ⬌* T2.
+ â\88\80L2. L2 â«\83 L1 → ⦃G, L2⦄ ⊢ T1 ⬌* T2.
#G #L1 #T1 #T2 #HT12 elim (cpcs_inv_cprs … HT12) -HT12
/3 width=5 by cprs_div, lsubr_cprs_trans/
qed-.
non associative with precedence 45
for @{ 'BinaryArity $h $L $T $A }.
-notation "hvbox( h â\8a¢ break term 46 L1 ÷ â\8a\91 break term 46 L2 )"
+notation "hvbox( h â\8a¢ break term 46 L1 ÷ â«\83 break term 46 L2 )"
non associative with precedence 45
for @{ 'LRSubEqB $h $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L1 â\8a\91 break term 46 L2 )"
+notation "hvbox( L1 â«\83 break term 46 L2 )"
non associative with precedence 45
for @{ 'LRSubEq $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( G â\8a¢ break term 46 L1 â\8a\91 break [ term 46 R ] break term 46 L2 )"
+notation "hvbox( G â\8a¢ break term 46 L1 â«\83 break [ term 46 R ] break term 46 L2 )"
non associative with precedence 45
for @{ 'LRSubEq $R $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( G â\8a¢ break term 46 L1 â\81\9d â\8a\91 break term 46 L2 )"
+notation "hvbox( G â\8a¢ break term 46 L1 â\81\9d â«\83 break term 46 L2 )"
non associative with precedence 45
for @{ 'LRSubEqA $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( G â\8a¢ break term 46 L1 â\96ª â\8a\91 break [ term 46 h, break term 46 g ] break term 46 L2 )"
+notation "hvbox( G â\8a¢ break term 46 L1 â\96ª â«\83 break [ term 46 h, break term 46 g ] break term 46 L2 )"
non associative with precedence 45
for @{ 'LRSubEqD $h $g $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( G â\8a¢ break term 46 L1 ¡ â\8a\91 break [ term 46 h, break term 46 g ] break term 46 L2 )"
+notation "hvbox( G â\8a¢ break term 46 L1 ¡ â«\83 break [ term 46 h, break term 46 g ] break term 46 L2 )"
non associative with precedence 45
for @{ 'LRSubEqV $h $g $G $L1 $L2 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( ⦃ term 46 G , break term 46 L1 ⦄ ⊢ ➡ ➡ * break term 46 L2 )"
- non associative with precedence 45
- for @{ 'PRedSnStarAlt $G $L1 $L2 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( ⦃ term 46 G, break term 46 L1 ⦄ ⊢ ➡ ➡ * break [ term 46 h , break term 46 g ] break term 46 L2 )"
- non associative with precedence 45
- for @{ 'PRedSnStarAlt $h $g $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\83 break ⦃ term 46 G2, break term 46 L2 , break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90 break ⦃ term 46 G2, break term 46 L2 , break term 46 T2 ⦄ )"
non associative with precedence 45
for @{ 'SupTerm $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\83⸮ break ⦃ term 46 G2, break term 46 L2 , break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90⸮ break ⦃ term 46 G2, break term 46 L2 , break term 46 T2 ⦄ )"
non associative with precedence 45
for @{ 'SupTermOpt $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\83â\8a\83⸮ break ⦃ term 46 G2, break term 46 L2 , break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\8a\90â\8a\90⸮ break ⦃ term 46 G2, break term 46 L2 , break term 46 T2 ⦄ )"
non associative with precedence 45
for @{ 'SupTermOptAlt $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, term 46 L1, break term 46 T1 â¦\84 â\8a\83 + break ⦃ term 46 G2, term 46 L2 , break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, term 46 L1, break term 46 T1 â¦\84 â\8a\90 + break ⦃ term 46 G2, term 46 L2 , break term 46 T2 ⦄ )"
non associative with precedence 45
for @{ 'SupTermPlus $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, term 46 L1, break term 46 T1 â¦\84 â\8a\83 * break ⦃ term 46 G2, term 46 L2 , break term 46 T2 ⦄ )"
+notation "hvbox( â¦\83 term 46 G1, term 46 L1, break term 46 T1 â¦\84 â\8a\90 * break ⦃ term 46 G2, term 46 L2 , break term 46 T2 ⦄ )"
non associative with precedence 45
for @{ 'SupTermStar $G1 $L1 $T1 $G2 $L2 $T2 }.
(* Properties on lazy sn pointwise extensions *******************************)
-lemma cpr_llpx_sn_conf: ∀R. (∀L. reflexive … (R L)) → l_liftable R → l_deliftable_sn R →
+lemma cpr_llpx_sn_conf: ∀R. (∀I,L.reflexive … (R I L)) →
+ (∀I.l_liftable (R I)) →
+ (∀I.l_deliftable_sn (R I)) →
∀G. s_r_confluent1 … (cpr G) (llpx_sn R 0).
#R #H1R #H2R #H3R #G #Ls #T1 #T2 #H elim H -G -Ls -T1 -T2
[ //
(* Properties on supclosure *************************************************)
-lemma fqu_cpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma fqu_cpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡[h, g] U2 →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83 ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90 ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
/3 width=3 by fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, cpx_pair_sn, cpx_bind, cpx_flat, ex2_intro/
[ #I #G #L #V2 #U2 #HVU2
]
qed-.
-lemma fqu_ssta_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma fqu_ssta_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 •[h, g] U2 →
∀l. ⦃G2, L2⦄ ⊢ T2 ▪[h, g] l+1 →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83 ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90 ⦃G2, L2, U2⦄.
/3 width=5 by fqu_cpx_trans, ssta_cpx/ qed-.
-lemma fquq_cpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma fquq_cpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡[h, g] U2 →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83⸮ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90⸮ ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 elim (fquq_inv_gen … H) -H
[ #HT12 elim (fqu_cpx_trans … HT12 … HTU2) /3 width=3 by fqu_fquq, ex2_intro/
| * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma fquq_ssta_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma fquq_ssta_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 •[h, g] U2 →
∀l. ⦃G2, L2⦄ ⊢ T2 ▪[h, g] l+1 →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83⸮ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90⸮ ⦃G2, L2, U2⦄.
/3 width=5 by fquq_cpx_trans, ssta_cpx/ qed-.
-lemma fqup_cpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma fqup_cpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡[h, g] U2 →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83+ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90+ ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
[ #G2 #L2 #T2 #H12 #U2 #HTU2 elim (fqu_cpx_trans … H12 … HTU2) -T2
/3 width=3 by fqu_fqup, ex2_intro/
]
qed-.
-lemma fqus_cpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma fqus_cpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡[h, g] U2 →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\83* ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & â¦\83G1, L1, U1â¦\84 â\8a\90* ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 elim (fqus_inv_gen … H) -H
[ #HT12 elim (fqup_cpx_trans … HT12 … HTU2) /3 width=3 by fqup_fqus, ex2_intro/
| * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma fqu_cpx_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma fqu_cpx_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡[h, g] U2 → (T2 = U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\83 ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\90 ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #V1 #V2 #HV12 #_ elim (lift_total V2 0 1)
#U2 #HVU2 @(ex3_intro … U2)
]
qed-.
-lemma fquq_cpx_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma fquq_cpx_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡[h, g] U2 → (T2 = U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\83⸮ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\90⸮ ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fquq_inv_gen … H12) -H12
[ #H12 elim (fqu_cpx_trans_neq … H12 … HTU2 H) -T2
/3 width=4 by fqu_fquq, ex3_intro/
]
qed-.
-lemma fqup_cpx_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma fqup_cpx_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡[h, g] U2 → (T2 = U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\83+ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\90+ ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1
[ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_neq … H12 … HTU2 H) -T2
/3 width=4 by fqu_fqup, ex3_intro/
]
qed-.
-lemma fqus_cpx_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma fqus_cpx_trans_neq: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡[h, g] U2 → (T2 = U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\83* ⦃G2, L2, U2⦄.
+ â\88\83â\88\83U1. â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] U1 & T1 = U1 â\86\92 â\8a¥ & â¦\83G1, L1, U1â¦\84 â\8a\90* ⦃G2, L2, U2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_gen … H12) -H12
[ #H12 elim (fqup_cpx_trans_neq … H12 … HTU2 H) -T2
/3 width=4 by fqup_fqus, ex3_intro/
(* Properties on lazy sn pointwise extensions *******************************)
(* Note: lemma 1000 *)
-lemma cpx_llpx_sn_conf: ∀R. (∀L. reflexive … (R L)) → l_liftable R → l_deliftable_sn R →
+lemma cpx_llpx_sn_conf: ∀R. (∀I,L.reflexive … (R I L)) →
+ (∀I.l_liftable (R I)) →
+ (∀I.l_deliftable_sn (R I)) →
∀h,g,G. s_r_confluent1 … (cpx h g G) (llpx_sn R 0).
#R #H1R #H2R #H3R #h #g #G #Ls #T1 #T2 #H elim H -G -Ls -T1 -T2
[ //
(* "BIG TREE" PARALLEL REDUCTION FOR CLOSURES *******************************)
inductive fpb (h) (g) (G1) (L1) (T1): relation3 genv lenv term ≝
-| fpb_fquq: â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ → fpb h g G1 L1 T1 G2 L2 T2
+| fpb_fquq: â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ → fpb h g G1 L1 T1 G2 L2 T2
| fpb_cpx : ∀T2. ⦃G1, L1⦄ ⊢ T1 ➡[h, g] T2 → fpb h g G1 L1 T1 G1 L1 T2
| fpb_lpx : ∀L2. ⦃G1, L1⦄ ⊢ ➡[h, g] L2 → fpb h g G1 L1 T1 G1 L2 T1
| fpb_lleq: ∀L2. L1 ⋕[T1, 0] L2 → fpb h g G1 L1 T1 G1 L2 T1
(* SN PARALLEL REDUCTION FOR LOCAL ENVIRONMENTS *****************************)
-definition lpr: relation3 genv lenv lenv ≝ λG. lpx_sn (cpr G).
+definition lpr: relation3 genv lenv lenv ≝ λG. lpx_sn (λ_.cpr G).
interpretation "parallel reduction (local environment, sn variant)"
'PRedSn G L1 L2 = (lpr G L1 L2).
(* Properties on context-sensitive parallel reduction for terms *************)
-lemma fqu_cpr_trans_dx: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma fqu_cpr_trans_dx: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡ U2 →
- â\88\83â\88\83L,U1. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ L & â¦\83G1, Lâ¦\84 â\8a¢ T1 â\9e¡ U1 & â¦\83G1, L, U1â¦\84 â\8a\83 ⦃G2, L2, U2⦄.
+ â\88\83â\88\83L,U1. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ L & â¦\83G1, Lâ¦\84 â\8a¢ T1 â\9e¡ U1 & â¦\83G1, L, U1â¦\84 â\8a\90 ⦃G2, L2, U2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
/3 width=5 by fqu_lref_O, fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, lpr_pair, cpr_pair_sn, cpr_atom, cpr_bind, cpr_flat, ex3_2_intro/
#G #L #K #U #T #e #HLK #HUT #U2 #HU2
lapply (cpr_lift … HU2 … HLK … HUT … HUT2) -HU2 -HUT /3 width=9 by fqu_drop, ex3_2_intro/
qed-.
-lemma fquq_cpr_trans_dx: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma fquq_cpr_trans_dx: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡ U2 →
- â\88\83â\88\83L,U1. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ L & â¦\83G1, Lâ¦\84 â\8a¢ T1 â\9e¡ U1 & â¦\83G1, L, U1â¦\84 â\8a\83⸮ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83L,U1. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ L & â¦\83G1, Lâ¦\84 â\8a¢ T1 â\9e¡ U1 & â¦\83G1, L, U1â¦\84 â\8a\90⸮ ⦃G2, L2, U2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 elim (fquq_inv_gen … H) -H
[ #HT12 elim (fqu_cpr_trans_dx … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma fqu_cpr_trans_sn: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma fqu_cpr_trans_sn: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡ U2 →
- â\88\83â\88\83L,U1. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ L & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡ U1 & â¦\83G1, L, U1â¦\84 â\8a\83 ⦃G2, L2, U2⦄.
+ â\88\83â\88\83L,U1. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ L & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡ U1 & â¦\83G1, L, U1â¦\84 â\8a\90 ⦃G2, L2, U2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
/3 width=5 by fqu_lref_O, fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, lpr_pair, cpr_pair_sn, cpr_atom, cpr_bind, cpr_flat, ex3_2_intro/
#G #L #K #U #T #e #HLK #HUT #U2 #HU2
lapply (cpr_lift … HU2 … HLK … HUT … HUT2) -HU2 -HUT /3 width=9 by fqu_drop, ex3_2_intro/
qed-.
-lemma fquq_cpr_trans_sn: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma fquq_cpr_trans_sn: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀U2. ⦃G2, L2⦄ ⊢ T2 ➡ U2 →
- â\88\83â\88\83L,U1. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ L & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡ U1 & â¦\83G1, L, U1â¦\84 â\8a\83⸮ ⦃G2, L2, U2⦄.
+ â\88\83â\88\83L,U1. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ L & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡ U1 & â¦\83G1, L, U1â¦\84 â\8a\90⸮ ⦃G2, L2, U2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 elim (fquq_inv_gen … H) -H
[ #HT12 elim (fqu_cpr_trans_sn … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma fqu_lpr_trans: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma fqu_lpr_trans: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀K2. ⦃G2, L2⦄ ⊢ ➡ K2 →
- â\88\83â\88\83K1,T. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ K1 & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡ T & â¦\83G1, K1, Tâ¦\84 â\8a\83 ⦃G2, K2, T2⦄.
+ â\88\83â\88\83K1,T. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ K1 & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡ T & â¦\83G1, K1, Tâ¦\84 â\8a\90 ⦃G2, K2, T2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
/3 width=5 by fqu_lref_O, fqu_pair_sn, fqu_flat_dx, lpr_pair, ex3_2_intro/
[ #a #I #G2 #L2 #V2 #T2 #X #H elim (lpr_inv_pair1 … H) -H
]
qed-.
-lemma fquq_lpr_trans: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma fquq_lpr_trans: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀K2. ⦃G2, L2⦄ ⊢ ➡ K2 →
- â\88\83â\88\83K1,T. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ K1 & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡ T & â¦\83G1, K1, Tâ¦\84 â\8a\83⸮ ⦃G2, K2, T2⦄.
+ â\88\83â\88\83K1,T. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡ K1 & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡ T & â¦\83G1, K1, Tâ¦\84 â\8a\90⸮ ⦃G2, K2, T2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 elim (fquq_inv_gen … H) -H
[ #HT12 elim (fqu_lpr_trans … HT12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
fact cpr_conf_lpr_atom_delta:
∀G,L0,i. (
- â\88\80L,T. â¦\83G, L0, #iâ¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, #iâ¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
(* Basic_1: includes: pr0_delta_delta pr2_delta_delta *)
fact cpr_conf_lpr_delta_delta:
∀G,L0,i. (
- â\88\80L,T. â¦\83G, L0, #iâ¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, #iâ¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
fact cpr_conf_lpr_bind_bind:
∀a,I,G,L0,V0,T0. (
- â\88\80L,T. â¦\83G, L0, â\93\91{a,I}V0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, â\93\91{a,I}V0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
fact cpr_conf_lpr_bind_zeta:
∀G,L0,V0,T0. (
- â\88\80L,T. â¦\83G, L0, +â\93\93V0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, +â\93\93V0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
fact cpr_conf_lpr_zeta_zeta:
∀G,L0,V0,T0. (
- â\88\80L,T. â¦\83G, L0, +â\93\93V0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, +â\93\93V0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
fact cpr_conf_lpr_flat_flat:
∀I,G,L0,V0,T0. (
- â\88\80L,T. â¦\83G, L0, â\93\95{I}V0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, â\93\95{I}V0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
fact cpr_conf_lpr_flat_tau:
∀G,L0,V0,T0. (
- â\88\80L,T. â¦\83G, L0, â\93\9dV0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, â\93\9dV0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
fact cpr_conf_lpr_tau_tau:
∀G,L0,V0,T0. (
- â\88\80L,T. â¦\83G, L0, â\93\9dV0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, â\93\9dV0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
fact cpr_conf_lpr_flat_beta:
∀a,G,L0,V0,W0,T0. (
- â\88\80L,T. â¦\83G, L0, â\93\90V0.â\93\9b{a}W0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, â\93\90V0.â\93\9b{a}W0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
*)
fact cpr_conf_lpr_flat_theta:
∀a,G,L0,V0,W0,T0. (
- â\88\80L,T. â¦\83G, L0, â\93\90V0.â\93\93{a}W0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, â\93\90V0.â\93\93{a}W0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
fact cpr_conf_lpr_beta_beta:
∀a,G,L0,V0,W0,T0. (
- â\88\80L,T. â¦\83G, L0, â\93\90V0.â\93\9b{a}W0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, â\93\90V0.â\93\9b{a}W0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
(* Basic_1: was: pr0_upsilon_upsilon *)
fact cpr_conf_lpr_theta_theta:
∀a,G,L0,V0,W0,T0. (
- â\88\80L,T. â¦\83G, L0, â\93\90V0.â\93\93{a}W0.T0â¦\84 â\8a\83+ ⦃G, L, T⦄ →
+ â\88\80L,T. â¦\83G, L0, â\93\90V0.â\93\93{a}W0.T0â¦\84 â\8a\90+ ⦃G, L, T⦄ →
∀T1. ⦃G, L⦄ ⊢ T ➡ T1 → ∀T2. ⦃G, L⦄ ⊢ T ➡ T2 →
∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0
(* SN EXTENDED PARALLEL REDUCTION FOR LOCAL ENVIRONMENTS ********************)
definition lpx: ∀h. sd h → relation3 genv lenv lenv ≝
- λh,g,G. lpx_sn (cpx h g G).
+ λh,g,G. lpx_sn (λ_.cpx h g G).
interpretation "extended parallel reduction (local environment, sn variant)"
'PRedSn h g G L1 L2 = (lpx h g G L1 L2).
(* Properties on supclosure *************************************************)
-lemma fqu_lpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma fqu_lpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀K2. ⦃G2, L2⦄ ⊢ ➡[h, g] K2 →
- â\88\83â\88\83K1,T. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡[h, g] K1 & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\83 ⦃G2, K2, T2⦄.
+ â\88\83â\88\83K1,T. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡[h, g] K1 & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\90 ⦃G2, K2, T2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
/3 width=5 by fqu_lref_O, fqu_pair_sn, fqu_flat_dx, lpx_pair, ex3_2_intro/
[ #a #I #G2 #L2 #V2 #T2 #X #H elim (lpx_inv_pair1 … H) -H
]
qed-.
-lemma fquq_lpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma fquq_lpx_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀K2. ⦃G2, L2⦄ ⊢ ➡[h, g] K2 →
- â\88\83â\88\83K1,T. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡[h, g] K1 & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\83⸮ ⦃G2, K2, T2⦄.
+ â\88\83â\88\83K1,T. â¦\83G1, L1â¦\84 â\8a¢ â\9e¡[h, g] K1 & â¦\83G1, L1â¦\84 â\8a¢ T1 â\9e¡[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\90⸮ ⦃G2, K2, T2⦄.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 elim (fquq_inv_gen … H) -H
[ #HT12 elim (fqu_lpx_trans … HT12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma lpx_fqu_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma lpx_fqu_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡[h, g] L1 →
- â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\83 ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2.
+ â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\90 ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
/3 width=7 by fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, lpx_pair, ex3_2_intro/
[ #I #G1 #L1 #V1 #X #H elim (lpx_inv_pair2 … H) -H
]
qed-.
-lemma lpx_fquq_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma lpx_fquq_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡[h, g] L1 →
- â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\83⸮ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2.
+ â\88\83â\88\83K2,T. â¦\83G1, K1â¦\84 â\8a¢ T1 â\9e¡[h, g] T & â¦\83G1, K1, Tâ¦\84 â\8a\90⸮ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 elim (fquq_inv_gen … H) -H
[ #HT12 elim (lpx_fqu_trans … HT12 … HKL1) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
∀L1,T,d. L1 ⋕[T, d] L2 →
∃∃K1. ⦃G, L1⦄ ⊢ ➡[h, g] K1 & K1 ⋕[T, d] K2.
-lemma lpx_lleq_fqu_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma lpx_lleq_fqu_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡[h, g] L1 → K1 ⋕[T1, 0] L1 →
- â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\83 ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2 & K2 ⋕[T2, 0] L2.
+ â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\90 ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2 & K2 ⋕[T2, 0] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G1 #L1 #V1 #X #H1 #H2 elim (lpx_inv_pair2 … H1) -H1
#K0 #V0 #H1KL1 #_ #H destruct
]
qed-.
-lemma lpx_lleq_fquq_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma lpx_lleq_fquq_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡[h, g] L1 → K1 ⋕[T1, 0] L1 →
- â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\83⸮ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2 & K2 ⋕[T2, 0] L2.
+ â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\90⸮ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2 & K2 ⋕[T2, 0] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #H1KL1 #H2KL1
elim (fquq_inv_gen … H) -H
[ #H elim (lpx_lleq_fqu_trans … H … H1KL1 H2KL1) -L1
]
qed-.
-lemma lpx_lleq_fqup_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma lpx_lleq_fqup_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡[h, g] L1 → K1 ⋕[T1, 0] L1 →
- â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\83+ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2 & K2 ⋕[T2, 0] L2.
+ â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\90+ ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2 & K2 ⋕[T2, 0] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
[ #G2 #L2 #T2 #H #K1 #H1KL1 #H2KL1 elim (lpx_lleq_fqu_trans … H … H1KL1 H2KL1) -L1
/3 width=4 by fqu_fqup, ex3_intro/
]
qed-.
-lemma lpx_lleq_fqus_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma lpx_lleq_fqus_trans: â\88\80h,g,G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
∀K1. ⦃G1, K1⦄ ⊢ ➡[h, g] L1 → K1 ⋕[T1, 0] L1 →
- â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\83* ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2 & K2 ⋕[T2, 0] L2.
+ â\88\83â\88\83K2. â¦\83G1, K1, T1â¦\84 â\8a\90* ⦃G2, K2, T2⦄ & ⦃G2, K2⦄ ⊢ ➡[h, g] L2 & K2 ⋕[T2, 0] L2.
#h #g #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #H1KL1 #H2KL1
elim (fqus_inv_gen … H) -H
[ #H elim (lpx_lleq_fqup_trans … H … H1KL1 H2KL1) -L1
(* Basic properties *********************************************************)
lemma fqu_drop_lt: ∀G,L,K,T,U,e. 0 < e →
- â\87©[e] L â\89¡ K â\86\92 â\87§[0, e] T â\89¡ U â\86\92 â¦\83G, L, Uâ¦\84 â\8a\83 ⦃G, K, T⦄.
+ â\87©[e] L â\89¡ K â\86\92 â\87§[0, e] T â\89¡ U â\86\92 â¦\83G, L, Uâ¦\84 â\8a\90 ⦃G, K, T⦄.
#G #L #K #T #U #e #He >(plus_minus_m_m e 1) /2 width=3 by fqu_drop/
qed.
-lemma fqu_lref_S_lt: â\88\80I,G,L,V,i. 0 < i â\86\92 â¦\83G, L.â\93\91{I}V, #iâ¦\84 â\8a\83 ⦃G, L, #(i-1)⦄.
+lemma fqu_lref_S_lt: â\88\80I,G,L,V,i. 0 < i â\86\92 â¦\83G, L.â\93\91{I}V, #iâ¦\84 â\8a\90 ⦃G, L, #(i-1)⦄.
/3 width=3 by fqu_drop, ldrop_drop, lift_lref_ge_minus/
qed.
(* Basic forward lemmas *****************************************************)
-lemma fqu_fwd_fw: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ → ♯{G2, L2, T2} < ♯{G1, L1, T1}.
+lemma fqu_fwd_fw: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ → ♯{G2, L2, T2} < ♯{G1, L1, T1}.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 //
#G #L #K #T #U #e #HLK #HTU
lapply (ldrop_fwd_lw_lt … HLK ?) -HLK // #HKL
normalize in ⊢ (?%%); /2 width=1 by lt_minus_to_plus/
qed-.
-fact fqu_fwd_length_lref1_aux: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+fact fqu_fwd_length_lref1_aux: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀i. T1 = #i → |L2| < |L1|.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[1: normalize //
] #I #G #L #V #T #j #H destruct
qed-.
-lemma fqu_fwd_length_lref1: â\88\80G1,G2,L1,L2,T2,i. â¦\83G1, L1, #iâ¦\84 â\8a\83 ⦃G2, L2, T2⦄ → |L2| < |L1|.
+lemma fqu_fwd_length_lref1: â\88\80G1,G2,L1,L2,T2,i. â¦\83G1, L1, #iâ¦\84 â\8a\90 ⦃G2, L2, T2⦄ → |L2| < |L1|.
/2 width=7 by fqu_fwd_length_lref1_aux/
qed-.
(* Advanced eliminators *****************************************************)
lemma fqu_wf_ind: ∀R:relation3 …. (
- â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ → R G2 L2 T2) →
+ â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ → R G2 L2 T2) →
R G1 L1 T1
) → ∀G1,L1,T1. R G1 L1 T1.
#R #HR @(f3_ind … fw) #n #IHn #G1 #L1 #T1 #H destruct /4 width=1 by fqu_fwd_fw/
lemma fquq_refl: tri_reflexive … fquq.
/2 width=3 by fquq_drop/ qed.
-lemma fqu_fquq: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄.
+lemma fqu_fquq: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -L1 -L2 -T1 -T2 /2 width=3 by fquq_drop/
qed.
(* Basic forward lemmas *****************************************************)
-lemma fquq_fwd_fw: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ → ♯{G2, L2, T2} ≤ ♯{G1, L1, T1}.
+lemma fquq_fwd_fw: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ → ♯{G2, L2, T2} ≤ ♯{G1, L1, T1}.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 /2 width=1 by lt_to_le/
#G1 #L1 #K1 #T1 #U1 #e #HLK1 #HTU1
lapply (ldrop_fwd_lw … HLK1) -HLK1
/2 width=1 by le_plus, le_n/
qed-.
-fact fquq_fwd_length_lref1_aux: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+fact fquq_fwd_length_lref1_aux: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀i. T1 = #i → |L2| ≤ |L1|.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 //
[ #a #I #G #L #V #T #j #H destruct
]
qed-.
-lemma fquq_fwd_length_lref1: â\88\80G1,G2,L1,L2,T2,i. â¦\83G1, L1, #iâ¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ → |L2| ≤ |L1|.
+lemma fquq_fwd_length_lref1: â\88\80G1,G2,L1,L2,T2,i. â¦\83G1, L1, #iâ¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ → |L2| ≤ |L1|.
/2 width=7 by fquq_fwd_length_lref1_aux/
qed-.
// qed.
lemma fquqa_drop: ∀G,L,K,T,U,e.
- â\87©[e] L â\89¡ K â\86\92 â\87§[0, e] T â\89¡ U â\86\92 â¦\83G, L, Uâ¦\84 â\8a\83â\8a\83⸮ ⦃G, K, T⦄.
+ â\87©[e] L â\89¡ K â\86\92 â\87§[0, e] T â\89¡ U â\86\92 â¦\83G, L, Uâ¦\84 â\8a\90â\8a\90⸮ ⦃G, K, T⦄.
#G #L #K #T #U #e #HLK #HTU elim (eq_or_gt e)
/3 width=5 by fqu_drop_lt, or_introl/ #H destruct
>(ldrop_inv_O2 … HLK) -L >(lift_inv_O2 … HTU) -T //
(* Main properties **********************************************************)
-theorem fquq_fquqa: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\83â\8a\83⸮ ⦃G2, L2, T2⦄.
+theorem fquq_fquqa: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\90â\8a\90⸮ ⦃G2, L2, T2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
/2 width=3 by fquqa_drop, fqu_lref_O, fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, or_introl/
qed.
(* Main inversion properties ************************************************)
-theorem fquqa_inv_fquq: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83â\8a\83⸮ â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄.
+theorem fquqa_inv_fquq: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90â\8a\90⸮ â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H /2 width=1 by fqu_fquq/
* #H1 #H2 #H3 destruct //
qed-.
(* Advanced inversion lemmas ************************************************)
-lemma fquq_inv_gen: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2).
+lemma fquq_inv_gen: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
+ â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2).
#G1 #G2 #L1 #L2 #T1 #T2 #H elim (fquq_fquqa … H) -H [| * ]
/2 width=1 by or_introl/
qed-.
(* LAZY SN POINTWISE EXTENSION OF A CONTEXT-SENSITIVE REALTION FOR TERMS ****)
-inductive llpx_sn (R:relation3 lenv term term): relation4 ynat term lenv lenv ≝
+inductive llpx_sn (R:relation4 bind2 lenv term term): relation4 ynat term lenv lenv ≝
| llpx_sn_sort: ∀L1,L2,d,k. |L1| = |L2| → llpx_sn R d (⋆k) L1 L2
| llpx_sn_skip: ∀L1,L2,d,i. |L1| = |L2| → yinj i < d → llpx_sn R d (#i) L1 L2
| llpx_sn_lref: ∀I,L1,L2,K1,K2,V1,V2,d,i. d ≤ yinj i →
⇩[i] L1 ≡ K1.ⓑ{I}V1 → ⇩[i] L2 ≡ K2.ⓑ{I}V2 →
- llpx_sn R (yinj 0) V1 K1 K2 → R K1 V1 V2 → llpx_sn R d (#i) L1 L2
+ llpx_sn R (yinj 0) V1 K1 K2 → R I K1 V1 V2 → llpx_sn R d (#i) L1 L2
| llpx_sn_free: ∀L1,L2,d,i. |L1| ≤ i → |L2| ≤ i → |L1| = |L2| → llpx_sn R d (#i) L1 L2
| llpx_sn_gref: ∀L1,L2,d,p. |L1| = |L2| → llpx_sn R d (§p) L1 L2
| llpx_sn_bind: ∀a,I,L1,L2,V,T,d.
| ∃∃I,K1,K2,V1,V2. ⇩[i] L1 ≡ K1.ⓑ{I}V1 &
⇩[i] L2 ≡ K2.ⓑ{I}V2 &
llpx_sn R (yinj 0) V1 K1 K2 &
- R K1 V1 V2 & d ≤ yinj i.
+ R I K1 V1 V2 & d ≤ yinj i.
#R #L1 #L2 #X #d * -L1 -L2 -X -d
[ #L1 #L2 #d #k #_ #j #H destruct
| #L1 #L2 #d #i #_ #Hid #j #H destruct /2 width=1 by or3_intro1/
| ∃∃I,K1,K2,V1,V2. ⇩[i] L1 ≡ K1.ⓑ{I}V1 &
⇩[i] L2 ≡ K2.ⓑ{I}V2 &
llpx_sn R (yinj 0) V1 K1 K2 &
- R K1 V1 V2 & d ≤ yinj i.
+ R I K1 V1 V2 & d ≤ yinj i.
/2 width=3 by llpx_sn_fwd_lref_aux/ qed-.
lemma llpx_sn_fwd_bind_sn: ∀R,a,I,L1,L2,V,T,d. llpx_sn R d (ⓑ{a,I}V.T) L1 L2 →
(* Basic_properties *********************************************************)
-lemma llpx_sn_refl: ∀R. (∀L. reflexive … (R L)) → ∀T,L,d. llpx_sn R d T L L.
+lemma llpx_sn_refl: ∀R. (∀I,L. reflexive … (R I L)) → ∀T,L,d. llpx_sn R d T L L.
#R #HR #T #L @(f2_ind … rfw … L T) -L -T
#n #IH #L * * /3 width=1 by llpx_sn_sort, llpx_sn_gref, llpx_sn_bind, llpx_sn_flat/
#i #Hn elim (lt_or_ge i (|L|)) /2 width=1 by llpx_sn_free/
llpx_sn R 0 (ⓑ{a,I}V.T) L1 L2.
/3 width=3 by llpx_sn_ge, llpx_sn_bind/ qed-.
-lemma llpx_sn_co: ∀R1,R2. (∀L,T1,T2. R1 L T1 T2 → R2 L T1 T2) →
+lemma llpx_sn_co: ∀R1,R2. (∀I,L,T1,T2. R1 I L T1 T2 → R2 I L T1 T2) →
∀L1,L2,T,d. llpx_sn R1 d T L1 L2 → llpx_sn R2 d T L1 L2.
#R1 #R2 #HR12 #L1 #L2 #T #d #H elim H -L1 -L2 -T -d
/3 width=9 by llpx_sn_sort, llpx_sn_skip, llpx_sn_lref, llpx_sn_free, llpx_sn_gref, llpx_sn_bind, llpx_sn_flat/
(* LAZY SN POINTWISE EXTENSION OF A CONTEXT-SENSITIVE REALTION FOR TERMS ****)
(* alternative definition of llpx_sn *)
-inductive llpx_sn_alt (R:relation3 lenv term term): relation4 ynat term lenv lenv ≝
+inductive llpx_sn_alt (R:relation4 bind2 lenv term term): relation4 ynat term lenv lenv ≝
| llpx_sn_alt_intro: ∀L1,L2,T,d.
(∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) →
- ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ R K1 V1 V2
+ ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ R I1 K1 V1 V2
) →
(∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) →
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → llpx_sn_alt R 0 V1 K1 K2
lemma llpx_sn_alt_intro_alt: ∀R,L1,L2,T,d. |L1| = |L2| →
(∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) →
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn_alt R 0 V1 K1 K2
+ ∧∧ I1 = I2 & R I1 K1 V1 V2 & llpx_sn_alt R 0 V1 K1 K2
) → llpx_sn_alt R d T L1 L2.
#R #L1 #L2 #T #d #HL12 #IH @llpx_sn_alt_intro // -HL12
#I1 #I2 #K1 #K2 #V1 #V2 #i #Hid #HnT #HLK1 #HLK2
(∀L1,L2,T,d. |L1| = |L2| → (
∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) →
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn_alt R 0 V1 K1 K2 & S 0 V1 K1 K2
+ ∧∧ I1 = I2 & R I1 K1 V1 V2 & llpx_sn_alt R 0 V1 K1 K2 & S 0 V1 K1 K2
) → S d T L1 L2) →
∀L1,L2,T,d. llpx_sn_alt R d T L1 L2 → S d T L1 L2.
#R #S #IH #L1 #L2 #T #d #H elim H -L1 -L2 -T -d
|L1| = |L2| ∧
∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) →
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn_alt R 0 V1 K1 K2.
+ ∧∧ I1 = I2 & R I1 K1 V1 V2 & llpx_sn_alt R 0 V1 K1 K2.
#R #L1 #L2 #T #d #H @(llpx_sn_alt_ind_alt … H) -L1 -L2 -T -d
#L1 #L2 #T #d #HL12 #IH @conj // -HL12
#I1 #I2 #K1 #K2 #V1 #V2 #i #Hid #HnT #HLK1 #HLK2
| ∃∃I,K1,K2,V1,V2. ⇩[i] L1 ≡ K1.ⓑ{I}V1 &
⇩[i] L2 ≡ K2.ⓑ{I}V2 &
llpx_sn_alt R (yinj 0) V1 K1 K2 &
- R K1 V1 V2 & d ≤ yinj i.
+ R I K1 V1 V2 & d ≤ yinj i.
#R #L1 #L2 #d #i #H elim (llpx_sn_alt_inv_alt … H) -H
#HL12 #IH elim (lt_or_ge i (|L1|)) /3 width=1 by or3_intro0, conj/
elim (ylt_split i d) /3 width=1 by or3_intro1/
lemma llpx_sn_alt_lref: ∀R,I,L1,L2,K1,K2,V1,V2,d,i. d ≤ yinj i →
⇩[i] L1 ≡ K1.ⓑ{I}V1 → ⇩[i] L2 ≡ K2.ⓑ{I}V2 →
- llpx_sn_alt R 0 V1 K1 K2 → R K1 V1 V2 →
+ llpx_sn_alt R 0 V1 K1 K2 → R I K1 V1 V2 →
llpx_sn_alt R d (#i) L1 L2.
#R #I #L1 #L2 #K1 #K2 #V1 #V2 #d #i #Hdi #HLK1 #HLK2 #HK12 #HV12 @llpx_sn_alt_intro_alt
[ lapply (llpx_sn_alt_fwd_length … HK12) -HK12 #HK12
lemma llpx_sn_intro_alt: ∀R,L1,L2,T,d. |L1| = |L2| →
(∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) →
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn R 0 V1 K1 K2
+ ∧∧ I1 = I2 & R I1 K1 V1 V2 & llpx_sn R 0 V1 K1 K2
) → llpx_sn R d T L1 L2.
#R #L1 #L2 #T #d #HL12 #IH @llpx_sn_alt_inv_lpx_sn
@llpx_sn_alt_intro_alt // -HL12
(∀L1,L2,T,d. |L1| = |L2| → (
∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) →
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn R 0 V1 K1 K2 & S 0 V1 K1 K2
+ ∧∧ I1 = I2 & R I1 K1 V1 V2 & llpx_sn R 0 V1 K1 K2 & S 0 V1 K1 K2
) → S d T L1 L2) →
∀L1,L2,T,d. llpx_sn R d T L1 L2 → S d T L1 L2.
#R #S #IH1 #L1 #L2 #T #d #H lapply (llpx_sn_lpx_sn_alt … H) -H
|L1| = |L2| ∧
∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) →
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn R 0 V1 K1 K2.
+ ∧∧ I1 = I2 & R I1 K1 V1 V2 & llpx_sn R 0 V1 K1 K2.
#R #L1 #L2 #T #d #H lapply (llpx_sn_lpx_sn_alt … H) -H
#H elim (llpx_sn_alt_inv_alt … H) -H
#HL12 #IH @conj //
∀I,K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 →
i < d ∨
∃∃K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 & llpx_sn R 0 V1 K1 K2 &
- R K1 V1 V2 & d ≤ i.
+ R I K1 V1 V2 & d ≤ i.
#R #L1 #L2 #d #i #H #I #K2 #V2 #HLK2 elim (llpx_sn_fwd_lref … H) -H [ * || * ]
[ #_ #H elim (lt_refl_false i)
lapply (ldrop_fwd_length_lt2 … HLK2) -HLK2
∀I,K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 →
i < d ∨
∃∃K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 & llpx_sn R 0 V1 K1 K2 &
- R K1 V1 V2 & d ≤ i.
+ R I K1 V1 V2 & d ≤ i.
#R #L1 #L2 #d #i #H #I #K1 #V1 #HLK1 elim (llpx_sn_fwd_lref … H) -H [ * || * ]
[ #H #_ elim (lt_refl_false i)
lapply (ldrop_fwd_length_lt2 … HLK1) -HLK1
lemma llpx_sn_inv_lref_ge_dx: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → d ≤ i →
∀I,K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 →
∃∃K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 &
- llpx_sn R 0 V1 K1 K2 & R K1 V1 V2.
+ llpx_sn R 0 V1 K1 K2 & R I K1 V1 V2.
#R #L1 #L2 #d #i #H #Hdi #I #K2 #V2 #HLK2 elim (llpx_sn_fwd_lref_dx … H … HLK2) -L2
[ #H elim (ylt_yle_false … H Hdi)
| * /2 width=5 by ex3_2_intro/
lemma llpx_sn_inv_lref_ge_sn: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → d ≤ i →
∀I,K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 →
∃∃K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 &
- llpx_sn R 0 V1 K1 K2 & R K1 V1 V2.
+ llpx_sn R 0 V1 K1 K2 & R I K1 V1 V2.
#R #L1 #L2 #d #i #H #Hdi #I #K1 #V1 #HLK1 elim (llpx_sn_fwd_lref_sn … H … HLK1) -L1
[ #H elim (ylt_yle_false … H Hdi)
| * /2 width=5 by ex3_2_intro/
lemma llpx_sn_inv_lref_ge_bi: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → d ≤ i →
∀I1,I2,K1,K2,V1,V2.
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- ∧∧ I1 = I2 & llpx_sn R 0 V1 K1 K2 & R K1 V1 V2.
+ ∧∧ I1 = I2 & llpx_sn R 0 V1 K1 K2 & R I1 K1 V1 V2.
#R #L1 #L2 #d #i #HL12 #Hdi #I1 #I2 #K1 #K2 #V1 #V2 #HLK1 #HLK2
elim (llpx_sn_inv_lref_ge_sn … HL12 … HLK1) // -L1 -d
#J #Y #HY lapply (ldrop_mono … HY … HLK2) -L2 -i #H destruct /2 width=1 by and3_intro/
fact llpx_sn_inv_S_aux: ∀R,L1,L2,T,d0. llpx_sn R d0 T L1 L2 → ∀d. d0 = d + 1 →
∀K1,K2,I,V1,V2. ⇩[d] L1 ≡ K1.ⓑ{I}V1 → ⇩[d] L2 ≡ K2.ⓑ{I}V2 →
- llpx_sn R 0 V1 K1 K2 → R K1 V1 V2 → llpx_sn R d T L1 L2.
+ llpx_sn R 0 V1 K1 K2 → R I K1 V1 V2 → llpx_sn R d T L1 L2.
#R #L1 #L2 #T #d0 #H elim H -L1 -L2 -T -d0
/2 width=1 by llpx_sn_gref, llpx_sn_free, llpx_sn_sort/
[ #L1 #L2 #d0 #i #HL12 #Hid #d #H #K1 #K2 #I #V1 #V2 #HLK1 #HLK2 #HK12 #HV12 destruct
lemma llpx_sn_inv_S: ∀R,L1,L2,T,d. llpx_sn R (d + 1) T L1 L2 →
∀K1,K2,I,V1,V2. ⇩[d] L1 ≡ K1.ⓑ{I}V1 → ⇩[d] L2 ≡ K2.ⓑ{I}V2 →
- llpx_sn R 0 V1 K1 K2 → R K1 V1 V2 → llpx_sn R d T L1 L2.
+ llpx_sn R 0 V1 K1 K2 → R I K1 V1 V2 → llpx_sn R d T L1 L2.
/2 width=9 by llpx_sn_inv_S_aux/ qed-.
-lemma llpx_sn_inv_bind_O: ∀R. (∀L. reflexive … (R L)) →
+lemma llpx_sn_inv_bind_O: ∀R. (∀I,L. reflexive … (R I L)) →
∀a,I,L1,L2,V,T. llpx_sn R 0 (ⓑ{a,I}V.T) L1 L2 →
llpx_sn R 0 V L1 L2 ∧ llpx_sn R 0 T (L1.ⓑ{I}V) (L2.ⓑ{I}V).
#R #HR #a #I #L1 #L2 #V #T #H elim (llpx_sn_inv_bind … H) -H
(* More advanced forward lemmas *********************************************)
-lemma llpx_sn_fwd_bind_O_dx: ∀R. (∀L. reflexive … (R L)) →
+lemma llpx_sn_fwd_bind_O_dx: ∀R. (∀I,L. reflexive … (R I L)) →
∀a,I,L1,L2,V,T. llpx_sn R 0 (ⓑ{a,I}V.T) L1 L2 →
llpx_sn R 0 T (L1.ⓑ{I}V) (L2.ⓑ{I}V).
#R #HR #a #I #L1 #L2 #V #T #H elim (llpx_sn_inv_bind_O … H) -H //
(* Advanced properties ******************************************************)
lemma llpx_sn_bind_repl_O: ∀R,I,L1,L2,V1,V2,T. llpx_sn R 0 T (L1.ⓑ{I}V1) (L2.ⓑ{I}V2) →
- ∀J,W1,W2. llpx_sn R 0 W1 L1 L2 → R L1 W1 W2 → llpx_sn R 0 T (L1.ⓑ{J}W1) (L2.ⓑ{J}W2).
+ ∀J,W1,W2. llpx_sn R 0 W1 L1 L2 → R J L1 W1 W2 → llpx_sn R 0 T (L1.ⓑ{J}W1) (L2.ⓑ{J}W2).
/3 width=9 by llpx_sn_bind_repl_SO, llpx_sn_inv_S/ qed-.
-lemma llpx_sn_dec: ∀R. (∀L,T1,T2. Decidable (R L T1 T2)) →
+lemma llpx_sn_dec: ∀R. (∀I,L,T1,T2. Decidable (R I L T1 T2)) →
∀T,L1,L2,d. Decidable (llpx_sn R d T L1 L2).
#R #HR #T #L1 @(f2_ind … rfw … L1 T) -L1 -T
#n #IH #L1 * *
elim (ldrop_O1_lt … HiL2) #I2 #K2 #V2 #HLK2
elim (ldrop_O1_lt … HiL1) #I1 #K1 #V1 #HLK1
elim (eq_bind2_dec I2 I1)
- [ #H2 elim (HR K1 V1 V2) -HR
+ [ #H2 elim (HR I1 K1 V1 V2) -HR
[ #H3 elim (IH K1 V1 … K2 0) destruct
/3 width=9 by llpx_sn_lref, ldrop_fwd_rfw, or_introl/
]
(* Properties on relocation *************************************************)
-lemma llpx_sn_lift_le: ∀R. l_liftable R →
+lemma llpx_sn_lift_le: ∀R. (∀I. l_liftable (R I)) →
∀K1,K2,T,d0. llpx_sn R d0 T K1 K2 →
∀L1,L2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 →
∀U. ⇧[d, e] T ≡ U → d0 ≤ d → llpx_sn R d0 U L1 L2.
(* Inversion lemmas on relocation *******************************************)
-lemma llpx_sn_inv_lift_le: ∀R. l_deliftable_sn R →
+lemma llpx_sn_inv_lift_le: ∀R. (∀I. l_deliftable_sn (R I)) →
∀L1,L2,U,d0. llpx_sn R d0 U L1 L2 →
∀K1,K2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 →
∀T. ⇧[d, e] T ≡ U → d0 ≤ d → llpx_sn R d0 T K1 K2.
(* Inversion lemmas on negated lazy pointwise extension *********************)
-lemma nllpx_sn_inv_bind: ∀R. (∀L,T1,T2. Decidable (R L T1 T2)) →
+lemma nllpx_sn_inv_bind: ∀R. (∀I,L,T1,T2. Decidable (R I L T1 T2)) →
∀a,I,L1,L2,V,T,d. (llpx_sn R d (ⓑ{a,I}V.T) L1 L2 → ⊥) →
(llpx_sn R d V L1 L2 → ⊥) ∨ (llpx_sn R (⫯d) T (L1.ⓑ{I}V) (L2.ⓑ{I}V) → ⊥).
#R #HR #a #I #L1 #L2 #V #T #d #H elim (llpx_sn_dec … HR V L1 L2 d)
/4 width=1 by llpx_sn_bind, or_intror, or_introl/
qed-.
-lemma nllpx_sn_inv_flat: ∀R. (∀L,T1,T2. Decidable (R L T1 T2)) →
+lemma nllpx_sn_inv_flat: ∀R. (∀I,L,T1,T2. Decidable (R I L T1 T2)) →
∀I,L1,L2,V,T,d. (llpx_sn R d (ⓕ{I}V.T) L1 L2 → ⊥) →
(llpx_sn R d V L1 L2 → ⊥) ∨ (llpx_sn R d T L1 L2 → ⊥).
#R #HR #I #L1 #L2 #V #T #d #H elim (llpx_sn_dec … HR V L1 L2 d)
/4 width=1 by llpx_sn_flat, or_intror, or_introl/
qed-.
-lemma nllpx_sn_inv_bind_O: ∀R. (∀L,T1,T2. Decidable (R L T1 T2)) →
+lemma nllpx_sn_inv_bind_O: ∀R. (∀I,L,T1,T2. Decidable (R I L T1 T2)) →
∀a,I,L1,L2,V,T. (llpx_sn R 0 (ⓑ{a,I}V.T) L1 L2 → ⊥) →
(llpx_sn R 0 V L1 L2 → ⊥) ∨ (llpx_sn R 0 T (L1.ⓑ{I}V) (L2.ⓑ{I}V) → ⊥).
#R #HR #a #I #L1 #L2 #V #T #H elim (llpx_sn_dec … HR V L1 L2 0)
(* Properties on pointwise extensions ***************************************)
-lemma lpx_sn_llpx_sn: ∀R. (∀L. reflexive … (R L)) →
+lemma lpx_sn_llpx_sn: ∀R. (∀I,L. reflexive … (R I L)) →
∀T,L1,L2,d. lpx_sn R L1 L2 → llpx_sn R d T L1 L2.
#R #HR #T #L1 @(f2_ind … rfw … L1 T) -L1 -T
#n #IH #L1 * *
(* Properties about transitive closure **************************************)
-lemma llpx_sn_TC_pair_dx: ∀R. (∀L. reflexive … (R L)) →
- ∀I,L,V1,V2,T. LTC … R L V1 V2 →
+lemma llpx_sn_TC_pair_dx: ∀R. (∀I,L. reflexive … (R I L)) →
+ ∀I,L,V1,V2,T. LTC … (R I) L V1 V2 →
LTC … (llpx_sn R 0) T (L.ⓑ{I}V1) (L.ⓑ{I}V2).
#R #HR #I #L #V1 #V2 #T #H @(TC_star_ind … V2 H) -V2
/4 width=9 by llpx_sn_bind_repl_O, llpx_sn_refl, step, inj/
(* SN POINTWISE EXTENSION OF A CONTEXT-SENSITIVE REALTION FOR TERMS *********)
-inductive lpx_sn (R:lenv→relation term): relation lenv ≝
+inductive lpx_sn (R:relation4 bind2 lenv term term): relation lenv ≝
| lpx_sn_atom: lpx_sn R (⋆) (⋆)
| lpx_sn_pair: ∀I,K1,K2,V1,V2.
- lpx_sn R K1 K2 → R K1 V1 V2 →
- lpx_sn R (K1. ⓑ{I} V1) (K2. ⓑ{I} V2)
+ lpx_sn R K1 K2 → R I K1 V1 V2 →
+ lpx_sn R (K1.ⓑ{I}V1) (K2.ⓑ{I}V2)
.
(* Basic properties *********************************************************)
-lemma lpx_sn_refl: ∀R. (∀L. reflexive ? (R L)) → reflexive … (lpx_sn R).
+lemma lpx_sn_refl: ∀R. (∀I,L. reflexive ? (R I L)) → reflexive … (lpx_sn R).
#R #HR #L elim L -L /2 width=1 by lpx_sn_atom, lpx_sn_pair/
qed-.
lemma lpx_sn_inv_atom1: ∀R,L2. lpx_sn R (⋆) L2 → L2 = ⋆.
/2 width=4 by lpx_sn_inv_atom1_aux/ qed-.
-fact lpx_sn_inv_pair1_aux: ∀R,L1,L2. lpx_sn R L1 L2 → ∀I,K1,V1. L1 = K1. ⓑ{I} V1 →
- ∃∃K2,V2. lpx_sn R K1 K2 & R K1 V1 V2 & L2 = K2. ⓑ{I} V2.
+fact lpx_sn_inv_pair1_aux: ∀R,L1,L2. lpx_sn R L1 L2 → ∀I,K1,V1. L1 = K1.ⓑ{I}V1 →
+ ∃∃K2,V2. lpx_sn R K1 K2 & R I K1 V1 V2 & L2 = K2.ⓑ{I}V2.
#R #L1 #L2 * -L1 -L2
[ #J #K1 #V1 #H destruct
| #I #K1 #K2 #V1 #V2 #HK12 #HV12 #J #L #W #H destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma lpx_sn_inv_pair1: ∀R,I,K1,V1,L2. lpx_sn R (K1. ⓑ{I} V1) L2 →
- ∃∃K2,V2. lpx_sn R K1 K2 & R K1 V1 V2 & L2 = K2. ⓑ{I} V2.
+lemma lpx_sn_inv_pair1: ∀R,I,K1,V1,L2. lpx_sn R (K1.ⓑ{I}V1) L2 →
+ ∃∃K2,V2. lpx_sn R K1 K2 & R I K1 V1 V2 & L2 = K2.ⓑ{I}V2.
/2 width=3 by lpx_sn_inv_pair1_aux/ qed-.
fact lpx_sn_inv_atom2_aux: ∀R,L1,L2. lpx_sn R L1 L2 → L2 = ⋆ → L1 = ⋆.
lemma lpx_sn_inv_atom2: ∀R,L1. lpx_sn R L1 (⋆) → L1 = ⋆.
/2 width=4 by lpx_sn_inv_atom2_aux/ qed-.
-fact lpx_sn_inv_pair2_aux: ∀R,L1,L2. lpx_sn R L1 L2 → ∀I,K2,V2. L2 = K2. ⓑ{I} V2 →
- ∃∃K1,V1. lpx_sn R K1 K2 & R K1 V1 V2 & L1 = K1. ⓑ{I} V1.
+fact lpx_sn_inv_pair2_aux: ∀R,L1,L2. lpx_sn R L1 L2 → ∀I,K2,V2. L2 = K2.ⓑ{I}V2 →
+ ∃∃K1,V1. lpx_sn R K1 K2 & R I K1 V1 V2 & L1 = K1.ⓑ{I}V1.
#R #L1 #L2 * -L1 -L2
[ #J #K2 #V2 #H destruct
| #I #K1 #K2 #V1 #V2 #HK12 #HV12 #J #K #W #H destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma lpx_sn_inv_pair2: ∀R,I,L1,K2,V2. lpx_sn R L1 (K2. ⓑ{I} V2) →
- ∃∃K1,V1. lpx_sn R K1 K2 & R K1 V1 V2 & L1 = K1. ⓑ{I} V1.
+lemma lpx_sn_inv_pair2: ∀R,I,L1,K2,V2. lpx_sn R L1 (K2.ⓑ{I}V2) →
+ ∃∃K1,V1. lpx_sn R K1 K2 & R I K1 V1 V2 & L1 = K1.ⓑ{I}V1.
/2 width=3 by lpx_sn_inv_pair2_aux/ qed-.
lemma lpx_sn_inv_pair: ∀R,I1,I2,L1,L2,V1,V2.
lpx_sn R (L1.ⓑ{I1}V1) (L2.ⓑ{I2}V2) →
- ∧∧ lpx_sn R L1 L2 & R L1 V1 V2 & I1 = I2.
+ ∧∧ lpx_sn R L1 L2 & R I1 L1 V1 V2 & I1 = I2.
#R #I1 #I2 #L1 #L2 #V1 #V2 #H elim (lpx_sn_inv_pair1 … H) -H
#L0 #V0 #HL10 #HV10 #H destruct /2 width=1 by and3_intro/
qed-.
(* SN POINTWISE EXTENSION OF A CONTEXT-SENSITIVE REALTION FOR TERMS *********)
(* alternative definition of lpx_sn *)
-definition lpx_sn_alt: relation3 lenv term term → relation lenv ≝
+definition lpx_sn_alt: relation4 bind2 lenv term term → relation lenv ≝
λR,L1,L2. |L1| = |L2| ∧
(∀I1,I2,K1,K2,V1,V2,i.
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- I1 = I2 ∧ R K1 V1 V2
+ I1 = I2 ∧ R I1 K1 V1 V2
).
(* Basic forward lemmas ******************************************************)
qed-.
lemma lpx_sn_alt_inv_pair1: ∀R,I,L2,K1,V1. lpx_sn_alt R (K1.ⓑ{I}V1) L2 →
- ∃∃K2,V2. lpx_sn_alt R K1 K2 & R K1 V1 V2 & L2 = K2.ⓑ{I}V2.
+ ∃∃K2,V2. lpx_sn_alt R K1 K2 & R I K1 V1 V2 & L2 = K2.ⓑ{I}V2.
#R #I1 #L2 #K1 #V1 #H elim H -H
#H #IH elim (length_inv_pos_sn … H) -H
#I2 #K2 #V2 #HK12 #H destruct
qed-.
lemma lpx_sn_alt_inv_pair2: ∀R,I,L1,K2,V2. lpx_sn_alt R L1 (K2.ⓑ{I}V2) →
- ∃∃K1,V1. lpx_sn_alt R K1 K2 & R K1 V1 V2 & L1 = K1.ⓑ{I}V1.
+ ∃∃K1,V1. lpx_sn_alt R K1 K2 & R I K1 V1 V2 & L1 = K1.ⓑ{I}V1.
#R #I2 #L1 #K2 #V2 #H elim H -H
#H #IH elim (length_inv_pos_dx … H) -H
#I1 #K1 #V1 #HK12 #H destruct
qed.
lemma lpx_sn_alt_pair: ∀R,I,L1,L2,V1,V2.
- lpx_sn_alt R L1 L2 → R L1 V1 V2 →
+ lpx_sn_alt R L1 L2 → R I L1 V1 V2 →
lpx_sn_alt R (L1.ⓑ{I}V1) (L2.ⓑ{I}V2).
#R #I #L1 #L2 #V1 #V2 #H #HV12 elim H -H
#HL12 #IH @conj normalize //
lemma lpx_sn_intro_alt: ∀R,L1,L2. |L1| = |L2| →
(∀I1,I2,K1,K2,V1,V2,i.
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- I1 = I2 ∧ R K1 V1 V2
+ I1 = I2 ∧ R I1 K1 V1 V2
) → lpx_sn R L1 L2.
/4 width=4 by lpx_sn_alt_inv_lpx_sn, conj/ qed.
|L1| = |L2| ∧
∀I1,I2,K1,K2,V1,V2,i.
⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 →
- I1 = I2 ∧ R K1 V1 V2.
+ I1 = I2 ∧ R I1 K1 V1 V2.
#R #L1 #L2 #H lapply (lpx_sn_lpx_sn_alt … H) -H
#H elim H -H /3 width=4 by conj/
qed-.
lemma lpx_sn_ldrop_conf: ∀R,L1,L2. lpx_sn R L1 L2 →
∀I,K1,V1,i. ⇩[i] L1 ≡ K1.ⓑ{I}V1 →
- ∃∃K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 & lpx_sn R K1 K2 & R K1 V1 V2.
+ ∃∃K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 & lpx_sn R K1 K2 & R I K1 V1 V2.
#R #L1 #L2 #H elim H -L1 -L2
[ #I0 #K0 #V0 #i #H elim (ldrop_inv_atom1 … H) -H #H destruct
| #I #K1 #K2 #V1 #V2 #HK12 #HV12 #IHK12 #I0 #K0 #V0 #i #H elim (ldrop_inv_O1_pair1 … H) * -H
lemma lpx_sn_ldrop_trans: ∀R,L1,L2. lpx_sn R L1 L2 →
∀I,K2,V2,i. ⇩[i] L2 ≡ K2.ⓑ{I}V2 →
- ∃∃K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 & lpx_sn R K1 K2 & R K1 V1 V2.
+ ∃∃K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 & lpx_sn R K1 K2 & R I K1 V1 V2.
#R #L1 #L2 #H elim H -L1 -L2
[ #I0 #K0 #V0 #i #H elim (ldrop_inv_atom1 … H) -H #H destruct
| #I #K1 #K2 #V1 #V2 #HK12 #HV12 #IHK12 #I0 #K0 #V0 #i #H elim (ldrop_inv_O1_pair1 … H) * -H
]
qed-.
-lemma lpx_sn_deliftable_dropable: ∀R. l_deliftable_sn R → dropable_sn (lpx_sn R).
+lemma lpx_sn_deliftable_dropable: ∀R. (∀I. l_deliftable_sn (R I)) → dropable_sn (lpx_sn R).
#R #HR #L1 #K1 #s #d #e #H elim H -L1 -K1 -d -e
[ #d #e #He #X #H >(lpx_sn_inv_atom1 … H) -H
/4 width=3 by ldrop_atom, lpx_sn_atom, ex2_intro/
]
qed-.
-lemma lpx_sn_liftable_dedropable: ∀R. (∀L. reflexive ? (R L)) →
- l_liftable R → dedropable_sn (lpx_sn R).
+lemma lpx_sn_liftable_dedropable: ∀R. (∀I,L. reflexive ? (R I L)) →
+ (∀I. l_liftable (R I)) → dedropable_sn (lpx_sn R).
#R #H1R #H2R #L1 #K1 #s #d #e #H elim H -L1 -K1 -d -e
[ #d #e #He #X #H >(lpx_sn_inv_atom1 … H) -H
/4 width=4 by ldrop_atom, lpx_sn_atom, ex3_intro/
(* SN POINTWISE EXTENSION OF A CONTEXT-SENSITIVE REALTION FOR TERMS *********)
-definition lpx_sn_confluent: relation (lenv→relation term) ≝ λR1,R2.
+definition lpx_sn_confluent: relation (relation3 lenv term term) ≝ λR1,R2.
∀L0,T0,T1. R1 L0 T0 T1 → ∀T2. R2 L0 T0 T2 →
- ∀L1. lpx_sn R1 L0 L1 → ∀L2. lpx_sn R2 L0 L2 →
+ ∀L1. lpx_sn (λ_.R1) L0 L1 → ∀L2. lpx_sn (λ_.R2) L0 L2 →
∃∃T. R2 L1 T1 T & R1 L2 T2 T.
-definition lpx_sn_transitive: relation (lenv→relation term) ≝ λR1,R2.
- ∀L1,T1,T. R1 L1 T1 T → ∀L2. lpx_sn R1 L1 L2 →
+definition lpx_sn_transitive: relation (relation3 lenv term term) ≝ λR1,R2.
+ ∀L1,T1,T. R1 L1 T1 T → ∀L2. lpx_sn (λ_.R1) L1 L2 →
∀T2. R2 L2 T T2 → R1 L1 T1 T2.
(* Main properties **********************************************************)
-theorem lpx_sn_trans: ∀R. lpx_sn_transitive R R → Transitive … (lpx_sn R).
+theorem lpx_sn_trans: ∀R. lpx_sn_transitive R R → Transitive … (lpx_sn (λ_.R)).
#R #HR #L1 #L #H elim H -L1 -L //
#I #L1 #L #V1 #V #HL1 #HV1 #IHL1 #X #H
-elim (lpx_sn_inv_pair1 … H) -H #L2 #V2 #HL2 #HV2 #H destruct /3 width=5/
+elim (lpx_sn_inv_pair1 … H) -H #L2 #V2 #HL2 #HV2 #H destruct /3 width=5 by lpx_sn_pair/
qed-.
theorem lpx_sn_conf: ∀R1,R2. lpx_sn_confluent R1 R2 →
- confluent2 … (lpx_sn R1) (lpx_sn R2).
+ confluent2 … (lpx_sn (λ_.R1)) (lpx_sn (λ_.R2)).
#R1 #R2 #HR12 #L0 @(f_ind … length … L0) -L0 #n #IH *
[ #_ #X1 #H1 #X2 #H2 -n
>(lpx_sn_inv_atom1 … H1) -X1
- >(lpx_sn_inv_atom1 … H2) -X2 /2 width=3/
+ >(lpx_sn_inv_atom1 … H2) -X2 /2 width=3 by lpx_sn_atom, ex2_intro/
| #L0 #I #V0 #Hn #X1 #H1 #X2 #H2 destruct
elim (lpx_sn_inv_pair1 … H1) -H1 #L1 #V1 #HL01 #HV01 #H destruct
elim (lpx_sn_inv_pair1 … H2) -H2 #L2 #V2 #HL02 #HV02 #H destruct
elim (IH … HL01 … HL02) -IH normalize // #L #HL1 #HL2
- elim (HR12 … HV01 … HV02 … HL01 … HL02) -L0 -V0 /3 width=5/
+ elim (HR12 … HV01 … HV02 … HL01 … HL02) -L0 -V0 /3 width=5 by lpx_sn_pair, ex2_intro/
]
qed-.
(* Properties on transitive_closure *****************************************)
-lemma TC_lpx_sn_pair_refl: ∀R. (∀L. reflexive … (R L)) →
+lemma TC_lpx_sn_pair_refl: ∀R. (∀I,L. reflexive … (R I L)) →
∀L1,L2. TC … (lpx_sn R) L1 L2 →
- ∀I,V. TC … (lpx_sn R) (L1. ⓑ{I} V) (L2. ⓑ{I} V).
+ ∀I,V. TC … (lpx_sn R) (L1.ⓑ{I}V) (L2. ⓑ{I}V).
#R #HR #L1 #L2 #H @(TC_star_ind … L2 H) -L2
[ /2 width=1 by lpx_sn_refl/
| /3 width=1 by TC_reflexive, lpx_sn_refl/
]
qed-.
-lemma TC_lpx_sn_pair: ∀R. (∀L. reflexive … (R L)) →
+lemma TC_lpx_sn_pair: ∀R. (∀I,L. reflexive … (R I L)) →
∀I,L1,L2. TC … (lpx_sn R) L1 L2 →
- ∀V1,V2. LTC … R L1 V1 V2 →
- TC … (lpx_sn R) (L1. ⓑ{I} V1) (L2. ⓑ{I} V2).
+ ∀V1,V2. LTC … (R I) L1 V1 V2 →
+ TC … (lpx_sn R) (L1.ⓑ{I}V1) (L2. ⓑ{I}V2).
#R #HR #I #L1 #L2 #HL12 #V1 #V2 #H @(TC_star_ind_dx … V1 H) -V1 //
[ /2 width=1 by TC_lpx_sn_pair_refl/
| /4 width=3 by TC_strap, lpx_sn_pair, lpx_sn_refl/
]
qed-.
-lemma lpx_sn_LTC_TC_lpx_sn: ∀R. (∀L. reflexive … (R L)) →
- ∀L1,L2. lpx_sn (LTC … R) L1 L2 →
+lemma lpx_sn_LTC_TC_lpx_sn: ∀R. (∀I,L. reflexive … (R I L)) →
+ ∀L1,L2. lpx_sn (λI.LTC … (R I)) L1 L2 →
TC … (lpx_sn R) L1 L2.
#R #HR #L1 #L2 #H elim H -L1 -L2
/2 width=1 by TC_lpx_sn_pair, lpx_sn_atom, inj/
]
qed-.
-lemma TC_lpx_sn_inv_pair2: ∀R. s_rs_transitive … R (λ_. lpx_sn R) →
+lemma TC_lpx_sn_inv_pair2: ∀R. (∀I.s_rs_transitive … (R I) (λ_.lpx_sn R)) →
∀I,L1,K2,V2. TC … (lpx_sn R) L1 (K2.ⓑ{I}V2) →
- ∃∃K1,V1. TC … (lpx_sn R) K1 K2 & LTC … R K1 V1 V2 & L1 = K1. ⓑ{I} V1.
+ ∃∃K1,V1. TC … (lpx_sn R) K1 K2 & LTC … (R I) K1 V1 V2 & L1 = K1.ⓑ{I}V1.
#R #HR #I #L1 #K2 #V2 #H @(TC_ind_dx … L1 H) -L1
[ #L1 #H elim (lpx_sn_inv_pair2 … H) -H /3 width=5 by inj, ex3_2_intro/
| #L1 #L #HL1 #_ * #K #V #HK2 #HV2 #H destruct
]
qed-.
-lemma TC_lpx_sn_ind: ∀R. s_rs_transitive … R (λ_. lpx_sn R) →
+lemma TC_lpx_sn_ind: ∀R. (∀I.s_rs_transitive … (R I) (λ_.lpx_sn R)) →
∀S:relation lenv.
S (⋆) (⋆) → (
∀I,K1,K2,V1,V2.
- TC … (lpx_sn R) K1 K2 → LTC … R K1 V1 V2 →
+ TC … (lpx_sn R) K1 K2 → LTC … (R I) K1 V1 V2 →
S K1 K2 → S (K1.ⓑ{I}V1) (K2.ⓑ{I}V2)
) →
∀L2,L1. TC … (lpx_sn R) L1 L2 → S L1 L2.
]
qed-.
-fact TC_lpx_sn_inv_pair1_aux: ∀R. s_rs_transitive … R (λ_. lpx_sn R) →
+fact TC_lpx_sn_inv_pair1_aux: ∀R. (∀I.s_rs_transitive … (R I) (λ_.lpx_sn R)) →
∀L1,L2. TC … (lpx_sn R) L1 L2 →
∀I,K1,V1. L1 = K1.ⓑ{I}V1 →
- ∃∃K2,V2. TC … (lpx_sn R) K1 K2 & LTC … R K1 V1 V2 & L2 = K2. ⓑ{I} V2.
+ ∃∃K2,V2. TC … (lpx_sn R) K1 K2 & LTC … (R I) K1 V1 V2 & L2 = K2. ⓑ{I} V2.
#R #HR #L1 #L2 #H @(TC_lpx_sn_ind … H) // -HR -L1 -L2
[ #J #K #W #H destruct
| #I #L1 #L2 #V1 #V2 #HL12 #HV12 #_ #J #K #W #H destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma TC_lpx_sn_inv_pair1: ∀R. s_rs_transitive … R (λ_. lpx_sn R) →
+lemma TC_lpx_sn_inv_pair1: ∀R. (∀I.s_rs_transitive … (R I) (λ_.lpx_sn R)) →
∀I,K1,L2,V1. TC … (lpx_sn R) (K1.ⓑ{I}V1) L2 →
- ∃∃K2,V2. TC … (lpx_sn R) K1 K2 & LTC … R K1 V1 V2 & L2 = K2. ⓑ{I} V2.
+ ∃∃K2,V2. TC … (lpx_sn R) K1 K2 & LTC … (R I) K1 V1 V2 & L2 = K2. ⓑ{I} V2.
/2 width=3 by TC_lpx_sn_inv_pair1_aux/ qed-.
-lemma TC_lpx_sn_inv_lpx_sn_LTC: ∀R. s_rs_transitive … R (λ_. lpx_sn R) →
+lemma TC_lpx_sn_inv_lpx_sn_LTC: ∀R. (∀I.s_rs_transitive … (R I) (λ_.lpx_sn R)) →
∀L1,L2. TC … (lpx_sn R) L1 L2 →
- lpx_sn (LTC … R) L1 L2.
+ lpx_sn (λI.LTC … (R I)) L1 L2.
/3 width=4 by TC_lpx_sn_ind, lpx_sn_pair/ qed-.
(* Forward lemmas on transitive closure *************************************)
(* Properties on supclosure *************************************************)
-lemma aaa_fqu_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
+lemma aaa_fqu_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
∀A1. ⦃G1, L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2, L2⦄ ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #T #A #H elim (aaa_inv_lref … H) -H
]
qed-.
-lemma aaa_fquq_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
+lemma aaa_fquq_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
∀A1. ⦃G1, L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2, L2⦄ ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim(fquq_inv_gen … H) -H /2 width=6 by aaa_fqu_conf/
* #H1 #H2 #H3 destruct /2 width=2 by ex_intro/
qed-.
-lemma aaa_fqup_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
+lemma aaa_fqup_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
∀A1. ⦃G1, L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2, L2⦄ ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
[2: #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #A #HA elim (IH1 … HA) -IH1 -A ]
/2 width=6 by aaa_fqu_conf/
qed-.
-lemma aaa_fqus_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
+lemma aaa_fqus_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
∀A1. ⦃G1, L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2, L2⦄ ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim(fqus_inv_gen … H) -H /2 width=6 by aaa_fqup_conf/
* #H1 #H2 #H3 destruct /2 width=2 by ex_intro/
(* Basic inversion lemmas ***************************************************)
-fact lsuba_inv_atom1_aux: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ\8a\91 L2 → L1 = ⋆ → L2 = ⋆.
+fact lsuba_inv_atom1_aux: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ«\83 L2 → L1 = ⋆ → L2 = ⋆.
#G #L1 #L2 * -L1 -L2
[ //
| #I #L1 #L2 #V #_ #H destruct
]
qed-.
-lemma lsuba_inv_atom1: â\88\80G,L2. G â\8a¢ â\8b\86 â\81\9dâ\8a\91 L2 → L2 = ⋆.
+lemma lsuba_inv_atom1: â\88\80G,L2. G â\8a¢ â\8b\86 â\81\9dâ«\83 L2 → L2 = ⋆.
/2 width=4 by lsuba_inv_atom1_aux/ qed-.
-fact lsuba_inv_pair1_aux: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ\8a\91 L2 → ∀I,K1,X. L1 = K1.ⓑ{I}X →
- (â\88\83â\88\83K2. G â\8a¢ K1 â\81\9dâ\8a\91 K2 & L2 = K2.ⓑ{I}X) ∨
+fact lsuba_inv_pair1_aux: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ«\83 L2 → ∀I,K1,X. L1 = K1.ⓑ{I}X →
+ (â\88\83â\88\83K2. G â\8a¢ K1 â\81\9dâ«\83 K2 & L2 = K2.ⓑ{I}X) ∨
∃∃K2,W,V,A. ⦃G, K1⦄ ⊢ ⓝW.V ⁝ A & ⦃G, K2⦄ ⊢ W ⁝ A &
- G â\8a¢ K1 â\81\9dâ\8a\91 K2 & I = Abbr & L2 = K2.ⓛW & X = ⓝW.V.
+ G â\8a¢ K1 â\81\9dâ«\83 K2 & I = Abbr & L2 = K2.ⓛW & X = ⓝW.V.
#G #L1 #L2 * -L1 -L2
[ #J #K1 #X #H destruct
| #I #L1 #L2 #V #HL12 #J #K1 #X #H destruct /3 width=3/
]
qed-.
-lemma lsuba_inv_pair1: â\88\80I,G,K1,L2,X. G â\8a¢ K1.â\93\91{I}X â\81\9dâ\8a\91 L2 →
- (â\88\83â\88\83K2. G â\8a¢ K1 â\81\9dâ\8a\91 K2 & L2 = K2.ⓑ{I}X) ∨
- â\88\83â\88\83K2,W,V,A. â¦\83G, K1â¦\84 â\8a¢ â\93\9dW.V â\81\9d A & â¦\83G, K2â¦\84 â\8a¢ W â\81\9d A & G â\8a¢ K1 â\81\9dâ\8a\91 K2 &
+lemma lsuba_inv_pair1: â\88\80I,G,K1,L2,X. G â\8a¢ K1.â\93\91{I}X â\81\9dâ«\83 L2 →
+ (â\88\83â\88\83K2. G â\8a¢ K1 â\81\9dâ«\83 K2 & L2 = K2.ⓑ{I}X) ∨
+ â\88\83â\88\83K2,W,V,A. â¦\83G, K1â¦\84 â\8a¢ â\93\9dW.V â\81\9d A & â¦\83G, K2â¦\84 â\8a¢ W â\81\9d A & G â\8a¢ K1 â\81\9dâ«\83 K2 &
I = Abbr & L2 = K2.ⓛW & X = ⓝW.V.
/2 width=3 by lsuba_inv_pair1_aux/ qed-.
-fact lsuba_inv_atom2_aux: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ\8a\91 L2 → L2 = ⋆ → L1 = ⋆.
+fact lsuba_inv_atom2_aux: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ«\83 L2 → L2 = ⋆ → L1 = ⋆.
#G #L1 #L2 * -L1 -L2
[ //
| #I #L1 #L2 #V #_ #H destruct
]
qed-.
-lemma lsubc_inv_atom2: â\88\80G,L1. G â\8a¢ L1 â\81\9dâ\8a\91 ⋆ → L1 = ⋆.
+lemma lsubc_inv_atom2: â\88\80G,L1. G â\8a¢ L1 â\81\9dâ«\83 ⋆ → L1 = ⋆.
/2 width=4 by lsuba_inv_atom2_aux/ qed-.
-fact lsuba_inv_pair2_aux: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ\8a\91 L2 → ∀I,K2,W. L2 = K2.ⓑ{I}W →
- (â\88\83â\88\83K1. G â\8a¢ K1 â\81\9dâ\8a\91 K2 & L1 = K1.ⓑ{I}W) ∨
+fact lsuba_inv_pair2_aux: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ«\83 L2 → ∀I,K2,W. L2 = K2.ⓑ{I}W →
+ (â\88\83â\88\83K1. G â\8a¢ K1 â\81\9dâ«\83 K2 & L1 = K1.ⓑ{I}W) ∨
∃∃K1,V,A. ⦃G, K1⦄ ⊢ ⓝW.V ⁝ A & ⦃G, K2⦄ ⊢ W ⁝ A &
- G â\8a¢ K1 â\81\9dâ\8a\91 K2 & I = Abst & L1 = K1.ⓓⓝW.V.
+ G â\8a¢ K1 â\81\9dâ«\83 K2 & I = Abst & L1 = K1.ⓓⓝW.V.
#G #L1 #L2 * -L1 -L2
[ #J #K2 #U #H destruct
| #I #L1 #L2 #V #HL12 #J #K2 #U #H destruct /3 width=3/
]
qed-.
-lemma lsuba_inv_pair2: â\88\80I,G,L1,K2,W. G â\8a¢ L1 â\81\9dâ\8a\91 K2.ⓑ{I}W →
- (â\88\83â\88\83K1. G â\8a¢ K1 â\81\9dâ\8a\91 K2 & L1 = K1.ⓑ{I}W) ∨
- â\88\83â\88\83K1,V,A. â¦\83G, K1â¦\84 â\8a¢ â\93\9dW.V â\81\9d A & â¦\83G, K2â¦\84 â\8a¢ W â\81\9d A & G â\8a¢ K1 â\81\9dâ\8a\91 K2 &
+lemma lsuba_inv_pair2: â\88\80I,G,L1,K2,W. G â\8a¢ L1 â\81\9dâ«\83 K2.ⓑ{I}W →
+ (â\88\83â\88\83K1. G â\8a¢ K1 â\81\9dâ«\83 K2 & L1 = K1.ⓑ{I}W) ∨
+ â\88\83â\88\83K1,V,A. â¦\83G, K1â¦\84 â\8a¢ â\93\9dW.V â\81\9d A & â¦\83G, K2â¦\84 â\8a¢ W â\81\9d A & G â\8a¢ K1 â\81\9dâ«\83 K2 &
I = Abst & L1 = K1.ⓓⓝW.V.
/2 width=3 by lsuba_inv_pair2_aux/ qed-.
(* Basic forward lemmas *****************************************************)
-lemma lsuba_fwd_lsubr: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ\8a\91 L2 â\86\92 L1 â\8a\91 L2.
+lemma lsuba_fwd_lsubr: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ«\83 L2 â\86\92 L1 â«\83 L2.
#G #L1 #L2 #H elim H -L1 -L2 // /2 width=1/
qed-.
(* Basic properties *********************************************************)
-lemma lsuba_refl: â\88\80G,L. G â\8a¢ L â\81\9dâ\8a\91 L.
+lemma lsuba_refl: â\88\80G,L. G â\8a¢ L â\81\9dâ«\83 L.
#G #L elim L -L // /2 width=1/
qed.
(* Properties concerning atomic arity assignment ****************************)
lemma lsuba_aaa_conf: ∀G,L1,V,A. ⦃G, L1⦄ ⊢ V ⁝ A →
- â\88\80L2. G â\8a¢ L1 â\81\9dâ\8a\91 L2 → ⦃G, L2⦄ ⊢ V ⁝ A.
+ â\88\80L2. G â\8a¢ L1 â\81\9dâ«\83 L2 → ⦃G, L2⦄ ⊢ V ⁝ A.
#G #L1 #V #A #H elim H -G -L1 -V -A
[ //
| #I #G #L1 #K1 #V #A #i #HLK1 #HV #IHV #L2 #HL12
qed-.
lemma lsuba_aaa_trans: ∀G,L2,V,A. ⦃G, L2⦄ ⊢ V ⁝ A →
- â\88\80L1. G â\8a¢ L1 â\81\9dâ\8a\91 L2 → ⦃G, L1⦄ ⊢ V ⁝ A.
+ â\88\80L1. G â\8a¢ L1 â\81\9dâ«\83 L2 → ⦃G, L1⦄ ⊢ V ⁝ A.
#G #L2 #V #A #H elim H -G -L2 -V -A
[ //
| #I #G #L2 #K2 #V #A #i #HLK2 #H1V #IHV #L1 #HL12
(* Properties concerning basic local environment slicing ********************)
(* Note: the constant 0 cannot be generalized *)
-lemma lsuba_ldrop_O1_conf: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ\8a\91 L2 → ∀K1,s,e. ⇩[s, 0, e] L1 ≡ K1 →
- â\88\83â\88\83K2. G â\8a¢ K1 â\81\9dâ\8a\91 K2 & ⇩[s, 0, e] L2 ≡ K2.
+lemma lsuba_ldrop_O1_conf: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ«\83 L2 → ∀K1,s,e. ⇩[s, 0, e] L1 ≡ K1 →
+ â\88\83â\88\83K2. G â\8a¢ K1 â\81\9dâ«\83 K2 & ⇩[s, 0, e] L2 ≡ K2.
#G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3/
| #I #L1 #L2 #V #_ #IHL12 #K1 #s #e #H
qed-.
(* Note: the constant 0 cannot be generalized *)
-lemma lsuba_ldrop_O1_trans: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ\8a\91 L2 → ∀K2,s,e. ⇩[s, 0, e] L2 ≡ K2 →
- â\88\83â\88\83K1. G â\8a¢ K1 â\81\9dâ\8a\91 K2 & ⇩[s, 0, e] L1 ≡ K1.
+lemma lsuba_ldrop_O1_trans: â\88\80G,L1,L2. G â\8a¢ L1 â\81\9dâ«\83 L2 → ∀K2,s,e. ⇩[s, 0, e] L2 ≡ K2 →
+ â\88\83â\88\83K1. G â\8a¢ K1 â\81\9dâ«\83 K2 & ⇩[s, 0, e] L1 ≡ K1.
#G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3/
| #I #L1 #L2 #V #_ #IHL12 #K2 #s #e #H
(* Main properties **********************************************************)
-theorem lsuba_trans: â\88\80G,L1,L. G â\8a¢ L1 â\81\9dâ\8a\91 L â\86\92 â\88\80L2. G â\8a¢ L â\81\9dâ\8a\91 L2 â\86\92 G â\8a¢ L1 â\81\9dâ\8a\91 L2.
+theorem lsuba_trans: â\88\80G,L1,L. G â\8a¢ L1 â\81\9dâ«\83 L â\86\92 â\88\80L2. G â\8a¢ L â\81\9dâ«\83 L2 â\86\92 G â\8a¢ L1 â\81\9dâ«\83 L2.
#G #L1 #L #H elim H -L1 -L
[ #X #H >(lsuba_inv_atom1 … H) -H //
| #I #L1 #L #Y #HL1 #IHL1 #X #H
(* Basic_forward lemmas *****************************************************)
-lemma lsubd_fwd_lsubr: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2 â\86\92 L1 â\8a\91 L2.
+lemma lsubd_fwd_lsubr: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ«\83[h, g] L2 â\86\92 L1 â«\83 L2.
#h #g #G #L1 #L2 #H elim H -L1 -L2 /2 width=1 by lsubr_bind, lsubr_abst/
qed-.
(* Basic inversion lemmas ***************************************************)
-fact lsubd_inv_atom1_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2 → L1 = ⋆ → L2 = ⋆.
+fact lsubd_inv_atom1_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ«\83[h, g] L2 → L1 = ⋆ → L2 = ⋆.
#h #g #G #L1 #L2 * -L1 -L2
[ //
| #I #L1 #L2 #V #_ #H destruct
]
qed-.
-lemma lsubd_inv_atom1: â\88\80h,g,G,L2. G â\8a¢ â\8b\86 â\96ªâ\8a\91[h, g] L2 → L2 = ⋆.
+lemma lsubd_inv_atom1: â\88\80h,g,G,L2. G â\8a¢ â\8b\86 â\96ªâ«\83[h, g] L2 → L2 = ⋆.
/2 width=6 by lsubd_inv_atom1_aux/ qed-.
-fact lsubd_inv_pair1_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2 →
+fact lsubd_inv_pair1_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ«\83[h, g] L2 →
∀I,K1,X. L1 = K1.ⓑ{I}X →
- (â\88\83â\88\83K2. G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 & L2 = K2.ⓑ{I}X) ∨
+ (â\88\83â\88\83K2. G â\8a¢ K1 â\96ªâ«\83[h, g] K2 & L2 = K2.ⓑ{I}X) ∨
∃∃K2,W,V,l. ⦃G, K1⦄ ⊢ V ▪[h, g] l+1 & ⦃G, K2⦄ ⊢ W ▪[h, g] l &
- G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 &
+ G â\8a¢ K1 â\96ªâ«\83[h, g] K2 &
I = Abbr & L2 = K2.ⓛW & X = ⓝW.V.
#h #g #G #L1 #L2 * -L1 -L2
[ #J #K1 #X #H destruct
]
qed-.
-lemma lsubd_inv_pair1: â\88\80h,g,I,G,K1,L2,X. G â\8a¢ K1.â\93\91{I}X â\96ªâ\8a\91[h, g] L2 →
- (â\88\83â\88\83K2. G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 & L2 = K2.ⓑ{I}X) ∨
+lemma lsubd_inv_pair1: â\88\80h,g,I,G,K1,L2,X. G â\8a¢ K1.â\93\91{I}X â\96ªâ«\83[h, g] L2 →
+ (â\88\83â\88\83K2. G â\8a¢ K1 â\96ªâ«\83[h, g] K2 & L2 = K2.ⓑ{I}X) ∨
∃∃K2,W,V,l. ⦃G, K1⦄ ⊢ V ▪[h, g] l+1 & ⦃G, K2⦄ ⊢ W ▪[h, g] l &
- G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 &
+ G â\8a¢ K1 â\96ªâ«\83[h, g] K2 &
I = Abbr & L2 = K2.ⓛW & X = ⓝW.V.
/2 width=3 by lsubd_inv_pair1_aux/ qed-.
-fact lsubd_inv_atom2_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2 → L2 = ⋆ → L1 = ⋆.
+fact lsubd_inv_atom2_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ«\83[h, g] L2 → L2 = ⋆ → L1 = ⋆.
#h #g #G #L1 #L2 * -L1 -L2
[ //
| #I #L1 #L2 #V #_ #H destruct
]
qed-.
-lemma lsubd_inv_atom2: â\88\80h,g,G,L1. G â\8a¢ L1 â\96ªâ\8a\91[h, g] ⋆ → L1 = ⋆.
+lemma lsubd_inv_atom2: â\88\80h,g,G,L1. G â\8a¢ L1 â\96ªâ«\83[h, g] ⋆ → L1 = ⋆.
/2 width=6 by lsubd_inv_atom2_aux/ qed-.
-fact lsubd_inv_pair2_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2 →
+fact lsubd_inv_pair2_aux: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ«\83[h, g] L2 →
∀I,K2,W. L2 = K2.ⓑ{I}W →
- (â\88\83â\88\83K1. G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 & L1 = K1.ⓑ{I}W) ∨
+ (â\88\83â\88\83K1. G â\8a¢ K1 â\96ªâ«\83[h, g] K2 & L1 = K1.ⓑ{I}W) ∨
∃∃K1,V,l. ⦃G, K1⦄ ⊢ V ▪[h, g] l+1 & ⦃G, K2⦄ ⊢ W ▪[h, g] l &
- G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 & I = Abst & L1 = K1. ⓓⓝW.V.
+ G â\8a¢ K1 â\96ªâ«\83[h, g] K2 & I = Abst & L1 = K1. ⓓⓝW.V.
#h #g #G #L1 #L2 * -L1 -L2
[ #J #K2 #U #H destruct
| #I #L1 #L2 #V #HL12 #J #K2 #U #H destruct /3 width=3 by ex2_intro, or_introl/
]
qed-.
-lemma lsubd_inv_pair2: â\88\80h,g,I,G,L1,K2,W. G â\8a¢ L1 â\96ªâ\8a\91[h, g] K2.ⓑ{I}W →
- (â\88\83â\88\83K1. G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 & L1 = K1.ⓑ{I}W) ∨
+lemma lsubd_inv_pair2: â\88\80h,g,I,G,L1,K2,W. G â\8a¢ L1 â\96ªâ«\83[h, g] K2.ⓑ{I}W →
+ (â\88\83â\88\83K1. G â\8a¢ K1 â\96ªâ«\83[h, g] K2 & L1 = K1.ⓑ{I}W) ∨
∃∃K1,V,l. ⦃G, K1⦄ ⊢ V ▪[h, g] l+1 & ⦃G, K2⦄ ⊢ W ▪[h, g] l &
- G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 & I = Abst & L1 = K1. ⓓⓝW.V.
+ G â\8a¢ K1 â\96ªâ«\83[h, g] K2 & I = Abst & L1 = K1. ⓓⓝW.V.
/2 width=3 by lsubd_inv_pair2_aux/ qed-.
(* Basic properties *********************************************************)
-lemma lsubd_refl: â\88\80h,g,G,L. G â\8a¢ L â\96ªâ\8a\91[h, g] L.
+lemma lsubd_refl: â\88\80h,g,G,L. G â\8a¢ L â\96ªâ«\83[h, g] L.
#h #g #G #L elim L -L /2 width=1 by lsubd_pair/
qed.
(* Note: the constant 0 cannot be generalized *)
-lemma lsubd_ldrop_O1_conf: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2 →
+lemma lsubd_ldrop_O1_conf: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ«\83[h, g] L2 →
∀K1,s,e. ⇩[s, 0, e] L1 ≡ K1 →
- â\88\83â\88\83K2. G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 & ⇩[s, 0, e] L2 ≡ K2.
+ â\88\83â\88\83K2. G â\8a¢ K1 â\96ªâ«\83[h, g] K2 & ⇩[s, 0, e] L2 ≡ K2.
#h #g #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #V #_ #IHL12 #K1 #s #e #H
qed-.
(* Note: the constant 0 cannot be generalized *)
-lemma lsubd_ldrop_O1_trans: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2 →
+lemma lsubd_ldrop_O1_trans: â\88\80h,g,G,L1,L2. G â\8a¢ L1 â\96ªâ«\83[h, g] L2 →
∀K2,s,e. ⇩[s, 0, e] L2 ≡ K2 →
- â\88\83â\88\83K1. G â\8a¢ K1 â\96ªâ\8a\91[h, g] K2 & ⇩[s, 0, e] L1 ≡ K1.
+ â\88\83â\88\83K1. G â\8a¢ K1 â\96ªâ«\83[h, g] K2 & ⇩[s, 0, e] L1 ≡ K1.
#h #g #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #V #_ #IHL12 #K2 #s #e #H
(* Properties on degree assignment ******************************************)
lemma lsubd_da_trans: ∀h,g,G,L2,T,l. ⦃G, L2⦄ ⊢ T ▪[h, g] l →
- â\88\80L1. G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2 → ⦃G, L1⦄ ⊢ T ▪[h, g] l.
+ â\88\80L1. G â\8a¢ L1 â\96ªâ«\83[h, g] L2 → ⦃G, L1⦄ ⊢ T ▪[h, g] l.
#h #g #G #L2 #T #l #H elim H -G -L2 -T -l
[ /2 width=1/
| #G #L2 #K2 #V #i #l #HLK2 #_ #IHV #L1 #HL12
qed-.
lemma lsubd_da_conf: ∀h,g,G,L1,T,l. ⦃G, L1⦄ ⊢ T ▪[h, g] l →
- â\88\80L2. G â\8a¢ L1 â\96ªâ\8a\91[h, g] L2 → ⦃G, L2⦄ ⊢ T ▪[h, g] l.
+ â\88\80L2. G â\8a¢ L1 â\96ªâ«\83[h, g] L2 → ⦃G, L2⦄ ⊢ T ▪[h, g] l.
#h #g #G #L1 #T #l #H elim H -G -L1 -T -l
[ /2 width=1/
| #G #L1 #K1 #V #i #l #HLK1 #HV #IHV #L2 #HL12
(* Basic properties *********************************************************)
-lemma lsubr_refl: â\88\80L. L â\8a\91 L.
+lemma lsubr_refl: â\88\80L. L â«\83 L.
#L elim L -L /2 width=1 by lsubr_sort, lsubr_bind/
qed.
(* Basic inversion lemmas ***************************************************)
-fact lsubr_inv_atom1_aux: â\88\80L1,L2. L1 â\8a\91 L2 → L1 = ⋆ → L2 = ⋆.
+fact lsubr_inv_atom1_aux: â\88\80L1,L2. L1 â«\83 L2 → L1 = ⋆ → L2 = ⋆.
#L1 #L2 * -L1 -L2 //
[ #I #L1 #L2 #V #_ #H destruct
| #L1 #L2 #V #W #_ #H destruct
]
qed-.
-lemma lsubr_inv_atom1: â\88\80L2. â\8b\86 â\8a\91 L2 → L2 = ⋆.
+lemma lsubr_inv_atom1: â\88\80L2. â\8b\86 â«\83 L2 → L2 = ⋆.
/2 width=3 by lsubr_inv_atom1_aux/ qed-.
-fact lsubr_inv_abst1_aux: â\88\80L1,L2. L1 â\8a\91 L2 → ∀K1,W. L1 = K1.ⓛW →
- L2 = â\8b\86 â\88¨ â\88\83â\88\83K2. K1 â\8a\91 K2 & L2 = K2.ⓛW.
+fact lsubr_inv_abst1_aux: â\88\80L1,L2. L1 â«\83 L2 → ∀K1,W. L1 = K1.ⓛW →
+ L2 = â\8b\86 â\88¨ â\88\83â\88\83K2. K1 â«\83 K2 & L2 = K2.ⓛW.
#L1 #L2 * -L1 -L2
[ #L #K1 #W #H destruct /2 width=1 by or_introl/
| #I #L1 #L2 #V #HL12 #K1 #W #H destruct /3 width=3 by ex2_intro, or_intror/
]
qed-.
-lemma lsubr_inv_abst1: â\88\80K1,L2,W. K1.â\93\9bW â\8a\91 L2 →
- L2 = â\8b\86 â\88¨ â\88\83â\88\83K2. K1 â\8a\91 K2 & L2 = K2.ⓛW.
+lemma lsubr_inv_abst1: â\88\80K1,L2,W. K1.â\93\9bW â«\83 L2 →
+ L2 = â\8b\86 â\88¨ â\88\83â\88\83K2. K1 â«\83 K2 & L2 = K2.ⓛW.
/2 width=3 by lsubr_inv_abst1_aux/ qed-.
-fact lsubr_inv_abbr2_aux: â\88\80L1,L2. L1 â\8a\91 L2 → ∀K2,W. L2 = K2.ⓓW →
- â\88\83â\88\83K1. K1 â\8a\91 K2 & L1 = K1.ⓓW.
+fact lsubr_inv_abbr2_aux: â\88\80L1,L2. L1 â«\83 L2 → ∀K2,W. L2 = K2.ⓓW →
+ â\88\83â\88\83K1. K1 â«\83 K2 & L1 = K1.ⓓW.
#L1 #L2 * -L1 -L2
[ #L #K2 #W #H destruct
| #I #L1 #L2 #V #HL12 #K2 #W #H destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma lsubr_inv_abbr2: â\88\80L1,K2,W. L1 â\8a\91 K2.ⓓW →
- â\88\83â\88\83K1. K1 â\8a\91 K2 & L1 = K1.ⓓW.
+lemma lsubr_inv_abbr2: â\88\80L1,K2,W. L1 â«\83 K2.ⓓW →
+ â\88\83â\88\83K1. K1 â«\83 K2 & L1 = K1.ⓓW.
/2 width=3 by lsubr_inv_abbr2_aux/ qed-.
(* Basic forward lemmas *****************************************************)
-lemma lsubr_fwd_length: â\88\80L1,L2. L1 â\8a\91 L2 → |L2| ≤ |L1|.
+lemma lsubr_fwd_length: â\88\80L1,L2. L1 â«\83 L2 → |L2| ≤ |L1|.
#L1 #L2 #H elim H -L1 -L2 /2 width=1 by monotonic_le_plus_l/
qed-.
-lemma lsubr_fwd_ldrop2_bind: â\88\80L1,L2. L1 â\8a\91 L2 →
+lemma lsubr_fwd_ldrop2_bind: â\88\80L1,L2. L1 â«\83 L2 →
∀I,K2,W,s,i. ⇩[s, 0, i] L2 ≡ K2.ⓑ{I}W →
- (â\88\83â\88\83K1. K1 â\8a\91 K2 & ⇩[s, 0, i] L1 ≡ K1.ⓑ{I}W) ∨
- â\88\83â\88\83K1,V. K1 â\8a\91 K2 & ⇩[s, 0, i] L1 ≡ K1.ⓓⓝW.V & I = Abst.
+ (â\88\83â\88\83K1. K1 â«\83 K2 & ⇩[s, 0, i] L1 ≡ K1.ⓑ{I}W) ∨
+ â\88\83â\88\83K1,V. K1 â«\83 K2 & ⇩[s, 0, i] L1 ≡ K1.ⓓⓝW.V & I = Abst.
#L1 #L2 #H elim H -L1 -L2
[ #L #I #K2 #W #s #i #H
elim (ldrop_inv_atom1 … H) -H #H destruct
]
qed-.
-lemma lsubr_fwd_ldrop2_abbr: â\88\80L1,L2. L1 â\8a\91 L2 →
+lemma lsubr_fwd_ldrop2_abbr: â\88\80L1,L2. L1 â«\83 L2 →
∀K2,V,s,i. ⇩[s, 0, i] L2 ≡ K2.ⓓV →
- â\88\83â\88\83K1. K1 â\8a\91 K2 & ⇩[s, 0, i] L1 ≡ K1.ⓓV.
+ â\88\83â\88\83K1. K1 â«\83 K2 & ⇩[s, 0, i] L1 ≡ K1.ⓓV.
#L1 #L2 #HL12 #K2 #V #s #i #HLK2 elim (lsubr_fwd_ldrop2_bind … HL12 … HLK2) -L2 // *
#K1 #W #_ #_ #H destruct
qed-.
(* Auxiliary inversion lemmas ***********************************************)
-fact lsubr_inv_bind1_aux: â\88\80L1,L2. L1 â\8a\91 L2 → ∀I,K1,X. L1 = K1.ⓑ{I}X →
+fact lsubr_inv_bind1_aux: â\88\80L1,L2. L1 â«\83 L2 → ∀I,K1,X. L1 = K1.ⓑ{I}X →
∨∨ L2 = ⋆
- | â\88\83â\88\83K2. K1 â\8a\91 K2 & L2 = K2.ⓑ{I}X
- | â\88\83â\88\83K2,V,W. K1 â\8a\91 K2 & L2 = K2.ⓛW &
+ | â\88\83â\88\83K2. K1 â«\83 K2 & L2 = K2.ⓑ{I}X
+ | â\88\83â\88\83K2,V,W. K1 â«\83 K2 & L2 = K2.ⓛW &
I = Abbr & X = ⓝW.V.
#L1 #L2 * -L1 -L2
[ #L #J #K1 #X #H destruct /2 width=1 by or3_intro0/
]
qed-.
-lemma lsubr_inv_bind1: â\88\80I,K1,L2,X. K1.â\93\91{I}X â\8a\91 L2 →
+lemma lsubr_inv_bind1: â\88\80I,K1,L2,X. K1.â\93\91{I}X â«\83 L2 →
∨∨ L2 = ⋆
- | â\88\83â\88\83K2. K1 â\8a\91 K2 & L2 = K2.ⓑ{I}X
- | â\88\83â\88\83K2,V,W. K1 â\8a\91 K2 & L2 = K2.ⓛW &
+ | â\88\83â\88\83K2. K1 â«\83 K2 & L2 = K2.ⓑ{I}X
+ | â\88\83â\88\83K2,V,W. K1 â«\83 K2 & L2 = K2.ⓛW &
I = Abbr & X = ⓝW.V.
/2 width=3 by lsubr_inv_bind1_aux/ qed-.
(* Properties on lazy sn pointwise extensions *******************************)
-lemma ssta_llpx_sn_conf: ∀R. (∀L. reflexive … (R L)) → l_liftable R →
+lemma ssta_llpx_sn_conf: ∀R. (∀I,L.reflexive … (R I L)) →
+ (∀I.l_liftable (R I)) →
∀h,g,G. s_r_confluent1 … (ssta h g G) (llpx_sn R 0).
#R #H1R #H2R #h #g #G #Ls #T1 #T2 #H elim H -G -Ls -T1 -T2
[ /3 width=4 by llpx_sn_fwd_length, llpx_sn_sort/
(* Basic properties *********************************************************)
-lemma fqu_fqup: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄.
+lemma fqu_fqup: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄.
/2 width=1 by tri_inj/ qed.
lemma fqup_strap1: ∀G1,G,G2,L1,L,L2,T1,T,T2.
- â¦\83G1, L1, T1â¦\84 â\8a\83+ â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄.
+ â¦\83G1, L1, T1â¦\84 â\8a\90+ â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
+ â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄.
/2 width=5 by tri_step/ qed.
lemma fqup_strap2: ∀G1,G,G2,L1,L,L2,T1,T,T2.
- â¦\83G1, L1, T1â¦\84 â\8a\83 â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄.
+ â¦\83G1, L1, T1â¦\84 â\8a\90 â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
+ â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄.
/2 width=5 by tri_TC_strap/ qed.
lemma fqup_ldrop: ∀G1,G2,L1,K1,K2,T1,T2,U1,e. ⇩[e] L1 ≡ K1 → ⇧[0, e] T1 ≡ U1 →
- â¦\83G1, K1, T1â¦\84 â\8a\83+ â¦\83G2, K2, T2â¦\84 â\86\92 â¦\83G1, L1, U1â¦\84 â\8a\83+ ⦃G2, K2, T2⦄.
+ â¦\83G1, K1, T1â¦\84 â\8a\90+ â¦\83G2, K2, T2â¦\84 â\86\92 â¦\83G1, L1, U1â¦\84 â\8a\90+ ⦃G2, K2, T2⦄.
#G1 #G2 #L1 #K1 #K2 #T1 #T2 #U1 #e #HLK1 #HTU1 #HT12 elim (eq_or_gt … e) #H destruct
[ >(ldrop_inv_O2 … HLK1) -L1 <(lift_inv_O2 … HTU1) -U1 //
| /3 width=5 by fqup_strap2, fqu_drop_lt/
]
qed-.
-lemma fqup_lref: â\88\80I,G,L,K,V,i. â\87©[i] L â\89¡ K.â\93\91{I}V â\86\92 â¦\83G, L, #iâ¦\84 â\8a\83+ ⦃G, K, V⦄.
+lemma fqup_lref: â\88\80I,G,L,K,V,i. â\87©[i] L â\89¡ K.â\93\91{I}V â\86\92 â¦\83G, L, #iâ¦\84 â\8a\90+ ⦃G, K, V⦄.
/3 width=6 by fqu_lref_O, fqu_fqup, lift_lref_ge, fqup_ldrop/ qed.
-lemma fqup_pair_sn: â\88\80I,G,L,V,T. â¦\83G, L, â\91¡{I}V.Tâ¦\84 â\8a\83+ ⦃G, L, V⦄.
+lemma fqup_pair_sn: â\88\80I,G,L,V,T. â¦\83G, L, â\91¡{I}V.Tâ¦\84 â\8a\90+ ⦃G, L, V⦄.
/2 width=1 by fqu_pair_sn, fqu_fqup/ qed.
-lemma fqup_bind_dx: â\88\80a,I,G,L,V,T. â¦\83G, L, â\93\91{a,I}V.Tâ¦\84 â\8a\83+ ⦃G, L.ⓑ{I}V, T⦄.
+lemma fqup_bind_dx: â\88\80a,I,G,L,V,T. â¦\83G, L, â\93\91{a,I}V.Tâ¦\84 â\8a\90+ ⦃G, L.ⓑ{I}V, T⦄.
/2 width=1 by fqu_bind_dx, fqu_fqup/ qed.
-lemma fqup_flat_dx: â\88\80I,G,L,V,T. â¦\83G, L, â\93\95{I}V.Tâ¦\84 â\8a\83+ ⦃G, L, T⦄.
+lemma fqup_flat_dx: â\88\80I,G,L,V,T. â¦\83G, L, â\93\95{I}V.Tâ¦\84 â\8a\90+ ⦃G, L, T⦄.
/2 width=1 by fqu_flat_dx, fqu_fqup/ qed.
-lemma fqup_flat_dx_pair_sn: â\88\80I1,I2,G,L,V1,V2,T. â¦\83G, L, â\93\95{I1}V1.â\91¡{I2}V2.Tâ¦\84 â\8a\83+ ⦃G, L, V2⦄.
+lemma fqup_flat_dx_pair_sn: â\88\80I1,I2,G,L,V1,V2,T. â¦\83G, L, â\93\95{I1}V1.â\91¡{I2}V2.Tâ¦\84 â\8a\90+ ⦃G, L, V2⦄.
/2 width=5 by fqu_pair_sn, fqup_strap1/ qed.
-lemma fqup_bind_dx_flat_dx: â\88\80a,G,I1,I2,L,V1,V2,T. â¦\83G, L, â\93\91{a,I1}V1.â\93\95{I2}V2.Tâ¦\84 â\8a\83+ ⦃G, L.ⓑ{I1}V1, T⦄.
+lemma fqup_bind_dx_flat_dx: â\88\80a,G,I1,I2,L,V1,V2,T. â¦\83G, L, â\93\91{a,I1}V1.â\93\95{I2}V2.Tâ¦\84 â\8a\90+ ⦃G, L.ⓑ{I1}V1, T⦄.
/2 width=5 by fqu_flat_dx, fqup_strap1/ qed.
-lemma fqup_flat_dx_bind_dx: â\88\80a,I1,I2,G,L,V1,V2,T. â¦\83G, L, â\93\95{I1}V1.â\93\91{a,I2}V2.Tâ¦\84 â\8a\83+ ⦃G, L.ⓑ{I2}V2, T⦄.
+lemma fqup_flat_dx_bind_dx: â\88\80a,I1,I2,G,L,V1,V2,T. â¦\83G, L, â\93\95{I1}V1.â\93\91{a,I2}V2.Tâ¦\84 â\8a\90+ ⦃G, L.ⓑ{I2}V2, T⦄.
/2 width=5 by fqu_bind_dx, fqup_strap1/ qed.
(* Basic eliminators ********************************************************)
lemma fqup_ind: ∀G1,L1,T1. ∀R:relation3 ….
- (â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ → R G2 L2 T2) →
- (â\88\80G,G2,L,L2,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83 ⦃G2, L2, T2⦄ → R G L T → R G2 L2 T2) →
- â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → R G2 L2 T2.
+ (â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ → R G2 L2 T2) →
+ (â\88\80G,G2,L,L2,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90 ⦃G2, L2, T2⦄ → R G L T → R G2 L2 T2) →
+ â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → R G2 L2 T2.
#G1 #L1 #T1 #R #IH1 #IH2 #G2 #L2 #T2 #H
@(tri_TC_ind … IH1 IH2 G2 L2 T2 H)
qed-.
lemma fqup_ind_dx: ∀G2,L2,T2. ∀R:relation3 ….
- (â\88\80G1,L1,T1. â¦\83G1, L1, T1â¦\84 â\8a\83 ⦃G2, L2, T2⦄ → R G1 L1 T1) →
- (â\88\80G1,G,L1,L,T1,T. â¦\83G1, L1, T1â¦\84 â\8a\83 â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → R G L T → R G1 L1 T1) →
- â\88\80G1,L1,T1. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → R G1 L1 T1.
+ (â\88\80G1,L1,T1. â¦\83G1, L1, T1â¦\84 â\8a\90 ⦃G2, L2, T2⦄ → R G1 L1 T1) →
+ (â\88\80G1,G,L1,L,T1,T. â¦\83G1, L1, T1â¦\84 â\8a\90 â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → R G L T → R G1 L1 T1) →
+ â\88\80G1,L1,T1. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → R G1 L1 T1.
#G2 #L2 #T2 #R #IH1 #IH2 #G1 #L1 #T1 #H
@(tri_TC_ind_dx … IH1 IH2 G1 L1 T1 H)
qed-.
(* Basic forward lemmas *****************************************************)
lemma fqup_fwd_fw: ∀G1,G2,L1,L2,T1,T2.
- â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → ♯{G2, L2, T2} < ♯{G1, L1, T1}.
+ â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → ♯{G2, L2, T2} < ♯{G1, L1, T1}.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/3 width=3 by fqu_fwd_fw, transitive_lt/
qed-.
(* Advanced eliminators *****************************************************)
lemma fqup_wf_ind: ∀R:relation3 …. (
- â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → R G2 L2 T2) →
+ â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → R G2 L2 T2) →
R G1 L1 T1
) → ∀G1,L1,T1. R G1 L1 T1.
#R #HR @(f3_ind … fw) #n #IHn #G1 #L1 #T1 #H destruct /4 width=1 by fqup_fwd_fw/
qed-.
lemma fqup_wf_ind_eq: ∀R:relation3 …. (
- â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ → R G2 L2 T2) →
+ â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ → R G2 L2 T2) →
∀G2,L2,T2. G1 = G2 → L1 = L2 → T1 = T2 → R G2 L2 T2
) → ∀G1,L1,T1. R G1 L1 T1.
#R #HR @(f3_ind … fw) #n #IHn #G1 #L1 #T1 #H destruct /4 width=7 by fqup_fwd_fw/
(* Basic eliminators ********************************************************)
lemma fqus_ind: ∀G1,L1,T1. ∀R:relation3 …. R G1 L1 T1 →
- (â\88\80G,G2,L,L2,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ → R G L T → R G2 L2 T2) →
- â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ → R G2 L2 T2.
+ (â\88\80G,G2,L,L2,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ → R G L T → R G2 L2 T2) →
+ â\88\80G2,L2,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ → R G2 L2 T2.
#G1 #L1 #T1 #R #IH1 #IH2 #G2 #L2 #T2 #H
@(tri_TC_star_ind … IH1 IH2 G2 L2 T2 H) //
qed-.
lemma fqus_ind_dx: ∀G2,L2,T2. ∀R:relation3 …. R G2 L2 T2 →
- (â\88\80G1,G,L1,L,T1,T. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83* ⦃G2, L2, T2⦄ → R G L T → R G1 L1 T1) →
- â\88\80G1,L1,T1. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ → R G1 L1 T1.
+ (â\88\80G1,G,L1,L,T1,T. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90* ⦃G2, L2, T2⦄ → R G L T → R G1 L1 T1) →
+ â\88\80G1,L1,T1. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ → R G1 L1 T1.
#G2 #L2 #T2 #R #IH1 #IH2 #G1 #L1 #T1 #H
@(tri_TC_star_ind_dx … IH1 IH2 G1 L1 T1 H) //
qed-.
lemma fqus_refl: tri_reflexive … fqus.
/2 width=1 by tri_inj/ qed.
-lemma fquq_fqus: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄.
+lemma fquq_fqus: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄.
/2 width=1 by tri_inj/ qed.
-lemma fqus_strap1: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83⸮ ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄.
+lemma fqus_strap1: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90⸮ ⦃G2, L2, T2⦄ →
+ â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄.
/2 width=5 by tri_step/ qed-.
-lemma fqus_strap2: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\83⸮ â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄.
+lemma fqus_strap2: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\90⸮ â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
+ â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄.
/2 width=5 by tri_TC_strap/ qed-.
-lemma fqus_ldrop: â\88\80G1,G2,K1,K2,T1,T2. â¦\83G1, K1, T1â¦\84 â\8a\83* ⦃G2, K2, T2⦄ →
+lemma fqus_ldrop: â\88\80G1,G2,K1,K2,T1,T2. â¦\83G1, K1, T1â¦\84 â\8a\90* ⦃G2, K2, T2⦄ →
∀L1,U1,e. ⇩[e] L1 ≡ K1 → ⇧[0, e] T1 ≡ U1 →
- â¦\83G1, L1, U1â¦\84 â\8a\83* ⦃G2, K2, T2⦄.
+ â¦\83G1, L1, U1â¦\84 â\8a\90* ⦃G2, K2, T2⦄.
#G1 #G2 #K1 #K2 #T1 #T2 #H @(fqus_ind … H) -G2 -K2 -T2
/3 width=5 by fqus_strap1, fquq_fqus, fquq_drop/
qed-.
-lemma fqup_fqus: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄.
+lemma fqup_fqus: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/3 width=5 by fqus_strap1, fquq_fqus, fqu_fquq/
qed.
(* Basic forward lemmas *****************************************************)
-lemma fqus_fwd_fw: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ → ♯{G2, L2, T2} ≤ ♯{G1, L1, T1}.
+lemma fqus_fwd_fw: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ → ♯{G2, L2, T2} ≤ ♯{G1, L1, T1}.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -L2 -T2
/3 width=3 by fquq_fwd_fw, transitive_le/
qed-.
(* Basic inversion lemmas ***************************************************)
-lemma fqup_inv_step_sn: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
- â\88\83â\88\83G,L,T. â¦\83G1, L1, T1â¦\84 â\8a\83 â¦\83G, L, Tâ¦\84 & â¦\83G, L, Tâ¦\84 â\8a\83* ⦃G2, L2, T2⦄.
+lemma fqup_inv_step_sn: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
+ â\88\83â\88\83G,L,T. â¦\83G1, L1, T1â¦\84 â\8a\90 â¦\83G, L, Tâ¦\84 & â¦\83G, L, Tâ¦\84 â\8a\90* ⦃G2, L2, T2⦄.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 /2 width=5 by ex2_3_intro/
#G1 #G #L1 #L #T1 #T #H1 #_ * /4 width=9 by fqus_strap2, fqu_fquq, ex2_3_intro/
qed-.
(* Advanced inversion lemmas ************************************************)
-lemma fqus_inv_gen: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2).
+lemma fqus_inv_gen: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
+ â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2).
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 //
#G #G2 #L #L2 #T #T2 #_ #H2 * elim (fquq_inv_gen … H2) -H2
[ /3 width=5 by fqup_strap1, or_introl/
(* Advanced properties ******************************************************)
-lemma fqus_strap1_fqu: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83 ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄.
+lemma fqus_strap1_fqu: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90 ⦃G2, L2, T2⦄ →
+ â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄.
#G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_gen … H1) -H1
[ /2 width=5 by fqup_strap1/
| * #HG #HL #HT destruct /2 width=1 by fqu_fqup/
]
qed-.
-lemma fqus_strap2_fqu: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\83 â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83* ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄.
+lemma fqus_strap2_fqu: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\90 â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90* ⦃G2, L2, T2⦄ →
+ â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄.
#G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_gen … H2) -H2
[ /2 width=5 by fqup_strap2/
| * #HG #HL #HT destruct /2 width=1 by fqu_fqup/
]
qed-.
-lemma fqus_fqup_trans: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\83* â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\83+ ⦃G2, L2, T2⦄ →
- â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄.
+lemma fqus_fqup_trans: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\90* â¦\83G, L, Tâ¦\84 â\86\92 â¦\83G, L, Tâ¦\84 â\8a\90+ ⦃G2, L2, T2⦄ →
+ â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄.
#G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 @(fqup_ind … H2) -H2 -G2 -L2 -T2
/2 width=5 by fqus_strap1_fqu, fqup_strap1/
qed-.
-lemma fqup_fqus_trans: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G, L, T⦄ →
- â¦\83G, L, Tâ¦\84 â\8a\83* â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\83+ ⦃G2, L2, T2⦄.
+lemma fqup_fqus_trans: â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G, L, T⦄ →
+ â¦\83G, L, Tâ¦\84 â\8a\90* â¦\83G2, L2, T2â¦\84 â\86\92 â¦\83G1, L1, T1â¦\84 â\8a\90+ ⦃G2, L2, T2⦄.
#G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 @(fqup_ind_dx … H1) -H1 -G1 -L1 -T1
/3 width=5 by fqus_strap2_fqu, fqup_strap2/
qed-.
(* LAZY EQUIVALENCE FOR LOCAL ENVIRONMENTS **********************************)
-definition ceq: relation3 lenv term term ≝ λL,T1,T2. T1 = T2.
+definition ceq: relation4 bind2 lenv term term ≝ λI,L,T1,T2. T1 = T2.
definition lleq: relation4 ynat term lenv lenv ≝ llpx_sn ceq.
"lazy equivalence (local environment)"
'LazyEq T d L1 L2 = (lleq d T L1 L2).
-definition lleq_transitive: predicate (relation3 lenv term term) ≝
- λR. ∀L2,T1,T2. R L2 T1 T2 → ∀L1. L1 ⋕[T1, 0] L2 → R L1 T1 T2.
+definition lleq_transitive: predicate (relation4 bind2 lenv term term) ≝
+ λR. ∀I,L2,T1,T2. R I L2 T1 T2 → ∀L1. L1 ⋕[T1, 0] L2 → R I L1 T1 T2.
(* Basic inversion lemmas ***************************************************)
(* Advancded properties on lazy pointwise exyensions ************************)
-lemma llpx_sn_lrefl: ∀R. (∀L. reflexive … (R L)) →
+lemma llpx_sn_lrefl: ∀R. (∀I,L. reflexive … (R I L)) →
∀L1,L2,T,d. L1 ⋕[T, d] L2 → llpx_sn R d T L1 L2.
/2 width=3 by llpx_sn_co/ qed-.
(* Properties on supclosure *************************************************)
-lemma lleq_fqu_trans: â\88\80G1,G2,L2,K2,T,U. â¦\83G1, L2, Tâ¦\84 â\8a\83 ⦃G2, K2, U⦄ →
+lemma lleq_fqu_trans: â\88\80G1,G2,L2,K2,T,U. â¦\83G1, L2, Tâ¦\84 â\8a\90 ⦃G2, K2, U⦄ →
∀L1. L1 ⋕[T, 0] L2 →
- â\88\83â\88\83K1. â¦\83G1, L1, Tâ¦\84 â\8a\83 ⦃G2, K1, U⦄ & K1 ⋕[U, 0] K2.
+ â\88\83â\88\83K1. â¦\83G1, L1, Tâ¦\84 â\8a\90 ⦃G2, K1, U⦄ & K1 ⋕[U, 0] K2.
#G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U
[ #I #G #L2 #V #L1 #H elim (lleq_inv_lref_ge_dx … H … I L2 V) -H //
#K1 #H1 #H2 lapply (ldrop_inv_O2 … H1) -H1
]
qed-.
-lemma lleq_fquq_trans: â\88\80G1,G2,L2,K2,T,U. â¦\83G1, L2, Tâ¦\84 â\8a\83⸮ ⦃G2, K2, U⦄ →
+lemma lleq_fquq_trans: â\88\80G1,G2,L2,K2,T,U. â¦\83G1, L2, Tâ¦\84 â\8a\90⸮ ⦃G2, K2, U⦄ →
∀L1. L1 ⋕[T, 0] L2 →
- â\88\83â\88\83K1. â¦\83G1, L1, Tâ¦\84 â\8a\83⸮ ⦃G2, K1, U⦄ & K1 ⋕[U, 0] K2.
+ â\88\83â\88\83K1. â¦\83G1, L1, Tâ¦\84 â\8a\90⸮ ⦃G2, K1, U⦄ & K1 ⋕[U, 0] K2.
#G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fquq_inv_gen … H) -H
[ #H elim (lleq_fqu_trans … H … HL12) -L2 /3 width=3 by fqu_fquq, ex2_intro/
| * #HG #HL #HT destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma lleq_fqup_trans: â\88\80G1,G2,L2,K2,T,U. â¦\83G1, L2, Tâ¦\84 â\8a\83+ ⦃G2, K2, U⦄ →
+lemma lleq_fqup_trans: â\88\80G1,G2,L2,K2,T,U. â¦\83G1, L2, Tâ¦\84 â\8a\90+ ⦃G2, K2, U⦄ →
∀L1. L1 ⋕[T, 0] L2 →
- â\88\83â\88\83K1. â¦\83G1, L1, Tâ¦\84 â\8a\83+ ⦃G2, K1, U⦄ & K1 ⋕[U, 0] K2.
+ â\88\83â\88\83K1. â¦\83G1, L1, Tâ¦\84 â\8a\90+ ⦃G2, K1, U⦄ & K1 ⋕[U, 0] K2.
#G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U
[ #G2 #K2 #U #HTU #L1 #HL12 elim (lleq_fqu_trans … HTU … HL12) -L2
/3 width=3 by fqu_fqup, ex2_intro/
]
qed-.
-lemma lleq_fqus_trans: â\88\80G1,G2,L2,K2,T,U. â¦\83G1, L2, Tâ¦\84 â\8a\83* ⦃G2, K2, U⦄ →
+lemma lleq_fqus_trans: â\88\80G1,G2,L2,K2,T,U. â¦\83G1, L2, Tâ¦\84 â\8a\90* ⦃G2, K2, U⦄ →
∀L1. L1 ⋕[T, 0] L2 →
- â\88\83â\88\83K1. â¦\83G1, L1, Tâ¦\84 â\8a\83* ⦃G2, K1, U⦄ & K1 ⋕[U, 0] K2.
+ â\88\83â\88\83K1. â¦\83G1, L1, Tâ¦\84 â\8a\90* ⦃G2, K1, U⦄ & K1 ⋕[U, 0] K2.
#G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_gen … H) -H
[ #H elim (lleq_fqup_trans … H … HL12) -L2 /3 width=3 by fqup_fqus, ex2_intro/
| * #HG #HL #HT destruct /2 width=3 by ex2_intro/
for context-sensitive extended computation.
</news>
<news date="2014 April 16.">
- lazy equivalence for local environments
+ lazy equivalence on local environments
serves as irrelevant step in "big tree" computation
(anniversary milestone).
</news>
[ { "dynamic typing" * } {
(*
[ { "local env. ref. for native type assignment" * } {
- [ "lsubn ( ? â\8a¢ ? :â\8a\91 ? )" "lsubn_ldrop" "lsubn_cpcs" "lsubn_nta" * ]
+ [ "lsubn ( ? â\8a¢ ? :â«\83 ? )" "lsubn_ldrop" "lsubn_cpcs" "lsubn_nta" * ]
}
]
[ { "native type assignment" * } {
]
*)
[ { "local env. ref. for stratified native validity" * } {
- [ "lsubsv ( ? â\8a¢ ? ¡â\8a\91[?,?] ? )" "lsubsv_ldrop" + "lsubsv_lsubd" + "lsubsv_lsuba" + "lsubsv_lsstas" + "lsubsv_cpds" + "lsubsv_cpcs" + "lsubsv_snv" * ]
+ [ "lsubsv ( ? â\8a¢ ? ¡â«\83[?,?] ? )" "lsubsv_ldrop" + "lsubsv_lsubd" + "lsubsv_lsuba" + "lsubsv_lsstas" + "lsubsv_cpds" + "lsubsv_cpcs" + "lsubsv_snv" * ]
}
]
[ { "stratified native validity" * } {
}
]
[ { "context-sensitive extended computation" * } {
- [ "lpxs ( ⦃?,?⦄ ⊢ ➡*[?,?] ? )" "lpxs_alt ( ⦃?,?⦄ ⊢ ➡➡*[?,?] ? )" "lpxs_ldrop" + "lpxs_lleq" + "lpxs_aaa" + "lpxs_cpxs" + "lpxs_lpxs" * ]
+ [ "lpxs ( ⦃?,?⦄ ⊢ ➡*[?,?] ? )" "lpxs_ldrop" + "lpxs_lleq" + "lpxs_aaa" + "lpxs_cpxs" + "lpxs_lpxs" * ]
[ "cpxs ( ⦃?,?⦄ ⊢ ? ➡*[?,?] ? )" "cpxs_tstc" + "cpxs_tstc_vector" + "cpxs_leq" + "cpxs_lift" + "cpxs_lleq" + "cpxs_aaa" + "cpxs_cpxs" * ]
}
]
[ { "context-sensitive computation" * } {
- [ "lprs ( ⦃?,?⦄ ⊢ ➡* ? )" "lprs_alt ( ⦃?,?⦄ ⊢ ➡➡* ? )" "lprs_ldrop" + "lprs_cprs" + "lprs_lprs" * ]
+ [ "lprs ( ⦃?,?⦄ ⊢ ➡* ? )" "lprs_ldrop" + "lprs_cprs" + "lprs_lprs" * ]
[ "cprs ( ⦃?,?⦄ ⊢ ? ➡* ?)" "cprs_lift" + "cprs_cprs" * ]
}
]
[ { "local env. ref. for abstract candidates of reducibility" * } {
- [ "lsubc ( ? â\8a¢ ? â\8a\91[?] ? )" "lsubc_ldrop" + "lsubc_ldrops" + "lsubc_lsuba" * ]
+ [ "lsubc ( ? â\8a¢ ? â«\83[?] ? )" "lsubc_ldrop" + "lsubc_ldrops" + "lsubc_lsuba" * ]
}
]
[ { "support for abstract computation properties" * } {
class "grass"
[ { "static typing" * } {
[ { "local env. ref. for atomic arity assignment" * } {
- [ "lsuba ( ? â\8a¢ ? â\81\9dâ\8a\91 ? )" "lsuba_ldrop" + "lsuba_aaa" + "lsuba_lsuba" * ]
+ [ "lsuba ( ? â\8a¢ ? â\81\9dâ«\83 ? )" "lsuba_ldrop" + "lsuba_aaa" + "lsuba_lsuba" * ]
}
]
[ { "atomic arity assignment" * } {
}
]
[ { "local env. ref. for degree assignment" * } {
- [ "lsubd ( ? â\8a¢ ? â\96ªâ\8a\91 ? )" "lsubd_da" + "lsubd_lsubd" * ]
+ [ "lsubd ( ? â\8a¢ ? â\96ªâ«\83 ? )" "lsubd_da" + "lsubd_lsubd" * ]
}
]
[ { "degree assignment" * } {
}
]
[ { "restricted local env. ref." * } {
- [ "lsubr ( ? â\8a\91 ? )" "lsubr_lsubr" * ]
+ [ "lsubr ( ? â«\83 ? )" "lsubr_lsubr" * ]
}
]
}
}
]
[ { "iterated structural successor for closures" * } {
- [ "fqus ( â¦\83?,?,?â¦\84 â\8a\83* ⦃?,?,?⦄ )" "fqus_alt" + "fqus_fqus" * ]
- [ "fqup ( â¦\83?,?,?â¦\84 â\8a\83+ ⦃?,?,?⦄ )" "fqup_fqup" * ]
+ [ "fqus ( â¦\83?,?,?â¦\84 â\8a\90* ⦃?,?,?⦄ )" "fqus_alt" + "fqus_fqus" * ]
+ [ "fqup ( â¦\83?,?,?â¦\84 â\8a\90+ ⦃?,?,?⦄ )" "fqup_fqup" * ]
}
]
[ { "iterated local env. slicing" * } {
class "orange"
[ { "relocation" * } {
[ { "structural successor for closures" * } {
- [ "fquq ( â¦\83?,?,?â¦\84 â\8a\83⸮ â¦\83?,?,?â¦\84 )" "fquq_alt ( â¦\83?,?,?â¦\84 â\8a\83â\8a\83⸮ ⦃?,?,?⦄ )" * ]
- [ "fqu ( â¦\83?,?,?â¦\84 â\8a\83 ⦃?,?,?⦄ )" * ]
+ [ "fquq ( â¦\83?,?,?â¦\84 â\8a\90⸮ â¦\83?,?,?â¦\84 )" "fquq_alt ( â¦\83?,?,?â¦\84 â\8a\90â\8a\90⸮ ⦃?,?,?⦄ )" * ]
+ [ "fqu ( â¦\83?,?,?â¦\84 â\8a\90 ⦃?,?,?⦄ )" * ]
}
]
[ { "global env. slicing" * } {