Как работают ассистенты? - PullRequest
       86

Как работают ассистенты?

1 голос
/ 06 ноября 2019

Каковы основные блоки корректора?

Мне просто интересно знать внутреннюю логику проверки доказательств. Например, темы о графических пользовательских интерфейсах таких помощников меня не интересуют.

Подобный мой вопрос был задан для компиляторов: https://softwareengineering.stackexchange.com/questions/165543/how-to-write-a-very-basic-compiler

Моя проблема такая же, но для доказательствасистемы проверки.

Ответы [ 2 ]

5 голосов
/ 06 ноября 2019

Я вряд ли эксперт в этом вопросе (я всего лишь пользователь этих систем; я не беспокоюсь слишком много об их внутренностях), и это, вероятно, будет лишь неопределенным частичным ответом, но я знаю два основных подхода:

  • Системы с независимой типизацией (например, Coq, Lean, Agda), в которых используется изоморфизм Карри – Ховарда. Утверждения - это просто типы, а доказательства - это термины, имеющие этот тип, поэтому проверка действительности доказательства - это, по сути, лишь частный случай проверки типа термином. Я не хочу говорить слишком много об этом подходе, потому что я не знаю слишком много об этом и боюсь, что я что-то не так пойму. Тео Винтерхальтер связал что-то в комментариях выше, что может дать больше контекста в этом подходе.
  • Доказательства теорем в стиле LCF (например, Изабель, HOL Light, HOL 4). Здесь теорема (грубо говоря) является непрозрачным значением типа thm в языке реализации. Только сравнительно небольшое «ядро доказательства» может создать эти thm значения, и все другие части системы взаимодействуют с этим ядром доказательства. Ядро предлагает интерфейс, состоящий из различных небольших функций, которые реализуют небольшие шаги вывода, такие как modus ponens (если у вас есть теорема A ⟹ B и теорема A, вы можете получить теорему B)или introduction-введение (если у вас есть теорема P x для фиксированной переменной x, вы можете получить теорему ∀x. P x) и т. д. Ядро также предлагает интерфейс для определения новых констант. В принципе, если вы можете верить, что эти функции точно реализуют основные этапы логического вывода базовой логики, вы можете верить, что любое значение thm, которое вы можете произвести, действительно соответствует теореме в вашей логике. Для испытателей в стиле LCF ответить на вопрос о том, что такое фактическое доказательство, немного сложнее, потому что они обычно не строят термины доказательства (например, у Изабель они есть, но по умолчанию они отключены и не используются широко). Я думаю, что можно сказать, что история того, как называются примитивы ядра, является доказательством, и если бы кто-то записал это, он мог - в принципе - воспроизводиться и проверяться в другой системе.

В обоих случаях идея заключается в том, что у вас есть ядро ​​(средство проверки типов в первом случае и ядро ​​вывода во втором), которому вы должны доверять, а затем у вас есть большая экосистема дополнительных процедур вокругэто, чтобы обеспечить больше удобных слоев. Однако, поскольку им приходится взаимодействовать с ядром, чтобы на самом деле создавать теоремы, вам не нужно доверять этому коду.

Все эти разные системы имеют различные компромиссы в отношении того, какие части системы находятся вядро а какие части нет. В целом, я думаю, будет справедливо сказать, что системы с зависимой типизацией имеют тенденцию иметь значительно большие ядра, чем основанные на LCF (например, HOL Light имеет особенно маленькое и простое ядро).

Есть такжедругие системы, которые, я считаю, не вписываются в эти две категории (например, Mizar, ACL2, PVS, Metamath, NuPRL), но я ничего не знаю о том, как они реализованы.

1 голос
/ 08 ноября 2019

В случае LCF, HOL и Изабель вы найдете исчерпывающий ответ на ваш вопрос в журнальной статье " От LCF до Изабель / HOL ". (Это открытый доступ.)

Большинство систем с независимой типизацией, таких как Coq, также являются средствами доказательства теорем в стиле LCF, как описано в статье и в ответе Эберла. Одно существенное отличие состоит в том, что такие исчисления включают в себя объекты полного доказательства, так что одна из целей подхода LCF - сэкономить место, не сохраняя доказательства - заброшена. Тем не менее, цель разумности по-прежнему достигнута.

...