Ответ 1
В основном я знаком с Coq и не имею большого опыта работы с Isabelle/HOL, но я мог бы немного помочь. Возможно, другие, имеющие больше опыта работы с Isabelle/HOL, могут помочь улучшить это.
Существуют две большие точки расхождения между двумя системами: лежащие в основе теории и стиль взаимодействия. Я попытаюсь дать краткий обзор основных различий в каждом случае.
Теория
Оба Coq и Isabelle/HOL основаны на мощных, очень выразительных логиках более высокого порядка. Однако эти логики отличаются несколькими особенностями:
Зависимые типы
Coq-логика - это теория зависимого типа, известная как исчисление индуктивных конструкций (короткое замыкание на CIC). "Зависимый тип" здесь означает, что типы в Coq могут относиться к обычным значениям. Например, можно написать функцию умножения матрицы mult
с типом
mult : forall (n m p : nat), matrix n m -> matrix m p -> matrix n p
Тип этой функции говорит о том, что в качестве входов используются две матрицы: один из размерности n x m
и другой размерности m x p
, и возвращает матрицу размерности n x p
. С другой стороны, теория Изабель /HOL не обладает зависимыми типами; следовательно, нельзя написать функцию mult
с тем же типом, что и выше. Вместо этого нужно написать функцию, которая работает для любой матрицы, и доказать апостериорные определенные свойства этой функции, когда она получает аргументы правильных видов. Другими словами, некоторые свойства, которые проявляются в типах Coq, должны утверждаться как отдельные теоремы при работе с Isabelle/HOL.
В то время как зависимые типы интересны для некоторых вещей, неясно, насколько они полезны в целом. У меня сложилось впечатление, что некоторые считают, что они очень сложны в использовании, и что преимущество наличия определенных свойств, выраженных на уровне типа, в сравнении с их как отдельными теоремами, не стоит этой дополнительной сложности. Лично мне нравится использовать зависимые типы в нескольких случаях, когда есть явные причины для этого.
Общие аксиомы
Теория Кок по умолчанию не имеет многих основополагающих принципов, которые являются обычными в математической практике, таких как закон исключенной середины (т.е. способность рассуждать неконструктивно), расширение (например, способность сказать, что функции, которые дают равные результаты, сами по себе равны) и аксиома выбора. С другой стороны, в Isabelle/HOL такие принципы встроены.
В теории, это не большая проблема, потому что логика Coq была разработана, чтобы позволить людям безопасно добавлять эти принципы рассуждения в качестве дополнительных аксиом. Тем не менее, у меня сложилось впечатление, что легче рассуждать по Isabelle/HOL, поскольку логика была построена с нуля, чтобы поддержать их.
Стиль взаимодействия
Оба Coq и Isabelle/HOL являются интерпретаторами интерактивных теорем. Это языки для написания определений и доказательств о них; эти доказательства проверяются компьютером, чтобы убедиться, что у них нет ошибок. В обеих системах один записывает доказательство, предоставляя команды, которые объясняют, как что-то доказывать. Однако, как это происходит в каждой системе, меняется.
Isabelle/HOL, как правило, имеет более зрелую поддержку для "кнопочной" автоматизации. Например, он имеет известную тактику sledgehammer
, которая вызывает несколько внешних автоматических теоретических предсказателей и решателей, чтобы попытаться доказать теорему. Coq также поставляется со многими мощными процедурами автоматизации доказательств, такими как omega
или congruence
, но они не так общеприменимы, и многие теоремы, которые могут быть решены с помощью одной команды в Isabelle/HOL, требуют более явных доказательств в Coq.
Конечно, это удобство поставляется с ценой. Мне сказали, что сложнее иметь контроль над одним доказательством в Isabelle/HOL, потому что система пытается сделать многое сама по себе. Это не проблема при доказательстве простых теорем, но это становится проблемой, когда автоматизация доказательств недостаточно сильна, и вам нужно сообщить теорему о том, как действовать более подробно.
Ситуация немного отличается при поддержке пользовательских процедур проверки достоверности. Coq поставляется с тактическим языком для написания доказательств, известных как Ltac, который является языком программирования. Несмотря на то, что у Ltac есть некоторые проблемы с дизайном, он позволяет пользователям легко кодировать довольно сложные процедуры автоматизации процедур. Для более тяжелых задач Coq также позволяет пользователям писать плагины на языке реализации Coq, OCaml. Напротив, в Isabelle/HOL нет языка автоматизации более высокого уровня, такого как Ltac, и единственный способ, которым пользователь может программировать процедуры автоматической проверки подлинности, - с плагинами.