首先,为了实际添加一些价值,我将展示如何使用declare
添加C1_def
作为simp
规则。然后我给你一些关于你的未经请求的指针lemma
,然后我给你一些关于 Stackoverflow 礼仪的未经请求的指针(从我的角度来看)。
将定义声明为简单规则
正如 Alexander 指出的那样,adefinition
通常不会自动添加simp
。
您可以将其声明为如下simp
规则:
declare C1_def [simp add]
通过自动证明方法auto
, simp
,fastforce
等使用 simp 规则可能会导致错误的循环,或者以您不希望公式扩展的方式扩展公式,因此添加它之后,您可以将其删除为这样的simp
规则:
declare C1_def [simp del]
评论你的引理
可能你的引理中的公式正是你想要的,但在我看来,你的符号是一个潜在的混淆来源。特别是,您将Person
其用作类型名称和集合变量的名称。我发表这些评论时不要求澄清。
对我自己来说,我的问题是,“怎么p ∈ Person
没有给出错误,因为Person
有一个集合,其中Person
intypedecl Person
不是集合。
获取更多信息的一种方法是使用declare [[show_types, show_consts]]
.
为了回答我的问题,我执行了以下操作(为浏览器可移植性转换符号),并展示了我在输出面板中看到的一些内容:
declare [[show_types, show_consts]]
lemma "[|(!p::Person. age p > 20); p ∈ Person|] ==> (age p > 20)"
oops
(*OUTPUT:
variables:
Person :: Person set
p :: Person *)
它告诉我这Person
是一个自由变量。至于p
,它是 中的一个绑定变量(!p::Person. age p > 20)
,但在引理的其余部分是自由的,所以你的假设包括每个p
类型Person
都在每个类型集合中的公式Person set
。
这可能是你想要的,但在这种情况下,它没有任何区别,因为你的引理基本上是形式A and B implies A
。
您需要接受已回答的 SO 问题的答案
在我在大约 2 小时后消失之前,为了这个isabelle
标签,我再次履行了作为 SO 礼仪警察的我心爱的职责。
你问了三个问题。特别是,有这样一个:
这是一个直截了当的问题,并且给出了直截了当的答案。您需要接受它作为答案。除此以外,
- 当人们点击“伊莎贝尔”标签的“未回答”标签时,它可能会显示为未回答,当它未被回答时,
- 对于给出的答案,您没有在应有的范围内表现出适当的赞赏。
对于我链接到的问题,您从 Isbelle/HOL 的一位专家那里得到了答案(与我不同)。一个人输入这样的答案需要花费大量时间。它不是特别长,但也不是单行的。