|
Dedekind 0.0.0
A structuralist C++23 Module Library
|
Image-as-coequalizer-of-kernel-pair: IsImageOf<S, F> on the mono side and IsCoequalizer<Q, F, G> on the quotient side.
More...
#include <concepts>#include <optional>#include <type_traits>#include <utility>import dedekind.category:logic;
Classes | |
| struct | dedekind::category::ImageChi< F > |
The characteristic predicate of image_of(F) — recognises y as "in the image of @c F". More... | |
| struct | dedekind::category::ImageChi< F > |
Image classifier for a retractable arrow: y is in the image iff the retract fires at y. More... | |
| struct | dedekind::category::image_decidability_witness::ToyRetract |
| struct | dedekind::category::image_decidability_witness::ToyEmbed |
| struct | dedekind::category::image_decidability_witness::ToyGeneral |
| struct | dedekind::category::kernel_quotient< F > |
| Opt-in trait: textbook claim "for this @c F, @c A/ker(F)
is the carrier @c ::Class". More... | |
| struct | dedekind::category::image_carrier< F > |
| Opt-in trait: textbook claim "for this @c F, @c im(F)
is the carrier @c ::type". More... | |
Namespaces | |
| namespace | dedekind::category |
Concepts | |
| concept | dedekind::category::IsImageOf |
S realises the image of arrow F as a Subobject of Cod<F> — the mono side of the (regular epi, mono) factorisation system pinned in :factorisation. | |
| concept | dedekind::category::IsCoequalizer |
The categorical dual of IsEqualizer — a Quotient of Cod<F> equating two parallel arrows F, G. | |
| concept | dedekind::category::WitnessesFirstIso |
Connector witnesses the First Isomorphism Theorem at homomorphism F. | |
Functions | |
| template<typename F> requires IsArrow<F> && std::constructible_from<std::remove_cvref_t<F>, F&&> | |
| constexpr auto | dedekind::category::image_of (F f) |
Factory: image_of(f) constructs the image of f as a Subobject of Cod<F>. | |
| constexpr ToyRetract | dedekind::category::image_decidability_witness::retract (ToyEmbed) |
Variables | |
| template<typename A> | |
| constexpr bool | dedekind::category::is_exact_category_v< CanonicalSetCCC< A > > = true |
| template<> | |
| constexpr bool | dedekind::category::is_monic_arrow_v< image_decidability_witness::ToyEmbed > |
Image-as-coequalizer-of-kernel-pair: IsImageOf<S, F> on the mono side and IsCoequalizer<Q, F, G> on the quotient side.
@partition :image
Hosts the canonical epi-mono factorisation chain set up by :pullback (kernel pair, parallel pair) and :topoi (subobject, quotient):
IsKernelPair → IsParallelPair → IsCoequalizer → IsImageOf
For an arrow F : A → B, the image Im(F) is the coequalizer of the kernel pair of F:
\(\mathrm{Im}(F) \) \(=\) \(\mathrm{coeq}(\pi_1, \pi_2 : \mathrm{KernelPair}(F) \rightrightarrows A)\).
Equivalently (in a topos) the image is the smallest subobject of B through which F factors, giving the canonical epi-mono factorisation F = m ∘ e:
A → Im(F) → B
with e regular-epi (the coequalizer projection) and m mono (the inclusion of the image into the codomain). Two structurally named concepts pin the two sides:
IsImageOf<S, F> — S is a Subobject of Cod<F> realising the image.IsCoequalizer<Q, F, G> — Q is a Quotient of Cod<F> equating the parallel pair F, G.Both are co-located here in :image since the image-as-coequalizer reading is the structural payoff that ties them together. The universal-property obligations (smallest such subobject, canonical factorisation, regular-epi universality of q) remain the engineer's honesty obligation in the IsNNO style.
What IsImageOf can pin (structural shape):
F is an arrow ( IsArrow<F>),S is a Subobject of Cod<F> ( IsSubobject<S, Cod<F>>).What IsImageOf cannot pin (engineer's honesty obligation, as for IsNNO):
S is the smallest such subobject (universality of the image factorisation),F factors through S as m ∘ e with e regular-epi and m mono,C++ concepts cannot quantify over the universal property's $\forall$; they can only pin operational signatures. The naming here is the structural anchor — a downstream carrier witness declares IsImageOf<MyImageSet, MyArrow> to record the intent that its subobject realises the image. The audit (that this is in fact the smallest containing subobject) lives in the witness's documentation and review.
The §3 paper outline (Functions on Sets: Filtering and
Transforming) names three realisation regimes for the abstract image, each pinned by IsImageOf with a different S:
S is a concrete std-container subobject realised by iteration in sets:extensional ( image(f, std::unordered_set<T>) etc.).S is the orbit closure of an iterated step, naturally pinnable on Path<T> in sequences:path (categorical-anchor breadcrumbs land in the follow-up slice).S is a deferred set expression under an inhabitancy DSL (#603), evaluated lazily.Upstream-of-everything-numeric. Lives in :category alongside :pullback; carrier witnesses register downstream where the carriers are available ( sets:extensional for std-container carriers; sequences:path for the NNO-morphism reading).