Load loadpath.
(** Separation Logic Interface  This module type axiomatizes the types and operators upon which our soundness proof depends.  NOTE: This module type will probably be made obsolete sometime in the future (if we ever get back to working on this project).  We now believe it's better to axiomatize the separation logic directly (i.e., its proof theory) as opposed to axiomatizing the /models/ of the separation logic, which is what we do here. *)
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" *)
Axiom emp_empty_val : forall v, identity v <-> v = empty_val.
Definition full (v : val) := forall v2, joins v v2 -> identity v2.