(* coherence lemmas *)

(* Specifications: *)
Lemma contents_cohere_join_sub: forall m phi phi',
contents_cohere m phi -> join_sub phi' phi -> contents_cohere m phi'.
Lemma perm_of_sh_join_sub: forall (sh1 sh2: Share.t) p,
perm_of_sh sh1 = Some p ->
join_sub sh1 sh2 ->
perm_order' (perm_of_sh sh2) p.
Lemma perm_order'_trans: forall p1 p2 p3,
perm_order' (Some p1) p2 -> perm_order' (Some p2) p3 -> perm_order' (Some p1) p3.
Lemma rmap_unage_YES: forall phi phi' sh rsh k pp loc,
age phi phi'
-> phi' @ loc = YES sh rsh k pp
-> exists pp', phi @ loc = YES sh rsh k pp'.
Lemma preds_fmap_NoneP_approx: forall pp lev1 lev2,
preds_fmap (approx lev1) (approx lev1) pp = NoneP ->
preds_fmap (approx lev2) (approx lev2) pp = NoneP.
Lemma oracle_unage:
forall (jm': juicy_mem) (w: rmap), age w (m_phi jm') ->
exists jm, age jm jm' /\ m_phi jm = w.