Haskell中评估的单调性

瑟维拉莫尔

让我们<表示Haskell中的语义近似顺序。

然后评估单调性保证了如果e1 < e2那么[[e1]] < [[e2]],哪里e1e2是表达式并[[e1]]表示对的评估e1

在我关注的注释中,这被认为是推理Haskell程序的一个非常有用的属性,但是没有给出示例。

有人可以举一个这样的例子吗?

因为undefined <= 4我们可以通过单调性得出结论undefined + 12 <= 4 + 12确实,前者是undefined,而后者是16我们也有[undefined] <= [4],或更一般地说f undefined <= f 4

直觉是这样的:假设f :: Int -> Tf x被调用时,要么f要求整数参数,要么不要求整数参数x如果是这样,f undefined它将是不确定的(崩溃/异常/不终止),因此f 4肯定会比>=如果它不要求x,那么f undefined = f 4 = f x对于任何x<=再一次保持不变

事情变得越来越复杂,类型也越来越复杂。如果g :: (Int,Int) -> T我们有

g undefined
<= g (undefined, undefined)
<= g (undefined, 2)
<= g (3, 2)

单调性背后的一个非常粗糙的想法是:如果我们给一个函数传递一个更定义的参数,我们将得到一个更定义(或相等定义)的结果。或更直率地说:更少的崩溃输入,更少的崩溃输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章