“是怎么回事?”;少于;为Coq中的实数定义?

“是怎么回事?”;少于;为Coq中的实数定义?,coq,real-number,Coq,Real Number,我只是想知道实数的“小于”关系是如何定义的 我知道对于自然数(nat), Coq.Reals.RIneq认为Rplus\u 0\u r:forall r,r+0=r。这是一条公理 吹毛求疵:Rplus\u 0\r不是公理,但Rplus\u 0\l是公理。您可以在模块中获得它们的列表以及在中使用的参数列表 正如你所看到的,“大于(或等于)”和“小于或等于”都是根据“小于”来定义的,这是假设的,而不是使用你建议的命题来引入的 看起来,Rlt确实可以按照您建议的方式定义:这两个命题可以证明是等价的,如

我只是想知道实数的“小于”关系是如何定义的

我知道对于自然数(
nat
),

Coq.Reals.RIneq认为Rplus\u 0\u r:forall r,r+0=r。这是一条公理

吹毛求疵:
Rplus\u 0\r
不是公理,但
Rplus\u 0\l
是公理。您可以在模块中获得它们的列表以及在中使用的参数列表

正如你所看到的,“大于(或等于)”和“小于或等于”都是根据“小于”来定义的,这是假设的,而不是使用你建议的命题来引入的

看起来,
Rlt
确实可以按照您建议的方式定义:这两个命题可以证明是等价的,如下所示

Require Import Reals.
Require Import Psatz.
Open Scope R_scope.

Goal forall (r1 r2 : R), r1 < r2 <-> exists s, s > 0 /\ r1 + s = r2.
Proof.
intros r1 r2; split.
 - intros H; exists (r2 - r1); split; [lra | ring].
 - intros [s [s_pos eq]]; lra.
Qed.
需要导入real。
需要导入Psatz。
打开范围R\u范围。
所有目标(r1 r2:R),r10/\r1+s=r2。
证明。
介绍r1-r2;分裂
-介绍H;存在(r2-r1);分裂[lra |环]。
-介绍[s[s_pos eq];上帝军。
Qed。

然而,您仍然需要定义“严格正”的含义,以使
s>0
位有意义,并且根本不清楚您最终的公理会更少(例如,严格正的概念应该在加法、乘法等下关闭)。

事实上,真正的库有点弱,因为它完全被指定为公理,在过去的一些(简短的)点上它甚至是不一致的

因此,le的定义有点“特别”,从系统的角度来看,它没有计算意义,只是一个常数和一些公理。您可以添加公理“x 值得指出的是,对于Coq,REAL的一些替代结构:

我最喜欢的经典结构是Georges Gonthier和B.Werner在四色定理中所做的:

它只使用排除中间公理(主要用于比较实数),因此其一致性的置信度非常高

最著名的REAL的无公理描述是C-CORN项目,但我们知道构造性分析与通常的分析有很大不同

Require Import Reals.
Require Import Psatz.
Open Scope R_scope.

Goal forall (r1 r2 : R), r1 < r2 <-> exists s, s > 0 /\ r1 + s = r2.
Proof.
intros r1 r2; split.
 - intros H; exists (r2 - r1); split; [lra | ring].
 - intros [s [s_pos eq]]; lra.
Qed.