haskell - 最小固定点,最大固定点
问题描述
在像 Haskell 这样的惰性非全语言中,最小固定点如何与最大固定点重合。完全部分订单的连续性与此有什么关系?
解决方案
在CPO(我们将类型解释为)中,任何递增链都有一个最小上限。
这是一个应该传达直觉的示例,为什么在 CPO 领域中,最小不动点和最大不动点重合。考虑以下仿函数,为了简洁而滥用列表符号:
data ListF a x = [] | a : x
它最大的固定点是 Haskell 列表的类型(可能是无限的,也可能是部分的)。它的最小不动点呢?必须包含以下元素(Fix
省略构造函数):
0 : _|_
0 : 1 : _|_
0 : 1 : 2 : _|_
...
并且它们形成一个递增链,所以必须有一个最小上界,它必须是自然整数的无限列表0 : 1 : 2 : ...
。所以 的最小不动点ListF
包含无限列表,因此与最大不动点重合。
正如评论中所指出的,最大不动点由类型给出的说法[]
可能需要澄清。例如,BigList
由大序数索引的列表中的某些 CPO " " 会不会产生更大的固定点?
可以首先证明[]
满足最终ListF
-余代数的定义。那么,最终余代数的一个性质是它们对于同构是唯一的。因此,由较大序数索引的列表将导致非同构 CPO,因此它不能是最终的代数。
我可以停在那里,但等等,不是BigList
还有一个更大的固定点ListF
吗?我的结论是将问题归结为错误的术语,正式我们应该只讨论“最终的余代数”,而不是“最大的固定点”。
根据您如何定义 CPO 中函子的“不动点”以及 CPO 之间的(预)序概念,您可能会发现它BigList
是 的一个不动点ListF
,它大于[]
,您会遇到集合论悖论当达到“最大不动点”时,最终对于 Haskell 实践者来说,以形式化“最大不动点”的方式没有任何价值,因为您实际上想要最终代数的良好属性。
(我很想知道一种直接定义排除的“定点”的方法BigList
。)
因此,相反,术语“最大不动点”也可能是“最终代数”的同义词。一些直觉延续(“固定点”通常可以通过迭代来接近),有些则没有(它不是集合论意义上的“最大”)。
推荐阅读
- java - 编写创建随机表达式的递归方法
- react-native - 用户是否已经拥有权限 FB SDK 反应原生
- reactjs - Ant Design TimePickers 随页面滚动
- reactjs - 如何防止主页元素在每个页面上呈现?
- python - 是否可以使用 GEKKO 调用外部求解器?
- python-3.x - 从postgres数据库n python中获取所有行的问题
- android - 当 React 本机应用程序启动时,如何在设备上保存/缓存所有数据以便在后台快速加载和更新?
- c++ - 没有名为“stoi”的成员
- spring-boot - SpringBoot项目中的CORS配置错误
- amazon-web-services - AWS中的BaseUrl映射不一致