我对Coq中的证据和Prop
等感到困惑。我们如何证明(n = n) = (m = m)
?
我的意图是以某种方式显示True=True
。但这甚至是正确的表述?
到目前为止我尝试的是:
Theorem test: forall m n:nat, (n = n) = (m = m).
Proof. intros. simpl.
但simpl.
什么都不做,reflexivity
也没有。这只是一个示例,一般来说,如果可能,我需要为任何类型X
证明这一点。
答案 0 :(得分:2)
n = n
和m = m
都是道具,因此他们排序Prop
而不是排序Set
。这基本上意味着n = n
就像一个声明(必须被证明)而不是像true : boolean
那样。
相反,您可以尝试证明类似:n-n = m-m
,或者,您可以定义一个函数nat_equal : nat -> bool
,给定一个自然的函数,将其映射到bool,然后证明nat_equal n = nat_equal m
。
如果你真的想断言陈述是平等的,那你就需要命题扩展性。
答案 1 :(得分:1)