我只是想知道"是否小于"为实数定义的关系。
我理解,对于自然数(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的建设性逻辑?我可以用它来至少对不平等做一些推理(而不是一直重写公理)吗?
答案 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/,但我们知道建设性分析与通常的不同。