我想了解关键字proof
在Isar证明中的作用。我咨询了the Isabelle/Isar reference, section 6.3.2和Programming and Proving in Isabelle/HOL, section 4.1。
总结一下我所学到的知识,有三种方法可以通过关键字proof
开始证明:
没有任何论据Isabelle为被证明的引理找到合适的引入规则并将其应用于正向模式
如果提供连字符:-
作为参数,那么proof
对目标没有任何作用,避免在导致死胡同时应用任何自动规则
如果提供了特定规则,例如rule name
,unfold true_def
,clarify
或induct n
,那么它将以正向模式应用于目标< / p>
我是对的,第三种情况就像在提供参数时使用apply
一样?
系统选择第一种情况下的自动引入规则是什么?
而且,上述内容是否完全描述了proof
?
答案 0 :(得分:4)
没有方法规范的命令proof
应用方法default
。方法default
几乎与rule
类似,但如果rule
失败,则会尝试下一个intro_classes
然后unfold_locales
。方法rule
未给出定理列表会尝试向经典推理器(intro
,elim
和dest
声明的所有规则。如果没有链接任何事实,则仅考虑intro
规则。否则,将尝试所有类型的规则。所有链接的事实必须与规则统一。 dest
规则在应用之前会转换为elim
规则。
您可以使用print_rules
打印所有声明的规则。安全规则(intro!
,elim!
,...)优先于普通规则(intro
,elim
,...)和额外规则(intro?
,elim?
)来到最后。
您也可以在不提供任何规则的情况下使用rule
。然后,它的行为类似于default
,但没有后备intro_classes
和unfold_locales
。
答案 1 :(得分:1)
Andreas很好地描述了没有方法参数的proof
如何工作;我将只讨论问题的其他部分。
首先,proof (method)
与apply (method)
类似,只有一件事:apply
让你进入&#34;证明&#34};模式,您可以继续使用更多apply
语句,proof
过渡到&#34;州&#34;模式,您必须使用have
或show
语句继续证明。否则对目标状态的影响是相同的。
我还想指出案例2(proof -
)实际上是案例3的一个实例,因为-
实际上是一个普通的证明方法,就像rule name
一样或induct
(例如,您也可以写apply -
)。连字符-
证明方法不执行任何操作,除非它将链接的事实插入当前目标,如果给出任何链式事实。