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"