Chain Complete的概念是什么?

时间:2017-08-06 06:22:45

标签: haskell functional-programming

我正在阅读这本名为“与Haskell一起思考功能”的书。理查德伯德,并遇到了 Chain Complete 关于无限列表归纳的概念。 它说:

  

如果xs0,xs1,...是具有极限xs的部分列表序列,并且P(xsn)对所有n成立,则P(xs)也成立,则属性P称为链完成。

作为连锁完整财产的一个例子,它说:

  

所有方程式e1 = e2,其中e1和e2是涉及普遍量化的自由变量的Haskell表达式,是链完整的。

我很难理解这个例子如何适合链完成的属性。并且它还表明不等式e1 = / = e2不一定是链完整的。如何根据 Chain Complete -ness?

了解这些属性

顺便说一下,这可能不一定是关于Haskell的问题,而是数学方面的问题。

1 个答案:

答案 0 :(得分:6)

这是一个例子。

假设您的列表xs_1, xs_2, ...的序列越来越多,且限制为xs

对于每个k,我们都map id xs_k等于xs_k

通过链完整性(AKA Scott连续性),我们得到map id xsxs

这为我们提供了一种方法来证明限制列表xs上的属性,这些属性可能是无限的,只能通过它们的近似值xs_k进行验证。

这里的直觉是,要使xs成为限制列表,每个xs_k必须等于xsx1:x2:...:xn:undefined形式的一些较短前缀。注意未定义的尾部,表示循环计算(例如无限递归)。因此,如果我们比较f xs_kf xs,我们发现后者必须至少与前者一样终止。这里的一般想法是,如果我们传递更多或定义的输入,我们得到更多或定义的输出。在数学上,这个概念是通过斯科特命令的单调性捕获的。

斯科特欧米茄的连续性或链条完整性更进一步。它告诉我们f xs与序列f xs_k的限制完全相同。最终结果用近似值f的结果近似。粗略地说,您可以通过使输入收敛来使输出收敛。

不平等不能以完整的方式运作。实际上,将xs = [0..]作为无限列表,并将近似值xs_k = 0:...:k:undefined。很明显,对于每个xs_kxs不等于k。但是我们没有采用不等式的限制,这表明xs不等于xs

结论,这里的主题非常广泛。如果你有兴趣,我建议你阅读有关指称语义的内容,例如阅读Winskel的书。