证明A ==> B ==> C ==> B在伊莎贝尔

时间:2013-11-28 17:05:18

标签: isabelle

我对证明

感到困惑
A ==> B ==> C ==> B 
<是>在伊莎贝尔。显然你可以

apply simp

但我怎么能用规则证明这一点?

或者,有没有办法转储使用的simp规则?感谢。

2 个答案:

答案 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 = TrueB = TrueC = True,然后将目标B重写为True并完成

但是,证明此类陈述的“正常”方式是使用assumption方法,该方法将目标与前提相匹配,在本例中为B。可能有一种方法可以使用rule证明这一点,但这会不必要地复杂化。 assumption使用assume_tac,而Thm.assumption只是非常基本的函数by assumption的包装器,因此这可以被认为是最基本的证明方法之一在伊莎贝尔。 所以只需写下{{1}}。