Coqで実数の簡単な証明をしようとしています。たとえば、2 つの非負数の平均も非負であることを証明したいと考えています。
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 + 0H1 の RHS を に変更できません0。simpl in H1.示されているように試しましたが、何もしませんでした。実数が と違うのはわかりましたnat。しかし、ここで物事をどのように単純化すればよいでしょうか?
(注: 私は実数の初心者です。また、上記のコードはナイーブ/非効率的である可能性があります。改善のための提案は大歓迎です。) また:
Rplus_ge_compat
: forall r1 r2 r3 r4 : R,
r1 >= r2 ->
r3 >= r4 -> r1 + r3 >= r2 + r4