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 Joint_LTL_LIN (** val lTL : Joint.graph_params **) let lTL = Joint_LTL_LIN.lTL_LIN type ltl_program = Joint.joint_program (** val dpi1__o__byte_to_ltl_argument__o__inject : (BitVector.byte, 'a1) Types.dPair -> Joint.hdw_argument Types.sig0 **) let dpi1__o__byte_to_ltl_argument__o__inject x2 = Joint.hdw_argument_from_byte x2.Types.dpi1 (** val eject__o__byte_to_ltl_argument__o__inject : BitVector.byte Types.sig0 -> Joint.hdw_argument Types.sig0 **) let eject__o__byte_to_ltl_argument__o__inject x2 = Joint.hdw_argument_from_byte (Types.pi1 x2) (** val byte_to_ltl_argument__o__inject : BitVector.byte -> Joint.hdw_argument Types.sig0 **) let byte_to_ltl_argument__o__inject x1 = Joint.hdw_argument_from_byte x1 (** val dpi1__o__byte_to_ltl_argument : (BitVector.byte, 'a1) Types.dPair -> Joint.hdw_argument **) let dpi1__o__byte_to_ltl_argument x1 = Joint.hdw_argument_from_byte x1.Types.dpi1 (** val eject__o__byte_to_ltl_argument : BitVector.byte Types.sig0 -> Joint.hdw_argument **) let eject__o__byte_to_ltl_argument x1 = Joint.hdw_argument_from_byte (Types.pi1 x1) (** val dpi1__o__reg_to_ltl_argument__o__inject : (I8051.register, 'a1) Types.dPair -> Joint.hdw_argument Types.sig0 **) let dpi1__o__reg_to_ltl_argument__o__inject x2 = Joint.hdw_argument_from_reg x2.Types.dpi1 (** val eject__o__reg_to_ltl_argument__o__inject : I8051.register Types.sig0 -> Joint.hdw_argument Types.sig0 **) let eject__o__reg_to_ltl_argument__o__inject x2 = Joint.hdw_argument_from_reg (Types.pi1 x2) (** val reg_to_ltl_argument__o__inject : I8051.register -> Joint.hdw_argument Types.sig0 **) let reg_to_ltl_argument__o__inject x1 = Joint.hdw_argument_from_reg x1 (** val dpi1__o__reg_to_ltl_argument : (I8051.register, 'a1) Types.dPair -> Joint.hdw_argument **) let dpi1__o__reg_to_ltl_argument x1 = Joint.hdw_argument_from_reg x1.Types.dpi1 (** val eject__o__reg_to_ltl_argument : I8051.register Types.sig0 -> Joint.hdw_argument **) let eject__o__reg_to_ltl_argument x1 = Joint.hdw_argument_from_reg (Types.pi1 x1) (** val lTL_premain : ltl_program -> Joint.joint_closed_internal_function **) let lTL_premain p = let l1 = Positive.One in let l2 = Positive.P0 Positive.One in let l3 = Positive.P1 Positive.One in let res = { Joint.joint_if_luniverse = (Positive.P0 (Positive.P0 Positive.One)); Joint.joint_if_runiverse = Positive.One; Joint.joint_if_result = (Obj.magic Types.It); Joint.joint_if_params = (Obj.magic Types.It); Joint.joint_if_stacksize = Nat.O; Joint.joint_if_local_stacksize = Nat.O; Joint.joint_if_code = (Obj.magic (Identifiers.empty_map PreIdentifiers.LabelTag)); Joint.joint_if_entry = (Obj.magic l1) } in let res0 = Joint.add_graph lTL (Joint.prog_names (Joint.graph_params_to_params lTL) p) l1 (Joint.Sequential ((Joint.COST_LABEL p.Joint.init_cost_label), (Obj.magic l2))) res in let res1 = Joint.add_graph lTL (Joint.prog_names (Joint.graph_params_to_params lTL) p) l2 (Joint.Sequential ((Joint.CALL ((Types.Inl p.Joint.joint_prog.AST.prog_main), (Obj.magic Nat.O), (Obj.magic Types.It))), (Obj.magic l3))) res0 in let res2 = Joint.add_graph lTL (Joint.prog_names (Joint.graph_params_to_params lTL) p) l3 (Joint.Final (Joint.GOTO l3)) res1 in res2