sig
  type state = Relations_type.Model.t
  type t = Cvalue_type.V.t
  exception Aborted
  val self : State.t
  val mark_as_computed : unit -> unit
  val compute : (unit -> unit) Pervasives.ref
  val is_computed : unit -> bool
  module Table :
    sig
      val self : State.t
      val name : string
      val kind : State.kind
      val mark_as_computed : ?project:Project.t -> unit -> unit
      val is_computed : ?project:Project.t -> unit -> bool
      module Datatype : Datatype.S
      val howto_marshal : (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit
      type key = Cil_types.kinstr
      type data = state
      val replace : key -> data -> unit
      val add : key -> data -> unit
      val clear : unit -> unit
      val length : unit -> int
      val iter : (key -> data -> unit) -> unit
      val fold : (key -> data -> '-> 'a) -> '-> 'a
      val memo : ?change:(data -> data) -> (key -> data) -> key -> data
      val find : key -> data
      val find_all : key -> data list
      val mem : key -> bool
      val remove : key -> unit
    end
  val degeneration_occurred :
    (Cil_types.kinstr -> Cil_types.lval option -> unit) Pervasives.ref
  val register_builtin :
    (string ->
     (Db.Value.state ->
      (Cil_types.exp * Db.Value.t * Cvalue_type.V_Offsetmap.t) list ->
      Cvalue_type.V_Offsetmap.t option * Db.Value.state *
      Locations.Location_Bits.Top_Param.t) ->
     unit)
    Pervasives.ref
  val mem_builtin : (string -> bool) Pervasives.ref
  val fun_set_args : Db.Value.t list -> unit
  val fun_use_default_args : unit -> unit
  val fun_get_args : unit -> Db.Value.t list option
  exception Incorrect_number_of_arguments
  val globals_set_initial_state : Db.Value.state -> unit
  val globals_use_default_initial_state : unit -> unit
  val globals_state : unit -> Db.Value.state
  val globals_use_supplied_state : unit -> bool
  val get_initial_state : Db_types.kernel_function -> Db.Value.state
  val get_state : Cil_types.kinstr -> Db.Value.state
  val find : Db.Value.state -> Locations.location -> Db.Value.t
  val eval_lval :
    (with_alarms:CilE.warn_mode ->
     Locations.Zone.t option ->
     Db.Value.state -> Cil_types.lval -> Locations.Zone.t option * Db.Value.t)
    Pervasives.ref
  val eval_expr :
    (with_alarms:CilE.warn_mode ->
     Db.Value.state -> Cil_types.exp -> Db.Value.t)
    Pervasives.ref
  val eval_expr_with_state :
    (with_alarms:CilE.warn_mode ->
     Db.Value.state -> Cil_types.exp -> Db.Value.state * Db.Value.t)
    Pervasives.ref
  val find_lv_plus :
    (with_alarms:CilE.warn_mode ->
     Relations_type.Model.t ->
     Cil_types.exp -> (Cil_types.lval * Ival.t) list)
    Pervasives.ref
  val expr_to_kernel_function :
    (Cil_types.kinstr ->
     with_alarms:CilE.warn_mode ->
     deps:Locations.Zone.t option ->
     Cil_types.exp -> Locations.Zone.t * Kernel_function.Hptset.t)
    Pervasives.ref
  val expr_to_kernel_function_state :
    (Db.Value.state ->
     deps:Locations.Zone.t option ->
     Cil_types.exp -> Locations.Zone.t * Kernel_function.Hptset.t)
    Pervasives.ref
  exception Not_a_call
  val call_to_kernel_function : Cil_types.stmt -> Kernel_function.Hptset.t
  val valid_behaviors :
    (Db_types.kernel_function -> Db.Value.state -> Cil_types.funbehavior list)
    Pervasives.ref
  val is_accessible : Cil_types.kinstr -> bool
  val is_reachable : Db.Value.state -> bool
  val is_reachable_stmt : Cil_types.stmt -> bool
  exception Void_Function
  val find_return_loc : Db_types.kernel_function -> Locations.location
  val is_called : (Db_types.kernel_function -> bool) Pervasives.ref
  val callers :
    (Db_types.kernel_function ->
     (Db_types.kernel_function * Cil_types.stmt list) list)
    Pervasives.ref
  val access :
    (Cil_types.kinstr -> Cil_types.lval -> Db.Value.t) Pervasives.ref
  val access_expr :
    (Cil_types.kinstr -> Cil_types.exp -> Db.Value.t) Pervasives.ref
  val access_location :
    (Cil_types.kinstr -> Locations.location -> Db.Value.t) Pervasives.ref
  val access_after :
    (Cil_types.kinstr -> Cil_types.lval -> Db.Value.t) Pervasives.ref
  val access_location_after :
    (Cil_types.kinstr -> Locations.location -> Db.Value.t) Pervasives.ref
  val lval_to_offsetmap_after :
    (Cil_types.kinstr -> Cil_types.lval -> Cvalue_type.V_Offsetmap.t option)
    Pervasives.ref
  val lval_to_loc :
    (Cil_types.kinstr ->
     with_alarms:CilE.warn_mode -> Cil_types.lval -> Locations.location)
    Pervasives.ref
  val lval_to_loc_with_deps :
    (Cil_types.kinstr ->
     with_alarms:CilE.warn_mode ->
     deps:Locations.Zone.t ->
     Cil_types.lval -> Locations.Zone.t * Locations.location)
    Pervasives.ref
  val lval_to_loc_with_deps_state :
    (Db.Value.state ->
     deps:Locations.Zone.t ->
     Cil_types.lval -> Locations.Zone.t * Locations.location)
    Pervasives.ref
  val lval_to_loc_state :
    (Db.Value.state -> Cil_types.lval -> Locations.location) Pervasives.ref
  val lval_to_offsetmap :
    (Cil_types.kinstr ->
     Cil_types.lval ->
     with_alarms:CilE.warn_mode -> Cvalue_type.V_Offsetmap.t option)
    Pervasives.ref
  val lval_to_offsetmap_state :
    (Db.Value.state -> Cil_types.lval -> Cvalue_type.V_Offsetmap.t option)
    Pervasives.ref
  val lval_to_zone :
    (Cil_types.kinstr ->
     with_alarms:CilE.warn_mode -> Cil_types.lval -> Locations.Zone.t)
    Pervasives.ref
  val lval_to_zone_state :
    (Db.Value.state -> Cil_types.lval -> Locations.Zone.t) Pervasives.ref
  val assigns_to_zone_inputs_state :
    (Db.Value.state ->
     Cil_types.identified_term Cil_types.assigns -> Locations.Zone.t)
    Pervasives.ref
  module Record_Value_Callbacks :
    sig
      type param =
          (Db_types.kernel_function * Cil_types.kinstr) list *
          state Cil_datatype.Kinstr.Hashtbl.t
      type result = unit
      val extend : (param -> result) -> unit
      val apply : param -> result
      val is_empty : unit -> bool
      val clear : unit -> unit
      val length : unit -> int
    end
  module Record_Value_Superposition_Callbacks :
    sig
      type param =
          (Db_types.kernel_function * Cil_types.kinstr) list *
          State_set.t Cil_datatype.Kinstr.Hashtbl.t
      type result = unit
      val extend : (param -> result) -> unit
      val apply : param -> result
      val is_empty : unit -> bool
      val clear : unit -> unit
      val length : unit -> int
    end
  module Record_Value_After_Callbacks :
    sig
      type param =
          (Db_types.kernel_function * Cil_types.kinstr) list *
          state Cil_datatype.Stmt.Hashtbl.t
      type result = unit
      val extend : (param -> result) -> unit
      val apply : param -> result
      val is_empty : unit -> bool
      val clear : unit -> unit
      val length : unit -> int
    end
  module Call_Value_Callbacks :
    sig
      type param = state * (Db_types.kernel_function * Cil_types.kinstr) list
      type result = unit
      val extend : (param -> result) -> unit
      val apply : param -> result
      val is_empty : unit -> bool
      val clear : unit -> unit
      val length : unit -> int
    end
  val pretty : Format.formatter -> Db.Value.t -> unit
  val pretty_state_without_null : Format.formatter -> Db.Value.state -> unit
  val pretty_state : Format.formatter -> Db.Value.state -> unit
  val display : Format.formatter -> Db_types.kernel_function -> unit
  val display_globals : Format.formatter -> unit -> unit
  val noassert_get_state : Cil_types.kinstr -> Db.Value.state
  val initial_state_only_globals : (unit -> Db.Value.state) Pervasives.ref
  val update_table : Cil_types.kinstr -> Db.Value.state -> unit
  val memoize : (Db_types.kernel_function -> unit) Pervasives.ref
  val merge_initial_state :
    Db_types.kernel_function -> Db.Value.state -> unit
end