Я смотрю на требования к автоматической проверке программного обеспечения, то есть программа, которая принимает код (обычный процедурный код, написанный на таких языках, как C и Java), генерирует кучу теорем, говорящих о том, что каждый цикл должен в конце концов остановиться, никакого утверждения будет нарушен, никогда не будет разыменования нулевого указателя и т. д., а затем передаст его проверяющему теоремы, чтобы доказать, что они действительно верны (или же найти контрпример, указывающий на ошибку в коде).
Вопрос в том, какую логику использовать. Две основные позиции выглядят так:
Логика первого порядка в порядке.
Логика первого порядка недостаточно выразительна, вам нужна логика высшего порядка.
Проблема в том, что обе позиции оказали большую поддержку. Так какой из них прав? Если это второе, есть ли какие-нибудь доступные примеры того, что вы хотите сделать, чтобы у верификаторов, основанных на логике первого порядка, были проблемы?