sig
  val symbol : ('b, 'a) ZZ3_sigs.S.symbol -> 'ZZ3_sigs.S.term
  val simplify :
    ?params:Z3.Params.params -> 'ZZ3_sigs.S.term -> 'ZZ3_sigs.S.term
  val eq :
    'ZZ3_sigs.S.term ->
    'ZZ3_sigs.S.term -> [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val distinct :
    'ZZ3_sigs.S.term list -> [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ite :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    ([< ZZ3_sigs.S.zany ] as 'a) ZZ3_sigs.S.term ->
    'ZZ3_sigs.S.term -> 'ZZ3_sigs.S.term
  val int : int -> [> ZZ3_sigs.S.zint ] ZZ3_sigs.S.term
  val bigint : Z.t -> [> ZZ3_sigs.S.zint ] ZZ3_sigs.S.term
  val rat : Q.t -> [> ZZ3_sigs.S.zreal ] ZZ3_sigs.S.term
  val i2q :
    [< ZZ3_sigs.S.zint ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zreal ] ZZ3_sigs.S.term
  val q2i :
    [< ZZ3_sigs.S.zreal ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zint ] ZZ3_sigs.S.term
  val true_ : [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val false_ : [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val bool : bool -> [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val and_ :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term list ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val or_ :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term list ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val not :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val imply :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val iff :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val xor :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ge :
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val le :
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val gt :
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val lt :
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val neg :
    ([< ZZ3_sigs.S.znum ] as 'a) ZZ3_sigs.S.term -> 'ZZ3_sigs.S.term
  val add :
    ([< ZZ3_sigs.S.znum ] as 'a) ZZ3_sigs.S.term list -> 'ZZ3_sigs.S.term
  val sub :
    ([< ZZ3_sigs.S.znum ] as 'a) ZZ3_sigs.S.term list -> 'ZZ3_sigs.S.term
  val mul :
    ([< ZZ3_sigs.S.znum ] as 'a) ZZ3_sigs.S.term list -> 'ZZ3_sigs.S.term
  val ixor :
    [< ZZ3_sigs.S.zint ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zint ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zint ] ZZ3_sigs.S.term
  val div :
    ([< ZZ3_sigs.S.znum ] as 'a) ZZ3_sigs.S.term ->
    'ZZ3_sigs.S.term -> 'ZZ3_sigs.S.term
  val mod_ :
    [< ZZ3_sigs.S.zint ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zint ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zint ] ZZ3_sigs.S.term
  val rem :
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.znum ] ZZ3_sigs.S.term
  val ( ! ) : ('b, 'a) ZZ3_sigs.S.symbol -> 'ZZ3_sigs.S.term
  val ( = ) :
    'ZZ3_sigs.S.term ->
    'ZZ3_sigs.S.term -> [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( <> ) :
    'ZZ3_sigs.S.term ->
    'ZZ3_sigs.S.term -> [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( && ) :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( || ) :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( <=> ) :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( ==> ) :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( lxor ) :
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( < ) :
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( <= ) :
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( > ) :
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( >= ) :
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.znum ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zbool ] ZZ3_sigs.S.term
  val ( + ) :
    ([< ZZ3_sigs.S.znum ] as 'a) ZZ3_sigs.S.term ->
    'ZZ3_sigs.S.term -> 'ZZ3_sigs.S.term
  val ( - ) :
    ([< ZZ3_sigs.S.znum ] as 'a) ZZ3_sigs.S.term ->
    'ZZ3_sigs.S.term -> 'ZZ3_sigs.S.term
  val ( * ) :
    ([< ZZ3_sigs.S.znum ] as 'a) ZZ3_sigs.S.term ->
    'ZZ3_sigs.S.term -> 'ZZ3_sigs.S.term
  val ( / ) :
    ([< ZZ3_sigs.S.znum ] as 'a) ZZ3_sigs.S.term ->
    'ZZ3_sigs.S.term -> 'ZZ3_sigs.S.term
  val ( mod ) :
    [< ZZ3_sigs.S.zint ] ZZ3_sigs.S.term ->
    [< ZZ3_sigs.S.zint ] ZZ3_sigs.S.term ->
    [> ZZ3_sigs.S.zint ] ZZ3_sigs.S.term
  val with_typ : ('a, 'b) ZZ3_sigs.S.typ -> '-> 'ZZ3_sigs.S.term
  val to_string : 'ZZ3_sigs.S.term -> string
  val raw : 'ZZ3_sigs.S.term -> Z3.Expr.expr
end