type attributes = BatSet.String.t (** given [bound], every matching tuple can be produced, and there are at most [yields]. *) type mode = {bound: attributes; yields: Cardinality.t} type t = mode list val mode : string list -> Cardinality.t -> mode val generation : t -> attributes -> Cardinality.t option val exhaustible : t -> attributes -> bool (** the modes still usable when only [attributes] can be bound. *) val project : attributes -> t -> t val given : string -> t -> t