列表上的证据是归纳
lemma append_assoc [simp]: "(xs @ ys) @ zs = xs @ (ys @ zs)"
by (induct xs) auto
但是,关于Nats的证据是
lemma nat_add_assoc: "(m + n) + k = m + ((n + k)::nat)"
by (rule add_assoc)
为什么我不需要感应nat_add_assoc
证明?是因为在自然数字上发生了一些自动化吗?
答案 0 :(得分:5)
nat
上的关联性证明也是通过归纳来完成的。
在Nat.thy中,您可以找到
instantiation nat :: comm_monoid_diff
这是Isabelle说nat
的方式类型comm_monoid_diff
。下面的定义和引理表明,自然数是加法下的可交换幺半群,并且还有减法。
在这个区块中,您可以找到证据:
instance proof
fix n m q :: nat
show "(n + m) + q = n + (m + q)" by (induct n) simp_all
然后,实例化会在add_assoc
上为我们提供引理nat
。