There's cases, when build-in checker is not able to verify totality.
There's some workarounds, like add extra index to data type to proof structural recursion, or create a data wrapper as a single recursion step for the mutual recursion case, or split proof on several explicit cases over simpler data types. But that requires additional term-level boilerplate, and can lead to reducing computational complexity, extra runtime overhead, worse overall concept splitting and codebase readability.
That would be handy instead of constraining hacky workaround for each such case for developers just to allow to write custom ad-hoc proof strategies (on meta/reflection level, which wouldn't affect actual runtime), instead of just believe_me: that can improve the actual correct code development speed without wasting time on workarounds and/or extra compiler proposals (and can be a convenient local sandbox for such potential proposals eventually).
There's cases, when build-in checker is not able to verify totality.
There's some workarounds, like add extra index to data type to proof structural recursion, or create a data wrapper as a single recursion step for the mutual recursion case, or split proof on several explicit cases over simpler data types. But that requires additional term-level boilerplate, and can lead to reducing computational complexity, extra runtime overhead, worse overall concept splitting and codebase readability.
That would be handy instead of constraining hacky workaround for each such case for developers just to allow to write custom ad-hoc proof strategies (on meta/reflection level, which wouldn't affect actual runtime), instead of just
believe_me: that can improve the actual correct code development speed without wasting time on workarounds and/or extra compiler proposals (and can be a convenient local sandbox for such potential proposals eventually).