Isabelle 如何证明元素不属于归纳集合
假设我已经定义了一个感应集,例如,感应集“偶数”,这样:Isabelle 如何证明元素不属于归纳集合,isabelle,induction,Isabelle,Induction,假设我已经定义了一个感应集,例如,感应集“偶数”,这样: inductive_set Even :: "int set" where ZERO : "0 ∈ Even" | PLUS :"x ∈ Even ⟹x+2 ∈ Even" | MIN :"x ∈ Even ⟹ x-2 ∈ Even" lemma aux : "x= ((x::int)-2) + 2&
inductive_set Even :: "int set"
where ZERO : "0 ∈ Even"
| PLUS :"x ∈ Even ⟹x+2 ∈ Even"
| MIN :"x ∈ Even ⟹ x-2 ∈ Even"
lemma aux : "x= ((x::int)-2) + 2" by simp
证明引理:“2”是相当容易的∈ 通过使用subst将2替换为2-2+2,甚至“
”
但是我想知道如何证明引理:“1∉ 甚至“
编辑:
对于3个人来说,什么是同等的方式
lemma "3 ∉ Even"
proof
assume "3 ∈ Even"
then have "2 dvd 3"
(*how to continue?*)
qed
提前感谢我将首先证明一个中间结果,即归纳集中的每个数字都可以被2整除:
lemma Even_divisible_by_2: "n ∈ Even ⟹ 2 dvd n"
by (induction rule: Even.induct) simp_all
然后用矛盾来证明你的结果:
lemma "1 ∉ Even"
proof
assume "1 ∈ Even"
then have "2 dvd 1"
using Even_divisible_by_2 by fastforce
then show False
using odd_one by blast
qed
我强烈建议您使用Isabelle/Isar而不是校对脚本
注意:根据文章作者的要求,我添加了一个证明3∉ 甚至
采用上述证明的风格:
lemma "3 ∉ Even"
proof
assume "3 ∈ Even"
then have "2 dvd 3"
using Even_divisible_by_2 by fastforce
then show False
using odd_numeral by blast
qed
替代解决方案:@user9716869提供了以下更通用、更高效的解决方案,该解决方案基于偶数可除\u by_2
:
lemma n2k1_not_Even: "odd n ⟹ n ∉ Even"
using Even_divisible_by_2 by auto
lemma "1 ∉ Even" and "3 ∉ Even" and "11 ∉ Even"
by (simp_all add: n2k1_not_Even)
哈维尔·迪亚兹已经给出了答案,但我想就问题中的部分证明提纲发表几点补充意见。首先,调用
auto
可以消除subst aux
的影响。因此,apply(subst aux)
后跟apply(auto)
应等同于标准设置的apply(auto)
。其次,用auto
开始打样并不被认为是一种好的风格,例如参见。最后,已经存在一个更一般的谓词甚至,其行为应该等价于(λx.x)∈ 偶数)
onint
s。我已经注意到在发布后自动删除subst的效果:)感谢链接和关于一般谓词偶数的提示:)谢谢你的回答,但是你能解释一下奇数的确切作用吗?为了好玩,我试着做这个证明,但是mod而不是div引理偶数:n∈ 即使⟹ n mod 2=0“by(诱导规则:偶数诱导)(simp,presburger+)引理”3∉ 甚至“证明假设”3∈ “偶数”然后通过fastforce使用偶数mod让“3 mod 2=0”然后通过blast qed使用奇数显示False
但是我被卡住了…@user206904您可以控制单击定理来查看它们的定义thm odd_one
还将向您展示该定理是什么(这种方法比在这里提问更有效;-)。@MathiasFleury,非常感谢您的提示,我按照您的指示进行了检查,但我仍然不完全理解它在这个证明中的用法……另一个注意事项。奇怪的是,在Isabelle2021-RC2中,我们可以使用by(归纳规则:偶数.induct)simp\u all
@user206904来证明偶数可被2整除。
lemma n2k1_not_Even: "odd n ⟹ n ∉ Even"
using Even_divisible_by_2 by auto
lemma "1 ∉ Even" and "3 ∉ Even" and "11 ∉ Even"
by (simp_all add: n2k1_not_Even)