如何恢复与 Isabelle 中的证明关联的纯 lambda 表达式?

How can I recover the Pure lambda expression associated with a proof in Isabelle?

在 Isabelle/HOL 中构建证明时,我们实际上是在构建一个 lambda 表达式,其类型与我们要证明的理论相对应。

有没有办法看到与已证明的定理相对应的原始 lambda 表达式?

我觉得您来自 Coq 或 Lean 等依赖类型系统的世界。 Isabelle 是 LCF 风格的证明者,其工作方式完全不同。出于性能原因,没有记录关于证明步骤的信息——系统的稳健性是通过拥有一个相对较小和简单的内核来确保的,所有其他代码都必须经过该内核才能产生定理。

但是,有一个选项可以让 Isabelle 内核记录“证明条款”,这可能或多或少是您正在寻找的。查看 Isabelle 分布中的 HOL-Proofs 会话和以下论文:

Proof terms for simply typed higher order logic (freely accessible version, slides)

然而,这是一个几乎从未使用过的功能,除了非常小的示例外,其他任何东西的性能都很差。

这有几个原因,我不是专家,所以对此持保留态度:我的印象是原因是 1. 到目前为止,此功能从未被认为非常重要,因此没有完全优化,并且 2. Isabelle 中的证明倾向于使用大量的自动化,并且由这种自动程序产生的证明项经常被不必要地夸大和丑陋。

另一个问题可能是(小心,我在这里可能完全弄错了)像 Coq 和 Lean 这样的系统具有定义相等的概念,并且隐含地应用这些方程,而根本没有在证明项中记录它们的应用。另一方面,Isabelle/HOL 没有这样的东西(所有等式都相同),因此必须明确记录。

不过,最近对这个问题有了一些新的兴趣,人们正在积极致力于提高 Isabelle 证明项的性能和可用性。希望几年后情况会好一点!