我试图将(1,2,3)定义为coq中的一组元素。我可以使用list定义它(1 ::(2 ::(3 :: nil)))。有没有办法在不使用列表的情况下在coq中定义set。
答案 0 :(得分:14)
在Coq中定义集合时,基本上有四种可能的选择,具体取决于您对集合的基本类型和计算需求的约束:
答案 1 :(得分:5)
coq的标准库提供以下有限集模块:
Coq.MSets
抽象出集合的实现细节。例如,有an implementation that uses AVL trees和another based on list
s。Coq.FSets
抽象出集合的实现细节;它是MSets
的先前版本。Coq.Lists.ListSet
是列表的集合编码,为了完整起见我将其包括在内以下是如何使用FSets
定义集合的示例:
Require Import Coq.Structures.OrderedTypeEx.
Require Import Coq.FSets.FSetAVL.
Module NSet := FSetAVL.Make Nat_as_OT.
(* Creates a set with only element 3 inside: *)
Check (NSet.add 3 NSet.empty).
答案 2 :(得分:0)
Coq(列表,函数,树,...)中的集合编码有很多,可以是有限的也可以是有限的。你应该看一下Coq的标准库。例如,最简单的'我知道的定义是this one