Dedekind 0.0.0
A structuralist C++23 Module Library
Loading...
Searching...
No Matches
dedekind::category::LatticeBottom< T, Rel > Struct Template Referenceexport

Structural witness types for the bottom (initial) and top (terminal) of the lattice over (T, Rel), playing the role of initial / terminal objects of the lattice viewed as a thin category. More...

Detailed Description

template<typename T, typename Rel>
struct dedekind::category::LatticeBottom< T, Rel >

Structural witness types for the bottom (initial) and top (terminal) of the lattice over (T, Rel), playing the role of initial / terminal objects of the lattice viewed as a thin category.

lattice__Canonical_Witnesses

lattice__Bounded_Witnesses

Each wrapper type:

  • Declares the is_initial_object_tag / is_terminal_object_tag typedef so it satisfies the relaxed :limit::IsInitialObject / IsTerminalObject (tag-discovery branch).
  • Exposes the corresponding carrier element as a constexpr value member (extractable when consumers need the actual lattice element).

Specialisations are provided for arithmetic carriers under std::less_equal: std::numeric_limits<T>::min() / max() are the lattice bottom / top. This covers bool (false / true), int (INT_MIN / INT_MAX), unsigned (0 / UINT_MAX), size_t, and the rest of the arithmetic family.

Downstream sub-categories (set algebras, posets with named extremes, …) opt in by specialising the wrappers for their (T, Rel) pair; no change to :species or duplicate concept surface.

The abstract bottom of the lattice over (T, Rel), as a value the complement law can produce. Untagged: a carrier registers its own bottom (with its value and the initial-object tag) by specialising, so the bare placeholder opts nothing into IsInitialObject.


The documentation for this struct was generated from the following file: