Dictionary 在Coq 8.6中使用FMap的正确方法?
我试图在Coq中使用基于树的映射,特别是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.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”。