isabelle - 如何在 Isabelle/HOL 中使用 lambda 表达式?
问题描述
在我学习 Isabelle/HOL 语法的练习中,我试图证明下面的一个玩具引理。它是关于 lambda 表达式(以及将谓词作为输入的“最伟大”表示法之类的东西)。引理的预期内容是“le 1 的最大自然数是 1”。
lemma "1 = Greatest (λ x::nat. x ≤ 1)"
proof -
show ?thesis
by auto
qed
auto
但是,上述证明对or都不起作用simp
,并生成一条消息。
Failed to finish proof⌂:
goal (1 subgoal):
1. Suc 0 = (GREATEST x. x ≤ Suc 0)
有人可以帮助解释该陈述出了什么问题或如何正确证明这一点(如果该陈述正确)?
解决方案
引理没有任何问题,只是没有以了解它们Greatest
的方式声明任何规则。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 中的 Query 面板或find_theorems
通过搜索常量 的命令找到类似的规则Greatest
。
如果这GREATEST
件事让您感到困惑,那么语法GREATEST x. P x
只是Greatest (λx. P x)
. 这种符号在 Isabelle 中是相当标准的,我们也有∃x. P x
forEx (λx. P x)
等。
推荐阅读
- jquery - jQuery:原生 HTML5 在选项卡之间拖放
- sequelize.js - 带有续集的graphql加入外键
- javascript - WebSockets 与 Opera VPN 断开连接
- r - 如何在 R Shiny 的 selectInput 函数中有效地为列变量设置别名
- java - 如何处理应该有很多例外的情况?
- android - 谷歌地图:为什么我会收到referer-not-allowed-map-error?
- ruby-on-rails - 使用 has_many 创建一个 Ruby 对象:通过
- graphql - 如何通过没有边的后代过滤 GraphQL 结果?
- corda - 由于 pg_largeobject,Postgres DB 占用了大量空间
- sitecore - 我们可以限制为任何特定模板创建子项吗?