template<typename T, auto Zero, auto One, typename Add = std::plus<T>, typename Mult = std::multiplies<T>>
struct RigRegistration< T, Zero, One, Add, Mult >
Base class for SpeciesTraits<T> of carriers forming a \emph{rig} (semiring) under (Add, Mult) with identities Zero (additive) and One (multiplicative).
A rig has an additive commutative monoid, a multiplicative monoid, and distributivity of Mult over Add. Unlike a ring, it does \emph{not} require an additive inverse. Examples: \(\mathbb{N}\) under (+, *), tropical semirings.
Exposes member templates:
is_associative_v<Op> = Op is Add or Mult
is_commutative_v<Op> = Op is Add (Mult is not required to commute in a rig; CommutativeRingRegistration extends this)
is_periodic_v<Op> = Op is Add or Mult (carries IsTotal for periodic wrapping carriers; idempotent carriers choose a different totality witness)
unit_v<Op> = Zero when Op is Add, One when Op is Mult
is_distributive_v<MultOp, AddOp> = MultOp is Mult and AddOp is Add
RigRegistration does \emph{not} expose is_invertible_v — a rig has no additive inverse claim.