我正在考虑COQ中证明不相关的问题。 一个可证明的陈述说:
如果一个类型的相等是可判定的,则只能有一个相等语句的证明,即反身性。
我想知道是否有可能在COQ中构造具有多个相等证明的类型。因此,我问以下构造是否一致?
(*it is known that f=g is undecidable in COQ *)
Definition f(n:nat) := n.
Definition g(n:nat) := n+0.
Axiom p1: f=g.
Axiom p2: f=g.
Axiom nonirrelevance:p1<>p2.
我在这里困惑的是,通过引入p1,我使等式f = g可判定,因此它应该只有一个证明!我在这里推理的错误是什么?
这是纯粹的COQ行为还是在HOTT中类似?
答案 0 :(得分:1)
我认为你混淆了几件事。
您所说的可证明声明可以在https://coq.inria.fr/library/Coq.Logic.Eqdep_dec.html中找到,并且
Theorem eq_proofs_unicity A (eq_dec : forall x y : A, x = y \/ x <> y) (x : A) :
forall (y:A) (p1 p2:x = y), p1 = p2.
现在有趣的是eq_dec
的类型。首先,它甚至不能要求平等是可判定的,它只是要求它是真或假,而不是{x = y} + {x <> y}
然后注意,它并不是仅仅因为x和y要求它来证明相等的不相干性,它会向所有函数询问这个属性。
所以你需要证明你forall (f g : nat -> nat), f = g \/ f <> g
你不能做的矛盾。 p1只是f = g \/ f <> g
证明你的特定f和g的证明。
请注意,如果可以的话,它只是意味着没有办法构建一个系统,您可以在其中比较函数,但有多种方法可以证明它们是不同的。
最后,因为P不可判断只意味着在{P} + {~P}
之上没有可构造的函数,但它并不意味着将一个作为公理加入会导致矛盾。只是添加它,以防它不清楚。