sig
  module Z :
    sig
      type t = Big_int.big_int
      val zero : Cardinality.Z.t
      val of_int : int -> Cardinality.Z.t
      val to_int : Cardinality.Z.t -> int option
      val one : Cardinality.Z.t
      val sign : Cardinality.Z.t -> int
      val equal : Cardinality.Z.t -> Cardinality.Z.t -> bool
      val to_string : Cardinality.Z.t -> string
      val pp_print : Cardinality.Z.t CCFormat.printer
      val compare : Cardinality.Z.t -> Cardinality.Z.t -> int
      val hash : Cardinality.Z.t -> int
      val ( + ) : Cardinality.Z.t -> Cardinality.Z.t -> Cardinality.Z.t
      val ( * ) : Cardinality.Z.t -> Cardinality.Z.t -> Cardinality.Z.t
    end
  type t =
      Exact of Cardinality.Z.t
    | QuasiFiniteGEQ of Cardinality.Z.t
    | Infinite
    | Unknown
  val ( + ) : Cardinality.t -> Cardinality.t -> Cardinality.t
  val ( * ) : Cardinality.t -> Cardinality.t -> Cardinality.t
  val zero : Cardinality.t
  val one : Cardinality.t
  val of_int : int -> Cardinality.t
  val of_z : Cardinality.Z.t -> Cardinality.t
  val is_zero : Cardinality.t -> bool
  val is_finite : Cardinality.t -> bool
  val sum : Cardinality.t list -> Cardinality.t
  val product : Cardinality.t list -> Cardinality.t
  val infinite : Cardinality.t
  val unknown : Cardinality.t
  val quasi_finite_geq : Cardinality.Z.t -> Cardinality.t
  val quasi_finite_zero : Cardinality.t
  val quasi_finite_nonzero : Cardinality.t
  val equal : t -> t -> bool
  val hash_fun : t CCHash.hash_fun
  val hash : t -> int
  val print : Cardinality.t CCFormat.printer
end