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)∈ 偶数)
on
int
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)