如何证明Isabelle中极大值的交换性

如何证明Isabelle中极大值的交换性,isabelle,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 ::

我是伊莎贝尔的新手,所以请发发慈悲吧。如何用这个函数证明极大值的交换性质

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

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

证明递归定义函数的某些事实的典型方法是归纳法,归纳法的结构遵循递归定义的结构

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

但是,在这种情况下,您应该使用函数包为
max
提供的归纳规则,该规则称为
max.induct
。所以,只需在你的目标上应用
(归纳x y规则:max.induct)
,然后看看你还剩下什么。这对于您想要证明的内容来说已经足够了

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

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

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

不要忘记检查《具体语义》(Nipkow和Klein)一书。这本书在网上免费提供,它的前5章是对伊莎贝尔的实用介绍:我以前偶然发现了这本书,现在正在慢慢地读完。谢谢你的评论,不客气。不久前,我努力完成了第一部分。这很有挑战性,但确实值得付出努力。太棒了。非常感谢。这解决了我的问题,我肯定会考虑替代的定义,以减轻未来的打样负担。