Coq中的道具和布尔

时间:2014-04-01 23:21:33

标签: boolean coq

如何在if语句中使用有理数的比较?

if 1 = 2 then 1 else 2

1 = 2当然是Prop而不是bool

2 个答案:

答案 0 :(得分:4)

我不明白dfan的答案是如何与这个问题相关的......

当然,1 = 2Prop,它是1等于2的陈述。希望你没有这个陈述的证据......

你想要的是一个函数,给定两个自然数12,如果它们相等则返回true,如果不相等则返回false

Coq.Arith.EqNat为您提供了一个名为beq_nat的函数。

事实上,你可能想要更好的东西,一个返回平等证明或差异证明的函数:

(* In Coq.Arith.Peano_dec *)
Theorem eq_nat_dec : forall n m, {n = m} + {n <> m}.
                              (* ^ a proof that n = m
                                           ^ or a proof that n <> m *)

if被重载以处理这些事情,所以你甚至可以写:

if eq_nat_dec 2 3 then ... else ...

答案 1 :(得分:2)

Qeq_bool确实需要两个理性并产生一个布尔。

Require Export QArith_base.
Eval compute in Qeq_bool (3#2) (3#2).                       = true: bool
Eval compute in Qeq_bool (3#2) (5#2).                       = false: bool
Eval compute in (if Qeq_bool (3#2) (5#2) then 7 else 9).    = 9: nat