Local Open Scope logic.
(* Lemma gvar_globals_only: forall i v rho, gvar i v rho -> gvar i v (globals_only rho). Hint Resolve gvar_globals_only. *)
Ltac safe_auto_with_closed :=
(* won't instantiate evars by accident *)
match goal with |- ?A =>
solve [first [has_evar A | auto 50 with closed]]
end.

Lemma closed_env_set:
forall {B} i v (P: environ -> B) rho,
closed_wrt_vars (eq i) P ->
P (env_set rho i v) = P rho.