open Preamble open Fixpoints open Set_adt 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 FoldStuff open BitVector open Positive open Z open BitVectorZ open Pointers open ByteValues open BackEndOps open Joint open ERTL open Div_and_mod open Jmeq open Russell open Bool open Relations open Nat open Hints_declaration open Core_notation open Pts open Logic open Types open List open Util open Liveness type decision = | Decision_spill of Nat.nat | Decision_colour of I8051.register (** val decision_rect_Type4 : (Nat.nat -> 'a1) -> (I8051.register -> 'a1) -> decision -> 'a1 **) let rec decision_rect_Type4 h_decision_spill h_decision_colour = function | Decision_spill x_18946 -> h_decision_spill x_18946 | Decision_colour x_18947 -> h_decision_colour x_18947 (** val decision_rect_Type5 : (Nat.nat -> 'a1) -> (I8051.register -> 'a1) -> decision -> 'a1 **) let rec decision_rect_Type5 h_decision_spill h_decision_colour = function | Decision_spill x_18951 -> h_decision_spill x_18951 | Decision_colour x_18952 -> h_decision_colour x_18952 (** val decision_rect_Type3 : (Nat.nat -> 'a1) -> (I8051.register -> 'a1) -> decision -> 'a1 **) let rec decision_rect_Type3 h_decision_spill h_decision_colour = function | Decision_spill x_18956 -> h_decision_spill x_18956 | Decision_colour x_18957 -> h_decision_colour x_18957 (** val decision_rect_Type2 : (Nat.nat -> 'a1) -> (I8051.register -> 'a1) -> decision -> 'a1 **) let rec decision_rect_Type2 h_decision_spill h_decision_colour = function | Decision_spill x_18961 -> h_decision_spill x_18961 | Decision_colour x_18962 -> h_decision_colour x_18962 (** val decision_rect_Type1 : (Nat.nat -> 'a1) -> (I8051.register -> 'a1) -> decision -> 'a1 **) let rec decision_rect_Type1 h_decision_spill h_decision_colour = function | Decision_spill x_18966 -> h_decision_spill x_18966 | Decision_colour x_18967 -> h_decision_colour x_18967 (** val decision_rect_Type0 : (Nat.nat -> 'a1) -> (I8051.register -> 'a1) -> decision -> 'a1 **) let rec decision_rect_Type0 h_decision_spill h_decision_colour = function | Decision_spill x_18971 -> h_decision_spill x_18971 | Decision_colour x_18972 -> h_decision_colour x_18972 (** val decision_inv_rect_Type4 : decision -> (Nat.nat -> __ -> 'a1) -> (I8051.register -> __ -> 'a1) -> 'a1 **) let decision_inv_rect_Type4 hterm h1 h2 = let hcut = decision_rect_Type4 h1 h2 hterm in hcut __ (** val decision_inv_rect_Type3 : decision -> (Nat.nat -> __ -> 'a1) -> (I8051.register -> __ -> 'a1) -> 'a1 **) let decision_inv_rect_Type3 hterm h1 h2 = let hcut = decision_rect_Type3 h1 h2 hterm in hcut __ (** val decision_inv_rect_Type2 : decision -> (Nat.nat -> __ -> 'a1) -> (I8051.register -> __ -> 'a1) -> 'a1 **) let decision_inv_rect_Type2 hterm h1 h2 = let hcut = decision_rect_Type2 h1 h2 hterm in hcut __ (** val decision_inv_rect_Type1 : decision -> (Nat.nat -> __ -> 'a1) -> (I8051.register -> __ -> 'a1) -> 'a1 **) let decision_inv_rect_Type1 hterm h1 h2 = let hcut = decision_rect_Type1 h1 h2 hterm in hcut __ (** val decision_inv_rect_Type0 : decision -> (Nat.nat -> __ -> 'a1) -> (I8051.register -> __ -> 'a1) -> 'a1 **) let decision_inv_rect_Type0 hterm h1 h2 = let hcut = decision_rect_Type0 h1 h2 hterm in hcut __ (** val decision_discr : decision -> decision -> __ **) let decision_discr x y = Logic.eq_rect_Type2 x (match x with | Decision_spill a0 -> Obj.magic (fun _ dH -> dH __) | Decision_colour a0 -> Obj.magic (fun _ dH -> dH __)) y (** val decision_jmdiscr : decision -> decision -> __ **) let decision_jmdiscr x y = Logic.eq_rect_Type2 x (match x with | Decision_spill a0 -> Obj.magic (fun _ dH -> dH __) | Decision_colour a0 -> Obj.magic (fun _ dH -> dH __)) y type coloured_graph = { colouring : (Liveness.vertex -> decision); spilled_no : Nat.nat } (** val coloured_graph_rect_Type4 : Fixpoints.valuation -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> 'a1) -> coloured_graph -> 'a1 **) let rec coloured_graph_rect_Type4 before h_mk_coloured_graph x_19007 = let { colouring = colouring0; spilled_no = spilled_no0 } = x_19007 in h_mk_coloured_graph colouring0 spilled_no0 __ __ (** val coloured_graph_rect_Type5 : Fixpoints.valuation -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> 'a1) -> coloured_graph -> 'a1 **) let rec coloured_graph_rect_Type5 before h_mk_coloured_graph x_19009 = let { colouring = colouring0; spilled_no = spilled_no0 } = x_19009 in h_mk_coloured_graph colouring0 spilled_no0 __ __ (** val coloured_graph_rect_Type3 : Fixpoints.valuation -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> 'a1) -> coloured_graph -> 'a1 **) let rec coloured_graph_rect_Type3 before h_mk_coloured_graph x_19011 = let { colouring = colouring0; spilled_no = spilled_no0 } = x_19011 in h_mk_coloured_graph colouring0 spilled_no0 __ __ (** val coloured_graph_rect_Type2 : Fixpoints.valuation -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> 'a1) -> coloured_graph -> 'a1 **) let rec coloured_graph_rect_Type2 before h_mk_coloured_graph x_19013 = let { colouring = colouring0; spilled_no = spilled_no0 } = x_19013 in h_mk_coloured_graph colouring0 spilled_no0 __ __ (** val coloured_graph_rect_Type1 : Fixpoints.valuation -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> 'a1) -> coloured_graph -> 'a1 **) let rec coloured_graph_rect_Type1 before h_mk_coloured_graph x_19015 = let { colouring = colouring0; spilled_no = spilled_no0 } = x_19015 in h_mk_coloured_graph colouring0 spilled_no0 __ __ (** val coloured_graph_rect_Type0 : Fixpoints.valuation -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> 'a1) -> coloured_graph -> 'a1 **) let rec coloured_graph_rect_Type0 before h_mk_coloured_graph x_19017 = let { colouring = colouring0; spilled_no = spilled_no0 } = x_19017 in h_mk_coloured_graph colouring0 spilled_no0 __ __ (** val colouring : Fixpoints.valuation -> coloured_graph -> Liveness.vertex -> decision **) let rec colouring before xxx = xxx.colouring (** val spilled_no : Fixpoints.valuation -> coloured_graph -> Nat.nat **) let rec spilled_no before xxx = xxx.spilled_no (** val coloured_graph_inv_rect_Type4 : Fixpoints.valuation -> coloured_graph -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> __ -> 'a1) -> 'a1 **) let coloured_graph_inv_rect_Type4 x1 hterm h1 = let hcut = coloured_graph_rect_Type4 x1 h1 hterm in hcut __ (** val coloured_graph_inv_rect_Type3 : Fixpoints.valuation -> coloured_graph -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> __ -> 'a1) -> 'a1 **) let coloured_graph_inv_rect_Type3 x1 hterm h1 = let hcut = coloured_graph_rect_Type3 x1 h1 hterm in hcut __ (** val coloured_graph_inv_rect_Type2 : Fixpoints.valuation -> coloured_graph -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> __ -> 'a1) -> 'a1 **) let coloured_graph_inv_rect_Type2 x1 hterm h1 = let hcut = coloured_graph_rect_Type2 x1 h1 hterm in hcut __ (** val coloured_graph_inv_rect_Type1 : Fixpoints.valuation -> coloured_graph -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> __ -> 'a1) -> 'a1 **) let coloured_graph_inv_rect_Type1 x1 hterm h1 = let hcut = coloured_graph_rect_Type1 x1 h1 hterm in hcut __ (** val coloured_graph_inv_rect_Type0 : Fixpoints.valuation -> coloured_graph -> ((Liveness.vertex -> decision) -> Nat.nat -> __ -> __ -> __ -> 'a1) -> 'a1 **) let coloured_graph_inv_rect_Type0 x1 hterm h1 = let hcut = coloured_graph_rect_Type0 x1 h1 hterm in hcut __ (** val coloured_graph_discr : Fixpoints.valuation -> coloured_graph -> coloured_graph -> __ **) let coloured_graph_discr a1 x y = Logic.eq_rect_Type2 x (let { colouring = a0; spilled_no = a10 } = x in Obj.magic (fun _ dH -> dH __ __ __ __)) y (** val coloured_graph_jmdiscr : Fixpoints.valuation -> coloured_graph -> coloured_graph -> __ **) let coloured_graph_jmdiscr a1 x y = Logic.eq_rect_Type2 x (let { colouring = a0; spilled_no = a10 } = x in Obj.magic (fun _ dH -> dH __ __ __ __)) y type coloured_graph_computer = AST.ident List.list -> Joint.joint_internal_function -> Fixpoints.valuation -> coloured_graph