如何使用获取使向前消除证明更容易阅读?

时间:2018-11-12 12:53:13

标签: isabelle proof isar

this document之后(尤其是幻灯片23),我正在尝试在Isabelle中进行基本的自然推论证明。

我知道我可以做类似的事情

theorem ‹(A ⟶ B) ⟶ A ⟶ B›
proof -
  {
    assume ‹A ⟶ B›
    {
      assume ‹A›
      with ‹A ⟶ B› have ‹B› ..
    }
    hence ‹A ⟶ B› ..
  }
  thus ‹(A ⟶ B) ⟶ A ⟶ B› ..
qed

而且

theorem ‹(A ⟶ B) ⟶ A ⟶ B›
proof
  assume ‹A ⟶ B› and ‹A›
  then obtain ‹B› ..
qed

达到相同的目标。

所以当我尝试写证明时

theorem ‹(A ⟶ A ⟶ B) ⟶ A ⟶ B›
proof -
  {
    assume ‹A ⟶ A ⟶ B›
    {
      assume ‹A›
      with ‹A ⟶ A ⟶ B› have ‹A ⟶ B› ..
      hence ‹B› using ‹A› ..
    }
    hence ‹A ⟶ B› ..
  }
  thus ‹(A ⟶ A ⟶ B) ⟶ A ⟶ B› ..
qed

喜欢

theorem ‹(A ⟶ A ⟶ B) ⟶ A ⟶ B›
proof
  assume ‹A ⟶ A ⟶ B› and ‹A›
  hence ‹A ⟶ B› ..
  then obtain ‹B› using ‹A› ..
qed

伊莎贝尔为什么抱怨

Failed to finish proof:
goal (1 subgoal):
 1. A ⟶ A ⟶ B ⟹ A ⟶ B

我知道这些都是伊莎贝尔可以一步证明的非常简单的东西:这里的目标是提供一个简明的证明,供人类阅读(就自然演绎而言),而无需咨询伊莎贝尔。

1 个答案:

答案 0 :(得分:0)

此修改对您的证明有效:

theorem ‹(A ⟶ A ⟶ B) ⟶ A ⟶ B›
proof(intro impI)
  assume ‹A ⟶ A ⟶ B› and ‹A›
  hence ‹A ⟶ B› ..
  then show ‹B› using ‹A› ..
qed

问题是双重的:

  1. 打开证明框会根据您要证明的目标形状自动应用“标准”引入规则。在您的情况下,这就是隐含的引言,即定理impI。问题是您只应用一次,这使您有了假设A -> A -> B和剩余目标A -> B。结果,您还没有假设A,因为您需要再次使用impI才能获得假设。相反,通过使用proof(intros impI)告诉Isabelle不要使用其标准的引入和消除规则集作为证明的第一步,而是尽可能多地应用impI引入规则(即两次)。另外,proof(rule impI, rule impI)在这里也可以起到相同的作用。
  2. 第二,您的最后一行then obtain尚未完成证明:您没有show进行任何操作!通过使用明确的show,您可以向Isabelle表示您要“完善”一个开放的目标,并实际上得出在区块开始时要证明的目标。

请注意,如果您的唯一目的是推导obtain,那么您在此处使用A -> B从事实AB出发并不错误。问题是您要努力从事实出发,在完善开放目标的同时推导新事实。例如,这也可以工作:

theorem ‹(A ⟶ A ⟶ B) ⟶ A ⟶ B›
proof(intro impI)
  assume ‹A ⟶ A ⟶ B› and ‹A›
  hence ‹A ⟶ B› ..
  then obtain ‹B› using ‹A› ..
  then show ‹B› .
qed

在第一行获得事实B,第二行简单地使用此事实来完善开放目标B