open Preamble open Extra_bool open Coqlib open Values open FrontEndVal open GenMem open FrontEndMem open Globalenvs open String open Sets open Listb open LabelledObjects open BitVectorTrie open Graphs open I8051 open Order open Registers open CostLabel open Hide open Proper open PositiveMap open Deqsets open ErrorMessages open PreIdentifiers open Errors open Extralib open Lists open Identifiers open Integers open AST open Division open Exp open Arithmetic open Setoids open Monad open Option open Extranat open Vector open Div_and_mod open Jmeq open Russell open List open Util open FoldStuff open BitVector open Types open Bool open Relations open Nat open Hints_declaration open Core_notation open Pts open Logic open Positive open Z open BitVectorZ open Pointers open ByteValues open BackEndOps open Joint open State open Bind_new open BindLists (** val bindNewP : Monad.monadPred **) let bindNewP = Monad.Mk_MonadPred (** val split_on_last : 'a1 List.list -> ('a1 List.list, 'a1) Types.prod Types.option **) let split_on_last x = List.foldr (fun el acc -> match acc with | Types.None -> Types.Some { Types.fst = List.Nil; Types.snd = el } | Types.Some pr -> Types.Some { Types.fst = (List.Cons (el, pr.Types.fst)); Types.snd = pr.Types.snd }) Types.None x type step_block = (((__ -> Joint.joint_seq) List.list, __ -> Joint.joint_step) Types.prod, Joint.joint_seq List.list) Types.prod type fin_block = (Joint.joint_seq List.list, Joint.joint_fin_step) Types.prod type bind_step_block = (Registers.register, step_block) Bind_new.bind_new type bind_fin_block = (Registers.register, fin_block) Bind_new.bind_new type bind_seq_list = (Registers.register, Joint.joint_seq List.list) Bind_new.bind_new (** val add_dummy_variance : 'a2 List.list -> ('a1 -> 'a2) List.list **) let add_dummy_variance x = List.map (fun x0 x1 -> x0) x (** val ensure_step_block : Joint.params -> AST.ident List.list -> Joint.joint_seq List.list -> step_block **) let ensure_step_block p g = function | List.Nil -> { Types.fst = { Types.fst = List.Nil; Types.snd = (fun x -> Joint.Step_seq (Joint.nOOP (Joint.stmt_pars__o__uns_pars__o__u_pars p) g)) }; Types.snd = List.Nil } | List.Cons (hd, tl) -> { Types.fst = { Types.fst = List.Nil; Types.snd = (fun x -> Joint.Step_seq hd) }; Types.snd = tl } (** val map_eval : ('a1 -> 'a2) List.list -> 'a1 -> 'a2 List.list **) let map_eval l x = List.map (fun f -> f x) l