我如何在 Isabelle 中证明“(⋀x.PROP ?P x) ⟹ PROP ?P ?x”?

How can I prove "(⋀x. PROP ?P x) ⟹ PROP ?P ?x" in Isabelle?

这是理论 Pure.thy 中的引理 meta_spec。证明是:

lemma meta_spec:
  assumes "⋀x. PROP P x"
  shows "PROP P x"
  by(rule ‹⋀x. PROP P x›)

我的问题是这种方法 rule 是如何工作的。它是否提升参数然后与假设统一?这实际上是如何进行的?没想到用到了内核的定理forall_elim

我决定 post 我的评论作为答案以试图关闭此线程。当然,如果有更多知识的人提供 amendments/further 信息,我会很高兴。

Pure.rule 类似于经典的 rule 并且都在文档 Isar-ref 中进行了描述(更具体地说,请参阅 Isar-ref 中的第 6.4.3 节和第 9.4.3 节) ).进一步的解释也可以在(稍微过时的)教科书 A Proof Assistant for Higher-Order Logic 中找到,作者是 Tobias Nipkow、Lawrence Paulson 和 Markus Wenzel。

确实,正如您所说,规则应用程序通过将子目标与规则的结论统一起来来工作(但是,我不熟悉实现的所有细节)。此外,据我所知,外部 meta-quantifiers 并没有通过在方法的实现中使用原理图变量来隐含。因此,当然,在实现中不需要为此目的调用forall_elim。事实上,如果您直接向该方法提供定理 ⋀x. PROP P x,它将无法实现您的目标 PROP P x.

但是我相信,您提出问题的原因并不是对方法应用背后的主要原理缺乏理解rule,而是与字面事实的形式相关的混淆‹⋀x. PROP P x›。 在您的应用程序上下文中,此字面事实对应于相关上下文中的定理 PROP P ?x。您可以通过键入 thm ‹⋀x. PROP P x› 来验证这一点:

lemma meta_spec:
  assumes "⋀x. PROP P x"
  shows "PROP P x"
  thm ‹⋀x. PROP P x› (*PROP P ?x*)
  by(rule ‹⋀x. PROP P x›)

因此,从规则应用的角度来看,这个用例没有什么特别之处,因为?xPROP P ?x中的示意图。