Вопрос

Я пытаюсь доказать утверждение ~ (a->~b) => a в a Hilbert система стилей.К сожалению, кажется, что невозможно придумать общий алгоритм для поиска доказательства, но я ищу стратегию типа грубой силы.Любые идеи о том, как атаковать это, приветствуются.

Это было полезно?

Решение

Если вам нравится "программирование" в комбинаторная логика, тогда

  • Вы можете автоматически "перевести" некоторые логические задачи в другое поле:доказательство равенства членов комбинаторной логики.
  • Обладая хорошей практикой функционального программирования, вы можете решить эту проблему,
  • и после этого вы можете перевести ответ обратно в доказательство вашей исходной логической задачи в стиле Гильберта.

Возможность такого перевода обеспечивается Переписка Карри и Говарда.

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

¬ (α ⊃ ¬β)   ⊢   α

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


Конечно, есть и другие подсказки, где мы можем оставаться в рамках логики:

  • доказательство проблемы в какой-нибудь более интуитивной дедуктивной системе (например естественная дедукция)
  • и впоследствии используя метатеоремы, которые предоставляют возможность "компиляции":перевод "высокоуровневого" доказательства естественного вывода в "машинный код" системы дедукции в стиле Гильберта.Я имею в виду, например, металогическую теорему, называемую "теорема дедукции".

Что касается проверяющих теоремы, то, насколько я знаю, возможности некоторых из них расширены настолько, что они могут использовать интерактивную помощь человека.Например. Coq есть такое.



Приложение

Давайте посмотрим на пример.Как доказать αα?

Система Гильберта

  • Verum ex quolibetα,β предполагается как схема аксиомы, утверждающая, что предложение αβα ожидается, что он будет выводимым, создаваемым для любых вложений α,β
  • Цепное правилоα,β,γ предполагается как схема аксиомы, утверждающая, что предложение (αβγ) ⊃ (αβ) ⊃ αγ ожидается, что он будет выводимым, создаваемым для любых вложений α,β
  • Способ поненса предполагается как правило вывода:при условии , что αβ выводима, а также α является выводимым, то мы ожидаем, что у нас будут основания сделать вывод, что также αβ выводимо.

Давайте докажем теорему: αα выводимо для любого α предложение.

Давайте введем следующие обозначения и аббревиатуры, разрабатывая "исчисление доказательств".:

Доказательное исчисление

  • ВЕКα,β:   ⊢   αβα
  • CRα,β,γ:   ⊢   (αβγ) ⊃ (αβ) ⊃ αγ
  • Член парламента:Если ⊢   αβ и ⊢   α, тогда также ⊢   β

Обозначение древовидной диаграммы:

Схема аксиомы — Verum ex quolibet:


    ━━━━━━━━━━━━━━━━━ [ВЕКα,β]
          ⊢   αβα

Схема аксиомы — цепное правило:


    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [CRα,β,γ]
          ⊢   (αβγ) ⊃ (αβ) ⊃ αγ

Правило вывода — modus ponens:


     ⊢   αβ           ⊢   α
    ━━━━━━━━━━━━━━━━━━━ [Член парламента]
                     ⊢   β



Пробное дерево

Давайте посмотрим на древовидное представление доказательства:


━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [CRα, αα, α]    ━━━━━━━━━━━━━━━ [ВЕКα, αα]
⊢   [α⊃(αα)⊃α]⊃(ααα)⊃αα                         ⊢   α ⊃ (αα) ⊃ α
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [Член парламента]      ━━━━━━━━━━━ [ВЕКα,α]
                                          ⊢   (ααα) ⊃ αα                                              ⊢   ααα
                                          ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [Член парламента]
                                                                                     ⊢   αα

Формулы доказательства

Давайте посмотрим на еще более сжатое (алгебраическое?исчисление?) представление доказательства:

(CRα,αα,α ВЕКα,αα) ВЕКα,α:   ⊢   αα

итак, мы можем представить дерево доказательств с помощью одной формулы:

  • разветвление дерева (modus ponens) отображается простой конкатенацией (круглые скобки).,
  • а листья дерева отображаются сокращениями соответствующих названий аксиом.

Стоит сохранить запись о конкретном экземпляре, который' набран здесь с субиндексическими параметрами.

Как будет видно из серии примеров ниже, мы можем разработать доказательное исчисление, где аксиомы обозначаются как своего рода базовые комбинаторы, и modus ponens обозначается как простое применение из его подосновок "предпосылки":

Пример 1

ВЕКα,β:   ⊢   αβα

подразумевалось как

Verum ex quolibet схема аксиомы , созданная с помощью α,β обеспечивает доказательство утверждения, что αβα выводимо.

Пример 2

ВЕКα,α:   ⊢   ααα

Verum ex quolibet схема аксиомы , созданная с помощью α,α обеспечивает доказательство утверждения, что ααα выводимо.

Пример 3

ВЕКα, αα:   ⊢   α ⊃ (αα) ⊃ α

подразумевалось как

