Isabelle有两种证明形式:旧的“应用”风格,证明只是一个链条
apply (this method)
apply (that method)
陈述,以及新的“结构化”Isar风格。我自己,我发现它们都很有用; “应用”风格更简洁,对于无趣的技术引理也很方便,而“结构化”风格对于主要定理来说很方便。
有时候我喜欢从一种风格切换到另一种风格,中间证明。从“应用”样式切换到“结构化”样式很简单:我只需插入
proof -
在我的应用链中。我的问题是:如何从“结构化”风格切换回“应用”风格?
举一个更具体的例子:假设我有五个子目标。我发布一些“申请”指令来发送前两个子目标。然后我发布了一个结构化的证据来免除第三个。我还有两个子目标:如何为这些恢复“应用”风格?
答案 0 :(得分:3)
您可以使用apply_end
代替apply
在结构化校样中继续“应用”样式,但这在实践中很少见,只有在探索性工作中才能看到。在一个精确的证明中,您只需选择值得Isar证明的子目标,并在qed
之后的一个方法调用中完成所有剩余的子目标,因为不需要按任何特定顺序处理子目标。
或者,您可以在使用defer
开始结构化校样之前使用proof
,并以“应用”方式立即继续使用其他子目标,即,您将结构化校样的目标推迟到最后
最后,您当然可以使用fix
/ assume
/ show
在结构化校对中重新陈述您的目标,并在那里继续使用“应用”样式。但是你必须分别对每个剩余的子目标执行此操作,因此这可能有点单调乏味。默认案例名称goal1
,goal2
等对输入有所帮助,但此类证据通常难以维护(尤其是apply_end
更改goal<n>
的目标编号时)。