Система Гильберта-Автоматическое Доказательство
Я пытаюсь доказать утверждение ~(a - >~b) => a В a Гильберт система стиль. К сожалению, кажется, что невозможно придумать общий алгоритм, чтобы найти доказательства, но я ищу стратегию типа грубой силы. Любые идеи о том, как атаковать это, приветствуются.
6 ответов
Если Вам нравится "программирование" в комбинаторная логика, потом
- вы можете автоматически "перевести" некоторые логические задачи в другую область: доказательство равенства комбинаторных логических терминов.
- С хорошей практикой функционального программирования, вы можете решить, что,
- и после этого вы можете перевести ответ обратно в доказательство стиля Гильберта вашей исходной логической проблемы.
возможность перевода в обеспечивается соответствие Карри-Говарда.
к сожалению, ситуация настолько проста только для подмножества (пропозициональной) логики: ограничено использование условных обозначений. Отрицание-это осложнение, я ничего об этом не знаю. Поэтому я не могу ответить на этот конкретный вопрос:--3-->
(α ⊃ β) ⊢ α
но в случаях, когда отрицание не является частью вопроса, упомянутый автоматический перевод (и back-translation) может помочь при условии, что у вас уже есть практика в функциональном программировании или комбинаторной логике.
конечно, есть и другие подсказки, где мы можем остаться внутри области логики:
- доказательство проблемы в какой-то более интуитивной дедуктивной системе (например,естественные вычет)
- и затем с помощью metatheorems, которые предоставляют возможность "компилятора": перевод "высокого уровня" доказательство естественной дедукции к "машинному коду" системы дедукции в стиле Гильберта. Я имею в виду, например, металогическую теорему под названием "теорема дедукции".
Что касается доказывающих теоремы, насколько я знаю, возможности некоторых из них расширены, чтобы они могли использовать интерактивную человеческую помощь. Е. Г. Coq такое.
приложение
давайте посмотрим пример. Как доказать α ⊃ α?
система Гильберта
- Verum ex quolibetα,β предполагается как схема аксиомы, указывающая, что предложение α ⊃ β ⊃ α как ожидается, будет выводимы, создается для любого subsentences α,β
- цепи правилоα,β,γ предполагается как схема аксиомы, указывающая, что предложение (α ⊃ β ⊃ γ) ⊃ (α ⊃ β) ⊃ α ⊃ γ как ожидается, будет выводимы, создается для любого subsentences α,β
- Modus ponens предполагается, как правило вывода: при условии это α ⊃ β выводится, а также α выводимо, то мы ожидаем, что будет оправдано сделать вывод, что также α ⊃ β поддается дедукции.
докажем теорему:α ⊃ α выводится для любого α предложение.
давайте введем следующие обозначения и сокращения, создание "доказательство исчисление":
доказательство исчисление!--137-->
-
VEQα,β: ⊢ α ⊃ β ⊃ α
-
CRα,β,γ: ⊢ (α ⊃ β ⊃ γ) ⊃ (α ⊃ β) ⊃ α⊃ γ
-
MP: Ifα ⊃ β и ⊢ α, то ⊢ β
обозначение диаграммы дерева:
схема аксиомы-Verum ex quolibet:
━━━━━━━━━━━━━━━━━ [VEQα,β]
⊢ α ⊃ β ⊃ α
схема аксиомы-цепное правило:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [CRα,β,γ]
⊢ (α ⊃ β ⊃ γ) ⊃ (α ⊃ β) ⊃ α⊃ γ
правило вывода-modus ponens:
⊢ α ⊃ β ⊢ α
━━━━━━━━━━━━━━━━━━━ [MP]
⊢ β
доказательство дерево
давайте посмотрим представление диаграммы дерева доказательство:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [CRα, α⊃α, α]
━━━━━━━━━━━━━━━ [VEQα, α⊃α]
⊢ [α⊃(α⊃α)⊃α]⊃(α⊃α⊃α)⊃α⊃α
⊢ α ⊃ (α ⊃ α) ⊃ α
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [MP] ━━━━━━━━━━━ [VEQα,α]
⊢ (α ⊃ α ⊃ α) ⊃ α ⊃ α
⊢ α ⊃ α ⊃ α
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [MP]
⊢ α ⊃ α
доказательство формулы
давайте посмотрим четный conciser (алгебраический? исчисление?) представительство доказательство:
(CRα,α⊃α,αVEQα,α ⊃ α) VEQα,α: ⊢ α⊃ α
Итак, мы можем представить дерево доказательств одной формулой:
- разветвление дерева (modus ponens) отображается простым сцеплением (скобки),
- и листья дерева отображаются сокращениями соответствующих имен аксиом.
стоит записать о конкретном экземпляре, который ' набирается здесь с субиндексическими параметрами.
Как будет видно из серии примеров ниже, мы можем разработать доказательство матанализ, где аксиомы обозначаются как своего рода база комбинаторы, а modus ponens обозначается как простой приложение его "посылка" subproofs:
Пример 1
VEQα,β: ⊢ α ⊃ β ⊃ α
подразумевается
Verum ex quolibet схемы аксиом инстанцируют с α,β обеспечивает доказательство для заявлении, что α ⊃ β ⊃ α поддается дедукции.
Пример 2
VEQα,α: ⊢ α ⊃ α ⊃ α
Verum ex quolibet схемы аксиом инстанцируют с α,α предоставляет доказательство утверждения, что α ⊃ α ⊃ α поддается дедукции.
Пример 3
VEQα, α⊃α: ⊢ α ⊃ (α ⊃ α) ⊃ α
подразумевается
Verum ex quolibet схемы аксиом инстанцируют с α, α⊃α обеспечивает доказательство для заявлении, что α ⊃ (α ⊃ α) ⊃ α поддается дедукции.
Пример 4
CRα,β,γ: ⊢ (α ⊃ β ⊃ γ) ⊃ (α ⊃ β) ⊃ α⊃ γ
подразумевается
правило цепи схемы аксиом инстанцируют с α,β,γ предоставляет доказательство утверждения, что (α ⊃ β ⊃ γ) ⊃ (α ⊃ β) ⊃ α⊃ γ поддается дедукции.
Пример 5
CRα,α⊃α,α: ⊢ [α ⊃ (α⊃α) ⊃ α] ⊃ (α ⊃ α⊃α) ⊃ α⊃ α
подразумевается
правило цепи схемы аксиом инстанцируют с α,α⊃α,α предоставляет доказательство утверждения, что [α ⊃ (α⊃α) ⊃ α] ⊃ (α ⊃ α⊃α) ⊃ α⊃ α поддается дедукции.
Пример 6
CRα,α⊃α,αVEQα,α ⊃ α: ⊢ (α ⊃ α⊃α) ⊃ α⊃ α
подразумевается
Если мы объединим CRα,α⊃α,α и VEQα,α ⊃ α через modus ponens, то мы получаем доказательство, которое доказывает следующее утверждение: (α ⊃ α⊃α) ⊃ α⊃ α поддается дедукции.
Пример 7
(CRα,α⊃α,αVEQα,α ⊃ α) VEQα,α: ⊢ α⊃ α
Если мы объединим доказательство compund (CRα,α⊃α,α) вместе с VEQα,α ⊃ α (via modus ponens), то мы получим еще более соединений доказательство. Это доказывает следующее утверждение: α⊃ α поддается дедукции.
комбинаторная логика
хотя все это выше действительно предоставлено доказательство ожидаемой теоремы, но это кажется очень неинтуитивным. Невозможно понять, как люди могут "найти" доказательство.
давайте посмотрим другое поле, где исследуются аналогичные проблемы.
нетипичная комбинаторная логика
комбинаторная логика можно рассматривать также как чрезвычайно минималистичный функциональный язык программирования. Несмотря на свой минимализм, он полностью Turing complete, но evenmore, можно написать довольно интуитивно и сложные программы даже в этом, казалось бы, запутанном языке, модульным и многоразовым способом, с некоторой практикой, полученной из "нормального" функционального программирования и некоторых алгебраических идей .
добавление правил ввода
комбинаторная логика также имеет типизированные варианты. Синтаксис дополняется типами, и evenmore, в дополнение к правилам сокращения, также добавляются правила ввода.
для базы комбинаторы:
- Kα,β выбирается в качестве основного комбинатора,населяющих типа α → β → α
- Sα,β,γ выбирается как основной комбинатор, населяющий тип (α → β → γ) → (α → β) → α → γ.
ввод правила применения:
- если X населяет типа α → β и Y населяет типа α, тогда X Y населяет типа β.
нотаций и сокращения
- Kα,β: α → β → α
- Sα,β,γ: (α → β → γ) → (α → β)* → α → γ.
- если X: α → β и Y: α, тогда X Y: β.
соответствие Карри-Говарда
видно, что" шаблоны " изоморфны в доказательном исчислении и в этой типизированной комбинаторной логике.
- на Verum ex quolibet аксиома исчисления доказательства соответствует K база комбинатора из комбинаторная логика
- на правило цепи аксиома исчисления доказательства соответствует S базовый комбинатор комбинаторной логики
- на Modus ponens правило вывода в доказательном исчислении соответствует операции "применение" в комбинаторной логике.
- "условная" связность логики соответствует конструктору типа → теории типов (и типизированной комбинаторной логика)
функциональное программирование
а в чем выгода? Почему мы должны переводить задачи в комбинаторную логику? Я лично нахожу это иногда полезным, потому что функциональное программирование-это вещь, которая имеет большую литературу и применяется в практических задачах. Люди могут привыкнуть к нему, когда вынуждены использовать его в программировании erveryday задачи и pracice. И некоторые трюки и подсказки практики функционального программирования могут быть очень хорошо использованы в combinatory логические сокращения. И если "перенесенная" практика развивается в комбинаторной логике, то ее можно использовать и в поиске доказательств в системе Гильберта.
внешние ссылки
ссылки как типы в функциональном программировании (лямбда-исчисление, комбинаторная логика) могут быть переведены в логические доказательства и теоремы:
- Wadler, Philip (1989). теоремы бесплатно!.
ссылки (или книги) Как научиться методы и практика программирования непосредственно в комбинаторной логике:
- Madore, David (2003). Язык Программирования Unlambda. Unlambda: Ваш Функциональный Язык Программирования Кошмары Сбываются.
- Curry, Haskell B. & Feys, Robert & Craig, William (1958). Комбинаторная Логика. Vol. Я!--63-->. Amsterdam: North-Holland Publishing Company.
- Tromp, John (1999). двоичное лямбда-исчисление и Комбинаторная Логика. Загружаемый в PDF и Postscript от автора лямбда-исчисление Джона и комбинаторная логика.
система Гильберта обычно не используется в автоматическом доказательстве теоремы. Гораздо проще написать компьютерную программу, чтобы сделать доказательства, используя естественный вывод. От материал курса CS:
некоторые FAQ о системе Гильберта: Вопрос: Как узнать, какая аксиома схемы для использования и которые замены сделать? Так как есть бесконечно много возможностей, это невозможно попробовать их все, даже в princple. A: нет алгоритм; в крайней мере, не простой. Скорее, один из них быть умным. В чистой математике, это не рассматривается как проблема, так как один из них больше всего обеспокоен существование доказательства. Однако в применения информатики, одно заинтересованы в автоматизации вычета процесс, так что это фатальный недостаток. Этот Система Гильберта обычно не используется в автоматическое доказательство теорем. Вопрос: почему люди заботятся о Гильберте система? A: с modus ponens как свое один дедуктивный правило, оно предусматривает приемлемая модель того, как люди изобретают математическое доказательство. Как мы увидим, методы, которые более поддаются компьютерная реализация производит доказательства которые менее "похожи на людей"."
найти доказательства в исчислении Гильберта очень сложно.
вы можете попытаться перевести доказательства в последовательное исчисление или естественный вывод в исчисление Гильберта.
вы также можете подойти к проблеме, установив α = α → ⊥. Затем мы можем принять систему стиля Гильберта, как показано в приложении к одному из ответов, и сделать ее классической, добавив следующие две аксиомы соответственно константам:
Ex Falso Quodlibet: Eα : → ⊥ α
Consequentia Mirabilis: Mα : ( α → α) → α
последовательное доказательство (α → β) → α тогда гласит следующее:
- α α ⊢ (тож)
- β β → ⊥ (ex Falso Quodlibet)
- α → ⊥, α β β → ⊥ (введение слева 1 & 2)
- α → ⊥ ⊢ α → (⊥β →) (осущ права интро 3)
- α α (ex Falso Quodlibet)
- (α → (β → ⊥))→⊥, α → α α (импл. слева 4 & 5)
- (α → (β → ⊥)) → α α (consequentia Mirabilis 6)
- ⊢ ((α → (⊥β →))⊥→) → α (осущ интро права 7)
из этого доказательства последовательности можно извлечь лямбда-выражение. Возможно лямбда-выражения для приведенного выше доказательства последовательности читаются следующим образом:
λy.(M λz.(E (y λx.(E (z x)))))
это лямбда-выражение можно преобразовать в лыжный термин. Возможно Лыжный термин для вышеуказанного лямбда-выражения гласит следующее:
S (K M)) (L2 (L1 (K (L2 (L1 (K I))))))
где L1 = (S ((S (K S)) ((S (K K))))
и L2 = (S (K (S (K E))))
Это дает следующий стиль Гильберта доказательства:
Лемма 1: ослабленная форма правила цепи:
1: ((A → B) → ((C → A) → (C → B))) → (((A → B) → (C → A)) → ((A → B) → (C → B))) [Цепь]
2: ((A → B) → ((C → (A → B)) → ((C → A) → (C → B))) → (((A → B) → (C → (A → B))) → ((A → B) → ((C → A) → (C → B)))) [Цепь]
3: ((C → (A → B)) → ((C → A) → (C → B))) → ((A → B) → ((C → (A → B)) → ((C → A) → (C → B)))) [Verum Ex]
4: (C → (A → B)) → ((C → A) → (C → B)) [Цепь]
5: (A → B) → ((C → (A → B)) → ((C → A) → (C → B))) [MP 3, 4]
6: ((A → B) → (C → (A → B))) → ((A → B) → ((C → A) → (C → B))) [MP 2, 5]
7: ((A → B) → ((A → B) → (C → (A → B)))) → (((A → B) → (A → B)) → ((A → B) → (C → (A → B)))) [Цепь]
8: ((A → B) → (C → (A → B))) → ((A → B) → ((A → B) → (C → (A → B)))) [Verum Ex]
9: (A → B) → (C → (A → B)) [Verum Ex]
10: (A → B) → ((A → B) → (C → (A → B))) [MP 8, 9]
11: ((A → B) → (A → B)) → ((A → B) → (C → (A → B))) [MP 7, 10]
12: (A → B) → (A → B) [Идентичность]
13: (A → B) → (C → (A → B)) [MP 11, 12]
14: (A → B) → ((C → A) → (C → B)) [MP 6, 13]
15: ((A → B) → (C → A)) → ((A → B) → (C → B)) [MP 1, 14]
Лемма 2: ослабленная форма Ex Falso:
1: (A → ((B→⊥) → (B → C))) → ((A → (B→⊥)) → (A → (B → C))) [Цепь]
2: ((B→⊥) → (B → C)) → (A → ((B→⊥) → (B → C))) [Verum Ex]
3: (B → (⊥→C)) → ((B→⊥) → (B → C)) [Цепь]
4: (⊥→C) → (B → (⊥ → C)) [Verum Ex]
5: → → C [Ex Falso]
6: B → (⊥→C) [MP 4, 5]
7: (B→⊥) → (B → C) [MP 3, 6]
8: A → ((B→⊥) → (B → C)) [MP 2, 7]
9: (A → (B→⊥)) → (A → (B → C)) [MP 1, 8]
Окончательное Доказательство:
1: (((A → (B → ⊥)) → ⊥) → (((A → ⊥) → A) → A)) → ((((A → (B → ⊥)) → ⊥) → ((A → ⊥) → A)) → (((A → (B → ⊥))→⊥) → A)) [Цепь]
2: (((A → ⊥) → A) → A) → (((A → (B → ⊥)) → ⊥) → (((A→ ⊥) → A) → A)) [Verum Ex]
3: ((A → ⊥) → A) → A [Мирабилис]
4: ((A → (B → ⊥)) → ⊥) → (((A→ ⊥) → A) → A) [MP 2, 3]
5: (((A → (B → ⊥)) → ⊥) → ((A → ⊥) → A)) → (((A → (B → ⊥))→⊥) → A) [MP 1, 4]
6: (((A → (B → ⊥)) → ⊥) → ((А → ⊥) → ⊥)) → (((A → (B → ⊥)) → ⊥) → ((A→ ⊥) → A)) [Лемма 2]
7: (((A → (B → ⊥)) → ⊥) → ((A→ ⊥) → (A → (B → ⊥)))) → (((A → (B → ⊥)) → ⊥) → ((A→ ⊥)→ ⊥)) [Лемма 1]
8: ((A→⊥) → (A → (B → ⊥))) → (((A → (B → ⊥)) → ⊥) → ((A → ⊥) → (A → (B → ⊥)))) [Verum Ex]
9: ((A→⊥) → (A → ⊥ )) → ((A → ⊥) → (A → (B → ⊥))) [Лемма 2]
10: ((A → ⊥) → (A → A)) → ((A → ⊥) → (A → ⊥)) [Лемма 1]
11: (A → A) → ((A → ⊥) → (A → A)) [Verum Ex]
12: A → A [Идентичность]
13: (A→⊥) → (A → A) [MP 11, 12]
14: (A→⊥) → (A → ⊥) [MP 10, 13]
15: (A→ ⊥) → (A → (B → ⊥)) [MP 9, 14]
16: ((A → (B → ⊥)) → ⊥) → ((A → ⊥) → (A → (B → ⊥))) [MP 8, 15]
17: ((A → (B → ⊥)) → ⊥) → ((A→ ⊥)→ ⊥) [MP 7, 16]
18: ((A → (B → ⊥)) → ⊥) → ((A→ ⊥) → A) [MP 6, 17]
19: ((A → (B→⊥))→→) → A [MP 5, 18]
довольно длинное доказательство!
тю
- какая конкретная система Гильберта? Есть тонны.
- вероятно, лучший способ-найти доказательство в последовательном исчислении и преобразовать его в систему Гильберта.
Я использую польская нотация.
поскольку вы ссылались на Википедию, мы предположим, что наша основа
1 CpCqp.
2 CCpCqrCCpqCpr.
3 CCNpNqCqp.
мы хотим доказать
NCaNb / - a.
Я использую доказательство теоремы Prover9. Так что, нам нужно поставить все в скобки. Кроме того, переменные Prover9 go (x, y, z, u, w, v5, v6,... В. Н.). Все остальные символы интерпретируются как функции, отношения или предикаты. Все аксиомы нуждаются в символе предиката "P"перед ними также, который мы можем думать как значение" это доказуемо...- или, проще говоря, "доказуемо". И все предложения в Prover9 должны заканчиваться точкой. Таким образом, аксиомы 1, 2 и 3 становятся соответственно:
1 P(C(x,C (y,x))).
2 P(C(C(x,C(y,z)),C(C(x,y),C (x,z)))).
3 P(C(C(N(x),N(y)),C (y,x))).
мы можем совместить правила равномерной замены и отрешенность в правление конденсированных отряда. В Prover9 мы можем представить это как:
- P(C(x,y)) | -P(x) | P (y).
" | "означает логическую дизъюнкцию, а" - " - отрицание. Притча доказывает противоречием. Правило говорит словами может быть истолковано как говорящее: "либо не так, что если x, то y доказуемо, либо не так, что x доказуемо, или y доказуемо."Таким образом, если это действительно так, если x, то y доказуемо, первый дизъюнкт терпит неудачу. Если он считает, что x доказуемо, то второй дизъюнкт терпит неудачу. Итак, если, если x, то y доказуемо, если x доказуемо, то третий дизъюнкт, что y доказуемо, следует правилу.
теперь мы не можем делать замены в NCaNb, так как это не тавтология. Как и "А". Таким образом, если мы положим
P(N(C(a,N (b))).
Как предположение, Prover9 будет интерпретировать "a" и " b " как нульарные функции, которые эффективно превращает их в константы. Мы также хотим сделать P (a) нашей целью.
теперь мы также можем "настроить" Prover9, используя различные стратегии доказательства теоремы, такие как взвешивание, резонанс, подформула, заданное соотношение, насыщенность уровня (или даже изобрести свой собственный). Я немного использую стратегию подсказок, делая все предположения (включая правило вывода) и цель в подсказки. Я также уменьшу максимальный вес до 40 и сделаю 5 максимальным числом переменная.
Я использую версию с графическим интерфейсом, но вот весь входной сигнал:
set(ignore_option_dependencies). % GUI handles dependencies
if(Prover9). % Options for Prover9
assign(max_seconds, -1).
assign(max_weight, 40).
end_if.
if(Mace4). % Options for Mace4
assign(max_seconds, 60).
end_if.
if(Prover9). % Additional input for Prover9
formulas(hints).
-P(C(x,y))|-P(x)|P(y).
P(C(x,C(y,x))).
P(C(C(x,C(y,z)),C(C(x,y),C(x,z)))).
P(C(C(N(x),N(y)),C(y,x))).
P(N(C(a,N(b)))).
P(a).
end_of_list.
assign(max_vars,5).
end_if.
formulas(assumptions).
-P(C(x,y))|-P(x)|P(y).
P(C(x,C(y,x))).
P(C(C(x,C(y,z)),C(C(x,y),C(x,z)))).
P(C(C(N(x),N(y)),C(y,x))).
P(N(C(a,N(b)))).
end_of_list.
formulas(goals).
P(a).
end_of_list.
вот доказательство, которое он мне дал:
============================== prooftrans ============================
Prover9 (32) version Dec-2007, Dec 2007.
Process 1312 was started by Doug on Machina2,
Mon Jun 9 22:35:37 2014
The command was "/cygdrive/c/Program Files (x86)/Prover9-Mace43/bin-win32/prover9".
============================== end of head ===========================
============================== end of input ==========================
============================== PROOF =================================
% -------- Comments from original proof --------
% Proof 1 at 0.01 (+ 0.01) seconds.
% Length of proof is 23.
% Level of proof is 9.
% Maximum clause weight is 20.
% Given clauses 49.
1 P(a) # label(non_clause) # label(goal). [goal].
2 -P(C(x,y)) | -P(x) | P(y). [assumption].
3 P(C(x,C(y,x))). [assumption].
4 P(C(C(x,C(y,z)),C(C(x,y),C(x,z)))). [assumption].
5 P(C(C(N(x),N(y)),C(y,x))). [assumption].
6 P(N(C(a,N(b)))). [assumption].
7 -P(a). [deny(1)].
8 P(C(x,C(y,C(z,y)))). [hyper(2,a,3,a,b,3,a)].
9 P(C(C(C(x,C(y,z)),C(x,y)),C(C(x,C(y,z)),C(x,z)))). [hyper(2,a,4,a,b,4,a)].
12 P(C(C(C(N(x),N(y)),y),C(C(N(x),N(y)),x))). [hyper(2,a,4,a,b,5,a)].
13 P(C(x,C(C(N(y),N(z)),C(z,y)))). [hyper(2,a,3,a,b,5,a)].
14 P(C(x,N(C(a,N(b))))). [hyper(2,a,3,a,b,6,a)].
23 P(C(C(a,N(b)),x)). [hyper(2,a,5,a,b,14,a)].
28 P(C(C(x,C(C(y,x),z)),C(x,z))). [hyper(2,a,9,a,b,8,a)].
30 P(C(x,C(C(a,N(b)),y))). [hyper(2,a,3,a,b,23,a)].
33 P(C(C(x,C(a,N(b))),C(x,y))). [hyper(2,a,4,a,b,30,a)].
103 P(C(N(b),x)). [hyper(2,a,33,a,b,3,a)].
107 P(C(x,b)). [hyper(2,a,5,a,b,103,a)].
113 P(C(C(N(x),N(b)),x)). [hyper(2,a,12,a,b,107,a)].
205 P(C(N(x),C(x,y))). [hyper(2,a,28,a,b,13,a)].
209 P(C(N(a),x)). [hyper(2,a,33,a,b,205,a)].
213 P(a). [hyper(2,a,113,a,b,209,a)].
214 $F. [resolve(213,a,7,a)].
============================== end of proof ==========================