Program Definition mapsto_can_store_definition ch v sh (wsh: writable0_share sh) b ofs jm (v':val)
  (MAPSTO: (address_mapsto ch v sh (b, ofs) * TT)%pred (m_phi jm)):
  Memory.mem.

(* Specifications: *)
Lemma mapsto_can_store_property: forall (ch:memory_chunk) v sh (wsh: writable0_share sh) b ofs jm v' (MAPSTO: (address_mapsto ch v sh (b, ofs) * TT)%pred (m_phi jm)), Mem.store ch (m_dry jm) b ofs v' = Some(mapsto_can_store_definition _ _ _ wsh _ _ jm v' MAPSTO).
Lemma mapsto_can_store: forall ch v sh (wsh: writable0_share sh) b ofs jm v', (address_mapsto ch v sh (b, ofs) * TT)%pred (m_phi jm) -> exists m', Mem.store ch (m_dry jm) b ofs v' = Some m'.
Lemma store_outside': forall ch m b z v m', Mem.store ch m b z v = Some m' -> (forall b' ofs, (b=b' /\ z <= ofs < z + size_chunk ch) \/ contents_at m (b', ofs) = contents_at m' (b', ofs)) /\ access_at m = access_at m' /\ Mem.nextblock m = Mem.nextblock m'.
Lemma adr_range_zle_zlt : forall b lo hi ofs, adr_range (b,lo) (hi-lo) (b,ofs) -> zle lo ofs && zlt ofs hi = true.
Lemma join_top: forall sh2 sh, join Share.top sh2 sh -> sh = Share.top.
Lemma phi2_eq : m_phi (free_juicy_mem _ _ _ _ _ FREE) = phi2.
Lemma juicy_free_lemma': forall {j b lo hi m' m1 m2 F} (H: Mem.free (m_dry j) b lo hi = Some m') (VR: app_pred (VALspec_range (hi-lo) Share.top (b,lo) * F) (m_phi j)), VALspec_range (hi-lo) Share.top (b,lo) m1 -> join m1 m2 (m_phi j) -> m_phi (free_juicy_mem _ _ _ _ _ H) = m2.
Lemma initial_mem_core: forall lev m j IOK, j = initial_mem m lev IOK -> juicy_mem_core j = core lev.
Lemma writable_writable_after_alloc' : forall m1 m2 lo hi b lev loc IOK1 IOK2, alloc m1 lo hi = (m2, b) -> writable loc (m_phi (initial_mem m1 lev IOK1)) -> writable loc (m_phi (initial_mem m2 lev IOK2)).
Lemma necR_m_dry: forall jm jm', necR jm jm' -> m_dry jm = m_dry jm'.
Lemma perm_order''_trans p1 p2 p3 : perm_order'' p1 p2 -> perm_order'' p2 p3 -> perm_order'' p1 p3.
Lemma po_join_sub_sh sh1 sh2 : join_sub sh2 sh1 -> Mem.perm_order'' (perm_of_sh sh1) (perm_of_sh sh2).
Lemma po_join_sub r1 r2 : join_sub r2 r1 -> Mem.perm_order'' (perm_of_res r1) (perm_of_res r2).
Lemma perm_of_res_lock_not_Freeable: forall r, perm_order'' (Some Writable) (perm_of_res_lock r).