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 strong_decay_implies_decay:
forall m m',
strong_decay m m' ->
decay m m'.