Verum ex quolibet схема аксиомы , созданная с помощью α, αα обеспечивает доказательство утверждения, что α ⊃ (αα) ⊃ α выводимо.

Пример 4

CRα,β,γ:   ⊢   (αβγ) ⊃ (αβ) ⊃ αγ

подразумевалось как

Цепное правило схема аксиомы , созданная с помощью α,β,γ обеспечивает доказательство утверждения, что (αβγ) ⊃ (αβ) ⊃ αγ выводимо.

Пример 5

CRα,αα,α:   ⊢   [α ⊃ (αα) ⊃ α] ⊃ (ααα) ⊃ αα

подразумевалось как

Цепное правило схема аксиомы , созданная с помощью α,αα,α обеспечивает доказательство утверждения, что [α ⊃ (αα) ⊃ α] ⊃ (ααα) ⊃ αα выводимо.

Пример 6

CRα,αα,α ВЕКα,αα:   ⊢   (ααα) ⊃ αα

подразумевалось как

Если мы объединим CRα,αα,α и ВЕКα,αα вместе через способ поненса, тогда мы получаем доказательство , которое доказывает следующее утверждение:(ααα) ⊃ αα выводимо.

Пример 7

(CRα,αα,α ВЕКα,αα) ВЕКα,α:   ⊢   αα

Если мы объединим итоговое доказательство (CRα,αα,α) вместе с ВЕКα,αα (через способ поненса), тогда мы получим еще более сложное доказательство.Это доказывает следующее утверждение: αα выводимо.

Комбинаторная логика

Хотя все это вышесказанное действительно обеспечило доказательство ожидаемой теоремы, но это кажется очень неинтуитивным.Непонятно, как люди могут "найти" доказательство.

Давайте посмотрим на другую область, где исследуются аналогичные проблемы.

Нетипизированная комбинаторная логика

Комбинаторная логика может рассматриваться также как чрезвычайно минималистичный функциональный язык программирования.Несмотря на свой минимализм, он полностью завершен по Тьюрингу, но более того, можно писать довольно интуитивные и сложные программы даже на этом, казалось бы, запутанном языке, модульным и многократно используемым способом, с некоторой практикой, полученной в "обычном" функциональном программировании и некоторыми алгебраическими идеями, .

Добавление правил набора текста

Комбинаторная логика также имеет типизированные варианты.Синтаксис дополнен типами, и даже более того, в дополнение к правилам сокращения добавлены также правила набора текста.

Для базовых комбинаторов:

  • Kα,β выбирается в качестве базового комбинатора, обитающий тип αβα
  • Sα,β,γ выбирается в качестве базового комбинатора, обитающий тип (αβγ) → (αβ) → αγ.

Правило ввода текста в приложении:

  • Если X обитает в типе αβ и Y обитает в типе α, тогда X Y обитает в типе β.

Обозначения и аббревиатуры

  • Kα,β: αβα
  • Sα,β,γ: (αβγ) → (αβ)* → αγ.
  • Если X: αβ и Y: α, тогда X Y: β.

Переписка Карри и Говарда

Можно видеть, что "паттерны" изоморфны в исчислении доказательств и в этой типизированной комбинаторной логике.

  • В Verum ex quolibet аксиома доказательного исчисления соответствует K базовый комбинатор комбинаторной логики
  • В Цепное правило аксиома доказательного исчисления соответствует S базовый комбинатор комбинаторной логики
  • В Способ поненса правило вывода в исчислении доказательств соответствует операции "применение" в комбинаторной логике.
  • "Условная" связка ⊃ логики соответствует конструктору типов → теории типов (и типизированной комбинаторной логике)

Функциональное программирование

Но в чем же выгода?Почему мы должны переводить задачи на комбинаторную логику?Лично я нахожу это иногда полезным, потому что функциональное программирование - это вещь, которая имеет большую литературу и применяется в практических задачах.Люди могут привыкнуть к этому, когда вынуждены использовать его в повседневных задачах программирования и практике.И некоторые приемы и подсказки из практики функционального программирования могут быть очень хорошо использованы в комбинаторных логических сокращениях.И если "перенесенная" практика развивается в комбинаторной логике, то ее можно использовать и при поиске доказательств в системе Гильберта.

Внешние ссылки

Ссылки на то, как типы в функциональном программировании (лямбда-исчисление, комбинаторная логика) могут быть преобразованы в логические доказательства и теоремы:

Ссылки (или книги) о том, как изучить методы и попрактиковаться в программировании непосредственно в комбинаторной логике:

Другие советы

Система Гильберта обычно не используется при автоматическом доказательстве теорем.Гораздо проще написать компьютерную программу для проведения доказательств с использованием естественной дедукции.Из материал курса CS:

