sig
  type t
  val view : FO.T.t -> (FO.T.t, FO.Ty.t) FO.view
  val compare : FO.T.t -> FO.T.t -> int
  val equal : FO.T.t -> FO.T.t -> bool
  val hash : FO.T.t -> int
  val builtin : FO.Builtin.t -> FO.T.t
  val const : FO.id -> FO.T.t
  val app : FO.id -> FO.T.t list -> FO.T.t
  val data_test : FO.id -> FO.T.t -> FO.T.t
  val data_select : FO.id -> int -> FO.T.t -> FO.T.t
  val undefined : FO.id -> FO.T.t -> FO.T.t
  val undefined_atom : FO.id -> FO.Ty.toplevel_ty -> FO.T.t list -> FO.T.t
  val unparsable : FO.Ty.t -> FO.T.t
  val var : FO.Ty.t FO.var -> FO.T.t
  val let_ : FO.Ty.t FO.var -> FO.T.t -> FO.T.t -> FO.T.t
  val fun_ : FO.Ty.t FO.var -> FO.T.t -> FO.T.t
  val mu : FO.Ty.t FO.var -> FO.T.t -> FO.T.t
  val ite : FO.T.t -> FO.T.t -> FO.T.t -> FO.T.t
  val true_ : FO.T.t
  val false_ : FO.T.t
  val eq : FO.T.t -> FO.T.t -> FO.T.t
  val and_ : FO.T.t list -> FO.T.t
  val or_ : FO.T.t list -> FO.T.t
  val not_ : FO.T.t -> FO.T.t
  val imply : FO.T.t -> FO.T.t -> FO.T.t
  val equiv : FO.T.t -> FO.T.t -> FO.T.t
  val forall : FO.Ty.t FO.var -> FO.T.t -> FO.T.t
  val exists : FO.Ty.t FO.var -> FO.T.t -> FO.T.t
  val to_seq : FO.T.t -> FO.T.t Sequence.t
end