Self Types for Dependently Typed Lambda Encodings论文(由Peng Fu和Aaron Stump提出)提出了自我类型,据推测,它足以编码Scott-encoded上的归纳原理和Calculus of Constructions数据类型,而不会系统不一致或引入悖论。
那篇论文的符号太重了,我无法完全理解如何实现它。
究竟什么是Fix和Self的主要区别?或者,换句话说:在什么点上应该限制天真实施的Fix,以便它不会在核心演算上留下任何不一致的地方?
答案 0 :(得分:4)
这是我在浏览论文后所理解的。
Fix
类型满足类型等价(假设为equirecursive类型)
G |- M : Fix x. t <=> G |- M : t{Fix x. t / x}
即。你可以展开自己的类型。请注意术语M
在这里不起任何作用。如果使用isorecursive类型,M
将会应用一些同构(例如Haskell的newtype
构造函数),但它并不重要。
相反,自我类型满足以下
G |- M : Self x. t <=> G |- M : t{M / x}
现在,x
不是类型变量,而是术语变量。该术语在类型中被“移动”。这根本不是递归类型。