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)).

Lemma decay_refl:
forall m,
decay m m.