sig
  type term = Nunchaku_core.TermInner.Default.t
  val name : string
  type mode = [ `Sk_all | `Sk_ho | `Sk_types ]
  type state
  val create : ?prefix:string -> mode:Skolem.mode -> unit -> Skolem.state
  val skolemize :
    state:Skolem.state ->
    ?in_goal:bool ->
    Nunchaku_core.Polarity.t ->
    Skolem.term -> Skolem.term * (Nunchaku_core.ID.t * Skolem.term) list
  val print_state : Format.formatter -> Skolem.state -> unit
  val skolemize_pb :
    state:Skolem.state ->
    (Skolem.term, Skolem.term) Nunchaku_core.Problem.t ->
    (Skolem.term, Skolem.term) Nunchaku_core.Problem.t
  val decode_model :
    skolems_in_model:bool ->
    state:Skolem.state ->
    (Skolem.term, Skolem.term) Nunchaku_core.Model.t ->
    (Skolem.term, Skolem.term) Nunchaku_core.Model.t
  val pipe :
    skolems_in_model:bool ->
    mode:Skolem.mode ->
    print:bool ->
    check:bool ->
    ((Skolem.term, Skolem.term) Nunchaku_core.Problem.t,
     (Skolem.term, Skolem.term) Nunchaku_core.Problem.t,
     (Skolem.term, Skolem.term) Nunchaku_core.Problem.Res.t,
     (Skolem.term, Skolem.term) Nunchaku_core.Problem.Res.t)
    Nunchaku_core.Transform.t
  val pipe_with :
    mode:Skolem.mode ->
    decode:(Skolem.state -> '-> 'd) ->
    print:bool ->
    check:bool ->
    ((Skolem.term, Skolem.term) Nunchaku_core.Problem.t,
     (Skolem.term, Skolem.term) Nunchaku_core.Problem.t, 'c, 'd)
    Nunchaku_core.Transform.t
end