isabelle - 如何在 Isabelle/HOL 的引理之外获取见证实例
问题描述
我正在使用 Isabelle/HOL,试图证明一个声明Q
。在证明的路上Q
,我证明了一个满足的自然数的存在P::"nat=>bool"
。如何创建x::nat
满足的实例P
,以便在后续引理中引用它?
在任何给定的引理中,我都可以使用获取命令来完成。但是,我想在许多不同的引理中引用相同的见证实例,因此我需要一种方法来在任何引理之外执行此操作。我尝试在新的语言环境中使用修复/假设,如下所示:
locale outerlocale
fixes a b c ...
begin
definition Q::bool where ...
lemma existence: "EX x. P x"
proof -
...
qed
locale innerlocale = outerlocale +
fixes x::nat
assumes "P x"
begin
(*lots of lemmas that reference x*)
lemma innerlemma0
...
lemma innerlemma7
proof -
...
qed
lemma finalinnerlemma: "Q"
proof -
...
...
qed
end (*innerlocale*)
lemma outerlemma: "Q"
proof -
(*I don't know what goes here*)
qed
end (*outerlocale)
不幸的是,这只是把罐子踢到了路上。我需要一种方法来使用存在引理将最终的内部引理提取到外部语言环境中。如果我试图解释内部语言环境,我将再次遇到提供证人的问题。我无法解释引理中的语言环境(除非我误解了我得到的错误),并且我不能在引理之外使用获取,所以我被卡住了。
所以看起来我需要弄清楚
- 如何在引理之外指定见证实例或
- 如何通过证明语言环境的假设从语言环境中提取引理
还是有更好的方法来做我想做的事情?谢谢!
解决方案
您可以只SOME x. P x
在定义中使用,例如:
definition my_witness :: nat where
"my_witness = (SOME x. P x)"
然后用于thm someI_ex
显示P my_witness
.
推荐阅读
- firebase-cloud-messaging - 您如何通过 FCM 从服务器发送带有操作的 Web 推送通知?
- sql - 在 SQL Server 中根据字符和计数划分字符串
- scenekit - 更改 SCNNode 原点而不更改枢轴
- python - 在将数据插入sqlite db之前,如何用从硒刮取的文本中的实际字符替换HTML字符代码?
- azure - 在“公开 Api”刀片中将客户端应用程序添加到 Azure Active Directory 应用程序失败
- client - 同时使用 MQTT 和 MQTT-SN 的客户端
- mysql - MYSQL Select Min(Time) where date col is min(Date)
- firebase - 如何从特定单元格获取数据
- c# - 由于 NPM,EF-Migrations 构建失败
- python - 尝试在达到某个值后停止循环,但它总是执行太多步骤