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

Isabelle 证明A==>;B==>;C==>;B在伊莎贝尔,isabelle,Isabelle,我对证明感到困惑 A ==> B ==> C ==> B 在伊莎贝尔。显然你可以 apply simp 但我如何用规则来证明这一点呢 或者,是否有方法转储使用的规则simp?谢谢。您可以启用简化器跟踪;一般来说,你可以和伊莎贝尔一起做→ 设置→ 追踪→ 追踪简化者,我不知道杰迪特的事 编辑:在这种情况下,simp跟踪没有多大帮助,因为simp不使用重写规则来解决这个问题,相反,它“看到”前提中的A、B和C,并得出结论,在该语句的上下文中,它可以重写A=True,B=Tru

我对证明感到困惑

A ==> B ==> C ==> B 
在伊莎贝尔。显然你可以

apply simp
但我如何用规则来证明这一点呢


或者,是否有方法转储使用的规则
simp
?谢谢。

您可以启用简化器跟踪;一般来说,你可以和伊莎贝尔一起做→ 设置→ 追踪→ 追踪简化者,我不知道杰迪特的事

编辑:在这种情况下,simp跟踪没有多大帮助,因为
simp
不使用重写规则来解决这个问题,相反,它“看到”前提中的A、B和C,并得出结论,在该语句的上下文中,它可以重写
A=True
B=True
,和
C=True
,然后它将目标
B
重写为
True
,您就完成了

然而,证明这类陈述的“正常”方式是使用
假设
方法,该方法将目标与前提相匹配,在本例中为
B
。可能也有一种方法可以使用
规则
来证明这一点,但这将是不必要的复杂<代码>假设
使用
假设
,这反过来只是非常基本的函数
Thm.假设
的包装,因此这可以被认为是Isabelle中最基本的证明方法之一。
因此,只要根据假设编写

如果你真的想了解证据是如何工作的,那么你应该先忘掉有趣的策略和自动推理工具

Isabelle/Pure的语句
A==>B=>C==>B
(使用这个特殊的
=>
连接词)立即是正确的,因此它在Isabelle/Isar中的证明是:

lemma "A ==> B ==> C ==> B" .
就是这样,就是
(它用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证据,只需进行一些web搜索,或者查看系统附带的源代码。 下面是一个完全任意的示例:


手册也有很多,实际上太多了。

曼纽尔提供的信息不准确。在适当的Isar证明中,您几乎从未通过假设看到
,这已经隐含在证明的结尾中。感谢您的解决方案和建议!:-)