sig
  val name : string
  exception InvalidProblem of string
  type term = Nunchaku_core.TermInner.Default.t
  type unmangle_state
  val monomorphize :
    ?depth_limit:int ->
    ?always_mangle:bool ->
    (Monomorphization.term, Monomorphization.term) Nunchaku_core.Problem.t ->
    (Monomorphization.term, Monomorphization.term) Nunchaku_core.Problem.t *
    Monomorphization.unmangle_state
  val unmangle_term :
    state:Monomorphization.unmangle_state ->
    Monomorphization.term -> Monomorphization.term
  val unmangle_model :
    state:Monomorphization.unmangle_state ->
    (Monomorphization.term, Monomorphization.term) Nunchaku_core.Model.t ->
    (Monomorphization.term, Monomorphization.term) Nunchaku_core.Model.t
  val pipe :
    always_mangle:bool ->
    print:bool ->
    check:bool ->
    ((Monomorphization.term, Monomorphization.term) Nunchaku_core.Problem.t,
     (Monomorphization.term, Monomorphization.term) Nunchaku_core.Problem.t,
     (Monomorphization.term, Monomorphization.term)
     Nunchaku_core.Problem.Res.t,
     (Monomorphization.term, Monomorphization.term)
     Nunchaku_core.Problem.Res.t)
    Nunchaku_core.Transform.t
  val pipe_with :
    decode:(Monomorphization.unmangle_state -> '-> 'd) ->
    always_mangle:bool ->
    print:bool ->
    check:bool ->
    ((Monomorphization.term, Monomorphization.term) Nunchaku_core.Problem.t,
     (Monomorphization.term, Monomorphization.term) Nunchaku_core.Problem.t,
     'c, 'd)
    Nunchaku_core.Transform.t
end