sig
  type 'a guard = { assuming : 'a list; asserting : 'a list; }
  val empty_guard : 'TermInner.Builtin.guard
  val map_guard :
    ('-> 'b) -> 'TermInner.Builtin.guard -> 'TermInner.Builtin.guard
  val merge_guard :
    'TermInner.Builtin.guard ->
    'TermInner.Builtin.guard -> 'TermInner.Builtin.guard
  type 'a t =
      [ `And of 'a list
      | `DataSelect of TermInner.id * int
      | `DataTest of TermInner.id
      | `Eq of 'a * 'a
      | `False
      | `Guard of 'a * 'TermInner.Builtin.guard
      | `Imply of 'a * 'a
      | `Ite of 'a * 'a * 'a
      | `Not of 'a
      | `Or of 'a list
      | `True
      | `Undefined_atom of TermInner.id * 'a
      | `Undefined_self of TermInner.id * 'a
      | `Unparsable of 'a ]
  val prec : 'TermInner.Builtin.t -> TermInner.prec
  val print_infix_list :
    (Format.formatter -> '-> unit) ->
    string -> Format.formatter -> 'a list -> unit
  val pp :
    'CCFormat.printer -> CCFormat.t -> 'TermInner.Builtin.t -> unit
  val equal :
    ('-> '-> bool) ->
    'TermInner.Builtin.t -> 'TermInner.Builtin.t -> bool
  val map : f:('-> 'b) -> 'TermInner.Builtin.t -> 'TermInner.Builtin.t
  val fold :
    f:('acc -> '-> 'acc) -> x:'acc -> 'TermInner.Builtin.t -> 'acc
  val fold2_l :
    f:('-> '-> '-> 'a) ->
    fail:(unit -> 'a) -> x:'-> 'b list -> 'c list -> 'a
  val fold2 :
    f:('acc -> '-> '-> 'acc) ->
    fail:(unit -> 'acc) ->
    x:'acc -> 'TermInner.Builtin.t -> 'TermInner.Builtin.t -> 'acc
  val iter : ('-> unit) -> 'TermInner.Builtin.t -> unit
  val to_seq : 'TermInner.Builtin.t -> ('-> unit) -> unit
  val to_sexp : ('-> Sexp_lib.t) -> 'TermInner.Builtin.t -> Sexp_lib.t
end