From mathcomp.ssreflect Require Import ssreflect ssrbool ssrnat ssrfun eqtype.
Set Bullet Behavior "Strict Subproofs".
(*Clight Machine *)
(*Asm Machine*)
Module Concurrent_Safety (CC_correct: CompCert_correctness).
(*Import the Clight Hybrid Machine*)
(*Import the Asm X86 Hybrid Machine*)
Module ConcurCC_correct:= (Concurrent_correctness CC_correct).
Definition Clight_init_state (p: Clight.program):=
Clight.start_stack (Clight.globalenv p).
Definition Asm_init_state (p: Asm.program):=
Asm.start_stack (@the_ge p).
Notation valid Sem:=
(valid dryResources Sem OrdinalPool.OrdinalThreadPool).
Definition opt_init_mem_source (p : Clight.program):=
(Genv.init_mem (Ctypes.program_of_program p)).
Definition opt_init_mem_target {F V} (tp:AST.program F V ):=
(Genv.init_mem tp).

Lemma Clight_finite_branching:
let ClightSem:= ClightSemanticsForMachines.ClightSem in
forall (p : Clight.program)
(x : kstate dryResources (ClightSem (Clight.globalenv p)) OrdinalPool.OrdinalThreadPool),
safety.finite_on_x
(safety.possible_image
(fun
(x0 : kstate dryResources (ClightSem (Clight.globalenv p))
OrdinalPool.OrdinalThreadPool) (y : schedule)
(x' : kstate dryResources (ClightSem (Clight.globalenv p))
OrdinalPool.OrdinalThreadPool) =>
exists y' : schedule,
kstep dryResources (ClightSem (Clight.globalenv p)) OrdinalPool.OrdinalThreadPool
DryHybridMachineSig x0 y x' y') (valid (ClightSem (Clight.globalenv p))) x).