将引理前提分解为定义会导致isabelle中的证明方法(auto)应用失败
我在Isabelle中有以下代码:将引理前提分解为定义会导致isabelle中的证明方法(auto)应用失败,isabelle,isar,Isabelle,Isar,我在Isabelle中有以下代码: typedecl Person consts age :: "Person ⇒ int" lemma "⟦(∀p::Person. age p > 20);p ∈ Person⟧⟹ age p > 20" apply (auto) done 自动证明方法工作良好,证明了引理!当我想把引理中前提的第一部分分解为定义C1,如下所示: definition C1::bool where "C1 ≡ (∀p::Person. age p > 2
typedecl Person
consts age :: "Person ⇒ int"
lemma "⟦(∀p::Person. age p > 20);p ∈ Person⟧⟹ age p > 20"
apply (auto)
done
自动证明方法工作良好,证明了引理!当我想把引理中前提的第一部分分解为定义C1,如下所示:
definition C1::bool where "C1 ≡ (∀p::Person. age p > 20)"
自动方法无法在以下代码中证明:
lemma "⟦C1;p ∈ Person⟧⟹ age p > 20"
apply (auto)
done
为什么会发生这种情况?如果我在分解第一个假设的方式上做错了——我这样做是为了组织假设,使其看起来整洁有序——在不影响证明方法(自动)功能的情况下,做这件事的最佳方式是什么
感谢构造
定义
是一种抽象出实现细节的方法。它的用途之一是证明相关术语的某些属性,然后依赖这些属性而不是术语声明本身。因此,定义术语的简化规则不会自动添加到simpset
。这些规则仍然适用于带有后缀\u def
的术语名称,并且可以明确使用:
lemma "⟦C1; p ∈ Person⟧ ⟹ age p > 20"
apply (auto simp add: C1_def)
done
首先,为了实际添加一些值,我展示了如何使用
declare
将C1_def
添加为simp
规则。然后我给你一些关于你的引理的未请求的指针,然后我给你一些关于Stackoverflow礼仪的未请求的指针(从我的观点)
将定义声明为simp规则
正如Alexander指出的,定义
不会自动添加为simp
规则
您可以将其声明为simp
规则,如下所示:
declare C1_def [simp add]
declare C1_def [simp del]
自动验证方法auto
、simp
、fastforce
等使用simp规则可能会导致坏循环,或者以您不希望公式扩展的方式扩展公式,因此添加后,您可以将其作为simp
规则删除,如下所示:
declare C1_def [simp add]
declare C1_def [simp del]
关于引理的评论
可能你引理中的公式正是你想要的,但在我看来,你的符号是一个潜在的混淆源。特别是,您正在使用Person
作为类型和集合变量的名称。我在没有要求澄清的情况下发表这些评论
对我自己来说,我的问题是,“这是怎么回事∈ Person
没有给出错误,因为Person
有一个集合,其中typedecl-Person
中的Person
不是集合
获取更多信息的一种方法是使用declare[[show\u types,show\u 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)
中的一个约束变量,但在引理的其余部分是自由的,所以你的假设包括了这样一个公式,即Person
类型的每个p
都在每个类型的人集中
它可能是你想要的,但在这种情况下,它没有区别,因为你的引理基本上是A的形式,而B意味着A
你需要接受一个问题的答案
在我消失大约两个小时之前,为了《伊莎贝尔》
标签,我又一次履行了我心爱的义务,成为一名礼仪警察
你问了三个问题,特别是:
- 当人们点击“isabelle”标签的“unanswered”标签时,它可能会显示为unanswered,当它未被应答时
- 你没有表现出应有的感激之情,没有表现出应有的感激之情
对于我链接到的问题,您从一位Isbelle/HOL专家那里得到了答案(与我不同)。一个人输入这样的答案需要花费大量的时间。答案不是特别长,但也不是一行。谢谢用户3317019,我是这个网站的新手,不知道接受答案的机制。我在提到的问题中设置了“已回答”标签,使其成为合适的答案。