我有一个由有限类型上的序列和该序列的 uniq 证明组成的结构。这应该描述一个显然是有限的类型,但我不知道如何证明这一点。
我以为我可以使用 UniqFinMixin,但是它需要 - 如果我理解正确的话 - 提供该类型的所有元素的显式序列,我不知道如何计算。我尝试在有限类型上使用 Finite.enum,但它只生成一个包含有限类型的所有元素的序列,而且我没有找到一种计算所有子序列/排列的优雅方法。
From mathcomp
Require Import ssreflect ssrbool ssrfun eqtype ssrnat seq choice fintype.
From mathcomp
Require Import tuple finfun bigop finset.
Variable ft : finType.
Structure dbranch := {branch :> seq ft ; buniq : uniq branch}.
Canonical dbranch_subType := Eval hnf in [subType for branch].
Canonical dbranch_eqType := Eval hnf in EqType _ [eqMixin of dbranch by <:].
Canonical dbranch_choiceType := Eval hnf in ChoiceType _ [choiceMixin of dbranch by <:].
Canonical dbranch_countType := Eval hnf in CountType _ [countMixin of dbranch by <:].
Canonical dbranch_subCountType := Eval hnf in [subCountType of dbranch].
Lemma dbranchFin : Finite.mixin_of [eqType of dbranch].
Admitted. (* :-( *)
Canonical dbranch_finType := Eval hnf in FinType _ dbranchFin.
对我来说似乎很奇怪,这里没有一种简单的方法来派生 finType,但我在 finset.v 文件中找不到它。预先感谢您的帮助。