我如何在 Coq 中描述一个集合Y
是另一个集合的子集X
?
我测试了以下内容:
Definition subset (Y X:Set) : Prop :=
forall y:Y, y:X.
,试图表达如果一个元素y
在 中Y
,那么y
在 中X
。但这会产生关于 的类型错误y
,这并不奇怪。
有没有简单的方法subset
在 Coq 中定义?
我如何在 Coq 中描述一个集合Y
是另一个集合的子集X
?
我测试了以下内容:
Definition subset (Y X:Set) : Prop :=
forall y:Y, y:X.
,试图表达如果一个元素y
在 中Y
,那么y
在 中X
。但这会产生关于 的类型错误y
,这并不奇怪。
有没有简单的方法subset
在 Coq 中定义?
以下是它在标准库 ( Coq.Logic.ClassicalChoice
) 中的完成方式:
Definition subset (U:Type) (P Q:U->Prop) : Prop := forall x, P x -> Q x.
一元谓词P
并Q
表示(通用)集合的一些子集U
,所以上面的定义是:只要一些x
在P
,它就同时在Q
。
一个有点相似的定义可以在Coq.MSets.MSetInterface
:
Definition Subset s s' := forall a : elt, In a s -> In a s'.
where In
has type elt -> t -> Prop
,这意味着某个类型的元素elt
是一组类型的成员t
。