Как с помощью основных пропозициональных правил Isar доказать `A ⟶ A ∨ B`?

Я хотел преобразовать это доказательство в Isar как упражнение ab (для себя, чтобы изучить Isar), используя только базовые правила естественного вывода (ND) из логики высказываний (например, notI, notE, impI, _4 _... и т. Д.).

Я могу легко сделать это в сценарии применения:

lemma very_simple0: "A ⟶ A ∨ B"
  apply (rule impI) (* A ⟹ A ∨ B *)
  thm disjI1 (* ?P ⟹ ?P ∨ ?Q *)
  apply (rule disjI1) (* A ⟹ A *)
  by assumption

но мои попытки доказательства Isar терпят неудачу:

lemma very_simple1: "A ⟶ A ∨ B"
proof (* TODO why/how does this introduce A by itself*)
  assume A (* probably not neccessary since Isabelle did impI by itself *)
  have "A ⟹ A" by disjI1
  show "A ⟹ A" by assumption
qed

моя основная ошибка:

Undefined method: "disjI1"⌂

что мне кажется загадочным, потому что раньше в скрипте apply правила работали нормально.

Что я делаю неправильно?


Обратите внимание, что это также приводит к ошибке:

lemma very_simple2: "A ⟶ A ∨ B"
proof impI
  assume A (* probably not neccessary since Isabelle did impI by itself *)
  have "A ⟹ A" by disjI1
  show "A ⟹ A" by assumption
qed

та же ошибка, что и выше:

Undefined method: "impI"⌂

Зачем?


Редактировать:

Я узнал, что «метод» по-прежнему требует работы rule impI или metis etc, но сценарий по-прежнему не работает:

lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
  assume A (* probably not neccessary since Isabelle did impI by itself *)
  have "A ⟹ A" by (rule disjI1)
  show "A ⟹ A" by assumption
qed

Edit2:

lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
  have 0: "A ⟹ A ∨ B" by (rule disjI1)
  have 1: "A ⟹ A" by assumption
  from 1 show "True" by assumption
qed

Я все еще не могу завершить доказательство.


person Charlie Parker    schedule 12.05.2020    source источник
comment
Еще надо написать rule impI, impI не хватит. Заметим, что доказательство эквивалентно стандартному доказательству и автоматически применяет одну теорему.   -  person Mathias Fleury    schedule 12.05.2020
comment
@MathiasFleury `have A ⟹ A by (rule disjI1)` это все равно не работает. Почему?   -  person Charlie Parker    schedule 12.05.2020
comment
Потому что disjI1 - это не та теорема! have "A ⟹ A" by assumption работает.   -  person Mathias Fleury    schedule 12.05.2020


Ответы (1)


У вас несколько проблем.

Рассмотрим пример:

have "A ⟹ A" by (rule disjI1)

Это не удается, так что сначала какова на самом деле теорема disjI1?

thm disjI1
(* ?P ⟹ ?P ∨ ?Q *)

Из-за того, как работают правила, он пытается сопоставить цель «A» с «? P ∨? Q», что терпит неудачу. Теперь, если ваша цель имеет правильную форму:

have "A ⟹ A ∨ B" by (rule disjI1)

оно работает!

Вторая проблема:

 proof

по умолчанию эквивалентен «стандарту доказательства» и по умолчанию применяет некоторую теорему. Обычно вы используете «доказательство -», чтобы не применять теоремы.

Напоследок давайте рассмотрим ваш пример

lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)

В режиме просмотра состояний вы видите:

proof (state)
goal (1 subgoal):
 1. A ⟹ A ∨ B

Это значит, что Isar должен выглядеть как

lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
  assume ‹A›
  show ‹A ∨ B›
    sorry
qed

Тот факт, что выставка работает, указывает на то, что пробный блок имеет правильную форму.

Осторожно: это важный шаг, особенно в начале. ВСЕГДА начинайте с предположения и шоу. Больше ничего не пиши. Если шоу не работает, структура, наведенная доказательством Isar (принять и показать), не соответствует ожидаемому доказательству (которое можно увидеть на панели состояния).

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

Закончим доказательство. Мы хотим использовать предположение (поэтому мы добавляем then) и правило, чтобы доказать цель.

lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
  assume ‹A›
  then show ‹A ∨ B›
    by (rule disjI1)
qed

В целом, я думаю, вам следует прочитать часть Isar в Конкретной семантике.

РЕДАКТИРОВАТЬ: Самая важная проблема заключается в том, что вы неправильно понимаете, что такое Isar: Isar здесь не для того, чтобы помочь вам с различными шагами доказательства (например, доказательством tha "A ==> A"). Здесь делается прямое доказательство: вы начинаете с предположения (здесь А) и переходите к заключению. Таким образом, доказательство Isar будет выглядеть так:

  assume A
  show "A \/ B"

Вам никогда не придется повторять предположение A в доказательстве!

person Mathias Fleury    schedule 12.05.2020
comment
Я, конечно, прохожу через это, но хотел проработать более простой пример, чем доказательство Кантора, которое они дают (которое использует только одношаговые методы доказательства). Почему моя попытка доказательства все еще не работает? - person Charlie Parker; 12.05.2020
comment
Я немного расширил свой ответ. Кроме того, большинство подходов Изабель пытаются научить более автоматизированному стилю с помощью auto и co. Это хорошо (и то, что вам следует делать), но если вас интересует только использование rule, вы также можете прочитать раздел 5 руководства isabelle.in.tum.de/doc/tutorial.pdf - person Mathias Fleury; 12.05.2020
comment
Что хорошего? Вы сослались на обучение использованию auto & co? Я полагаю, что они хороши для настоящих доказательств, но мне не нравится, что это черные ящики. Я понятия не имею, что они делают и как реализовать свой собственный. - person Charlie Parker; 13.05.2020
comment
Мне любопытно, почему вы ставите < > в доказательство? - person Charlie Parker; 13.05.2020
comment
Спасибо за помощь. Кажется, я вообще не понимаю Isar, особенно учитывая, что команда / правило предположения не нужны для завершения доказательства. Возможно, использование их примера (аргумент Кантора) и прохождение главы - единственный практический способ изучить Isar. Кстати, спасибо за помощь! - person Charlie Parker; 13.05.2020
comment
Я предпочитаю картуши ‹› цитатам. Это вопрос стиля. Использование авто - правильный путь в Изабель. Это черный ящик, и вы никогда не сможете угадать, что у вас в итоге получится (по крайней мере, я до сих пор не знаю). Однако я бы начал с auto, следовал конкретной семантике и только позже пошел бы на ручную корректуру вместо того, чтобы бороться с книгой. Это главное различие в обучении Изабель и Кока. - person Mathias Fleury; 14.05.2020
comment
В чем основная разница в обучении Isabelle & Coq? Изабель больше похож на черный ящик, чем на Coq? - person Charlie Parker; 14.05.2020
comment
Я очень заинтересован в понимании ATP / Tactics и реализации некоторых сам. Есть ли у Изабель хорошее место, чтобы узнать об этом? - person Charlie Parker; 14.05.2020
comment
Обычно (и карикатурно) после двух часов обучения Изабель вы доказываете явный вид $ \ sum_ {k = 0} ^ nk $, а в Coq вы доказываете, что $ (P - ›Q) -› P - ›Q $. О тактике: вы можете прочитать об Айсбахе, но я считаю, что лучший способ - начать доказывать свою тактику, а затем решить, что вам нужно, чего еще не существует. Тактики более широко используются в Coq (например, см. CPDT Chlipala), потому что базовая тактика более слабая. - person Mathias Fleury; 14.05.2020