Coq - 关于 Ssreflect 中序列元素的证明条件
Coq - Proving condition about elements of sequence in 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
,它介绍了我非常不熟悉的序列操作。
提前致谢!
您需要使用 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.
我的目标是这样的:
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
,它介绍了我非常不熟悉的序列操作。
提前致谢!
您需要使用 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.