Coq - 证明Ssreflect中序列元素的条件

时间:2017-05-29 13:01:08

标签: coq ssreflect

我有一个看起来像这样的目标:

x \in [seq (f v j) | j <- enum 'I_m & P v j] -> 0 < x

在上文中,f是根据v, j生成不等式解的定义,而P v j是将j限制为满足另一个不等式的索引的谓词。

我已经证明了Goal : P v j -> (f v j > 0),但是如何使用它来证明它适用于序列中的任何x?我发现了一些像nthP这样引入序列操作的相关引理,我对此并不熟悉。

提前致谢!

1 个答案:

答案 0 :(得分:3)

您需要使用mapP引理(表示mem bership wrt map):

Lemma U m (P : rel 'I_m) f v x (hp : forall j, P v j -> f v j > 0) :
  x \in [seq f v j | j <- enum 'I_m & P v j] -> 0 < x.
Proof. by case/mapP=> [y]; rewrite mem_filter; case/andP=> /hp ? _ ->. Qed.