Dedekind 0.0.0
A structuralist C++23 Module Library
Loading...
Searching...
No Matches
dedekind::sequences::Ø< T, L > Struct Template Referencefinal

∅: The Initial Object. Extensional (Size 0). More...

Collaboration diagram for dedekind::sequences::Ø< T, L >:

Classes

struct  Member
 Member-shape mirror of Subobject's. Vacuously inhabited (Ø has no members) — but the wrapper type is still required so the IsSubobject contract has a Member-to-T projection to read through ι. More...

Public Types

using Domain = T
using Codomain = typename L::Ω
using logic_species = L
using cardinality_type = Finite
using base_set_type = Ø<T, L>
using is_initial_object_tag = void
 Ø is the initial object of the subobject poset Sub(U): the bottom ⊥, classified by the always-false predicate χ_Ø ≡ ⊥, with the unique (empty) arrow Ø → S into every subobject. This tag opts Ø into :limit's IsInitialObject (the tag-discovery branch :lattice::LatticeBottom already uses), so the Sub(U) bound participates in the categorical initial-object vocabulary. #881.

Public Member Functions

constexpr T ι (const Member &m) const
 ι: Ø ↣ T — the trivial inclusion. No members are ever constructed, so ι is unreachable in practice; the body unwraps the Member's T-value to satisfy the SHAPE the IsSubobject contract reads.
template<typename OtherL>
requires (!std::same_as<OtherL, L>)
constexpr Ø (const Ø< T, OtherL > &)
 Cross-logic identity: the empty set under any logic species is the empty set. Enables writing Ø<int> (L defaults to Boole) even when the RHS answers in Kleene — mathematically ∅ = ∅ regardless of logic species.
constexpr std::size_t size () const
template<typename S>
constexpr L::Ω operator<= (const S &) const
constexpr bool operator== (const Ø &) const
template<typename T2, typename L2>
requires (!std::same_as<T, T2> || !std::same_as<L, L2>)
constexpr bool operator== (const Ø< T2, L2 > &) const
template<typename S>
requires (IsLSet<S> || std::ranges::range<S>) && (!std::same_as<S, Ø>) && requires(const S& s) { { s.size() } -> std::convertible_to<std::size_t>; }
constexpr bool operator== (const S &s) const
constexpr auto operator! () const
constexpr L::Ω operator() (const T &) const
constexpr cardinality_type cardinality () const
constexpr std::size_t upper_bound () const
template<typename S>
requires (IsLSet<S>)
constexpr auto operator^ (const S &s) const
template<typename S>
requires (IsLSet<S>)
constexpr auto operator* (const S &) const
 Ø × S = Ø<pair<T, S::Domain>, Boole>. Empty annihilates the cartesian product on the left. Carrier widens to the pair type; the codomain is Boolean (an empty product is decided, #894).

Static Public Attributes

static const Ø χ
template<typename Op>
static constexpr bool is_associative_v
template<typename Op>
static constexpr bool is_idempotent_v

Detailed Description

template<typename T = std::nullptr_t, typename L = Boole>
struct dedekind::sequences::Ø< T, L >

∅: The Initial Object. Extensional (Size 0).

T defaults to std::nullptr_t (the project's Zero carrier), so the bare Ø{} denotes "the empty set" with no carrier to name; it compares equal to any Ø<T> through the cross-carrier operator== below, letting a collapse be asserted as (a & ~a) == Ø{}.

Member Function Documentation

◆ operator<=()

template<typename T = std::nullptr_t, typename L = Boole>
template<typename S>
L::Ω dedekind::sets::Ø< T, L >::operator<= ( const S & ) const
inlineconstexpr

◆ size()

template<typename T = std::nullptr_t, typename L = Boole>
std::size_t dedekind::sets::Ø< T, L >::size ( ) const
inlineconstexpr

boundaries__Extensionality_Proof

Member Data Documentation

◆ is_associative_v

template<typename T = std::nullptr_t, typename L = Boole>
template<typename Op>
bool dedekind::sets::Ø< T, L >::is_associative_v
staticconstexpr
Initial value:
=
std::is_same_v<Op, std::bit_and<base_set_type>> ||
std::is_same_v<Op, std::bit_or<base_set_type>>

boundaries__Algebraic_Axioms

◆ is_idempotent_v

template<typename T = std::nullptr_t, typename L = Boole>
template<typename Op>
bool dedekind::sets::Ø< T, L >::is_idempotent_v
staticconstexpr
Initial value:
=
std::is_same_v<Op, std::bit_and<base_set_type>> ||
std::is_same_v<Op, std::bit_or<base_set_type>>

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