我对证明
感到困惑A ==> B ==> C ==> B
<是>在伊莎贝尔。显然你可以
apply simp
但我怎么能用规则证明这一点?
或者,有没有办法转储使用的simp
规则?感谢。
答案 0 :(得分:5)
如果您真的想了解证明的工作原理,那么您应该忘记有趣的策略和自动推理工具作为开始。
Isabelle / Pure的陈述A ==> B ==> C ==> B
(使用这个特殊的==>
连接词)立刻是正确的,所以它在Isabelle / Isar中的证明是:
lemma "A ==> B ==> C ==> B" .
就是这样,只是.
(缩写为by this
,但this
实际上是空的。)
稍微不那么真空的证据使用实际的Isabelle / HOL结缔组织,然后您可以通过标准的引入或消除步骤来处理。例如。像这样:
lemma "A --> B --> C --> B"
proof
show "B --> C --> B"
proof
assume b: B
show "C --> B"
proof
show B by (rule b)
qed
qed
qed
但这也不是那么有趣:你构建了一个无聊的含义,然后分解,直到你完成。
要找到更有趣的Isabelle / Isar样张,只需进行一些网络搜索,或查看系统附带的来源。 这里有一个完全随意的例子:Drinker。
还有很多手册,实际上太多了。
答案 1 :(得分:4)
您可以启用简化跟踪;在Proof General中,您可以使用Isabelle→设置→跟踪→跟踪简化器,我不知道jEdit。
编辑:在这种情况下,simp跟踪不会非常有用,因为simp
不使用重写规则来解决这个问题,而是“看到”前提中的A,B和C并得出结论可以在此声明的上下文中重写A = True
,B = True
和C = True
,然后将目标B
重写为True
并完成
但是,证明此类陈述的“正常”方式是使用assumption
方法,该方法将目标与前提相匹配,在本例中为B
。可能有一种方法可以使用rule
证明这一点,但这会不必要地复杂化。 assumption
使用assume_tac
,而Thm.assumption
只是非常基本的函数by assumption
的包装器,因此这可以被认为是最基本的证明方法之一在伊莎贝尔。
所以只需写下{{1}}。