open Preamble open StructuredTraces open ExtraMonads open Deqsets_extra open State open Bind_new open BindLists open Blocks open TranslateUtils open ExtraGlobalenvs open I8051bis open String open Sets open Listb open LabelledObjects open BitVectorTrie open Graphs open I8051 open Order open Registers open BackEndOps open Joint open BEMem open CostLabel open Events open IOMonad open IO open Extra_bool open Coqlib open Values open FrontEndVal open Hide open ByteValues open Division open Z open BitVectorZ open Pointers open GenMem open FrontEndMem open Proper open PositiveMap open Deqsets open Extralib open Lists open Identifiers open Exp open Arithmetic open Vector open Div_and_mod open Util open FoldStuff open BitVector open Extranat open Integers open AST open ErrorMessages open Option open Setoids open Monad open Jmeq open Russell open Positive open PreIdentifiers open Bool open Relations open Nat open List open Hints_declaration open Core_notation open Pts open Logic open Types open Errors open Globalenvs open Joint_semantics open SemanticsUtils open Traces open Stacksize open SmallstepExec open Executions open Measurable (** val joint_exec : Joint_semantics.sem_params -> (IO.io_out, IO.io_in) SmallstepExec.trans_system **) let joint_exec g = { SmallstepExec.is_final = (fun env -> Obj.magic (Traces.joint_final g (Obj.magic env))); SmallstepExec.step = (fun env st -> Obj.magic (Monad.m_bind0 (Monad.max_def IOMonad.iOMonad) (Obj.magic (Joint_semantics.eval_state g (Obj.magic env).Traces.globals (Obj.magic env).Traces.ev_genv (Obj.magic st))) (fun st' -> let charge = match Traces.joint_label_of_pc g (Obj.magic env) (Obj.magic st).Joint_semantics.pc with | Types.None -> Events.e0 | Types.Some c -> Events.echarge c in Monad.m_return0 (Monad.max_def IOMonad.iOMonad) { Types.fst = charge; Types.snd = st' }))) } (** val joint_fullexec : Joint_semantics.sem_params -> (IO.io_out, IO.io_in) SmallstepExec.fullexec **) let joint_fullexec g = { SmallstepExec.es1 = (joint_exec g); SmallstepExec.make_global = (fun pr -> Obj.magic (Traces.joint_make_global { Traces.prog_spars = g; Traces.prog = (Obj.magic pr).Types.fst; Traces.stack_sizes = (Obj.magic pr).Types.snd })); SmallstepExec.make_initial_state = (fun p_stacks -> Obj.magic (Traces.make_initial_state { Traces.prog_spars = g; Traces.prog = (Obj.magic p_stacks).Types.fst; Traces.stack_sizes = (Obj.magic p_stacks).Types.snd })) } (** val joint_preclassified_system : Joint_semantics.sem_params -> Measurable.preclassified_system **) let joint_preclassified_system g = { Measurable.pcs_exec = (joint_fullexec g); Measurable.pcs_labelled = (fun env st -> Bool.notb (PositiveMap.is_none (Traces.joint_label_of_pc g (Obj.magic env) (Obj.magic st).Joint_semantics.pc))); Measurable.pcs_classify = (fun env -> Obj.magic (Traces.joint_classify g (Obj.magic env))); Measurable.pcs_callee = (fun env s _ -> Traces.joint_call_ident g (Obj.magic env) (Obj.magic s)) }