Dedekind 0.0.0
A structuralist C++23 Module Library
Loading...
Searching...
No Matches
dedekind::sets::ExtensionalCardinal< W > Struct Template Referenceexport

Finite extensional cardinal: one machine word W. More...

Classes

struct  CheckedResult
 A wrapped result and whether the exact result overflowed W. More...

Public Types

using cardinality_type = Finite
using word_type = W

Public Member Functions

constexpr ExtensionalCardinal (W v) noexcept
template<std::integral S>
requires (!std::same_as<S, W>)
constexpr ExtensionalCardinal (S v) noexcept
 Construction from any integral type via two's-complement wrapping. The explicit static_cast keeps the sign-conversion at this boundary rather than at each call site.
constexpr operator std::size_t () const noexcept
 Explicit projection to std::size_t. Used by :sequences:path 's helpers when the user-chosen Index Form flows through a std::size_t counter. Explicit, so a word wider than std::size_t is never narrowed silently.
constexpr ExtensionalCardinal operator- () const noexcept
 The additive inverse in ℤ/2^w.
constexpr std::size_t realize_to_size_t (std::size_t sentinel=std::numeric_limits< std::size_t >::max()) const noexcept
 The value as std::size_t, or sentinel when it does not fit (only possible for a word wider than std::size_t).

Static Public Member Functions

static constexpr CheckedResult checked_add (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept
static constexpr CheckedResult checked_mul (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept

Public Attributes

W value {}

Friends

constexpr friend bool operator== (const ExtensionalCardinal &, const ExtensionalCardinal &)=default
constexpr friend std::strong_ordering operator<=> (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept
constexpr friend ExtensionalCardinal operator+ (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept
constexpr friend ExtensionalCardinal operator* (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept
constexpr friend ExtensionalCardinal operator- (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept
constexpr friend ExtensionalCardinal operator/ (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept
 Euclidean division. Division by zero yields zero by convention (total).
constexpr friend ExtensionalCardinal operator% (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept
 Euclidean modulo. Division by zero yields lhs by convention (total).

Detailed Description

template<IsWrappingWord W = std::size_t>
struct dedekind::sets::ExtensionalCardinal< W >

Finite extensional cardinal: one machine word W.

The bare carrier is the wrapping ring ℤ/2^w (registered periodic and cyclic below); Cardinality adjoins the saturating ℵ_0 on top. It is not a bignum: its width is the width of W. Overflow is detected with the compiler's checked-arithmetic builtins, which compute exactly for any word width, so no promotion to int can overflow on the way.

Template Parameters
WThe word (default std::size_t).

Constructor & Destructor Documentation

◆ ExtensionalCardinal()

template<IsWrappingWord W = std::size_t>
template<std::integral S>
requires (!std::same_as<S, W>)
dedekind::sets::ExtensionalCardinal< W >::ExtensionalCardinal ( S v)
inlineconstexprnoexcept

Construction from any integral type via two's-complement wrapping. The explicit static_cast keeps the sign-conversion at this boundary rather than at each call site.

Intentionally non-explicit so integral values convert implicitly when initialising or passing a Cardinality (= std::variant< ExtensionalCardinal<>, ℵ_0>), the load-bearing path for the ℕ-as-Cardinality carrier reading.


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