sig
  type aggregate = {
    left : TopDown.S.T.t;
    constructor : TopDown.S.const;
    var : TopDown.S.T.t;
    guard : TopDown.S.T.t;
  }
  type t =
      LitPos of TopDown.S.T.t
    | LitNeg of TopDown.S.T.t
    | LitAggr of TopDown.S.Lit.aggregate
  val mk_pos : TopDown.S.T.t -> TopDown.S.Lit.t
  val mk_neg : TopDown.S.T.t -> TopDown.S.Lit.t
  val mk : bool -> TopDown.S.T.t -> TopDown.S.Lit.t
  val mk_aggr :
    left:TopDown.S.T.t ->
    constructor:TopDown.S.const ->
    var:TopDown.S.T.t -> guard:TopDown.S.T.t -> TopDown.S.Lit.t
  val eq : TopDown.S.Lit.t -> TopDown.S.Lit.t -> bool
  val hash : TopDown.S.Lit.t -> int
  val to_term : TopDown.S.Lit.t -> TopDown.S.T.t
  val fmap :
    (TopDown.S.T.t -> TopDown.S.T.t) -> TopDown.S.Lit.t -> TopDown.S.Lit.t
  val to_string : TopDown.S.Lit.t -> string
  val pp : Pervasives.out_channel -> TopDown.S.Lit.t -> unit
  val fmt : Format.formatter -> TopDown.S.Lit.t -> unit
end