无法用 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.
问题是,如果我破坏 a
和 ord0
,我将获得以下目标:
∀ (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.
这个问题可能看起来很愚蠢,但我无法证明唯一的自然数 小于 1 为 0。我使用的是 mathcomp 的 finType 库,我想证明的目标是:
Lemma ord0_eq1 (a : ordinal 1) : a = ord0.
问题是,如果我破坏 a
和 ord0
,我将获得以下目标:
∀ (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.