在诸如Haskell之类的惰性非全部语言中,最小定点与最大定点如何重合。完整的部分订单的连续性与这有什么关系?
答案 0 :(得分:5)
在CPO(我们将类型解释为类型)中,任何递增的链都有一个最小的上限。
这是一个示例,该示例应传达直觉,为什么在CPO领域中,最小固定点和最大固定点重合。考虑以下函子,为简洁起见,滥用了列表符号:
data ListF a x = [] | a : x
其最大的固定点是Haskell列表的类型(可能是无限的,可能是部分的)。最低固定点呢?其中必须包含以下元素(省略{Fix
构造函数):
0 : _|_
0 : 1 : _|_
0 : 1 : 2 : _|_
...
并且它们形成一条递增链,因此必须有一个最小上限,该上限必须是自然整数0 : 1 : 2 : ...
的无限列表。因此,ListF
的最小不动点包含无限个列表,因此与最大不动点重合。
正如评论中指出的那样,最大的固定点由类型[]
给出的主张可能需要澄清。例如,由大型序号索引的列表的某些CPO“ BigList
”不会带来更大的固定点吗?
首先可以证明[]
满足最终ListF
-coalgebra的定义。然后,最终的凝聚态的一个特性是它们在同构性之前都是唯一的。因此,由较大序数索引的列表将导致非同构CPO,因此不能成为最终的合并代数。
我可以停在那里,但是等一下,BigList
仍然不是ListF
的更大固定点吗?我的结论是将问题归结为术语错误,在形式上我们应该只讨论“最终定理”,而不是“最大定点”。
根据如何在CPO中定义函子的“不动点”以及CPO之间的(预)顺序的概念,您可能会发现BigList
是ListF
的不动点,它大于[]
,当您到达“最大固定点”时会遇到集合理论悖论,并且最终以正式化“最大固定点”的方式对Haskell从业者没有任何价值。因为您实际上想要的是最终结对子的优良特性。
(我想知道一种直接的方法来定义不包含BigList
的“固定点”。)
因此,“最大固定点”一词也可能是“最终结代”的同义词。有些直觉会延续下去(“固定点”通常可以通过迭代来实现),有些则不能(在集合论的意义上不是“最大”)。