|
Dedekind 0.0.0
A structuralist C++23 Module Library
|
F and G are a parallel pair of arrows — shared Dom and shared Cod.
More...
F and G are a parallel pair of arrows — shared Dom and shared Cod.
The structural precondition shared by an equalizer's input ( IsEqualizer<E, F, G> via the IsSubobject leg above) and a (future) coequalizer's input. Used here as the shape of the kernel pair's two projections π_1, π_2 : KernelPair(F) ⇒ Dom<F> — the input to the image-as-coequalizer reading.
Why not IsCoequalizer here? A coequalizer concept proper would constrain a quotient witness Q (with a regular epi q : Cod<F> → Q satisfying q∘F = q∘G), dual to how IsEqualizer constrains a subobject witness E via IsSubobject. That requires an IsQuotient sister to IsSubobject which the codebase has not yet reified. Naming an IsCoequalizer concept whose body checked only parallel-arrow shape would overpromise (a downstream caller could read the name as a verified coequalizer when only the input shape was checked) — so the structurally-honest shape lives here as IsParallelPair, and the IsCoequalizer name is reserved for the future Q-witnessed concept.
Mathematically, image-as-coequalizer still holds: for an arrow F : A → B with kernel pair π_1, π_2 : P ⇒ A,
Im(F) = coeq(π_1, π_2)
the canonical epi-mono factorisation A → Im(F) → B. The mono side ( Im(F) ↪ B) is what the :image partition pins as IsImageOf<S, F>; the quotient side awaits IsQuotient.
| F | The first arrow F : A → B. |
| G | The second arrow G : A → B. |