除了assume
之外,Isar还有一个命令presume
在Isar证明块中引入事实。从我在文档中看到和阅读的内容来看,它不需要在目标中明确列出假设(推定?),并且似乎添加了一个案例来表明假定的陈述来自其他目标。
所以问题是:我何时会使用presume
代替assume
,以及presume
可以使用哪些好的技巧?
答案 0 :(得分:6)
presume
并未使Isar语言更具表现力,因为您可以将presume
的每个证据重组为只有assume
的证明。然而,至少有两个(或多或少常见的)用例:
首先,presume
有时会导致更自然的证据,因为您可以像剪切一样使用presume
。
例如,假设您的证明状态有两个目标A ==> C
和B ==> 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
来查找presume
和assume
中的输入错误。假设你有
show
但Isabelle告诉你, fix x
assume A and B and C and D and E
show F
不能解决任何目标,即你可能在假设或目标陈述中有一些错字。现在,将show
转换为assume
。如果presume
仍然失败,则错误在目标语句中的某处。否则,它可能在某些假设中。使用show
关闭show
证明并尝试使用sorry
解除假设。它会停止在它无法统一的假设下。可能,这是错误的。