Isabelle 如何看待伊莎贝尔的逐步推理';证明';

Isabelle 如何看待伊莎贝尔的逐步推理';证明';,isabelle,Isabelle,我最近开始学习伊莎贝尔,但我找不到一个非常重要的问题的答案:如何看待伊莎贝尔发现的“证据”的逐步推理?我不满意像“自动”或“使用定理A”这样的行,我想检查一步一步的推导。 当然,我了解了Isar的“证据”,但是1。这样的Isar证明并不总是由Sledgehammer和2。即使是Isar证明也不总是给出一步一步的推理。例如,Sledgehammer生成的我的一个定理的Isar证明如下所示: proof - have "... here is my formula ...."

我最近开始学习伊莎贝尔,但我找不到一个非常重要的问题的答案:如何看待伊莎贝尔发现的“证据”的逐步推理?我不满意像“自动”或“使用定理A”这样的行,我想检查一步一步的推导。 当然,我了解了Isar的“证据”,但是1。这样的Isar证明并不总是由Sledgehammer和2。即使是Isar证明也不总是给出一步一步的推理。例如,Sledgehammer生成的我的一个定理的Isar证明如下所示:

     proof -
  have "... here is my formula ...."
    using My_Theorem_1 My_axiom_2 by blast
  thus ?thesis
    by metis
qed
当然,我们不能像伊莎贝尔和伊萨尔的狂热者那样称这种证据为“人类可读的证据”。 现在我的问题是:有没有可能从伊莎贝尔找到的“证据”中一步一步地推导出来?或者至少可以将“自动”这样的“证明”转换为Isar证明吗?需要一步一步推导的情况是,例如存在定理的证明,它们通常提供有用的显式构造。
我看了几个教程,但我找不到答案

首先,我将解释为什么你的问题通常没有你认为的那么重要;然后我会回答你的实际问题

Isabelle的设计使您完全不必“信任”其证明方法(如
simp
auto
metis
)。所有的证明都必须经过Isabelle的推理内核,因为内核是Isabelle中唯一能够产生定理的部分:如果你信任(相对较小的)内核,你就可以信任所有的证明方法。证明方法只是直接或间接地调用内核导出的函数来操作定理

内核包含反映Isabelle/Pure公理的函数,我认为这只是自然推论。然后你们就有了对象逻辑的公理(在大多数情况下是HOL)、定义和类型定义。所有Isabelle定理都有证明,基本上是由这些推理步骤组成的证明树

因此,您正在寻找的“逐步”证明就是这棵树,它被称为证明对象或证明项。这些东西的问题是它们非常大而且不可读(参考Russell和Whitehead的《数学原理》,了解它们有多大和不可读)。我想你可以告诉伊莎贝尔以某种方式生成这些证明项,但我不知道如何生成。不过我确实找到了一套

我不明白你为什么会说你给出的例子不可读。有一些细节是对读者隐藏的,是的,但几乎每一个普通的数学证明也是如此<代码>爆炸和
梅蒂斯
不起魔法作用
blast
是一阶表校准仪,
metis
是分辨率校准仪。如果
blast
metis
可以在一个步骤中证明某些东西,那么数学家可能也不会对这一步骤进行更详细的研究


关于存在式的显式结构:Isabelle/HOL不是一个建构逻辑。从经典证明中提取程序是一项正在进行的研究,非常困难。如果你想在Isabelle/HOL中对某个东西进行显式构造,我的建议是不要证明存在论,而是直接证明你的显式构造。如果你的存在论可以通过
auto
一步证明,我敢打赌这个结构非常简单。

最后,我找到了我问题的否定答案。在Alan J.A.Robinson、Andrei Voronkov编辑的《自动推理手册》一书中,其中一章的作者在第1226页上写下了Isabelle的以下特征:“……例如,不能使用证明对象查看证明的细节或用于程序提取……”

您可以使用以下方法查看事实的内部证明术语:

prf lemma_name
例如,下面的引理来自纯

thm Pure.conjunction_imp
> (PROP ?A &&& PROP ?B ⟹ PROP ?C) ≡ (PROP ?A ⟹ PROP ?B ⟹ PROP ?C)
将作为其验证项输出的:

prf Pure.conjunction_imp
> equal_intr ⋅ _ ⋅ _ ● (❙λ(H: _) (Ha: _) Hb: _. H ● (conjunctionI ⋅ _ ⋅ _ ● Ha ● Hb)) ●
  (❙λ(H: _) Ha: _. H ● (conjunctionD1 ⋅ _ ⋅ _ ● Ha) ● (conjunctionD2 ⋅ _ ⋅ _ ● Ha))
使用full_prf,输出变得更加详细

文章提供了一些关于符号含义的更多信息。即使不理解证明lambda项,prf项也相当清楚地揭示了用于证明引理的事实


在默认的HOL会话中,输出看起来很无聊,因为内部验证部分没有编译到会话映像中(参见)。要获得所需的输出,您必须切换到HOL校对会话。(在jEdit中:从理论面板中选择HOL-Proof,然后重新启动jEdit。特别会议映像的构建应该自动启动。(……好吧,理论上应该是这样的……我刚刚尝试在Isabelle 2015中构建HOL-Proof会议,但它在我的计算机上花费了无限长的时间……)

感谢您的回答!需要证明对象至少有一个原因,即证明的可靠性问题。有一个类似“使用定理a by blast”的证明,我们相信它包含两个假设:1)我们相信之前证明的定理a,2)我们相信Isabelle程序中应用方法“blast”的部分没有错误。另一方面,有一个完整的证明对象根据一些固定的规则进行编码,可以将其发送给一个独立的证明检查器,该检查器由Isabelle group之外的一组程序员编写。这将大大提高可靠性。事实上,这不是真的——有证明对象!(见我的答案)我不知道Isabelle开发者在过去15年中是否添加了该功能,或者引用的段落是否完全错误。