如何证明伊莎贝尔的最大交换性质

时间:2017-06-23 21:47:58

标签: isabelle

我对伊莎贝尔非常陌生,所以请怜悯。如何用这个函数证明最大的交换性?

fun max :: "nat => nat => nat" where
"max 0 0 = 0" |
"max (Suc x) 0 = Suc x" |
"max 0 (Suc x) = Suc x" |
"max (Suc x) (Suc y) = Suc (max x y)"

lemma "max x y = max y x"
? ? ?

我知道

可以很容易地证明这一点
definition max :: "nat ⇒ nat ⇒ nat" where
"max x y = (if x ≥ y then x else y)"

lemma "max x y = max y x"
apply(simp add:max_def)
done

这不是家庭作业。我真的很好奇,并且想尽可能多地了解伊莎贝尔和数学证明。谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

证明关于递归定义函数的一些事实的典型方法是通过归纳,其中归纳的结构遵循递归定义的结构。

在Isabelle中,您可以使用induct方法进行归纳。如果您为自然数induct nn,则会遇到两种情况:n = 0的情况和n是某事物的继承者的情况。

在这种情况下,您应该使用函数包为max提供的归纳规则,该规则称为max.induct。所以,只需对你的目标apply (induction x y rule: max.induct),然后看看你剩下的是什么。这足以满足您的要求。

但是,您已经提到了替代定义if x ≥ y then x else y。对于该定义,一些证明(如max的关联性)可能更容易。在这种情况下,您可以简单地将此替代定义证明为

lemma max_altdef: "max x y = (if x ≥ y then x else y)"

然后在任何情况下使用哪种定义更方便。 max_altdef的证明也是一种简单的归纳。