sig
  type ('t, 'ty) t = {
    statements : ('t, 'ty) FO.statement CCVector.ro_vector;
    meta : FO.metadata;
  }
  val make :
    meta:FO.metadata ->
    ('t, 'ty) FO.statement CCVector.ro_vector -> ('t, 'ty) FO.Problem.t
  val of_list :
    meta:FO.metadata -> ('t, 'ty) FO.statement list -> ('t, 'ty) FO.Problem.t
  val statements :
    ('t, 'ty) FO.Problem.t -> ('t, 'ty) FO.statement CCVector.ro_vector
  val meta : ('a, 'b) FO.Problem.t -> FO.metadata
  val map :
    meta:FO.metadata ->
    (('t, 'ty) FO.statement -> ('t2, 'ty2) FO.statement) ->
    ('t, 'ty) FO.Problem.t -> ('t2, 'ty2) FO.Problem.t
  val flat_map :
    meta:FO.metadata ->
    (('t, 'ty) FO.statement -> ('t2, 'ty2) FO.statement list) ->
    ('t, 'ty) FO.Problem.t -> ('t2, 'ty2) FO.Problem.t
  val fold_flat_map :
    meta:FO.metadata ->
    ('acc -> ('t, 'ty) FO.statement -> 'acc * ('t2, 'ty2) FO.statement list) ->
    'acc -> ('t, 'ty) FO.Problem.t -> 'acc * ('t2, 'ty2) FO.Problem.t
  val to_seq : ('t, 'ty) FO.Problem.t -> ('t, 'ty) FO.statement Sequence.t
end