我正在尝试用 Coq 为实数做简单的证明。例如,我想证明两个非负数的平均值也是非负数。
Example test: forall r1 r2:R, r1 >= 0 -> r2 >= 0 -> (r1 + r2)/2 >= 0.
我的第一步是证明r1 + r2 >=0
如下。
Require Export Coq.Reals.RIneq.
Require Export Coq.Reals.R_sqrt.
Local Open Scope Z_scope.
Local Open Scope R_scope.
Example test: forall r1 r2:R, r1 >= 0 -> r2 >= 0 -> (r1 + r2)/2 >= 0.
Proof. intros.
assert (r1 + r2 >= 0 + 0).
apply Rplus_ge_compat; assumption. simpl in H1.
但是,我只能得到
...
H1 : r1 + r2 >= 0 + 0
______________________________________(1/1)
(r1 + r2) / 2 >= 0
在假设中。我无法将0 + 0
H1 的 RHS 更改为0
. 我尝试simpl in H1.
了如图所示,它什么也没做。我知道实数不同于nat
. 但是我应该如何简化这里的事情?
(注意:我是实数初学者。上面的代码可能很幼稚/效率低下。欢迎提出改进建议。)另外:
Rplus_ge_compat
: forall r1 r2 r3 r4 : R,
r1 >= r2 ->
r3 >= r4 -> r1 + r3 >= r2 + r4