Isabelle - 需要 exI 和 refl 行为解释
Isabelle - exI and refl behavior explanation needed
我试图理解下面的引理。
- 为什么
exI
中引入了?y2
原理图变量?
- 为什么
refl
没有考虑它(所以:x = 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
UPDATE(因为我无法在注释中格式化代码):
这是相同的引理,但使用了 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
显然 simp
和 rule
处理 exI
的方式不同。剩下的问题是:rule
行为背后的机械(程序)推理是什么。
当您对某些事实thm
使用rule thm
时,伊莎贝尔对thm
的结论与当前目标进行高阶统一。如果有统一符,则用它来实例化目标和定理的结论,然后进行解析(即用thm
的假设代替目标)。
这意味着:
目标中的原理图变量可以通过rule
统一实例化
仅出现在thm
假设中的变量不会被统一实例化,因此将保持示意图。这样,您最终会在新目标中得到示意图变量。这样的变量在某种意义上可以看作是存在,因为如果你能证明只有一个的假设,thm
的结论就成立任意值。
在 exI
的情况下,您有 ?P ?x ⟹ ∃x. ?P x
。当你应用rule exI
时,变量?P
被实例化为λy. x = y
,但是变量?x
只出现在exI
的假设中,所以它仍然是示意图。这意味着您可以在稍后的证明中为 ?x
选择任何您想要的值。
更准确地说,您最终以 ⋀x. x = ?y2 x
作为目标。你可能会问“为什么不只是 ⋀x. x = ?y2
?”这意味着你必须证明 x
等于某个固定值 y2
对于 所有 可能x
的值。这显然不是一般情况。 ⋀x. x = ?y2 x
意味着你必须证明每个 x
等于一些可能依赖于 x
的 y2
– 或者,等价地,有一个函数 y2
那,当给定 x
时,输出 x
.
当然还有这样的函数,就是恒等函数λx. x
。这正是当你应用 rule refl
时 ?y2
被实例化的目标:目标 x = ?y2 x
与 refl ?t = ?t
的结论统一并且你最终得到 ?t = x
和 ?y2 = λx. x
,并且由于 refl
没有假设,这个决议完成了证明。
我不完全确定你所说的“为什么 refl
中没有考虑它?”是什么意思,但我希望我已经回答了你的问题。
从专家那里得到更完整的答案,但我对你的第二部分给出了简短的回答。
Isabelle 的伟大之处在于它提供了许多不同的方法来证明一个问题。
您的新问题类似于 L.Paulson 对 FOM 的评论:您通过将问题切换为 rule
与 simp
来移动目标 post:
http://www.cs.nyu.edu/pipermail/fom/2015-October/019312.html
对 simp
有一个基本的了解实际上是一个更容易追求的目标,否则我不会在这里添加我的回复。
rule
和自然推演
rule
的使用是自然推导 (ND) 的使用,大多数人在 ND 上都跟不上速度。 ND的使用需要理解ND,所以像你的第一个问题这样的问题可能会导致一个不简单的答案,因为任何信息性的东西都不能成为一个线性答案,尤其是由于事情比如原理图变量(你问过的)、分辨率、统一、重写等。
搜索自然演绎法,您会找到关于它的标准维基页面。有很多关于自然演绎的书籍,尽管由于一阶逻辑书籍,它们在 "logic" 上的搜索中被淹没了。一本受欢迎的书是 计算机科学中的逻辑,第 2 本书,作者是 Huth 和 Ryan。
如果你研究 ND,你会发现 exI
符合 ND 规则之一。
我还没有花时间来加快 ND 的速度,因为我一直在进步,但对 ND 的了解并不多。
Sledgehammer 和自动方法 auto
、simp
、blast
、induct
、cases
等,以及 Sledgehammer 使用的一些那些,使我无法找到时间以自然的方式变得更好。
答案和 M.Eberl 一样,虽然不是简单的解释,但帮助我在这里吸收一点,那里吸收一点。
Simp,我认为是简单的替换(重写)
simp
背后的机制非常简单,与自然演绎相比。你定义一个公式并证明它:
lemma foo [simp]: "left_hand_side = right_hand_side"
在另一个定理的证明中,当simp
这样或那样调用时,或者foo
展开时,有left_hand_side
的地方被[=26代替了=].这只是经典的数学替换。
我想它也可能是 "rewriting",但我对重写一无所知,除了他们谈论它。
有很多关于如何以及是否应该自动设置(以防止循环)的细节,比如 [simp]
或 declare foo_def [simp add]
,但这只是正常编程的细节.
我试图理解下面的引理。
- 为什么
exI
中引入了?y2
原理图变量? - 为什么
refl
没有考虑它(所以:x = 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
UPDATE(因为我无法在注释中格式化代码):
这是相同的引理,但使用了 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
显然 simp
和 rule
处理 exI
的方式不同。剩下的问题是:rule
行为背后的机械(程序)推理是什么。
当您对某些事实thm
使用rule thm
时,伊莎贝尔对thm
的结论与当前目标进行高阶统一。如果有统一符,则用它来实例化目标和定理的结论,然后进行解析(即用thm
的假设代替目标)。
这意味着:
目标中的原理图变量可以通过
rule
统一实例化仅出现在
thm
假设中的变量不会被统一实例化,因此将保持示意图。这样,您最终会在新目标中得到示意图变量。这样的变量在某种意义上可以看作是存在,因为如果你能证明只有一个的假设,thm
的结论就成立任意值。
在 exI
的情况下,您有 ?P ?x ⟹ ∃x. ?P x
。当你应用rule exI
时,变量?P
被实例化为λy. x = y
,但是变量?x
只出现在exI
的假设中,所以它仍然是示意图。这意味着您可以在稍后的证明中为 ?x
选择任何您想要的值。
更准确地说,您最终以 ⋀x. x = ?y2 x
作为目标。你可能会问“为什么不只是 ⋀x. x = ?y2
?”这意味着你必须证明 x
等于某个固定值 y2
对于 所有 可能x
的值。这显然不是一般情况。 ⋀x. x = ?y2 x
意味着你必须证明每个 x
等于一些可能依赖于 x
的 y2
– 或者,等价地,有一个函数 y2
那,当给定 x
时,输出 x
.
当然还有这样的函数,就是恒等函数λx. x
。这正是当你应用 rule refl
时 ?y2
被实例化的目标:目标 x = ?y2 x
与 refl ?t = ?t
的结论统一并且你最终得到 ?t = x
和 ?y2 = λx. x
,并且由于 refl
没有假设,这个决议完成了证明。
我不完全确定你所说的“为什么 refl
中没有考虑它?”是什么意思,但我希望我已经回答了你的问题。
从专家那里得到更完整的答案,但我对你的第二部分给出了简短的回答。
Isabelle 的伟大之处在于它提供了许多不同的方法来证明一个问题。
您的新问题类似于 L.Paulson 对 FOM 的评论:您通过将问题切换为 rule
与 simp
来移动目标 post:
http://www.cs.nyu.edu/pipermail/fom/2015-October/019312.html
对 simp
有一个基本的了解实际上是一个更容易追求的目标,否则我不会在这里添加我的回复。
rule
和自然推演
rule
的使用是自然推导 (ND) 的使用,大多数人在 ND 上都跟不上速度。 ND的使用需要理解ND,所以像你的第一个问题这样的问题可能会导致一个不简单的答案,因为任何信息性的东西都不能成为一个线性答案,尤其是由于事情比如原理图变量(你问过的)、分辨率、统一、重写等。
搜索自然演绎法,您会找到关于它的标准维基页面。有很多关于自然演绎的书籍,尽管由于一阶逻辑书籍,它们在 "logic" 上的搜索中被淹没了。一本受欢迎的书是 计算机科学中的逻辑,第 2 本书,作者是 Huth 和 Ryan。
如果你研究 ND,你会发现 exI
符合 ND 规则之一。
我还没有花时间来加快 ND 的速度,因为我一直在进步,但对 ND 的了解并不多。
Sledgehammer 和自动方法 auto
、simp
、blast
、induct
、cases
等,以及 Sledgehammer 使用的一些那些,使我无法找到时间以自然的方式变得更好。
答案和 M.Eberl 一样,虽然不是简单的解释,但帮助我在这里吸收一点,那里吸收一点。
Simp,我认为是简单的替换(重写)
simp
背后的机制非常简单,与自然演绎相比。你定义一个公式并证明它:
lemma foo [simp]: "left_hand_side = right_hand_side"
在另一个定理的证明中,当simp
这样或那样调用时,或者foo
展开时,有left_hand_side
的地方被[=26代替了=].这只是经典的数学替换。
我想它也可能是 "rewriting",但我对重写一无所知,除了他们谈论它。
有很多关于如何以及是否应该自动设置(以防止循环)的细节,比如 [simp]
或 declare foo_def [simp add]
,但这只是正常编程的细节.