template<typename Cat>
requires(typename Cat::Arrow::Domain A, typename Cat::Arrow::Codomain B) {
typename Cat::template
Exponential<
decltype(A),
decltype(B)>;
typename Cat::template
Exponential<
decltype(A),
decltype(B)>,
decltype(A), decltype(B)>;
}
A Category equipped with Terminal Objects, Products, and Exponentials.
Definition cartesian.cppm:798
A small category equipped with a terminal object 1 and binary products × — a "cartesian category" in ...
Definition limit.cppm:763
Categorical exponential object B^A — generalised structural recogniser of "eval morphism via call exp...
Definition cartesian.cppm:139
decltype(exponential< A, B >(std::declval< std::function< B(A)> >())) Exponential
The Exponential Object B^A (Type Alias).
Definition cartesian.cppm:211
A Category equipped with Terminal Objects, Products, and Exponentials.
This concept extends IsSmallCategory to satisfy the three axioms of a Cartesian Closed Category (CCC):
- Terminal Object — a unique sink 1 (represented by One / std::monostate).
- Products — for any two objects A, B, a product A × B exists (represented by std::pair<A, B>).
- Exponentials — for any two objects A, B, a function space B^A exists: an object whose inhabitants are functions A→B (IsExponential). B^A is an object, not an arrow; arrow-shaped carriers that also carry Domain/Codomain are a representation refinement (IsArrowExponential), used e.g. by Set<T>::Exponential's default — not required here.
This triple of structures provides the categorical foundations required for the Dedekind topos (ETCS).