如何在 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
但是,上述证明在 auto
或 simp
中均无效,并生成一条消息。
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)
等等
在学习 Isabelle/HOL 语法的练习中,我试图证明下面的玩具引理。它是关于 lambda 表达式(以及诸如将谓词作为输入的“Greatest”符号之类的东西)。引理的预期内容是“l.e.1 的最大自然数是 1”。
lemma "1 = Greatest (λ x::nat. x ≤ 1)"
proof -
show ?thesis
by auto
qed
但是,上述证明在 auto
或 simp
中均无效,并生成一条消息。
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)
等等