在 ssreflect finset 理解中使用条件

Use condition in a ssreflect finset comprehension

我有一个函数 f,它接受一个 fintype A 的 x 和一个 P x 的证明到 return 一个 fintype B 的元素。我想 return f x 的 finset 对于所有满足P,可以这样写:

From mathcomp
Require Import ssreflect ssrbool fintype finset.

Variable A B : finType.
Variable P : pred A.
Variable f : forall x : A, P x -> B.

Definition myset := [set (@f x _) | x : A & P x].

然而,这失败了,因为 Coq 没有用右边的信息填充占位符,我不知道如何明确地提供它。

我没有在 ssreflect 代码和书中找到有关如何执行此操作的指示。我意识到我可以通过使用 sigma-type {x : A ; P x} 并修改了一点 f,但感觉比它应该的更复杂。有没有简单/可读的方法来做到这一点?

实际上,按照您建议的方式进行操作的最简单方法是使用 sigma 类型:

Definition myset := [set f (tagged x) | x : { x : A | P x }].

但实际上,f 是一个有点奇怪的函数,我想我们需要了解有关您的用例的更多详细信息,才能了解您要去哪里。