Некоторые часто задаваемые вопросы о системе Гильберта:Q:Как узнать, какую аксиому схемы использовать и какие замены делать?Поскольку существует бесконечно много возможностей, невозможно попробовать их все, даже в princple.A:Здесь нет алгоритма;по крайней мере, не простой. по крайней мере, не простой.Скорее, нужно быть умным.В чистой математике это не рассматривается как проблема, поскольку больше всего беспокоит существование доказательства.Однако в приложениях для информатики кто-то заинтересован в автоматизации процесса дедукции , так что это фатальный недостаток. Система Гильберта обычно не используется в автоматизированном доказательстве теорем.Q:Итак, почему людям небезразлична система Гильберта ?A:Используя modus ponens в качестве своего единого дедуктивного правила, это обеспечивает приемлемую модель того, как люди разрабатывают математические доказательства.Как мы увидим, методы, которые более поддаются компьютерной реализации, выдают доказательства которые менее “похожи на человеческие”.

Найти доказательства в исчислении Гильберта очень сложно.

Вы могли бы попытаться перевести доказательства в последовательном исчислении или естественной дедукции в исчисление Гильберта.

Вы также можете подойти к решению проблемы, установив α = α → ⊥.Затем мы можем принять систему стиля Гильберта, как показано в приложении к одному из ответов, и сделать ее классической, добавив следующие две аксиомы соответственно константам:

Ex Falso Quodlibet:Eα : ⊥ → α
Консеквенция Мирабилиса:Mα : (¬ α → α) → α

Последовательное доказательство (α → β) → α затем выглядит следующим образом:

  1. α ⊢ α (Идентичность)
  2. ⊥ ⊢ β → ⊥ (При ложном разрешении)
  3. α → ⊥, α ⊢ β → ⊥ (Имплицитное вступление Слева 1 и 2)
  4. α → ⊥ ⊢ α → (β → ⊥) (Имплицитное вступление Справа 3)
  5. ⊥ ⊢ α (Ex Falso Кводлибет)
  6. (α → (β → ⊥)) → ⊥, α → ⊥ ⊢ α (Имплицитное вступление Слева 4 и 5)
  7. (α → (β → ⊥)) → ⊥ ⊢ α (Consequentia Mirabilis 6)
  8. ⊢ ((α → (β → ⊥)) → ⊥) → α (Имплицитное вступление Справа 7)

Из этого последовательного доказательства можно извлечь лямбда-выражение.Возможный лямбда-выражения для приведенного выше последовательного доказательства выглядят следующим образом:

λy.(M λz.(E (y λx.(E (z x)))))

Это лямбда-выражение может быть преобразовано в лыжный термин.Возможный Термин SKI для приведенного выше лямбда-выражения выглядит следующим образом:

S (K M)) (L2 (L1 (K (L2 (L1 (K I)))))))
где L1 = (S ((S (K S)) ((S (K K)) I)))
и 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)) [Истинный пример]
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)) [Истинный пример]
5:⊥ → C [Исходно]
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)) [Истинный пример]
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 → ⊥) → ⊥)) → ((( A → (B → ⊥)) → ⊥) → (( A → ⊥) → A)) [Лемма 2]
7:(((A → (B → ⊥)) → ⊥) → (( A → ⊥) → (A → (B → ⊥)))) → ((( A → (B → ⊥)) → ⊥) → (( A → ⊥) → ⊥)) [Лемма 1]
8:((A → ⊥) → (A → (B → ⊥))) → (((A → (B → ⊥)) → ⊥) → (( A → ⊥) → (A → (B → ⊥)))) [Истинный пример]
9:((A → ⊥) → (A → ⊥)) → ((A → ⊥) → (A → (B → ⊥))) [Лемма 2]
10:((A → ⊥) → (A → A)) → ((A → ⊥) → (A → ⊥)) [Лемма 1]
11:(A → A) → ((A → ⊥) → (A → A)) [Истинный пример]
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. Какая конкретная система Гильберта?Их там тонны.
  2. Вероятно, лучший способ - это найти доказательство в последовательном исчислении и преобразовать его в систему Гильберта.

Я использую Польская нотация.

Поскольку вы ссылались на Википедию, мы предположим, что нашей основой является

1 кпк.

2 CCpCqrCCpqCpr.

3 CCNpNqCqp.

Мы хотим доказать

NCaNb |- a.

Я использую доказательство теоремы Пословица 9.Итак, нам нужно будет заключить все в скобки.Кроме того, переменные Провер9 идут (x, y, z, u, w, v5, v6, ..., vn).Все остальные символы интерпретируются как функции, отношения или предикаты.Все аксиомы также нуждаются в символе предиката "P" перед ними, который мы можем рассматривать как означающий "доказуемо, что ..." или, проще говоря, "доказуемо".И все предложения в Притче9 должны заканчиваться точкой.Таким образом, аксиомы 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))).

Мы можем объединить правила единообразной замены и отсоединения в правило сгущенный отстраненность.В Притче9 мы можем представить это как:

-P(C(x,y)) | -P(x) | P(y).

"|" указывает на логическую дизъюнкцию, а "-" указывает на отрицание.Притча 9 доказывает противоречием.Правило, изложенное в словах, может быть истолковано как говорящее "либо это не тот случай, когда если 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 ==========================
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top