我可以命名通过案例分析生成的变量吗?

4 isabelle

是否可以为使用案例分析或归纳时生成的变量提供自己的名称?

Lar*_*ski 6

如果您使用结构化校样(从proof关键字开始),您可以使用casekeywoard选择要证明的案例,并为案例分析/归纳创建的变量命名:

lemma "length (rev xs) = length xs"
proof (induct xs)
  case Nil
  then show ?case ...
next
  case (Cons x xs)
  then show ?case ...
qed
Run Code Online (Sandbox Code Playgroud)

这里case (Cons x xs)告诉Isabelle你要证明列表由一个开始元素和一个剩余列表(即归纳步骤)组成的情况,并命名变量xxs.

在校样块中,您可以使用该print_cases命令查看案例列表.

另一方面,如果您使用的是apply-style,则没有直接的方法来命名这些变量(在这种情况下,您可能需要case_tac代替cases,因为您将不得不处理绑定变量而不是自由变量).有一种方法rename_tac可用于重命名最外层的元量化变量.

对于大多数项目(除了程序验证之外,例如在L4.verified项目中),常见的证明样式是使用大多数结构化证明.非结构化样张用于探索,很少变得如此复杂,以至于必须重命名变量.