假设我希望断言存在可数无数的不同x : X
。我的第一个猜测是按字面意思遵循可数无穷大的定义,例如:
Definition aleph_null ( X : Type ) :=
exists ( R : nat -> X -> Prop ),
( forall ( n : nat ), exists ( x : X ), R n x )
/\ ( forall ( x : X ), exists ( n : nat ), R n x )
/\ ( forall ( n : nat ) ( x y : X ), R n x -> R n y -> x = y )
/\ ( forall ( n m : nat ) ( x : X ), R n x -> R m x -> n = m ).
但是在实际样张中使用它似乎有点笨拙,并没有使用库。 我认为我可以通过使用现有的双重性定义来缩短它,但我能找到的所有定义都是关于函数,而不是二元关系。
在Coq中有没有更好的,惯用的表达可数无穷大的方法?
答案 0 :(得分:1)
最佳选择在很大程度上取决于您的特定应用。我会说在大多数情况下使用函数可能是最简单的选择。由于您提到了库支持,ssreflect库对此类推理有很好的支持;你可以定义,例如
Inductive count_inf (X : Type) : Type := CountInf {
count : X -> nat;
_ : bijective count
}.
ssreflect实际上有自己的countable types定义,但它包括有限类型和无限类型,所以它并不能让你想要开箱即用。