(** *** Lemmas about invariants preserved by coresteps*)

(** If some thread has permission above readable on some address then stepping another thread cannot change the value of that location*)
Corollary corestep_disjoint_val:
forall (tp : t)  (m m' : mem) i j (Hneq: i <> j)
(c c' : semC)
(pfi : containsThread tp i) (pfj : containsThread tp j)
(Hcomp : mem_compatible tp m) (b : block) (ofs : Z)
(Hreadable: Mem.perm (restrPermMap (DryHybridMachine.compat_th _ _ Hcomp pfj).1) b ofs Cur Readable \/
Mem.perm (restrPermMap (DryHybridMachine.compat_th _ _ Hcomp pfj).2) b ofs Cur Readable)
(Hcorestep: corestep semSem c (restrPermMap (DryHybridMachine.compat_th _ _ Hcomp pfi).1) c' m')
(Hinv: invariant tp),
Maps.ZMap.get ofs (Mem.mem_contents m) # b =
Maps.ZMap.get ofs (Mem.mem_contents m') # b.