sig
  val self : State.t
  val set_modes :
    ?calls:SlicingParameters.Mode.Calls.t ->
    ?callers:SlicingParameters.Mode.Callers.t ->
    ?sliceUndef:SlicingParameters.Mode.SliceUndef.t ->
    ?keepAnnotations:SlicingParameters.Mode.KeepAnnotations.t -> unit -> unit
  module Project :
    sig
      val reset_slicing : unit -> unit
      val change_slicing_level : Cil_types.kernel_function -> int -> unit
      val extract :
        ?f_slice_names:(Cil_types.kernel_function -> bool -> int -> string) ->
        string -> Project.t
      val print_dot : filename:string -> title:string -> unit
      val default_slice_names :
        Cil_types.kernel_function -> bool -> int -> string
      val is_called : Cil_types.kernel_function -> bool
      val has_persistent_selection : Cil_types.kernel_function -> bool
      val is_directly_called_internal : Cil_types.kernel_function -> bool
      val pretty : Stdlib.Format.formatter -> unit
    end
  module Mark :
    sig
      type t = SlicingTypes.sl_mark
      val dyn_t : Api.Mark.t Type.t
      val make : data:bool -> addr:bool -> ctrl:bool -> Api.Mark.t
      val compare : Api.Mark.t -> Api.Mark.t -> int
      val is_bottom : Api.Mark.t -> bool
      val is_spare : Api.Mark.t -> bool
      val is_ctrl : Api.Mark.t -> bool
      val is_data : Api.Mark.t -> bool
      val is_addr : Api.Mark.t -> bool
      val get_from_src_func : Cil_types.kernel_function -> Api.Mark.t
      val pretty : Stdlib.Format.formatter -> Api.Mark.t -> unit
    end
  module Select :
    sig
      type t = SlicingTypes.sl_select
      val dyn_t : Api.Select.t Type.t
      type set = SlicingCmds.set
      val dyn_set : Api.Select.set Type.t
      val empty_selects : Api.Select.set
      val select_stmt :
        Api.Select.set ->
        spare:bool ->
        Cil_datatype.Stmt.t -> Cil_types.kernel_function -> Api.Select.set
      val select_stmt_ctrl :
        Api.Select.set ->
        spare:bool ->
        Cil_datatype.Stmt.t -> Cil_types.kernel_function -> Api.Select.set
      val select_stmt_lval_rw :
        Api.Select.set ->
        Api.Mark.t ->
        rd:Datatype.String.Set.t ->
        wr:Datatype.String.Set.t ->
        Cil_datatype.Stmt.t ->
        eval:Cil_datatype.Stmt.t ->
        Cil_types.kernel_function -> Api.Select.set
      val select_stmt_lval :
        Api.Select.set ->
        Api.Mark.t ->
        Datatype.String.Set.t ->
        before:bool ->
        Cil_datatype.Stmt.t ->
        eval:Cil_datatype.Stmt.t ->
        Cil_types.kernel_function -> Api.Select.set
      val select_stmt_zone :
        Api.Select.set ->
        Api.Mark.t ->
        Locations.Zone.t ->
        before:bool ->
        Cil_types.stmt -> Cil_types.kernel_function -> Api.Select.set
      val select_stmt_term :
        Api.Select.set ->
        Api.Mark.t ->
        Cil_types.term ->
        Cil_types.stmt -> Cil_types.kernel_function -> Api.Select.set
      val select_stmt_pred :
        Api.Select.set ->
        Api.Mark.t ->
        Cil_types.predicate ->
        Cil_types.stmt -> Cil_types.kernel_function -> Api.Select.set
      val select_stmt_annot :
        Api.Select.set ->
        Api.Mark.t ->
        spare:bool ->
        Cil_types.code_annotation ->
        Cil_types.stmt -> Cil_types.kernel_function -> Api.Select.set
      val select_stmt_annots :
        Api.Select.set ->
        Api.Mark.t ->
        spare:bool ->
        threat:bool ->
        user_assert:bool ->
        slicing_pragma:bool ->
        loop_inv:bool ->
        loop_var:bool ->
        Cil_datatype.Stmt.t -> Cil_types.kernel_function -> Api.Select.set
      val select_func_lval_rw :
        Api.Select.set ->
        Api.Mark.t ->
        rd:Datatype.String.Set.t ->
        wr:Datatype.String.Set.t ->
        eval:Cil_datatype.Stmt.t ->
        Cil_types.kernel_function -> Api.Select.set
      val select_func_lval :
        Api.Select.set ->
        Api.Mark.t ->
        Datatype.String.Set.t -> Cil_types.kernel_function -> Api.Select.set
      val select_func_zone :
        Api.Select.set ->
        Api.Mark.t ->
        Locations.Zone.t -> Cil_types.kernel_function -> Api.Select.set
      val select_func_return :
        Api.Select.set ->
        spare:bool -> Cil_types.kernel_function -> Api.Select.set
      val select_func_calls_to :
        Api.Select.set ->
        spare:bool -> Cil_types.kernel_function -> Api.Select.set
      val select_func_calls_into :
        Api.Select.set ->
        spare:bool -> Cil_types.kernel_function -> Api.Select.set
      val select_func_annots :
        Api.Select.set ->
        Api.Mark.t ->
        spare:bool ->
        threat:bool ->
        user_assert:bool ->
        slicing_pragma:bool ->
        loop_inv:bool ->
        loop_var:bool -> Cil_types.kernel_function -> Api.Select.set
      val select_pdg_nodes :
        Api.Select.set ->
        Api.Mark.t ->
        PdgTypes.Node.t list -> Cil_types.kernel_function -> Api.Select.set
      val get_function : Api.Select.t -> Cil_types.kernel_function
      val merge_internal : Api.Select.t -> Api.Select.t -> Api.Select.t
      val add_to_selects_internal :
        Api.Select.t -> Api.Select.set -> Api.Select.set
      val iter_selects_internal :
        (Api.Select.t -> unit) -> Api.Select.set -> unit
      val fold_selects_internal :
        ('-> Api.Select.t -> 'a) -> '-> Api.Select.set -> 'a
      val select_stmt_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t -> Cil_types.stmt -> Api.Mark.t -> Api.Select.t
      val select_label_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t ->
        Cil_types.logic_label -> Api.Mark.t -> Api.Select.t
      val select_min_call_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t -> Cil_types.stmt -> Api.Mark.t -> Api.Select.t
      val select_stmt_zone_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t ->
        Cil_types.stmt ->
        before:bool -> Locations.Zone.t -> Api.Mark.t -> Api.Select.t
      val select_zone_at_entry_point_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t ->
        Locations.Zone.t -> Api.Mark.t -> Api.Select.t
      val select_zone_at_end_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t ->
        Locations.Zone.t -> Api.Mark.t -> Api.Select.t
      val select_modified_output_zone_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t ->
        Locations.Zone.t -> Api.Mark.t -> Api.Select.t
      val select_stmt_ctrl_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t -> Cil_types.stmt -> Api.Select.t
      val select_entry_point_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t -> Api.Mark.t -> Api.Select.t
      val select_return_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t -> Api.Mark.t -> Api.Select.t
      val select_decl_var_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t ->
        Cil_types.varinfo -> Api.Mark.t -> Api.Select.t
      val select_pdg_nodes_internal :
        Cil_types.kernel_function ->
        ?select:Api.Select.t ->
        PdgTypes.Node.t list -> Api.Mark.t -> Api.Select.t
      val pretty : Stdlib.Format.formatter -> Api.Select.t -> unit
    end
  module Slice :
    sig
      type t = SlicingTypes.sl_fct_slice
      val dyn_t : Api.Slice.t Type.t
      val create : Cil_types.kernel_function -> Api.Slice.t
      val remove : Api.Slice.t -> unit
      val remove_uncalled : unit -> unit
      val get_all : Cil_types.kernel_function -> Api.Slice.t list
      val get_function : Api.Slice.t -> Cil_types.kernel_function
      val get_callers : Api.Slice.t -> Api.Slice.t list
      val get_called_slice :
        Api.Slice.t -> Cil_types.stmt -> Api.Slice.t option
      val get_called_funcs :
        Api.Slice.t -> Cil_types.stmt -> Cil_types.kernel_function list
      val get_mark_from_stmt : Api.Slice.t -> Cil_types.stmt -> Api.Mark.t
      val get_mark_from_label :
        Api.Slice.t -> Cil_types.stmt -> Cil_types.label -> Api.Mark.t
      val get_mark_from_local_var :
        Api.Slice.t -> Cil_types.varinfo -> Api.Mark.t
      val get_mark_from_formal :
        Api.Slice.t -> Cil_datatype.Varinfo.t -> Api.Mark.t
      val get_user_mark_from_inputs : Api.Slice.t -> Api.Mark.t
      val get_num_id : Api.Slice.t -> int
      val from_num_id : Cil_types.kernel_function -> int -> Api.Slice.t
      val pretty : Stdlib.Format.formatter -> Api.Slice.t -> unit
    end
  module Request :
    sig
      val apply_all : propagate_to_callers:bool -> unit
      val apply_all_internal : unit -> unit
      val apply_next_internal : unit -> unit
      val propagate_user_marks : unit -> unit
      val copy_slice : Api.Slice.t -> Api.Slice.t
      val split_slice : Api.Slice.t -> Api.Slice.t list
      val merge_slices :
        Api.Slice.t -> Api.Slice.t -> replace:bool -> Api.Slice.t
      val add_call_slice : caller:Api.Slice.t -> to_call:Api.Slice.t -> unit
      val add_call_fun :
        caller:Api.Slice.t -> to_call:Cil_types.kernel_function -> unit
      val add_call_min_fun :
        caller:Api.Slice.t -> to_call:Cil_types.kernel_function -> unit
      val add_selection : Api.Select.set -> unit
      val add_persistent_selection : Api.Select.set -> unit
      val add_persistent_cmdline : unit -> unit
      val is_request_empty_internal : unit -> bool
      val add_slice_selection_internal : Api.Slice.t -> Api.Select.t -> unit
      val add_selection_internal : Api.Select.t -> unit
      val pretty : Stdlib.Format.formatter -> unit
    end
  val split_slice : Api.Slice.t -> Api.Slice.t list
  val merge_slices :
    Api.Slice.t -> Api.Slice.t -> replace:bool -> Api.Slice.t
  val copy_slice : Api.Slice.t -> Api.Slice.t
end