【发布时间】:2015-12-20 19:32:13
【问题描述】:
我正在尝试用 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
在假设中。我无法将 H1 的 RHS 上的 0 + 0 更改为 0。如图所示,我尝试了simpl in H1.,但它什么也没做。我知道实数与nat 不同。但是我应该如何简化这里的事情呢?
(注意:我是实数初学者。上面的代码可能很幼稚/效率低下。欢迎提出改进建议。) 另外:
Rplus_ge_compat
: forall r1 r2 r3 r4 : R,
r1 >= r2 ->
r3 >= r4 -> r1 + r3 >= r2 + r4
【问题讨论】:
标签: coq real-number