sig
  type problem1 =
      (Nunchaku_core.FO.T.t, Nunchaku_core.FO.Ty.t)
      Nunchaku_core.FO.Problem.t
  type model1 =
      (Nunchaku_core.FO.T.t, Nunchaku_core.FO.Ty.t) Nunchaku_core.Model.t
  type problem2 = Nunchaku_core.FO_rel.problem
  type model2 =
      (Nunchaku_core.FO_rel.expr, Nunchaku_core.FO_rel.sub_universe)
      Nunchaku_core.Model.t
  val name : string
  type state
  val encode_pb :
    FoToRelational.problem1 -> FoToRelational.problem2 * FoToRelational.state
  val decode :
    FoToRelational.state -> FoToRelational.model2 -> FoToRelational.model1
  val pipe_with :
    ?on_decoded:('-> unit) list ->
    decode:(FoToRelational.state -> '-> 'b) ->
    print:bool ->
    (FoToRelational.problem1, FoToRelational.problem2, 'a, 'b)
    Nunchaku_core.Transform.t
  val pipe :
    print:bool ->
    (FoToRelational.problem1, FoToRelational.problem2,
     (Nunchaku_core.FO_rel.expr, Nunchaku_core.FO_rel.sub_universe)
     Nunchaku_core.Problem.Res.t,
     (Nunchaku_core.FO.T.t, Nunchaku_core.FO.Ty.t)
     Nunchaku_core.Problem.Res.t)
    Nunchaku_core.Transform.t
end