(*+ Predicates *)

Definition pred := map -> Prop.Definition sat (m : map) (P : pred) : Prop := P m.Infix " == " := pequiv (at level 50, no associativity).Definition emp : pred := fun m => forall n, m n = None.Definition TT : pred := fun m => True.Definition FF : pred := fun m => False.Definition imp (P Q : pred) : Prop := forall m, m |= P -> m |= Q.Definition sepcon (P Q : pred) : pred :=
  fun m => exists m1 m2, join m1 m2 m /\ P m1 /\ Q m2.Definition pequiv (P Q : pred) := forall m, P m <-> Q m.Definition subheap m o := exists n, join m n o.

(* Specifications: *)
Lemma precise_FF : precise FF.