语句 n+0 = n
很容易证明:
theorem add_0: "n+0 = (n::nat)"
apply(simp)
done
在尝试将其转换为 Isar 时,我注意到它似乎不需要任何假设。所以在这次尝试中:
theorem add_0: "n+0 = (n::nat)"
proof -
thus "True" by simp
qed
它失败了,因为有“No current facts available
”。第二次尝试也失败了:
theorem add_0: "n+0 = (n::nat)"
proof -
from add_0 show "True" by simp
qed
这次出现错误“Failed to refine any pending goal
”。
是否可以证明Isar 中不需要assume
子句的陈述?如果是,那么如何?
答案 0 :(得分:3)
thus "True"
thus
扩展为 then show
,因为我们的证明状态中没有事实,因此使用 then
没有意义,因此我们应该将其替换为 show
。 show "True"
是说我们想证明 "True"
而不是我们想证明定理的目标。我们可以使用示意图变量 ?thesis
来引用定理的原始论文。错误 Failed to refine any pending goal
只是说,如果我们要证明 True
为真,则无助于解决我们论文的目标。因此我们可以使用以下模式通过 Isar 证明来证明我们的原始定理。
theorem add_0: "n+0 = (n::nat)"
proof -
show ?thesis by simp
qed