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_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''.