Program Definition noghost : pred rmap := fun m => identity (ghost_of m).
Next Obligation.

(* Specifications: *)
Lemma allp_jam_overlap: forall (P Q: address -> Prop) (p q: address -> pred rmap)
(P_DEC: forall l, {P l} + {~ P l})
(Q_DEC: forall l, {Q l} + {~ Q l}),
(exists resp, is_resource_pred p resp) ->
(exists resp, is_resource_pred q resp) ->
(forall l w1 w2, p l w1 -> q l w2 -> joins w1 w2 -> False) ->
(exists l, P l /\ Q l) ->
allp (jam P_DEC p noat) * allp (jam Q_DEC q noat) |-- FF.
Lemma yesat_join_diff:
forall pp pp' k k' sh sh' l w, k <> k' ->
yesat pp k sh l w -> yesat pp' k' sh' l w -> False.
Lemma yesat_raw_join:
forall pp k (sh1 sh2 sh3: Share.t) rsh1 rsh2 rsh3 l phi1 phi2 phi3,
join sh1 sh2 sh3 ->
yesat_raw pp k sh1 rsh1 l phi1 ->
yesat_raw pp k sh2 rsh2 l phi2 ->
join phi1 phi2 phi3 ->
yesat_raw pp k sh3 rsh3 l phi3.
Lemma nonunit_join: forall A {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{CA: Disj_alg A} (x y z: A),
nonunit x -> join x y z -> nonunit z.
Lemma yesat_join:
forall pp k sh1 sh2 sh3 l m1 m2 m3,
join sh1 sh2 sh3 ->
yesat pp k sh1 l m1 ->
yesat pp k sh2 l m2 ->
join m1 m2 m3 ->
yesat pp k sh3 l m3.