|
Dedekind 0.0.0
A structuralist C++23 Module Library
|
Value-returning chain lattice ops — the honest T × T → T meet / join.
More...
Value-returning chain lattice ops — the honest T × T → T meet / join.
The std::ranges::max / std::ranges::min niebloids select and alias an argument: they return const T&, not a fresh T. So IsClosedUnder<T, Op> (which demands { Op{}(a,b) } -> same_as<T>) rejects them, and the strict monoid / bounded-lattice ladder (IsMonoid → IsMagma → IsClosedUnder in :total) is unreachable through the niebloid — only the lenient IsOrderLatticeOperations path (which checks convertible_to<T>) admits it. Sup / Inf return a copy of the winner, so they are honest T × T → T ops that reach the whole ladder and never dangle on temporaries. They compute the ternary directly (no niebloid inside).
Sole lattice ops (#934): Sup / Inf are now the only carriers of the order-lattice laws (idempotence, associativity, commutativity, distributivity, absorption). The ref-returning std::ranges::max / std::ranges::min niebloids no longer carry any lattice-law registration — every carrier lattice-op site (defaults + concept template args across :lattice / :mereology / :posetal / :total / :order) was migrated to Sup / Inf, retiring the pre-existing niebloid blanket. Reaching the strict monoid / bounded-lattice rung (IsClosedUnder needs same_as<T>) may flip a carrier's bounded-lattice status (see #941 for Chain<int>). The law blanket stays gated on the SupInfLattice certificate (see mereology__Lattice_Op_Gate above).
Join ∨: the least upper bound on a chain (max), returned by value as an honest T × T → T.