Ltac do_fresh1 :=
repeat match goal with H: Ile _ _ |- _ => revert H
| H: Ident.lt _ _ |- _ => revert H
| H: fresh _ _ _ |- _ => revert H end;
clear;
unfold fresh; simpl;
repeat ((rewrite freshmax_list_app || rewrite freshmax_list_rev
|| rewrite varmax_minid || rewrite varmax_minid'); simpl).
Ltac do_fresh :=
do_fresh1; intros;
repeat match goal with
|  H: Ident.lt (var_max _ _) _ |- _ => apply var_max_split in H; destruct H
end;
repeat apply var_max_intro; auto;
try solve [etransitivity; eauto].
Definition set_in_state nextv z s := State (env_set nextv z (stk s)) (hp s).

(* Specifications: *)
Axiom expr_denote_agree:
forall e s nextv z,
fresh freshmax_expr e nextv ->
expr_denote e s = expr_denote e (set_in_state nextv z s).
Axiom pn_atom_denote_agree:
forall a s nextv z,
fresh freshmax_pn_atom a nextv ->
pn_atom_denote a s ->
pn_atom_denote a (set_in_state nextv z s).
Axiom space_atom_denote_agree:
forall a s nextv z,
fresh freshmax_space_atom a nextv ->
space_atom_denote a s ->
space_atom_denote a (set_in_state nextv z s).
Axiom list_denote__pn_atom_agree:
forall pos s nextv z,
fresh (freshmax_list freshmax_pn_atom) pos nextv ->
list_denote pn_atom_denote (@andp _) TT pos s ->
list_denote pn_atom_denote (@andp _) TT pos (set_in_state nextv z s).
Axiom list_denote_space_agree:
forall pos s nextv z,
fresh (freshmax_list freshmax_space_atom) pos nextv ->
list_denote space_atom_denote (@sepcon _ _) emp pos s ->
list_denote space_atom_denote (@sepcon _ _) emp pos (set_in_state nextv z s).