整数,有理数和实数的标准构造定义?


10

自然数被归纳定义为(以Coq语法为例)

Inductive nat: Set :=
| O: nat
| S: nat -> nat.

有没有一种标准的方法来建设性地定义整数(以及可能的其他集合,例如有理数和实数)?


1
什么是建设性定义?
Trismegistos

Answers:


12

有多种定义数学结构的方法,具体取决于您认为哪些属性是定义。在等效的表征之间,您将哪个作为定义,而将哪个作为替代描述并不重要。

在构造数学中,最好选择一个使构造推理容易的定义。对于自然数,推理的基本形式是归纳法,这使得传统的零或后继定义非常适合。其他数字集没有这样的偏好。

在非构造条件下进行商数推理时,通常说“选择等价类的成员”。在建设性环境中,有必要描述如何挑选成员。这样就更容易使用为每个类型的成员构造一个对象的定义,而不是构造等效类。

例如,要定义,数学家可能会乐于等价于自然数的差异: 尽管它有一个整洁的感觉(没有“ this or that”),但是对于构造性的推理,如果对象相等与表示相等就更简单,因此我们可以将相对整数定义为自然数或自然数的负数减去1:ž= Ñ 2 / { X Ý X 'ÿ '| X + Ŷ ' = X ' + ÿ }Z

Z:=N2/{((x,y),(x,y))x+y=x+y}
Inductive Z1 :=
  | Nonnegative : nat -> Z1   (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
  | Negative : nat -> Z1.     (* ⟦Negative x⟧ = -⟦x⟧-1 *)

但是,此定义奇怪地是不对称的,这可能使得最好接受两个不同的表示形式为零:

Inductive Z2 :=
  | Nonnegative : nat -> Z2   (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
  | Nonpositive : nat -> Z2.  (* ⟦Nonpostitive x⟧ = -⟦x⟧ *)

或者我们可以构建相对整数而不使用自然数作为构建块:

Inductive Pos3 :=
  | I : Pos3                  (* ⟦I⟧ = 1 *)
  | S3 : Pos3 -> Pos3         (* ⟦S3 x⟧ = ⟦x⟧+1 *)
Inductive Z3 :=
  | N3 : Pos3 -> Z3           (* ⟦N3 x⟧ = -⟦x⟧ *)
  | O3 : Z3                   (* ⟦O3⟧ = 0 *)
  | P3 : Pos3 -> Z3           (* ⟦P3 x⟧ = ⟦x⟧ *)

的Coq的标准库的用途又一定义:它构造正整数从它们的符号是基体2,作为随后的数字0或1的序列然后它构造数字1 ZZ3Pos3上方。此定义还具有每个整数的唯一表示形式。使用二进制表示法的选择不是为了简化推理,而是在从证明中提取程序时产生更有效的代码。

易于推理是选择定义的动机,但它绝不是不可逾越的因素。如果某种构造使特定证明更容易,则可以在该特定证明中使用该定义,并证明该构造与最初选择为定义的另一种构造等效。

对于有理数,很难逃脱商数,除非我们从整数作为因子乘积的表示开始(这使得一些基本运算,例如加法和的总排序难以定义)。Coq标准库定义为(分子和分母),并定义了一个运算符来测试的两个元素的等效性。这个定义很普遍,因为它很简单。N × N *NQN×N=?=Q

实数是完全不同的鱼,因为它们是不可构造的。将实数定义为归纳类型是不可能的(所有归纳类型都是可数的)。相反,实数的任何定义都必须是公理的,即非建设性的。可以构造实数的无数子集。这样做的方式取决于您要构造的子集。


1
可计算的实数似乎是最合理的候选人,作为实数的多数用途是绑在某种方式他们一贯的排序。
dfeuer

5
“可构造的”是什么意思?我只知道“可构造集合”的“集合理论”,但这就是您的意思。同样,尽管实数是完全不同的鱼,但“实数的任何定义都必须是公理的,即非建设性的”并不是事实。在同伦类型理论中,对实物有更高的归纳-归纳定义。
安德烈·鲍尔

15

吉尔斯答案是一个好答案,除了实数部分的段落完全是错误的,除了实数确实是不同的鱼。由于这种错误信息似乎非常普遍,因此我想在这里记录详细的反驳。

并非所有归纳类型都是可数的。例如感应式

Inductive cow := 
   | nose : cow
   | horn : (nat -> cow) -> cow.

是不可计数的,对于给定的任何序列,c : nat -> cow我们可能形成horn c的序列由于牛的有充分根据而不在序列中。如果要以“所有归纳类型都是可数”的形式正确声明,则必须严格限制允许的构造。

实数不能轻易地构造为归纳类型,除非在同伦类型理论中可以将它们构造为更高的归纳-归纳类型,请参阅HoTT书的第11章。可以说这是作弊。

与Gilles的说法相反,有许多关于实在的构造定义和构造。它们可以大致分为两类:

  1. 柯西型构造,其中实数被视为有理数的度量完成。这种构造通常需要商,尽管一个人可能可以摆脱一个词组式的定义,这取决于人如何对待平等。幼稚的构造通常也需要数不清的选择,但弗雷德·里奇曼(Fred Richman)给出了一个完成程序,该程序无需进行选择即可进行建设性的工作,请参见其实数和其他完成

  2. λΣ

在实现方面,我们对实数进行了各种构造性形式化(但Coq标准库中没有那么糟糕的形式化形式),例如Robq Krebbers和Bas Spitters的Computer认证了Coq中的有效确实数

对于实际执行的具体实数我点你诺伯特·穆勒的iRRAM

NN


您大概可以在Coq中公理实际封闭域的理论...
别名

是的,您可以做到,西里尔·科恩(Cyril Cohen)做到了,请参阅hal.inria.fr/hal-00671809v1/document。你的观点是什么?
Andrej Bauer 2015年

1
我没有意思,这只是一个假设。
别名
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.