Поскольку никакого другого ответа, похоже, уже на пути, позвольте мне повторить и распространить на мой предыдущий комментарий. В Isabelle/хол существует три способа определения функций:
definition
для не рекурсивных функций (которые могут только быть замечены как константы, которые служат в качестве аббревиатуры для длинных операторов).
primrec
для примитивно-рекурсивных функций (в том смысле, что в каждом рекурсивном вызове существует фиксированный аргумент, в котором удаляется конструктор типа данных).
fun
для общих рекурсивных функций.
И, primrec
и fun
ожидать, по крайней мере один аргумент. Для первого автоматически проверяется, что один из его аргументов соответствует синтаксическому шаблону примитивной рекурсии по типам данных, в то время как для последней задача доказательства «завершения» (или, скорее, обоснованность графика вызова) будет делегирована пользователь в жестких случаях.
Во всяком случае, это было бы, конечно, можно передать primrec
и fun
в definition
для простых случаев без аргументов, но, по крайней мере, для меня это, скорее, кажется, запутать вещи для пользователя вместо очистки их.
'fun' было введено для нетривиальных функций в том смысле, что их совокупность не является« obvios »(например, для« primrec ») или тривиальной (например, для' definition'). Следовательно, всегда существует аргумент (на самом деле кортеж, если функция принимает более одного аргумента), который используется для доказательства обоснованности графа вызовов. – chris