Автоматизированное средство доказательства теорем Isabelle [a] — это средство доказательства теорем логики высшего порядка (HOL) , написанное на языках Standard ML и Scala . Как средство доказательства теорем в стиле LCF , оно основано на небольшом логическом ядре (ядре) для повышения достоверности доказательств, не требуя (но поддерживая) явных объектов доказательства.
Isabelle доступна внутри гибкой системной структуры, допускающей логически безопасные расширения, которые включают в себя как теории, так и реализации для генерации кода, документации и специальной поддержки различных формальных методов . Его можно рассматривать как IDE для формальных методов. За последние годы значительное количество теорий и расширений системы было собрано в Архиве формальных доказательств Изабель ( Isabelle AFP ) [2]
Изабель назвал Лоуренс Полсон в честь дочери Жерара Юэ . [3]
Средство доказательства теорем Изабель является свободным программным обеспечением , выпущенным под пересмотренной лицензией BSD .
Isabelle является общей: она обеспечивает металогику (слабую теорию типов ), которая используется для кодирования объектной логики, такой как логика первого порядка (FOL), логика высшего порядка (HOL) или теория множеств Цермело – Френкеля (ZFC). Наиболее широко используемой объектной логикой является Isabelle/HOL, хотя значительные разработки теории множеств были завершены в Isabelle/ZF. Основной метод доказательства Изабель — это версия резолюции более высокого порядка, основанная на унификации более высокого порядка .
Несмотря на интерактивность, Isabelle предлагает эффективные инструменты автоматического рассуждения, такие как механизм переписывания терминов и средство доказательства таблиц , различные процедуры принятия решений, а также, через интерфейс автоматизации доказательства Sledgehammer , внешние решатели теорий выполнимости по модулю (SMT) (включая CVC4 ) и разрешение - основанные на автоматизированных средствах доказательства теорем (ATP), включая E , SPASS и Vampire ( метод доказательства Metis [b] восстанавливает доказательства разрешения, сгенерированные этими ATP). [4] Он также имеет два средства поиска моделей ( генераторы контрпримеров ): Nitpick [5] и Nunchaku . [6]
В Isabelle есть локали , которые представляют собой модули, структурирующие большие доказательства. Локаль фиксирует типы, константы и предположения в пределах заданной области действия [5] , поэтому их не нужно повторять для каждой леммы .
Isar (« внятное полуавтоматическое рассуждение ») — формальный язык доказательств Изабель. Он вдохновлен системой Mizar . [5]
Изабель позволяет писать доказательства в двух разных стилях: процедурном и декларативном . Процедурные доказательства определяют ряд тактик ( функций/процедур доказательства теорем ), которые следует применять. Хотя они отражают процедуру, которую математик-человек может применить для доказательства результата, их обычно трудно читать, поскольку они не описывают результат этих шагов. С другой стороны, декларативные доказательства (поддерживаемые языком доказательств Изабель Isar) определяют фактические математические операции, которые необходимо выполнить, и поэтому их легче читать и проверять людьми.
Процедурный стиль устарел в последних версиях Isabelle. [ нужна цитата ]
Например, декларативное доказательство от противного в Isar того, что квадратный корень из двух нерационален, можно записать следующим образом.
теорема sqrt2_not_rational: доказательство "sqrt 2 ∉ ℚ" пусть ?x = "sqrt 2" предположим, что "?x ∈ ℚ", затем получим mn :: nat где sqrt_rat: "¦?x¦ = m / n" и low_terms: "взаимнопростые m n " by (правило Rats_abs_nat_div_natE) отсюда "m^2 = ?x^2 * n^2" by (auto simp add: power2_eq_square) отсюда eq: "m^2 = 2 * n^2" с использованием of_nat_eq_iff power2_eq_square от fastforce отсюда " 2 dvd m^2" от simp , следовательно, "2 dvd m" от simp есть доказательство "2 dvd n" - из ‹2 dvd m> получаем k , где "m = 2 * k" .. с eq имеем "2 * n^ 2 = 2^2 * k^2" с помощью simp , следовательно, "2 dvd n^2" с помощью simp , таким образом, "2 dvd n" с помощью simp qed с ‹2 dvd m> имеем "2 dvd gcd m n" по (правилу gcd_greestest) с самые низкие_термы имеют «2 dvd 1» от simp, поэтому значение False при использовании нечетного_one от blast qed
Изабель использовалась в качестве помощи формальным методам спецификации, разработки и проверки программных и аппаратных систем.
Изабель использовалась для формализации многочисленных теорем из математики и информатики , таких как теорема Гёделя о полноте , теорема Гёделя о непротиворечивости аксиомы выбора , теорема о простых числах , правильность протоколов безопасности и свойства семантики языков программирования . Как уже упоминалось, многие формальные доказательства хранятся в Архиве формальных доказательств, который содержит (по состоянию на 2019 год) не менее 500 статей с общим числом более 2 миллионов строк доказательств. [7]
Ларри Полсон ведет список исследовательских проектов, в которых используется Изабель. [10]
Несколько языков и систем предоставляют схожую функциональность: