Section CoreLanguageDry.
Context {Sem : Semantics}
{SemAx : SemAxioms}.
Existing Instance OrdinalPool.OrdinalThreadPool.
Existing Instance DryHybridMachine.dryResources.
(** Take an instance of the Dry Machine *)
Existing Instance DryHybridMachine.DryHybridMachineSig.
(** Lemmas about containsThread and coresteps *)
(** *** Lemmas about invariants preserved by coresteps*)

(** If some lock has permission above [Readable] on some address then stepping a thread cannot change the value of that location*)
Lemma corestep_disjoint_val_lockpool :
forall (tp : t)  (m m' : mem) i (c c' : semC)
(pfi : containsThread tp i) (Hcomp : mem_compatible tp m) addr pmap
(Hlock: lockRes tp addr = Some pmap)
(b : block) (ofs : Z)
(Hreadable: Mem.perm (restrPermMap (DryHybridMachine.compat_lp _ _ Hcomp _ _ Hlock).1)
b ofs Cur Readable \/
Mem.perm (restrPermMap (DryHybridMachine.compat_lp _ _ Hcomp _ _ Hlock).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.