Definition ev_step_det:
        forall (m m' m'' : mem) (c c' c'' : semC) ev ev',
          ev_step semSem c m ev c' m' ->
          ev_step semSem c m ev' c'' m'' -> c' = c'' /\ m' = m'' /\ ev = ev'.

(* Specifications: *)
Lemma ev_unchanged_on: forall c m c' m' b ofs ev (Hstep: ev_step semSem c m ev c' m') (Hvalid: Mem.valid_block m b) (Hstable: ~ Mem.perm m b ofs Cur Writable), Maps.ZMap.get ofs (Maps.PMap.get b (Mem.mem_contents m)) = Maps.ZMap.get ofs (Maps.PMap.get b (Mem.mem_contents m')).
Lemma ev_step_decay: forall c c' m m' ev, ev_step semSem c m ev c' m' -> decay m m'.
Lemma ev_step_nextblock: forall c m ev c' m', ev_step semSem c m ev c' m' -> (Mem.nextblock m <= Mem.nextblock m')%positive.
Lemma ev_step_validblock: forall c m ev c' m', ev_step semSem c m ev c' m' -> forall b, Mem.valid_block m b -> Mem.valid_block m' b.
Lemma corestep_containsThread: forall (tp : t) c c' m m' p i j ev (Hcnti : containsThread tp i) (Hcntj: containsThread tp j) (Hcorestep: ev_step semSem c m ev c' m') (Hcode: getThreadC Hcnti = Krun c), containsThread (updThread Hcnti (Krun c') p) j.
Lemma corestep_containsThread': forall (tp : t) c c' m m' p i j ev (Hcnti : containsThread tp i) (Hcntj : containsThread (updThread Hcnti (Krun c') p) j) (Hcorestep: ev_step semSem c m ev c' m') (Hcode: getThreadC Hcnti = Krun c), containsThread tp j.
Lemma decay_disjoint: forall m m' p (Hdecay: decay m m') (Hlt: permMapLt p (getMaxPerm m)) (Hdisjoint: permMapsDisjoint (getCurPerm m) p), permMapsDisjoint (getCurPerm m') p.
Lemma decay_coherence : forall (m m' : mem) (pmap : access_map) (Hdecay: decay m m') (Hlt: permMapLt pmap (getMaxPerm m)) (Hcoh: permMapCoherence (getCurPerm m) pmap), permMapCoherence (getCurPerm m') pmap.
Lemma permMapLt_decay: forall pmap m m' (Hdecay: strong_decay m m') (Hlt: permMapLt pmap (getMaxPerm m)), permMapLt pmap (getMaxPerm m').