如何向关键字证明提交参数?

时间:2014-06-30 12:35:48

标签: isabelle

我想了解关键字proof在Isar证明中的作用。我咨询了the Isabelle/Isar reference, section 6.3.2Programming and Proving in Isabelle/HOL, section 4.1

总结一下我所学到的知识,有三种方法可以通过关键字proof开始证明:

  • 没有任何论据Isabelle为被证明的引理找到合适的引入规则并将其应用于正向模式

  • 如果提供连字符:-作为参数,那么proof对目标没有任何作用,避免在导致死胡同时应用任何自动规则

  • 如果提供了特定规则,例如rule nameunfold true_defclarifyinduct n,那么它将以正向模式应用于目标< / p>

我是对的,第三种情况就像在提供参数时使用apply一样?

系统选择第一种情况下的自动引入规则是什么?

而且,上述内容是否完全描述了proof

的用法

2 个答案:

答案 0 :(得分:4)

没有方法规范的命令proof应用方法default。方法default几乎与rule类似,但如果rule失败,则会尝试下一个intro_classes然后unfold_locales。方法rule未给出定理列表会尝试向经典推理器(introelimdest声明的所有规则。如果没有链接任何事实,则仅考虑intro规则。否则,将尝试所有类型的规则。所有链接的事实必须与规则统一。 dest规则在应用之前会转换为elim规则。

您可以使用print_rules打印所有声明的规则。安全规则(intro!elim!,...)优先于普通规则(introelim,...)和额外规则(intro?elim?)来到最后。

您也可以在不提供任何规则的情况下使用rule。然后,它的行为类似于default,但没有后备intro_classesunfold_locales

答案 1 :(得分:1)

Andreas很好地描述了没有方法参数的proof如何工作;我将只讨论问题的其他部分。

首先,proof (method)apply (method)类似,只有一件事:apply让你进入&#34;证明&#34};模式,您可以继续使用更多apply语句,proof过渡到&#34;州&#34;模式,您必须使用haveshow语句继续证明。否则对目标状态的影响是相同的。

我还想指出案例2(proof -)实际上是案例3的一个实例,因为-实际上是一个普通的证明方法,就像rule name一样或induct(例如,您也可以写apply -)。连字符-证明方法不执行任何操作,除非它将链接的事实插入当前目标,如果给出任何链式事实。