无法用 mathcomp 的 finTypes 证明只有 0 小于 1

Unable to prove that only 0 is less than 1 with mathcomp's finTypes

这个问题可能看起来很愚蠢,但我无法证明唯一的自然数 小于 1 为 0。我使用的是 mathcomp 的 finType 库,我想证明的目标是:

Lemma ord0_eq1 (a : ordinal 1) : a = ord0.

问题是,如果我破坏 aord0,我将获得以下目标:

∀ (m : nat) (i : (m < 1)%N), Ordinal i = Ordinal (ltn0Sn 0)

现在我可以使用 case 并且如果 m 不等于 0 则得出荒谬。但是如果 m 等于 0,我得到:

∀ i : (0 < 1)%N, Ordinal i = Ordinal (ltn0Sn 0)

而证明这个等式的唯一方法就是证明forall i : 0 < 1, i = (ltn0Sn 0)。 但是我不知道如何在不使用的情况下证明相同 Prop 的两个证明之间的相等性 证明无关紧要,我不想在我的理论中添加公理。 肯定有什么方法可以利用 Ssreflect 的反射能力来解决这个目标,但是我 还没有找到任何东西:我可以达到需要证明两者之间相等的地步 平等的证明,我可以使用 UIP(身份证明的唯一性),但那是另一个 公理,我不想用它。

我不敢相信我必须添加一个公理来证明这个目标: 小于关系只能通过计算来确定。应该有 一种证明 forall (m n : nat) (a b : m < n), a = b 没有 UIP 或证明不相关的方法。

谢谢

编辑:我使用的是 mathcomp 的 ssrnat 库,而不是 Coq 的 Arith 模块。 "<" 符号绑定到 ssrnat 的 ltn,而不是 Arith 的 lt

定义 ordinal 类型的谓词是一个布尔等式,因此满足证明无关性。在这种情况下,您可以申诉 val_inj:

From mathcomp Require Import all_ssreflect.

Lemma ord0_eq1 (a : ordinal 1) : a = ord0.
Proof. by apply/val_inj; case: (val a) (valP a). Qed.