template<typename T, typename U>
consteval bool type-less-impl(); // exposition only
template<template<typename...> typename To, typename OneType,
template<typename, typename> typename Pred = type-less, typename Lhs, typename Rhs>
consteval auto expr-multiply(Lhs, Rhs); // exposition only
template<template<typename...> typename To, typename OneType,
template<typename, typename> typename Pred = type-less, typename Lhs, typename Rhs>
consteval auto expr-divide(Lhs lhs, Rhs rhs); // exposition only
template<template<typename...> typename To, typename OneType, typename T>
consteval auto expr-invert(T); // exposition only
template<std::intmax_t Num, std::intmax_t Den, template<typename...> typename To,
typename OneType, template<typename, typename> typename Pred = type-less, typename T>
requires(Den != 0)
consteval auto expr-pow(T); // exposition only
template<template<typename> typename Proj, template<typename...> typename To, typename OneType,
template<typename, typename> typename Pred = type-less, typename T>
consteval auto expr-map(T); // exposition only