End Properties.
Hint Rewrite @subst0_id : open.
Hint Rewrite @substl_subst1 : open.
Hint Rewrite @substl_trunc_notin using assumption : open.
Section MoreLemmas.
Context {A val : Type} {Heq : RelDec (@eq A)} {HeqOk : RelDec_Correct Heq}.
Context {R : ValNull val}.
Open Scope open_scope.

(* Specifications: *)
Lemma subst_singleton {B} :
forall x e (P : @open A val B), P[{e//x}] = P // (cons (x, e) nil).
Lemma subst_open_expr_nil {B} :
forall (e : @open A val B), (e // nil) = e.
Lemma subst_var_cons_eq :
forall (x:A) es (e : expr (val := val)), (stack_get x // (cons (x, e) es)) = e.
Lemma subst_var_cons_ineq : forall (x:A) y es (e : expr (val := val))
(Hneq: x <> y),
(stack_get x // (cons (y, e) es)) = (stack_get x // es).
Lemma val_expr_substs : forall (v : val) es,
((V_expr v) // es) = (V_expr v).