Isabelle Real数据类型 - 格式错误的定义:顺序模式下不允许使用非构造函数模式

时间:2017-05-29 09:00:09

标签: isabelle

我正在创建一个

形式的函数
  

y(t + h)= y(t)+ h / y(t)

     

其中y(0)= 1

fun y :: "real ⇒ real" where "y 0 = Suc(0)"| "y(t+h) = y(t) + h*(1/y(t))"

不幸的是,我收到了错误

  

格式错误的定义:顺序模式下不允许使用非构造函数模式。

     

y 0 =真实(Suc 0)

谷歌搜索告诉我,我不是坚持真实数据类型的一些构造函数模式,但我无法找到模式是什么以及我应该如何更改我的函数。

1 个答案:

答案 0 :(得分:0)

实数不是代数数据类型,因此您无法使用fun对它们进行模式匹配。您必须使用“正常”等式定义或函数包的一些更高级的功能,但这也会使事情变得更加困难,因为您必须自己证明一些明确定义的属性。

此外,右侧的Suc 0是自然数,而不是实数。 (只需写1

然而,你定义的最大问题是你写下来的方式太不正式了。我甚至不会非正式地理解这意味着什么。

  • 您对h有哪些假设?
  • 对于t,第二个等式应该有效吗?
  • 当您为t输入负值时会发生什么? (你写的方式:非终止)
  • 0 < t < h时会发生什么?

一旦你对要定义的函数有一个数学上精确的规范,你就可以用function命令把它写下来而不用太担心