Definition decay m_before m_after := forall b ofs,
(~Mem.valid_block m_before b ->
Mem.valid_block m_after b ->
(forall k, Maps.PMap.get b (Mem.mem_access m_after) ofs k = Some Freeable)
\/ (forall k, Maps.PMap.get b (Mem.mem_access m_after) ofs k = None)) /\
(Mem.valid_block m_before b ->
(forall k,
(Maps.PMap.get b (Mem.mem_access m_before) ofs k = Some Freeable /\
Maps.PMap.get b (Mem.mem_access m_after) ofs k = None)) \/
(forall k, Maps.PMap.get b (Mem.mem_access m_before) ofs k =
Maps.PMap.get b (Mem.mem_access m_after) ofs k)).
Definition strong_decay m_before m_after := forall b ofs,
(~Mem.valid_block m_before b ->
Mem.valid_block m_after b ->
(forall k, Maps.PMap.get b (Mem.mem_access m_after) ofs k = Some Freeable)
\/ (forall k, Maps.PMap.get b (Mem.mem_access m_after) ofs k = None)) /\
(Mem.valid_block m_before b ->
(forall k, Maps.PMap.get b (Mem.mem_access m_before) ofs k =
Maps.PMap.get b (Mem.mem_access m_after) ofs k)).

(* Specifications: *)
Lemma strong_decay_implies_decay:
forall m m',
strong_decay m m' ->
decay m m'.
Lemma decay_refl:
forall m,
decay m m.
Lemma decay_trans :
forall m m' m'',
(forall b, Mem.valid_block m b -> Mem.valid_block m' b) ->
decay m m' ->
decay m' m'' ->
decay m m''.