(** * Lemmas about the Hybrid Machine steps*)
From mathcomp.ssreflect Require Import ssreflect ssrbool ssrnat seq ssrfun eqtype fintype finfun.
Set Implicit Arguments.
(*NOTE: because of redefinition of [val], these imports must appear after Ssreflect eqtype.*)
Global Notation "a # b" := (Maps.PMap.get b a) (at level 1).
(** This file holds various results about the dry machine*)
(* Find other lemmas in dry_machine_lemmas.v          *)
(** These lemmas require the machines. But the machines are parameterized by the semantics so they can be used by either high-level or low-level languages*)
Module StepLemmas.
Section StepLemmas.
Context {asmSem : Semantics}
{Sch: Scheduler}
{DilMem: DiluteMem}.
Existing Instance OrdinalPool.OrdinalThreadPool.
Existing Instance DryHybridMachine.dryResources.
Existing Instance DryHybridMachine.DryHybridMachineSig.

(** [mem_compatible] is preserved by [updThreadC] *)
Lemma updThreadC_compatible:
forall (tp : t) m i c
(ctn : containsThread tp i)
(Hcomp: mem_compatible tp m),
mem_compatible (updThreadC ctn c) m.