Какая семантика предполагает Изабель / Изар? - PullRequest
1 голос
/ 29 мая 2020

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

lemma 
  assumes "A"
  shows "A"
proof -
  assume "A"
  from this show "A" by (simp)
qed

, хотя следующее работает:

lemma 
  shows "A⟹A"
proof -
  assume "A"
  from this show "A" by simp
qed

, что не очень удивительно.

Но следующий - это удивительно, что он работает, учитывая, что мой первый пример не удался:

lemma 
  assumes "A"
  shows "A"
proof -
  have "A" by (simp add: assms)
  from this show "A" by (simp)
qed

почему первый отличается от второго?


Сообщение об ошибке:

Failed to refine any pending goal 
Local statement fails to refine any pending goal
Failed attempt to solve goal by exported rule:
  (A) ⟹ A

1 Ответ

3 голосов
/ 29 мая 2020

Ответ можно найти в «Главе 6: Доказательства» документа Isar-ref. В идеале вы должны sh прочитать введение к главе, а также разделы 6.1 и 6.2, чтобы полностью решить ваши проблемы. Ниже я представляю наиболее подходящие отрывки:

Логический контекст доказательства состоит из фиксированных переменных и предположений.

...

Аналогично, введение некоторого предположения χ имеет два эффекта. С одной стороны, создается локальная теорема, которую можно использовать как факт на последующих этапах доказательства. С другой стороны, любой результат χ ⊢ φ, экспортированный из контекста, становится условным. предположение: ⊢ χ ==> φ. Таким образом, решение закрывающей цели с использованием такого результата в основном вводит новую подцель, вытекающую из предположения. Как эта ситуация обрабатывается, зависит от версии используемой команды предположения: в то время как предположение настаивает на решении подцели путем объединения с некоторой предпосылкой цели , предположение оставляет подцель без изменений, чтобы пользователь мог позже подтвердить .


Давайте посмотрим на ваш первый пример:

lemma 
  assumes "A"
  shows "A"
proof -
  assume "A"
  from this show "A" by (simp)
qed

Есть только одна подцель без предпосылок: A. При отсутствии посылок «объединение с посылками» неприменимо.

Во втором примере

lemma 
  shows "A⟹A"
proof -
  assume "A"
  from this show "A" by simp
qed

подцель A⟹A с посылкой A. Таким образом, вы можете использовать assume: объединение может быть выполнено.

Наконец,

lemma 
  assumes "A"
  shows "A"
proof -
  have "A" by (simp add: assms)
  from this show "A" by (simp)
qed

отличается от предыдущих случаев, потому что вы не вводите никаких предположений. Следовательно, вы можете использовать show для выполнения подцели. Следует отметить, что from this show "A" by (simp) идентично from assms show "A" by simp или, что еще лучше, from this show "A".:

lemma 
  assumes "A"
  shows "A"
proof -
  from assms show "A".
qed
...