(*Variable genv: G. Variable main: Values.val.*)
(*  Variable match_rmap_perm: jres -> dres -> Prop. Variable no_locks_perm: jres ->  Prop.   Axiom init_diagram: forall ge (j : Values.Val.meminj) (U:_) (js : jstate ge) (vals : list Values.val) (m m' : mem) (rmap: jres) (pmap: dres) main h, init_inj_ok j m -> match_rmap_perm rmap pmap -> no_locks_perm rmap -> initial_core (JMachineSem ge U (Some rmap)) h m (U, nil, js) m' main vals -> exists (ds : dstate ge), initial_core (DMachineSem ge U (Some pmap)) h m (U, nil, ds) m' main vals /\ invariant ds /\ match_st ge js ds.*)
(* There's no good generic way to describe the actual initial state, since it depends on the relationship between initial rmap/pmap and memory. *)

Axiom halted_diagram:
forall ge U (ds : dmachine_state ge) (js : jmachine_state ge)  rmap pmap,
fst (fst js) = fst (fst ds) ->
halted (JMachineSem ge U rmap) js = halted (DMachineSem ge U pmap) ds.