Definition rawnext' x y h := exists h0, join_sub h0 h /\ rawnext x y h0.

(* Specifications: *)
Axiom rawnext_at1 : forall {x y h1 h2 h},
rawnext' x y h1 -> join h1 h2 h -> emp_at x h2 /\ rawnext' x y h.
Axiom rawnext_at2 : forall {x y h1 h2 h},
join h1 h2 h -> rawnext' x y h -> emp_at x h2 -> rawnext' x y h1.
Axiom  rawnext_not_emp : forall {x y h}, rawnext' x y h -> ~emp_at x h.
Axiom emp_at_join: forall {h1 h2 h},
join h1 h2 h -> forall l, (emp_at l h1 /\ emp_at l h2) <-> emp_at l h.
Axiom rawnext_unique : forall x z z' s s' t t' r,
rawnext x z s -> rawnext x z' s' -> join s t r -> join s' t' r ->
z' = z /\ s'=s.
Axiom vars_defined_locs : forall z (e : env),
exists v, env_get e z = v /\ nil_or_loc v.