Coq中如何表达子集关系?

How to express subset relation in Coq?

我如何在 Coq 中描述一个集合 Y 是另一个集合 X 的子集?

我测试了以下内容:

Definition subset (Y X:Set) : Prop :=
  forall y:Y, y:X.

,试图表达如果一个元素yY,那么yX。但这会产生关于 y 的类型错误,这不足为奇。

有没有简单的方法在 Coq 中定义 subset

这是在标准库 (Coq.Logic.ClassicalChoice) 中的实现方式:

Definition subset (U:Type) (P Q:U->Prop) : Prop := forall x, P x -> Q x.

一元谓词 PQ 表示(通用)集合 U 的某些子集,因此上面的定义是:每当某些 xP,同时在Q.

可以在 Coq.MSets.MSetInterface:

中找到有点相似的定义
Definition Subset s s' := forall a : elt, In a s -> In a s'.

其中 In 具有类型 elt -> t -> Prop,这意味着类型 elt 的某些元素是类型 t.

的成员