你什么时候在Isar证明中使用`presume`?

时间:2013-06-10 15:17:36

标签: isabelle isar

除了assume之外,Isar还有一个命令presume在Isar证明块中引入事实。从我在文档中看到和阅读的内容来看,它不需要在目标中明确列出假设(推定?),并且似乎添加了一个案例来表明假定的陈述来自其他目标。

所以问题是:我何时会使用presume代替assume,以及presume可以使用哪些好的技巧?

1 个答案:

答案 0 :(得分:6)

presume并未使Isar语言更具表现力,因为您可以将presume的每个证据重组为只有assume的证明。然而,至少有两个(或多或少常见的)用例:

首先,presume有时会导致更自然的证据,因为您可以像剪切一样使用presume

例如,假设您的证明状态有两个目标A ==> CB ==> C,并且您可以证明某些E来自A和{{1}给出当前上下文中的事实和B以及当前上下文中的事实意味着E。使用C,您可以按如下方式构建证明:

presume

presume E show C <proof using E and facts> thus C . next assume A thus E <proof using A and facts> thus E . next assume B thus E <proof using A and facts> thus E . 样式中,如下所示:

assume

使用 assume A hence E <proof using A and facts> show C <proof using E and facts> next assume B hence E <proof using B and facts> show C <proof using E and facts> ,证明的结构更明确:显然,我们只需要presume来显示结果,这可能是证明的有趣部分。此外,在E样式中,我们必须做assume暗示E两次的证明。当然,这总是可以被考虑到一个引理中,但如果证据需要来自上下文的大量事实,那就会变得丑陋。

其次,您可以在编写证据时使用C来查找presumeassume中的输入错误。假设你有

show

但Isabelle告诉你, fix x assume A and B and C and D and E show F 不能解决任何目标,即你可能在假设或目标陈述中有一些错字。现在,将show转换为assume。如果presume仍然失败,则错误在目标语句中的某处。否则,它可能在某些假设中。使用show关闭show证明并尝试使用sorry解除假设。它会停止在它无法统一的假设下。可能,这是错误的。