inductive li (M) (gv): relation2 lenv (evaluation M) ≝
| li_atom: ∀lv. li M gv (⋆) lv
-| li_abbr: ∀lv,d,L,V. li M gv L lv → ⟦V⟧[gv, lv] = d → li M gv (L.ⓓV) (⫯[0←d]lv)
+| li_abbr: ∀lv,d,L,V. li M gv L lv → ⟦V⟧[gv,lv] = d → li M gv (L.ⓓV) (⫯[0←d]lv)
| li_abst: ∀lv,d,L,W. li M gv L lv → li M gv (L.ⓛW) (⫯[0←d]lv)
-| li_unit: ∀lv,d,I,L. li M gv L lv → li M gv (L.ⓤ{I}) (⫯[0←d]lv)
+| li_unit: ∀lv,d,I,L. li M gv L lv → li M gv (L.ⓤ[I]) (⫯[0←d]lv)
| li_veq : ∀lv1,lv2,L. li M gv L lv1 → lv1 ≗ lv2 → li M gv L lv2
.
(* Basic inversion lemmas ***************************************************)
-fact li_inv_abbr_aux (M) (gv): is_model M →
+fact li_inv_abbr_aux (M) (gv): is_model M →
∀v,Y. v ϵ ⟦Y⟧{M}[gv] → ∀L,V. Y = L.ⓓV →
∃∃lv. lv ϵ ⟦L⟧[gv] & ⫯[0←⟦V⟧[gv,lv]]lv ≗ v.
#M #gv #HM #v #Y #H elim H -v -Y
/2 width=4 by li_inv_abst_aux/ qed-.
fact li_inv_unit_aux (M) (gv): is_model M →
- ∀v,Y. v ϵ ⟦Y⟧{M}[gv] → ∀I,L. Y = L.ⓤ{I} →
+ ∀v,Y. v ϵ ⟦Y⟧{M}[gv] → ∀I,L. Y = L.ⓤ[I] →
∃∃lv,d. lv ϵ ⟦L⟧[gv] & ⫯[0←d]lv ≗ v.
#M #gv #HM #v #Y #H elim H -v -Y
[ #lv #J #K #H destruct
qed-.
lemma li_inv_unit (M) (gv): is_model M →
- ∀v,I,L. v ϵ ⟦L.ⓤ{I}⟧{M}[gv] →
+ ∀v,I,L. v ϵ ⟦L.ⓤ[I]⟧{M}[gv] →
∃∃lv,d. lv ϵ ⟦L⟧[gv] & ⫯[0←d]lv ≗ v.
/2 width=4 by li_inv_unit_aux/ qed-.
(* Advanced forward lemmas **************************************************)
lemma li_fwd_bind (M) (gv): is_model M →
- ∀v,I,L. v ϵ ⟦L.ⓘ{I}⟧{M}[gv] →
+ ∀v,I,L. v ϵ ⟦L.ⓘ[I]⟧{M}[gv] →
∃∃lv,d. lv ϵ ⟦L⟧[gv] & ⫯[0←d]lv ≗ v.
#M #gv #HM #v * [ #I | * #V ] #L #H
[ /2 width=2 by li_inv_unit/
| #lv1 #d #K #V #_ #Hd #IH #gv2 #Hgv #lv2 #Hlv destruct
@li_veq [2: /4 width=4 by li_abbr, veq_refl/ | skip ] -IH
@(veq_canc_sn … Hlv) -Hlv //
- /4 width=1 by ti_comp, vlift_comp, (* 2x *) veq_refl/
+ /4 width=1 by ti_comp, vpush_comp, (* 2x *) veq_refl/
| #lv1 #d #K #W #_ #IH #gv2 #Hgv #lv2 #Hlv
@li_veq /4 width=3 by li_abst, veq_refl/
| #lv1 #d #I #K #_ #IH #gv2 #Hgv #lv2 #Hlv