Coq 如何明确地获取集合的基数

Coq 如何明确地获取集合的基数,coq,Coq,我试图创建一个类似于定义基数(a:employee U):nat.的函数,以便为每个集合获取其基数。我发现这是一个具有挑战性的问题,我想得到一些帮助 顺便说一下,这里有一个基数U A n,如果|A |=n,那么它就变成了真的。一个问题是你不能为任意集合定义这个函数:你需要假设A是有限的。例如,您可以在Coq.set.Finite\u set中使用Finite谓词。您可能会尝试使用Coq.set.finite\u set\u facts中的finite\u cardinal引理,它表示每个有限集都

我试图创建一个类似于
定义基数(a:employee U):nat.
的函数,以便为每个集合获取其基数。我发现这是一个具有挑战性的问题,我想得到一些帮助


顺便说一下,这里有一个基数U A n,如果
|A |=n
,那么它就变成了真的。

一个问题是你不能为任意集合定义这个函数:你需要假设
A
是有限的。例如,您可以在
Coq.set.Finite\u set
中使用
Finite
谓词。您可能会尝试使用
Coq.set.finite\u set\u facts
中的
finite\u cardinal
引理,它表示每个有限集都有一些基数。这将要求您从存在性语句中提取一个自然数
exists n,基数U a n
,这反过来需要某种形式的选择公理(例如
Coq.Logic.ClassicalChoice
中的
choice
)。

但我需要一个
exist
来提取nat。有什么方法可以得到它吗?没关系,我会用
构造性的\u确定的\u描述
。@user5876164是的,那将是一个很好的方法。这一原则是一种较弱的选择形式,在这种情况下就足够了。