是否可以为使用案例分析或归纳时生成的变量提供自己的名称?
答案 0 :(得分:6)
如果您使用结构化校样(从proof
关键字开始),您可以使用case
keywoard选择要证明的案例,并为案例分析/创建的变量命名感应:
lemma "length (rev xs) = length xs"
proof (induct xs)
case Nil
then show ?case ...
next
case (Cons x xs)
then show ?case ...
qed
这里case (Cons x xs)
告诉Isabelle你要证明一个列表由一个开始元素和一个剩余列表(即归纳步骤)组成的情况,并命名变量x
和{{1 }}
在校样栏中,您可以使用xs
命令查看案例列表。
另一方面,如果您使用print_cases
- 样式,则无法直接命名这些变量(在这种情况下,您可能需要apply
而不是{{1}因为你将不得不处理绑定变量而不是自由变量)。方法case_tac
可用于重命名最外层的元量化变量。
对于大多数项目(除了程序验证之外,例如在L4.verified项目中),常见的证明样式是使用大多数结构化证明。非结构化样张用于探索,很少变得如此复杂,以至于必须重命名变量。