我正在阅读Richard Bird的著作《与Haskell进行功能性思考》,并遇到了Chain Complete关于无限列表归纳的概念。
它说:



作为链完整属性的示例,它说:



我很难理解这个示例如何适合这里的chain属性。它还指出不等式e1 =/= e2不一定是完整的链。我如何根据链完整性来理解这些属性?

顺便说一句,这不一定是关于Haskell的问题,而是关于数学的问题。

最佳答案

这是一个例子。

假设您的列表xs_1, xs_2, ...的列表顺序不断增加,但限制为xs

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

通过链完整性(又名Scott连续性),我们得出map id xsxs

这为我们提供了一种方法,可以通过仅在近似列表xs上对其进行验证来证明可能为无限的极限列表xs_k上的属性。

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

斯科特(Scott)Ω-连续性(或称链条完整性)更进一步。它告诉我们f xsf xs_k序列的限制完全相同。最终结果由f在近似值上的结果近似。粗略地说,您可以通过使输入收敛来使输出收敛。

不平等无法一成不变地发挥作用。实际上,将xs = [0..]作为一个无限列表,并将近似值xs_k = 0:...:k:undefined视为一个无限列表。显然,对于每个xs_kxs不等于k。但是,我们不接受该不等式的限制,该不等式将指出xs不等于xs

最后,这里的主题非常广泛。如果您有兴趣,我建议您阅读有关指称语义的知识,例如阅读Winskel的书。

关于haskell - Chain Complete的概念是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45529201/

10-11 17:49