gpt4 book ai didi

coq - Coq 中的无限递归类型(用于 Bananas 和 Lenses)

转载 作者:行者123 更新时间:2023-12-04 20:27:04 25 4
gpt4 key购买 nike

我想看到香蕉、镜头等的 Coq 版本。它们建立在 sumtypeofway Introduction to Recursion schemes 上的一系列优秀博客文章中。

然而,博客文章是在 Haskell 中,它允许无限的非终止递归,因此完全满足于 Y组合器。哪个 Coq 不是。

特别是,定义取决于类型

newtype Term f = In { out :: f (Term f) }

构建无限类型 f (f (f (f ...))) . Term f允许使用 Term 系列类型对 catamorphisms、paramorphisms、anamorphisms 等进行非常漂亮和简洁的定义。

尝试将其移植到 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 的每个应用程序正在减少?

也许有人已经实现了 Banans, Lenses, Envelopes 中的递归方案。在科克?

最佳答案

我认为流行的解决方案是将仿函数编码为 "containers" ,本文的介绍是一个很好的起点:https://arxiv.org/pdf/1805.08059.pdf这个想法很古老(这篇论文的意思是给出一个独立的解释),你可以从那篇论文中寻找引用文献,但是如果你不熟悉类型理论,我在粗略搜索中发现的内容可能很难理解或范畴论。

简而言之,不是Type -> Type ,我们使用以下类型:

Set Implicit Arguments.
Set Contextual Implicit.

Record container : Type := {
shape : Type;
pos : shape -> Type;
}.

粗略地说,如果你想象一个“基本仿函数” F递归类型 Fix F , shape描述 F 的构造函数,对于每个构造函数, pos列举其中的“漏洞”。所以 List 的基仿函数
data ListF a x
= NilF -- no holes
| ConsF a x -- one hole x

由这个容器给出:
Inductive list_shape a :=
| NilF : list_shape a
| ConsF : a -> list_shape a.

Definition list_pos a (s : list_shape a) : Type :=
match s with
| NilF => False (* no holes *)
| ConsF _ => True (* one hole x *)
end.

Definition list_container a : container := {|
shape := list_shape a;
pos := fun s => list_pos s;
|}.

关键是这个容器描述了一个严格的正仿函数:
Inductive ext (c : container) (a : Type) : Type := {
this_shape : shape c;
this_rec : pos c this_shape -> a;
}.

Definition listF a : Type -> Type := ext (list_container a).

所以而不是 Fix f = f (Fix f) ,fixpoint 构造可以带一个容器:
Inductive Fix (c : container) : Type := MkFix : ext c (Fix c) -> Fix c.

并非所有的仿函数都可以编码为容器(延续仿函数就是一个很好的例子),但你不会经常看到它们与 Fix 一起使用。 .

完整要点: https://gist.github.com/Lysxia/21dd5fc7b79ced410b129f31ddf25c12

关于coq - Coq 中的无限递归类型(用于 Bananas 和 Lenses),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57849746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com