如何使用具有“通常”相等性的MSets来创建有限集类型?

时间:2020-02-26 07:25:37

标签: set coq

很抱歉问一个简单的问题,但是我一直在寻找答案,而且我还没有找到对我来说足够简单的解释(我不太了解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,但我希望能够创建无序元素集

1 个答案:

答案 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.