最小不动点,最大不动点

Least fix point, greatest fix point

为什么在像 Haskell 这样的惰性非完整语言中,最小固定点与最大固定点重合。完整偏序的连续性与此有什么关系?

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的更大不动点吗?我的结论是将问题归结为错误的术语,正式地我们应该只讨论 "final coalgebras",而不是 "greatest fixed points"。

根据您如何定义 CPO 中函子的 "fixed point" 以及 CPO 之间的(预)序概念,您可能会发现 BigList 是 [=14= 的不动点],它大于 [],你 运行 在达到 "greatest fixed point" 时陷入集合论悖论,最终对 Haskell 从业者没有任何价值以这种形式化 "greatest fixed point" 的方式,因为您实际上想要最终煤代数的良好特性。

(我很想知道一种直接定义 "fixed point" 的方法,将 BigList 排除在外。)

因此,术语 "greatest fixed point" 也可能是 "final coalgebra" 的同义词。有些直觉会延续("fixed points" 通常可以通过迭代来接近),有些则不会(在集合论意义上它不是 "greatest")。