伊莎贝尔很有趣'没有'哪里'?

时间:2015-02-08 22:12:45

标签: isabelle

Isabelle不允许我只写fun f :: "nat list => nat";我必须添加至少一个定义方程,例如where "f [] = 5"。但是,由于将某些构造函数保留为未定义是可以的,为什么我不能简单地将所有构造函数保留为undefined?然后,没有fun f的{​​{1}}将成为where声明的便捷替代方案。

1 个答案:

答案 0 :(得分:2)

首先,我不明白为什么 fun f没有whereconsts f 的便捷替代品。您可以使用后者(但也必须指定类型),如果必须,请使用它。此外,constsdefinitionfun等命令更原始,而且 - 在我看来 - 不应该在生产代码中使用。

关于在fun ction声明中保留未定义构造函数的注释。措词“未定义”在这里具有误导性,因为例如在

之后
fun f :: "'a list => nat"
where
  "f [] = 0"

你可以证明那个

lemma "f (x#xs) = undefined"
  by (cases "x#xs" rule: f.elims) simp

因此f (x#xs)在某种意义上被定义为值undefined。相反,之后

consts f :: "'a list => nat"

你无法证明f的任何内容。你刚刚告诉系统某个类型有一个f的常量,但没有再说些什么。