Dictionary 在Coq 8.6中使用FMap的正确方法?

Dictionary 在Coq 8.6中使用FMap的正确方法?,dictionary,coq,Dictionary,Coq,我试图在Coq中使用基于树的映射,特别是Coq.FSets.FMapAVL 我发现了这个4岁的问题: 查看评论中引用的标准lib文档,我看到以下注释: 注意:此文件仅用于与早期版本的FSets和FMap兼容。请立即直接使用Structures/Orders.v 这是什么意思?当我在谷歌搜索“Structures.v”或“Orders.v”时,我总是在其他文档页面出现相关的弃用警告 在Coq 8.6中,使用FMap的正确、未弃用的方法是什么 由于已弃用orderedTypex模块,因此我们将不使用

我试图在Coq中使用基于树的映射,特别是
Coq.FSets.FMapAVL

我发现了这个4岁的问题:

查看评论中引用的标准lib文档,我看到以下注释:

注意:此文件仅用于与早期版本的FSets和FMap兼容。请立即直接使用Structures/Orders.v

这是什么意思?当我在谷歌搜索“Structures.v”或“Orders.v”时,我总是在其他文档页面出现相关的弃用警告


在Coq 8.6中,使用FMap的正确、未弃用的方法是什么

由于已弃用
orderedTypex
模块,因此我们将不使用其中定义的
Nat\u

OrdersEx
中有
Nat\u as\u OT
(只是
PeanoNat.Nat
的同义词),这对我们的目的很有用

不幸的是,下面的代码

Require Import Coq.Structures.OrdersEx.
Module M := FMapAVL.Make Nat_as_OT.
无法工作,因为签名
OrderedType.OrderedType
(当前由
FMapAVL
使用)和
订单.OrderedType
不兼容

但是,
OrdersAlt
模块包含functor,它允许从一种类型构建另一种类型的模块。在本例中,我们感兴趣的是
Backport\u OT
。以下代码显示了如何使用
FMapAVL.Make
,其余代码可以从链接的问题中复制:

From Coq Require Import
FSets.FMapAVL Structures.OrdersEx Structures.OrdersAlt.

Module backNat_as_OT := Backport_OT Nat_as_OT.
Module M := FMapAVL.Make backNat_as_OT.
Pierre Letouzey在以下章节中解释了
FMapAVL
的情况:

旧样式
OrderedType
和新样式之间的转换不正确 尚未完成(例如,在
fmap
上还有一些工作要做), 而且我们不能简单地删除旧样式
OrderedType


如果有人需要集合,而不是映射:STDLIB说:“FSET:使用列表或有效树的有限集合/映射的模块化实现。对于集合,请考虑更现代的MSET”。