|
Dedekind 0.0.0
A structuralist C++23 Module Library
|
An exponential E : A → B that also satisfies the project's morphism vocabulary (IsArrow with matching Domain / Codomain typedefs). #706.
More...
An exponential E : A → B that also satisfies the project's morphism vocabulary (IsArrow with matching Domain / Codomain typedefs). #706.
Refines IsExponential to additionally require IsArrow's structural commitments — E::Domain typedef equal to A, E::Codomain typedef equal to B. Function-space inhabitants (std::function<B(A)>, raw lambdas) satisfy IsExponential but not IsArrowExponential because they don't expose the Domain / Codomain typedefs. Project-shipped arrow-shaped exponentials — outputs of arrow<A, B>(…), HeytingExponential, :morphism::Morphism, etc. — satisfy both.
Migrated from an ad hoc IsExponential <…> && IsArrow <…> combination at :etcs::HasAxiom6Exponentiation, which named the same content inline. Refactoring that consumer to the named refinement removes a chicken-and-egg seam (the supply for the refinement was inlined at the one demand site) — see #706 for the triage rationale.
Consumers that want the project's morphism discipline gate on IsArrowExponential; consumers that accept any callable (function-spaces, raw lambdas, structural-only) use the bare IsExponential. Split mirrors the :morphism IsArrow vs. generic-callable distinction.
| E | The exponential object (must be IsArrow-shaped). |
| A | The domain. |
| B | The codomain. |