Isabelle 伊莎贝尔';乐趣';没有';哪里';?

Isabelle 伊莎贝尔';乐趣';没有';哪里';?,isabelle,Isabelle,伊莎贝尔不让我只写fun f::“nat list=>nat”;我必须添加至少一个定义方程,例如,其中“f[]=5”。但是,既然可以不定义某些构造函数,为什么我不能简单地不定义所有构造函数呢?然后,没有的fun f,其中将是常量f声明的一个方便的替代方法 首先,我不明白为什么没有的fun f,而是consts f的便捷替代品。您可以使用后者(但也必须指定类型),如果必须,可以使用它。此外,consts比definition、fun等命令更原始,而且——在我看来——不应该在生产代码中使用 至于您关

伊莎贝尔不让我只写
fun f::“nat list=>nat”
;我必须添加至少一个定义方程,例如,
其中“f[]=5”
。但是,既然可以不定义某些构造函数,为什么我不能简单地不定义所有构造函数呢?然后,没有
fun f
,其中
将是
常量f
声明的一个方便的替代方法

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

至于您关于在
fun
action声明中未定义构造函数的评论。此处的“未定义”一词具有误导性,因为,例如

fun f :: "'a list => nat"
where
  "f [] = 0"
你可以证明这一点

因此,
f(x#xs)
在某种意义上被定义为
未定义的值。相比之下,在

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

你不能证明关于
f
的任何东西。您刚刚告诉系统存在一个特定类型的常数
f
,但没有进一步说明。

谢谢Chris。我还没有意识到被定义为“未定义”和未被定义之间的区别,所以感谢你澄清这一点。我对“方便的替代方案”的评论仅仅源于这样一个想法,即当以“自上而下”的方式工作时,不必立即定义函数就可以方便地声明函数。
consts f :: "'a list => nat"