如何"小于"在Coq中为实数定义?

时间:2015-12-21 18:04:40

标签: coq real-number

我只是想知道"是否小于"为实数定义的关系。

我理解,对于自然数(nat),<可以用一个数字递归定义,即另一个数字的(1+)后继S。我听说很多关于实数的事情在Coq中是公理的而且不计算。

但我想知道Coq中是否存在实数最小公理集,基于哪些属性/关系可以导出。 (例如Coq.Reals.RIneq认为Rplus_0_r : forall r, r + 0 = r.是公理,等等)

特别是,我感兴趣的是,<<=之类的关系是否可以在等式关系之上定义。例如,我可以想象在常规数学中,给出两个数字r1 r2

r1 < r2 <=> exists s, s > 0 /\ r1 + s = r2.

但这是否符合Coq的建设性逻辑?我可以用它来至少对不平等做一些推理(而不是一直重写公理)吗?

2 个答案:

答案 0 :(得分:3)

  

Coq.Reals.RIneq认为Rplus_0_r:forall r,r + 0 = r。是一个公理,等等

Nitpick:Rplus_0_r不是公理,而是Rplus_0_l。您可以在模块Coq.Reals.Raxioms中获取它们的列表以及Coq.Reals.Rdefinitions中使用的参数列表。

正如您所见,&#34;大于(或等于)&#34;和&#34;小于或等于&#34;都是按照&#34;小于&#34;来定义的。这是假定的,而不是使用你建议的命题引入。

看起来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.

但是你仍然需要定义它意味着什么&#34;严格肯定&#34;因为s > 0位是有意义的,并且一点也不清楚你最终会有更少的公理(例如,严格正面的概念应该在加法,乘法等之下关闭) )。

答案 1 :(得分:2)

实际上,Coq.Real库在某种意义上有点弱,因为它完全被指定为公理,而在过去的某些(简短)点,它甚至是不一致的。

因此,le的定义有点“临时”,从系统的角度来看,它带有零计算意义,只是一个常数和一些公理。您可以添加公理“x&lt; x”,而Coq无法检测到它。

值得指出Req for Coq的一些替代结构:

我最喜欢的经典建筑是由Georges Gonthier和B. Werner在四色定理中完成的:http://research.microsoft.com/en-us/downloads/5464e7b1-bd58-4f7c-bfe1-5d3b32d42e6d/

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

最着名的无公理特征是C-CORN项目http://corn.cs.ru.nl/,但我们知道建设性分析与通常的不同。