Как «тактика» работает в помощниках по проверке?
Я подозреваю, что этот ответ будет немного бессмысленным.
Во-первых, недостаточно спросить «как работают тактики в помощниках по проверке», потому что они работают по-разному в разных помощниках по проверке. Сегодня используются два основных класса помощников: те, которые получены из оригинального LCF, такие как Isabelle, HOL и HOL light, и ассистенты, основанные на теории типов, такие как Coq и Matita. В этих двух разных классах помощника по доказательству тактика работает по-разному, отражая то, что то, что происходит под капотом, например, в Изабель, совершенно отличается от того, что происходит под капотом, например, в Матите.
Спросите себя: что происходит, когда мы пытаемся доказать утверждение P в Матите? Мы вводим мета-переменную X с типом P. Затем мы, так сказать, играем в игру, где мы уточняем X, добавляя все больше и больше структур к неполному члену, пока не получим полный лямбда-член (то есть не содержащий больше метавариабельных переменных). Как только мы получим полный лямбда-термин, мы проверяем его тип относительно P, чтобы убедиться, что он содержит требуемый тип. Затем мы видим, что в Coq и Matita тактика - это просто функция от неполных терминов доказательства до неполных терминов доказательства, что, мы надеемся, добавляет немного структуры к термину после применения (это наблюдение мотивировало довольно недавнюю работу, например, Джойгова). , Пентка и др.)
Например, тактика Matita «intro» вводит лямбда-абстракцию над существующим термином, «case» вводит выражение соответствия в этом термине, а «apply» вводит применение одного термина к другому. Эти основные тактики можно связать вместе, используя функции более высокого порядка, чтобы создать более сложные. Основная идея всегда одна и та же: тактика всегда нацелена на добавление некоторой структуры к неполному доказательству.
Обратите внимание, что разработчики стремятся вернуть термин, который снова проверяется после каждого тактического приложения. Строго говоря, для них нет необходимости делать это, поскольку все, что имеет значение для помощников по доказательству на основе теории типов, состоит в том, что, когда пользователь приходит к Qed доказательству, мы располагаем термином доказательства, который обитает в предложении P. Как мы Пришедший к этому доказательству термин в значительной степени не имеет значения. Однако и Coq, и Matita стремятся вернуть пользователю (возможно, неполный) проверочный термин, который проверяет тип после каждого применения тактики. Тем не менее, этот инвариант может (и часто не работает) терпеть неудачу, особенно в том, что касается двух синтаксических проверок, которые должны выполнять корректоры на основе CIC.
В частности, мы можем выполнить то, что представляется убедительным доказательством, применяя серию тактик, пока не останется открытых целей. Затем мы приходим к Кеду предполагаемому доказательству, только чтобы обнаружить, что проверка завершения Матиты или ее строгая проверка положительности жалуются, поскольку термин доказательства, сгенерированный тактикой, лишил законной силы одну из этих синтаксических проверок (т. Е. Мета-переменную в позиции аргумента для был создан экземпляр рекурсивного вызова с термином, который синтаксически не меньше исходного аргумента). Это является отражением того, что теория типов CIC в некотором смысле не является «достаточно сильной» и не отражает синтаксические требования позитивности или размера в ее типах (наблюдение, мотивирующее размерные типы Абеля, и некоторые недавние работы над типами позитивности). ).
С другой стороны, ассистенты в стиле LCF совсем другие. Здесь ядро состоит из модуля (обычно реализуемого в варианте ML), содержащего абстрактный тип «thm», и функций, которые реализуют правила вывода логики ассистента проверки, отображения «thm» в «thm» и т. Д. вперед. Мы полагаемся на типизацию дисциплины ML, чтобы гарантировать, что единственный способ конструировать значение типа «thm» - это правила вывода (базовая тактика). Ядро Изабель здесь .
Доказательства затем состоят из ряда применений этих основных тактик (или более сложных, более масштабных тактик, которые снова создаются путем объединения более простых тактик с использованием функций высшего порядка) - в Изабель функции высшего порядка, называемые тактическими, могут быть увиденным здесь ). В отличие от помощников по доказательству, основанных на теории типов, в помощнике в стиле LCF нет необходимости хранить явный термин «доказательство» в качестве свидетеля. Правильность доказательства гарантируется конструкцией и нашим доверием к дисциплине набора текста в ML (однако многие помощники, например Изабель, генерируют термины доказательства для своих доказательств).