Isabelle - exI和refl行为解释需要

时间:2015-10-29 22:17:11

标签: isabelle theorem-proving

我试图理解下面的引理。

  • 为什么在?y2中引入了exI逻辑示意图变量?
  • 为什么在reflx = x)中没有考虑它?
lemma "∀x. ∃y. x = y"   
  apply(rule allI)     (*  ⋀x.      ∃y. x = y *)
  thm exI              (*  ?P ?x ⟹ ∃x. ?P x  *)
  apply(rule exI)      (*  ⋀x. x = ?y2 x      *)
  thm refl             (*  ?t = ?t            *)   
  apply(rule refl)   
done

更新(因为我无法在评论中格式化代码):

这是使用simp的不同证据的相同引理。

lemma "∀x. ∃y. x = y"
  using [[simp_trace, simp_trace_depth_limit = 20]]
  apply (rule allI)  (*So that we start from the same problem state. *)   
  apply (simp only:exI) 
done

跟踪显示:

[0]Adding rewrite rule "HOL.exI":
?P1 ?x1 ⟹ ∃x. ?P1 x ≡ True 
[1]SIMPLIFIER INVOKED ON THE FOLLOWING TERM:
⋀x. ∃y. x = y 
[1]Applying instance of rewrite rule "HOL.exI":
?P1 ?x1 ⟹ ∃x. ?P1 x ≡ True    
[1]Trying to rewrite:
x = ?x1 ⟹ ∃xa. x = xa ≡ True   <-- NOTE: not ?y2 xa or similar!
[2]SIMPLIFIER INVOKED ON THE FOLLOWING TERM:
x = ?x1 
[1]SUCCEEDED
∃xa. x = xa ≡ True

显然simprule处理exI的方式不同。剩下的问题是:rule行为背后的机械(程序)推理是什么。

2 个答案:

答案 0 :(得分:4)

当您使用rule thm表示事实thm时,Isabelle会根据当前目标执行thm结论的高阶统一。如果有一个统一者,它用于实例化定理的目标和结论,然后执行解决(即目标被thm的假设所取代。)

这意味着:

  1. 目标中的原理图变量可以rule通过统一实例化

  2. 仅在thm的假设中出现的变量不会被统一实例化,因此将保持原理图。这样,您最终会在新目标中使用逻辑示意图变量。在某种意义上,这些变量可以被视为存在,因为thm的结论只有在你能证明一个任意值的假设时才成立。

  3. 如果是exI,则您有?P ?x ⟹ ∃x. ?P x。当您应用rule exI时,变量?P会被实例化为λy. x = y,但变量?x仅出现在exI的假设中,因此它仍然是原理图。这意味着您可以在证明中随后选择?x所需的任何值。

    更准确地说,您最终会以⋀x. x = ?y2 x为目标。你可能会问'为什么不只是⋀x. x = ?y2?'这意味着你必须证明x等于某些固定值y2 所有的可能值{ {1}}。一般来说,这显然不正确。 x表示您必须证明每个⋀x. x = ?y2 x等于某些可能取决于x的{​​{1}} - 或者等效地,有一个函数y2,在给定x时,输出y2

    当然,这样的函数,它只是身份函数x。这正是x在您应用λx. x时实例化的内容:目标?y2与refl rule refl的结论统一,最终得到x = ?y2 x?t = ?t,由于?t = x没有任何假设,因此该解决方案完成了证明。

    我不完全确定你的意思'为什么?y2 = λx. x不考虑?',但我希望我已经回答了你的问题。

答案 1 :(得分:2)

从专家那里得到更完整的答案,但我会简要回答你的第二部分。

Isabelle的伟大之处在于它提供了许多不同的方法来证明问题。

您的新问题类似于L.Paulson对FOM的评论:您通过将问题转换为rulesimp来移动了目标帖子:

http://www.cs.nyu.edu/pipermail/fom/2015-October/019312.html

基本了解simp实际上是一个更容易追求的目标,或者我不会在这里添加我的回应。

rule和自然演绎

rule的使用是使用自然演绎(ND),其中大多数人都没有达到ND的速度。 ND的使用需要理解ND ,所以像你的第一个问题这样的问题会导致一个非简单的答案,因为任何信息都不能成为一个单行答案,特别是因为像原理图变量(你问过的),分辨率,统一,重写等。

搜索自然演绎,您将找到有关它的标准Wiki页面。有很多关于自然演绎的书籍,尽管它们在搜索&#34;逻辑&#34;由于一阶逻辑书籍。一本受欢迎的书是计算机科学中的逻辑,第2版,作者是Huth和Ryan。

如果你研究ND,你会发现exI符合其中一条ND规则。

我还没有花时间来提高ND的速度,因为我不断对ND进行基本的了解,不断取得进步。

Sledgehammer,自动方法autosimpblastinductcases等,以及Sledgehammer的使用其中一些,让我无法找到时间变得善于自然的行为。

像M.Eberl这样的回答,虽然不是简单的解释,但是帮助我在这里和那里稍微吸收一点。

Simp,我认为它是简单的替换(重写)

与自然演绎相比,simp背后的机制非常简单。您定义一个公式并证明它:

lemma foo [simp]: "left_hand_side = right_hand_side"

在另一个定理的证明中,当simp以某种方式被调用,或foo被展开时,left_hand_side被取代,right_hand_side被替换为[simp] {1}}。它只是经典的数学替代。

我想它也可以重写&#34;但是除了他们谈论重写之外,我对改写一无所知。

有很多关于如何以及是否应该自动设置(以防止循环)的详细信息,例如declare foo_def [simp add]HomeDir,但这只是详细信息。正常编程。