Fix和Self在构造微积分之间的确切区别是什么?

时间:2017-03-30 16:29:39

标签: haskell functional-programming agda idris

Self Types for Dependently Typed Lambda Encodings论文(由Peng Fu和Aaron Stump提出)提出了自我类型,据推测,它足以编码Scott-encoded上的归纳原理和Calculus of Constructions数据类型,而不会系统不一致或引入悖论。

那篇论文的符号太重了,我无法完全理解如何实现它。

究竟什么是Fix和Self的主要区别?或者,换句话说:在什么点上应该限制天真实施的Fix,以便它不会在核心演算上留下任何不一致的地方?

1 个答案:

答案 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不是类型变量,而是术语变量。该术语在类型中被“移动”。这根本不是递归类型。