我正在阅读Richard Bird的著作《与Haskell进行功能性思考》,并遇到了Chain Complete关于无限列表归纳的概念。
它说:
作为链完整属性的示例,它说:
我很难理解这个示例如何适合这里的chain属性。它还指出不等式e1 =/= e2不一定是完整的链。我如何根据链完整性来理解这些属性?
顺便说一句,这不一定是关于Haskell的问题,而是关于数学的问题。
最佳答案
这是一个例子。
假设您的列表xs_1, xs_2, ...
的列表顺序不断增加,但限制为xs
。
对于每个k
,我们都有map id xs_k
等于xs_k
。
通过链完整性(又名Scott连续性),我们得出map id xs
是xs
。
这为我们提供了一种方法,可以通过仅在近似列表xs
上对其进行验证来证明可能为无限的极限列表xs_k
上的属性。
直觉是,为了使xs
成为一个限制列表,每个xs_k
必须等于xs
或x1:x2:...:xn:undefined
形式的一些较短的前缀。注意未定义的尾部,表示循环计算(例如无限递归)。因此,如果我们比较f xs_k
和f xs
,我们发现后者必须至少与前者一样终止。这里的总体思想是,如果我们传递更多或定义为定义的输入,我们将获得更多或定义为定义的输出。从数学上讲,此概念由Scott顺序上的单调性捕获。
斯科特(Scott)Ω-连续性(或称链条完整性)更进一步。它告诉我们f xs
与f xs_k
序列的限制完全相同。最终结果由f
在近似值上的结果近似。粗略地说,您可以通过使输入收敛来使输出收敛。
不平等无法一成不变地发挥作用。实际上,将xs = [0..]
作为一个无限列表,并将近似值xs_k = 0:...:k:undefined
视为一个无限列表。显然,对于每个xs_k
,xs
不等于k
。但是,我们不接受该不等式的限制,该不等式将指出xs
不等于xs
。
最后,这里的主题非常广泛。如果您有兴趣,我建议您阅读有关指称语义的知识,例如阅读Winskel的书。
关于haskell - Chain Complete的概念是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45529201/