Coq - 在 Ssreflect 中证明空范围

Coq - proof over empty range in Ssreflect

我必须以以下形式证明目标:

forall x: ordinal_finType m, P x

我目前的情况是我的堆栈中有 Hm: m = 0,所以这实际上是空集上的 forall。在这种情况下我该如何进行? 使用

case => x.

给我留下

forall i : (x < m)%N, P i

但是我当然不能使用 rewrite Hm,因为它因依赖类型错误而失败。

好吧,你需要用你的零假设重写,实际上,由于 math-comp 中 < 运算符的计算性质,空性的证明是微不足道的。

Lemma ordinal0P P : 'I_0 -> P.
Proof. by case. Qed.

或者如果你想:

Lemma avoid_rewrite_error: forall P m, m = 0 -> forall (i : 'I_m), P.
Proof. by move=> ? ? -> []. Qed.