|
Dedekind 0.0.0
A structuralist C++23 Module Library
|
Filtered categories — categories whose finite diagrams have a cocone. More...

Classes | |
| struct | dedekind::category::is_directed< T, Rel > |
| Trait to mark a relation as directed: every pair of elements has an upper bound. More... | |
| struct | dedekind::category::is_directed< T, Rel > |
Discovery: types may opt in via a nested is_directed_v template member, mirroring the is_reflexive_v / is_transitive_v / is_antisymmetric_v discovery pattern. More... | |
| struct | dedekind::category::is_directed< T, std::less_equal< T > > |
A reflexive, connex <= is directed: of a and b one is above the other, and it bounds both (reflexivity bounds itself). Derived from the certificates (:mereology), not from the syntactic std::totally_ordered<T>, which double satisfies (#1043). More... | |
| struct | dedekind::category::is_codirected< T, Rel > |
| Trait to mark a relation as codirected: every pair of elements has a lower bound. More... | |
| struct | dedekind::category::is_codirected< T, Rel > |
Discovery: types may opt in via a nested is_codirected_v template member, mirroring the sibling trait patterns. More... | |
| struct | dedekind::category::is_codirected< T, std::less_equal< T > > |
A reflexive, connex <= is codirected: the lesser of a and b bounds both from below (#1043, as is_directed). More... | |
Namespaces | |
| namespace | dedekind::category |
Concepts | |
| concept | dedekind::category::IsDirected |
| Formal verification of the directedness axiom: ∀ a, b ∈ T. ∃ c ∈ T. Rel(a, c) ∧ Rel(b, c). | |
| concept | dedekind::category::IsCodirected |
| Formal verification of the codirectedness axiom: ∀ a, b ∈ T. ∃ c ∈ T. Rel(c, a) ∧ Rel(c, b). | |
| concept | dedekind::category::IsFilteredCategory |
| A thin category whose every finite subset of objects has an upper bound (directedness). | |
Variables | |
| template<typename T, typename Rel> | |
| constexpr bool | dedekind::category::is_directed_v = is_directed<T, Rel>::value |
| template<typename T, typename Rel> | |
| constexpr bool | dedekind::category::is_codirected_v = is_codirected<T, Rel>::value |
Filtered categories — categories whose finite diagrams have a cocone.
@partition :filtered
A filtered category is one in which every finite diagram has a cocone (an upper bound, in poset terms). The standard textbook definition is three-fold:
(a, b), there exists an object c and morphisms a → c, b → c (binary upper bound).f, g : a → b, there exists h : b → c equalising them.In a thin category (hom-sets propositional), the third clause is automatic: parallel morphisms are equal by thinness, so any choice of h coequalises trivially. Filtered then reduces to:
nonempty + ∀ a, b ∈ T. ∃ c ∈ T. Rel(a, c) ∧ Rel(b, c)
By induction on finite-subset size, the binary case extends to arbitrary finite subsets — that's exactly the directedness axiom captured by is_directed_v (below).
IsFilteredCategory is row 3 of the lattice Form-chain (#698):
Filtered cats are not refinements of posetal — they need only thin + directed, NOT antisymmetric. The textbook example of a filtered non-poset is a preorder with two distinct maximal elements that are mutually ≤; under thin+directed it counts as filtered, but it is not a poset.
Filtered categories are the natural indexing shape for filtered colimits, which preserve finite limits. In the context of :sets::mereology and the subobject classifier reading (#698):
Whether the project ever needs this gunk-axis machinery is open; :filtered names the row regardless, so the IsLatticeCategory assembly in Slice 3 can encode the faithful inclusion IsLatticeCategory ⊊ IsFilteredCategory definitionally.
bool with std::less_equal is filtered: true is the upper bound of every pair (its reflexive, connex <= witnesses is_directed_v through the specialisation below). The 2-element thin category is also filtered.