Я думал о доказательствах и столкнулся с интересным наблюдением. Таким образом, доказательства эквивалентны программам через изоморфизм Карри-Говарда, а круговые доказательства соответствуют бесконечной рекурсии. Но из проблемы остановки мы знаем, что в общем случае проверка того, будет ли произвольная программа повторяться вечно, неразрешима. По Карри-Говарду, означает ли это, что не существует «средства проверки доказательств», которое могло бы определить, использует ли доказательство круговые рассуждения?
Я всегда думал, что доказательства должны состоять из легко проверяемых шагов (которые соответствуют приложениям правил вывода), и проверка всех шагов дает вам уверенность в том, что вывод следует. Но теперь я задаюсь вопросом: может быть, на самом деле невозможно написать такую проверочную проверку, потому что у нее нет способа обойти проблему остановки и обнаружить круговые рассуждения?
источник
Function
илиProgram Fixpoint
конструкции, чтобы доказать, что некоторая функция является тотальной, если проверка целостности завершается неудачно. Простой пример является функция слияния сортировки по спискам. Нужно доказать вручную, что мы разбиваем списки (длиной> 1) на строго меньшие подсписки.Program
и тому подобное - красная сельдь. Они не меняют теорию. Они используют синтаксический сахар для использования меры в доказательстве: вместо того, чтобы рассуждать о том, что интересующий вас объект становится меньше, вы добавляете уровень косвенности: вычисляете, что другой объект становится меньше (например, некоторый размер) и докажите, что он становится меньше. СмотритеWf
библиотеку.