|
|
constexpr Direction | dedekind::order::dir_of (Rel r) |
| | The Direction a comparison Rel lifts a halfspace to.
|
|
constexpr Strictness | dedekind::order::strict_of (Rel r) |
| | The Strictness a comparison Rel lifts a halfspace to.
|
|
constexpr bool | dedekind::order::is_order_rel (Rel r) |
| | Whether a Rel is one of the four order comparisons (not Eq/Ne).
|
template<dedekind::order::IsTotallyOrdered T, dedekind::category::IsOckhamAlgebra L, IsCardinality C, Rel R, typename K>
requires (dedekind::order::is_order_rel(R)) |
| constexpr dedekind::order::Interval< T, L > | dedekind::sets::operator& (const 𝔸< T, L, C > &, const Cmp< R, Projection< 0 >, Const< K > > &c) |
| | An order atom π ⋈ k on a chain is the ray it names, whatever the constant's type: the constant meets the carrier exactly or the binding raises. Declared beside 𝔸 and the atom, so ADL finds it.
|
| template<typename V> |
| constexpr std::optional< Bound< V > > | dedekind::order::detail_interval::tighter_lower (const std::optional< Bound< V > > &a, const std::optional< Bound< V > > &b) |
| | The tighter of two lower sides: the larger bound; at a tie the strict one. An absent side is no constraint.
|
|
template<typename V> |
| constexpr std::optional< Bound< V > > | dedekind::order::detail_interval::tighter_upper (const std::optional< Bound< V > > &a, const std::optional< Bound< V > > &b) |
| | The dual: the smaller bound; at a tie the strict one.
|
|
template<typename V, typename L> |
| constexpr Interval< V, L > | dedekind::order::reduce_meet (const Interval< V, L > &a, const Interval< V, L > &b) |
| | The ONE meet law: the tighter side on each end, collapsed by bounded (crossing sides to Ø, a single admitted element to its point). constexpr, so evaluable at compile time or runtime.
|
|
constexpr Rel | dedekind::order::detail_steps::converse (Rel r) |
| | The converse of a comparison: k r π is π conv(r) k.
|
| template<IsTotallyOrdered V, IsOckhamAlgebra L, typename K> |
| Runs< V, L > | dedekind::order::detail_steps::order_fragment (const Pred< K > &p) |
| | The run list of a predicate built at run time over a chain, in the order fragment: the atoms π ⋈ k (and, on a machine word, π ± c ⋈ k: the atom's run list translated), under ∧ and ∨, a comparison of two constants decided; conditionals lifted first (lift_conditionals). The shape is a value, so the run list is materialised piece by piece. An atom outside the fragment has no normal form here and is refused.
|
template<typename T>
requires requires { typename T::logic_species; } |
| constexpr auto | dedekind::order::steps (const T &t) |
| | The normal form of a set term of a chain, as a lazy step source. A stored run list inside the term is read in place, so the source must not outlive the term.
|
| template<IsStepTerm T> |
| auto | dedekind::order::ext (const T &t) |
| | The extension of a set term: its normal form, materialised as a stored run list. The explicit step; every query reads steps(t) lazily without it.
|
template<typename A, typename B>
requires requires { typename A::Domain; typename B::Domain; } && std::same_as<typename A::Domain, typename B::Domain> && (!IsBoundaryObject<A>) && (!IsBoundaryObject<B>) && IsStepTerm<A> && IsStepTerm<B> && std::same_as<typename A::logic_species, typename B::logic_species> |
| constexpr auto | dedekind::order::operator== (const A &a, const B &b) |
| | Equality of two set terms of a chain as sets of the carrier, in the species: one traversal of their normal forms, so it is extensional ((0, 3) and [1, 3) are the same set of ℤ).
|
template<typename A, typename B>
requires requires { typename A::Domain; typename B::Domain; } && std::same_as<typename A::Domain, typename B::Domain> && (!IsBoundaryObject<A>) && (!IsBoundaryObject<B>) && IsStepTerm<A> && IsStepTerm<B> && (!std::same_as<typename A::logic_species, typename B::logic_species>) && HaveLogicJoin<typename A::logic_species, typename B::logic_species> |
| constexpr auto | dedekind::order::operator== (const A &a, const B &b) |
| | Equality across two species of one chain, read in their join: a Boolean set beside a K₃-valued one is compared in K₃.
|
template<IsTotallyOrdered T, IsOckhamAlgebra L, typename S>
requires std::same_as<typename S::Domain, T> && (!IsBoundaryObject<S>) && IsStepTerm<S> |
| constexpr auto | dedekind::order::operator== (const Ø< T, L > &, const S &s) |
| | A set term against the boundaries, in its species: Ø == S is \(\neg\bigvee\chi\), 𝔸 == S is \(\bigwedge\chi\), read over the carrier's own elements (on K₃, Unknown is a verdict).
|
template<IsTotallyOrdered T, IsOckhamAlgebra L, typename S>
requires std::same_as<typename S::Domain, T> && (!IsBoundaryObject<S>) && IsStepTerm<S> |
| constexpr auto | dedekind::order::operator== (const S &s, const Ø< T, L > &e) |
template<IsTotallyOrdered T, IsOckhamAlgebra L, IsCardinality CU, typename S>
requires std::same_as<typename S::Domain, T> && (!IsBoundaryObject<S>) && IsStepTerm<S> |
| constexpr auto | dedekind::order::operator== (const 𝔸< T, L, CU > &, const S &s) |
template<IsTotallyOrdered T, IsOckhamAlgebra L, IsCardinality CU, typename S>
requires std::same_as<typename S::Domain, T> && (!IsBoundaryObject<S>) && IsStepTerm<S> |
| constexpr auto | dedekind::order::operator== (const S &s, const 𝔸< T, L, CU > &u) |
| template<IsTotallyOrdered V, IsOckhamAlgebra L> |
| constexpr Interval< V, L > | dedekind::order::structured_and (const Interval< V, L > &a, const Interval< V, L > &b) |
| | The meet of two intervals, under the reducer's customization-point name: the one reduce_meet. Declared here, before axis_factor, so the recursion over a RelAnd tree is closed over its own outputs (#872).
|
template<IsStepSource S>
requires std::same_as<typename S::logic_species, Boole> |
| constexpr auto | dedekind::order::intervals (const S &s) |
| | The runs of a two-valued source as intervals, in order along the chain: a view, nothing stored.
|
template<typename T1, typename T2, typename L, typename C, IsRelPredicate RP>
requires (!dedekind::sets::contains_self_v<RP>) |
| constexpr auto | dedekind::order::operator& (const 𝔸< std::pair< T1, T2 >, L, C > &, RP rp) |
| | 𝔸 & relPred — the relation as a set object on A×B. The universal product carries no factor restriction, so the relation's membership is the rel-predicate: the pure product universe refined to a subobject.
|
template<typename S, IsRelPredicate RP>
requires dedekind::sets::IsSetObject<S> && requires { typename S::Domain::first_type; typename S::Domain::second_type; } && (!dedekind::sets::contains_self_v<RP>) |
| constexpr auto | dedekind::order::operator& (const S &prod, RP rp) |
| | product & relPred — the relation as a set object on A×B, keeping the product's own membership (so a restricted product bounds the relation).
|
| constexpr Rel | dedekind::order::rel_of (Direction d, Strictness s) |
| | A restricted factor lifts to a cylinder on its axis, so operator* keeps the factor predicates instead of dropping them.
|
|
template<IsTotallyOrdered T, IsOckhamAlgebra L, typename T2, IsCardinality C2> |
| constexpr auto | dedekind::order::operator* (const Interval< T, L > &a, const 𝔸< T2, L, C2 > &) |
|
template<typename T1, IsCardinality C1, IsTotallyOrdered T, IsOckhamAlgebra L> |
| constexpr auto | dedekind::order::operator* (const 𝔸< T1, L, C1 > &, const Interval< T, L > &b) |
|
template<IsTotallyOrdered Ta, IsTotallyOrdered Tb, IsOckhamAlgebra L> |
| constexpr auto | dedekind::order::operator* (const Interval< Ta, L > &a, const Interval< Tb, L > &b) |
| template<IsRingIntegral auto I, typename TI, typename L, typename P> |
| constexpr auto | dedekind::order::axis_factor (const P &) |
| | dom / cod as the projections \(\pi_A / \pi_B\), recovering the factor from the relation's structure (the inverse of cylinder).
|
template<IsRingIntegral auto I, IsTotallyOrdered TI, IsOckhamAlgebra L, IsRingIntegral auto Slot, Rel R, typename K>
requires (is_order_rel(R) && Slot == I) |
| constexpr auto | dedekind::order::axis_factor (const Cmp< R, Projection< Slot >, Const< K > > &c) |
| | An order atom on axis I, π_I ⋈ c: the ray it names (Eq/Ne fall to the default). The slot is matched to the axis by value, so two integral spellings of one axis agree.
|
template<IsRingIntegral auto I, IsTotallyOrdered TI, IsOckhamAlgebra L, IsRingIntegral auto Slot, typename S>
requires (Slot == I) |
| constexpr S | dedekind::order::axis_factor (const InSlot< Slot, S > &c) |
| | A cylinder on axis I: its set.
|
|
template<IsRingIntegral auto I, typename TI, typename L, typename A, typename B> |
| constexpr auto | dedekind::order::axis_factor (const dedekind::relational::RelAnd< A, B > &r) |
|
template<IsRingIntegral auto I, typename TI, typename L, typename Pp, typename RP> |
| constexpr auto | dedekind::order::axis_factor (const ProductRestrict< Pp, RP > &r) |
| | A restricted product bounding a graph: the factor lives on the product (cylinder) side; the graph rp couples the axes, so it is transparent to a single-axis projection.
|
|
template<typename T1, typename T2, typename L, IsRelPredicate P, typename C> |
| constexpr auto | dedekind::order::dom (const Comprehension< 𝔸< std::pair< T1, T2 >, L, C >, P > &r) |
| | \(\pi_A(R)\) — the domain factor, recovered structurally (preserving the relation's logic species L).
|
|
template<typename T1, typename T2, typename L, IsRelPredicate P, typename C> |
| constexpr auto | dedekind::order::cod (const Comprehension< 𝔸< std::pair< T1, T2 >, L, C >, P > &r) |
| | \(\pi_B(R)\) — the codomain factor, recovered structurally.
|
| template<IsTotallyOrdered T, IsOckhamAlgebra L> |
| constexpr Interval< T, L > | dedekind::order::upperbounds (const Interval< T, L > &s) |
| | upperbounds(S) — the \(\forall\)-projection \(R/\ni\): the region dominating all of S, and the pluggable point of the extremum (Bird & de~Moor [2]).
|
|
template<IsTotallyOrdered T, IsOckhamAlgebra L> |
| constexpr Interval< T, L > | dedekind::order::lowerbounds (const Interval< T, L > &s) |
| | The dual: lower bounds, {x ≤ inf}.
|
|
template<IsOckhamAlgebra L, IsCardinality C> |
| constexpr auto | dedekind::order::upperbounds (const 𝔸< bool, L, C > &) |
|
template<IsOckhamAlgebra L, IsCardinality C> |
| constexpr auto | dedekind::order::lowerbounds (const 𝔸< bool, L, C > &) |
template<typename S>
requires IsPartiallyOrdered<typename S::Domain> && requires(const S& s) { s & upperbounds(s); } |
| constexpr auto | dedekind::order::max (const S &s) |
| | max(S) — the generic extremum: S met (∩) with its own \(\forall\)-dominators, \(S \cap \mathrm{upperbounds}(S)\). min is the dual (S met with its minorants).
|
template<typename S>
requires IsPartiallyOrdered<typename S::Domain> && requires(const S& s) { s & lowerbounds(s); } |
| constexpr auto | dedekind::order::min (const S &s) |
template<typename T, typename K1, typename K2, typename L, typename C, typename CU>
requires dedekind::category::IsSaturating<T> |
| constexpr bool | dedekind::order::operator== (const Comprehension< 𝔸< std::pair< T, T >, L, C >, Translation< K1 > > &a, const Comprehension< 𝔸< std::pair< T, T >, L, CU >, Translation< K2 > > &b) |
| | Two translation graphs are the same relation iff they carry the same shift, read in the carrier. Gated on IsSaturating: the shift arithmetic is faithful only where the carrier's + is (on bool, +1 and +2 are the same graph, so a comparison of shifts would separate them).
|
template<typename T, typename K1, typename K2, typename L, typename C, typename CU>
requires dedekind::category::IsSaturating<T> |
| constexpr auto | dedekind::order::operator>> (const Comprehension< 𝔸< std::pair< T, T >, L, C >, Translation< K1 > > &a, const Comprehension< 𝔸< std::pair< T, T >, L, CU >, Translation< K2 > > &b) |
| | Symbolic composition of translation graphs, \(T_a \circ T_b =
T_{a+b}\): the shifts added in the carrier, with no \(\exists\) over the intermediate. Gated on IsSaturating, where the symbolic a+b is the actual composite.
|
|
constexpr bool | dedekind::order::detail_cover_witness::reaches (int a, int b, int k) |
| | Whether b is reached from a in 1 to k − 1 cover steps.
|
|
consteval bool | dedekind::order::detail_cover_witness::order_is_cover_star (int k) |
template<std::ranges::view V, std::size_t Sigma, std::size_t Q>
requires std::ranges::random_access_range<V> && std::ranges::sized_range<V> && std::semiregular<V> |
| constexpr auto | dedekind::order::operator>> (V letters, const Maybe< Matches< Sigma, Q > > &m) |
| template<typename P, typename S, IsArrow T> |
| constexpr Prefixed< P, S, T > | dedekind::order::operator& (const Symmetric< P, S, T > &s, const Prefix &p) |
|
constexpr Ternary | dedekind::order::predecessor (Ternary a) noexcept |
|
constexpr Ternary | dedekind::order::successor (Ternary a) noexcept |
| | K₃'s step: the cover False → Unknown → True, saturating at the top (and its dual at the bottom), the NNO step of the chain (:nno).
|
| constexpr Rel | dedekind::order::negate (Rel r) |
| | The De Morgan dual of a comparison: !(x R y) is x negate(R) y.
|
| template<Rel R, typename X, typename Y> |
| constexpr bool | dedekind::order::rel_apply (const X &x, const Y &y) |
| | x R y.
|
template<typename A, typename B>
requires requires { typename A::Domain; typename B::Domain; } && std::same_as<typename A::Domain, typename B::Domain> && (!IsBoundaryObject<A>) && (!IsBoundaryObject<B>) && IsStepTerm<A> && IsStepTerm<B> && std::same_as<typename A::logic_species, typename B::logic_species> |
| constexpr auto | dedekind::sets::operator== (const A &a, const B &b) |
| | Equality of two set terms of a chain as sets of the carrier, in the species: one traversal of their normal forms, so it is extensional ((0, 3) and [1, 3) are the same set of ℤ).
|
| template<typename P, typename S, IsArrow T> |
| constexpr Prefixed< P, S, T > | dedekind::sets::operator& (const Symmetric< P, S, T > &s, const Prefix &p) |