【发布时间】:2019-09-09 07:45:14
【问题描述】:
我希望看到 Coq 版本的 Bananas、Lenses 等。它们是在 sumtypeofway Introduction to Recursion schemes 的优秀系列博文中建立的
但是,博客文章是在 Haskell 中的,它允许无限的非终止递归,因此完全满足 Y 组合器。哪个 Coq 不是。
具体来说,定义取决于类型
newtype Term f = In { out :: f (Term f) }
构建无限类型f (f (f (f ...)))。 Term f 允许使用 Term 类型族对变形、变形、变形等进行非常漂亮和简洁的定义。
尝试将其移植到 Coq
Inductive Term f : Type := {out:f (Term f)}.
给了我预期的
Error: Non strictly positive occurrence of "Term" in "f (Term f) -> Term f".
问:在 Coq 中形式化上述 Haskell Term 类型的好方法是什么?
f 以上是Type->Type 类型,但也许它太笼统了,可能有一些方法将我们限制为归纳类型,使得f 的每个应用程序都在减少?
也许有人已经在 Coq 中实现了来自 Banans, Lenses, Envelopes 的递归方案?
【问题讨论】:
标签: coq recursion-schemes