很抱歉问一个简单的问题,但是我一直在寻找答案,而且我还没有找到对我来说足够简单的解释(我不太了解Coq的模块系统)
我有以下几种类型
Def var := nat.
Inductive type : Type :=
| Unit
| Arrow (a : type) (b : type)
| Ref (a : type)
.
Inductive Judgement : Type :=
| judge (v : var) (t : type)
.
我希望能够(有限)套Judgements
。根据我所做的研究,看来MSets是我想要的。特别是我(认为我)对“弱”集合感兴趣,因为我想避免不得不利用var/nat
的有序性。但是对于我一生,我无法弄清楚如何真正创建与一组判断相对应的类型。
我能够找到的最接近的示例是this,但我希望能够创建无序元素集
答案 0 :(得分:0)
您不能通过使用判断列表而不是MSet判断来解决此问题吗?
使用MSets涉及定义一个有序类型,这可能是很多样板。
请参见nats in the standard libraries Nat_as_OT
的示例Module Nat_as_OT <: UsualOrderedType.
Definition t := nat.
Definition eq := @eq nat.
Definition eq_refl := @eq_refl t.
Definition eq_sym := @eq_sym t.
Definition eq_trans := @eq_trans t.
Definition lt := lt.
Lemma lt_trans : forall x y z : t, lt x y -> lt y z -> lt x z.
Lemma lt_not_eq : forall x y : t, lt x y -> ~ eq x y.
Definition compare x y : Compare lt eq x y.
Definition eq_dec := eq_nat_dec.
End Nat_as_OT.