Module Type VERISTAR_LOGIC.
(** Locations and values *)
Parameters loc val : Type.
Declare Instance Join_val: Join val.
Declare Instance Perm_val: Perm_alg val.
Declare Instance Sep_val: Sep_alg val.
Declare Instance Canc_val: Canc_alg val.
Parameter val2loc : val -> option loc.
Parameter nil_val : val.
(** The empty value: read "undefined" *)
Parameter empty_val : val.
Definition full (v : val) := forall v2, joins v v2 -> identity v2.
(** Variables, environments *)
Definition var : Type := Ident.t.
Parameter env : Type.
Parameter env_get : env -> var -> val.
Parameter env_set : var -> val -> env -> env.

Axiom gso_env : forall (x y : var) (v : val) (s : env),
x<>y -> env_get (env_set x v s) y = env_get s y.