如何在 Isabelle/HOL 中使用 lambda 表达式?

How to use lambda expression in Isabelle/HOL?

在学习 Isabelle/HOL 语法的练习中,我试图证明下面的玩具引理。它是关于 lambda 表达式(以及诸如将谓词作为输入的“Greatest”符号之类的东西)。引理的预期内容是“l.e.1 的最大自然数是 1”。

lemma "1 = Greatest (λ x::nat. x ≤ 1)"
proof - 
  show ?thesis 
    by auto
qed

但是,上述证明在 autosimp 中均无效,并生成一条消息。

Failed to finish proof⌂:
goal (1 subgoal):
 1. Suc 0 = (GREATEST x. x ≤ Suc 0)

谁能帮忙解释一下这个陈述出了什么问题,或者如何正确证明这一点(如果这个陈述是正确的)?

引理没有错,只是 Greatest 的 none 规则是以 auto 知道的方式声明的。这可能很好,因为这类规则往往会严重干扰自动化。

您可以使用例如规则 Greatest_equality:

lemma "1 = Greatest (λ x::nat. x ≤ 1)"
proof - 
  have "(GREATEST (x::nat). x ≤ 1) = 1"
    by (rule Greatest_equality) auto
  thus ?thesis by simp
qed

您可以使用 Isabelle/jEdit 中的“查询”面板或 find_theorems 命令通过搜索常量 Greatest.

来查找此类规则

如果 GREATEST 让您感到困惑,语法 GREATEST x. P x 只是 Greatest (λx. P x) 的花哨语法。这样的符号在 Isabelle 中是相当标准的,我们也有 ∃x. P x for Ex (λx. P x) 等等