我试图在 Isabelle/HOL 中证明自定义add
函数的交换性。我设法证明了关联性,但我坚持这一点。
的定义add
:
fun add :: "nat ⇒ nat ⇒ nat" where
"add 0 n = n" |
"add (Suc m) n = Suc(add m n)"
结合性证明:
lemma add_Associative: "add(add k m) z = add k (add m z)"
apply(induction k)
apply(auto)
done
交换性证明:
theorem add_commutativity: "add k m = add m k"
apply(induction k)
apply(induction m)
apply(auto)
我得到以下目标:
goal (3 subgoals):
1. add 0 0 = add 0 0
2. ⋀m. add 0 m = add m 0 ⟹
add 0 (Suc m) = add (Suc m) 0
3. ⋀k. add k m = add m k ⟹
add (Suc k) m = add m (Suc k)
应用 auto 后,我只剩下子目标 3:
3. ⋀k. add k m = add m k ⟹
add (Suc k) m = add m (Suc k)
编辑:我不是在寻找答案,而是朝着正确的方向前进。这些是来自名为 Concrete Sementics 的书中的练习。