Haskell评估的单调性

时间:2018-01-02 17:04:43

标签: haskell types type-theory formal-semantics

  

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

     

然后评估的单调性保证如果e1 < e2那么   [[e1]] < [[e2]],其中e1e2是表达式,[[e1]]   表示对e1的评估。

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

有人可以给我一个这种推理的例子吗?

1 个答案:

答案 0 :(得分:4)

undefined <= 4以来,通过单调性,我们可以得出结论undefined + 12 <= 4 + 12。实际上,前者是undefined,而后者是16。我们还有[undefined] <= [4]或更多f undefined <= f 4

直觉是这样的:假设f :: Int -> T。调用f 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) 我们有

sys.columns

单调性背后的非常粗略的想法是:如果我们传递一个更定义的参数的函数,我们得到一个更明确(或同样定义)的结果。或者更直率地说:减少输入崩溃,减少输出崩溃。