#include <solver.h>
template<typename F, typename Real, size_t N>
!std::is_base_of_v<polymorphic::vectorfield<Real, N>, std::decay_t<F>> &&
std::regular_invocable<F, vec<Real, N> const&, Real> &&
(std::is_same_v<vec<Real, N>,
std::invoke_result_t<F, vec<Real, N>, Real>> ||
std::is_same_v<std::optional<vec<Real, N>>,
std::invoke_result_t<F, vec<Real, N>, Real>>)