|
Dedekind 0.0.0
A structuralist C++23 Module Library
|
Concrete categories: faithful U : ๐ โ Set, sub-object machinery, lattice operations on ฯ-classified sets.
More...

Namespaces | |
| namespace | dedekind::category |
Concepts | |
| concept | dedekind::category::SetAsProduct |
| Set := (Underlying, Classifier) read as a product, in the projection-access sense. | |
| concept | dedekind::category::IsConcrete |
A small category C is concrete when its objects are themselves sets — equivalently, when there is a faithful functor U : C โ Set. | |
| concept | dedekind::category::HasTernarySupport |
| True when a set object's classifier returns ternary truth values. | |
| concept | dedekind::category::IsCompatibleSetPair |
| Two set objects over the same ambient species and same ฮฉ codomain. | |
Functions | |
|
template<typename S> requires IsSubobject<S, typename S::Domain> | |
| constexpr auto | dedekind::category::in (const typename S::Domain &x, const S &s) |
Membership: x โ S evaluated via S's structural call (the carrier IS the characteristic morphism). | |
|
template<typename S, IsArrow E> requires IsSubobject<S, typename S::Domain> && std::same_as<Cod<E>, typename S::Domain> | |
| constexpr auto | dedekind::category::in_via (const Dom< E > &x, E embedding, const S &s) |
Membership through an embedding arrow e:XโA, then the carrier-as-predicate: x โ_e S = s(e(x)). | |
| template<IsArrow F, IsArrow G> requires std::same_as<Cod<std::decay_t<F>>, Dom<std::decay_t<G>>> | |
| constexpr auto | dedekind::category::compose_embedding (F f, G g) |
| Compose two embedding arrows for pullback naturality path checks. | |
Concrete categories: faithful U : ๐ โ Set, sub-object machinery, lattice operations on ฯ-classified sets.
@partition :concrete
A category ๐ is concrete (in the textbook sense; Mac Lane CWM ยงIV.6, Pierce ยง1.6, Awodey ch 6) when there is a faithful functor U : ๐ โ Set, i.e. each object is a set and each arrow is a set-function preserving the relevant structure. This is the ontological reading of "small category" (every object is a set), complementing the cardinality reading pinned by :small (the object-collection and Hom-collection are themselves sets).
The two readings are independent (Reading 1 / Reading 2 in the :small docstring; cf. paper ยง2.3):
๐ (the two-arrow category), finite-state- machines-as-categories, posetal categories with abstract tag objects.Set itself, Grp, Alg(ฮฃ), Top.:concrete sits between :small and :etcs on the chain Cat โ Ddk: IsSmallCategory pins the size axis; IsConcrete pins the concreteness axis (objects are sets); :etcs further axiomatises which concrete category is Set itself via the topos structure (well-pointedness, NNO, choice, ...). :etcs imports :concrete and treats it as the prerequisite layer.
IsSubobject<S, A>: per-object concreteness — S is a Subobject of ambient A.IsConcrete<C>: per-category concreteness — C is small AND its objects are sets.IsCompatibleSetPair / HasTernarySupport: subobject-pair shape gates.in / in_via: membership x โ S via ฯ-evaluation s(x).compose_embedding: compose two embedding arrows (pullback path checks).Membership (in / in_via) is ฯ-evaluation, category-fundamental, so it lives here. The set-LATTICE operations are the operators operator& / | / ! in dedekind.sets, where the set-builder DSL lives.
Concept-as-predicate framing (cf. #635, #637). The chain ranges over CATEGORIES C: among small categories, the concrete ones (a faithful U: CโSet) contain the category Set itself (all 10 ETCS axioms).
IsSet โน IsSmallCategory . The concept IsSet is a predicate on a set OBJECT A, not on a category: an individual set is an object of Set (Lawvere), a category only via the discrete embedding Disc: Set โช Cat. IsSet requires the categorical axioms of CanonicalSetCCC<A::Domain> (the Set-witness over the carrier), never IsSmallCategory .