我如何在 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›)
因此,从规则应用的角度来看,这个用例没有什么特别之处,因为?x
是PROP P ?x
中的示意图。
这是理论 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›)
因此,从规则应用的角度来看,这个用例没有什么特别之处,因为?x
是PROP P ?x
中的示意图。