整数、有理数、実数の標準的な建設的な定義は?


10

自然数は帰納的に次のように定義されます(例としてCoq構文を使用)

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

整数(およびおそらく有理数や実数などの他のセット)を建設的に定義する標準的な方法はありますか?


1
建設的な定義とは何ですか?
Trismegistos 2015年

回答:


11

数学的構造を定義するには、定義と見なすプロパティに応じて、複数の方法があります。同等の特性評価の間で、どれを定義とするか、どれを代替特性とするかは重要ではありません。

建設的な数学では、建設的な推論を容易にする定義を選ぶことが望ましい。自然数の場合、推論の基本的な形式は帰納法です。これにより、従来のゼロまたは後続の定義が非常に適切になります。他の数のセットには、そのような設定はありません。

非建設的な状況で商を推論するとき、「同値類のメンバーを選びなさい」と言うのが一般的です。建設的な設定では、メンバーの選び方を説明する必要があります。これにより、等価クラスを構築するよりも、型の各メンバーに対して1つのオブジェクトを構築する定義を簡単に使用できます。

たとえば、を定義するために、数学者は自然数の差の同等化に満足している可能性があります 。Z= N 2 / { x y x y x + y = x + y }Z

Z:=N2/{バツyバツy|バツ+y=バツ+y}
これは整然とした感じ(「これまたはそれ」ではありません)ですが、建設的な推論のために、オブジェクトの等価性が表現の等価性と一致する場合はより単純なので、相対整数を自然数または自然数-1:
Inductive Z1 :=
  | Nonnegative : nat -> Z1   (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
  | Negative : nat -> Z1.     (* ⟦Negative x⟧ = -⟦x⟧-1 *)

ただし、この定義は奇妙に非対称であり、2つの異なる表現をゼロとして認めることが望ましい場合があります。

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標準ライブラリはさらに別の定義を使用します。これは、表記1の後に正の整数を作成します。これは、数字1の後に一連の数字0または1が続くためです。その後、上記のZように作成さZ3Pos3ます。この定義には、整数ごとに一意の表現もあります。バイナリ表記の使用の選択は、推論を容易にするためではなく、プログラムが証明から抽出されるときにより効率的なコードを生成するためです。

推論のしやすさは、定義を選択する動機ですが、決して克服できない要因ではありません。ある構造が特定の証明をより簡単にする場合、その特定の証明でその定義を使用し、その構造が最初に定義として選択された他の構造と同等であることを証明できます。

NQN×N=?=Q

実数は構築できないため、まったく異なる魚のやかんです。実数を帰納型として定義することは不可能です(すべての帰納型は列挙可能です)。代わりに、実数の定義は公理的、すなわち非建設的でなければなりません。実数の列挙可能なサブセットを構築することが可能です。その方法は、構築するサブセットによって異なります。


1
計算可能実数は実数のほとんどの用途は、何らかの形で彼らの通常の順序に結びついているとして、最も合理的な候補であると思われます。
dfeuer 2015年

5
「構築可能」とはどういう意味ですか?私が知っているのは、「構成可能なセット」のアラセット理論だけですが、それが今の意味です。また、実数がまったく別の魚のやかんである場合もありますが、「実数の定義は公理的、つまり非建設的でなければならない」というのは真実ではありません。そして、ホモトピー型理論では、実数のより高い帰納的帰納的定義があります。
Andrej Bauer

14

実数が実際に別の魚のやかんであるという事実を除いて、実数に関する段落を除いて、ジルは正解です。この種の誤った情報はかなり広まっているようですので、ここでは詳細な反論を記録したいと思います。

すべての帰納的な型が列挙可能であることは真実ではありません。たとえば、誘導型

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

牛の十分な根拠によってシーケンスにないc : nat -> cow私たちが形成horn cする可能性のある任意のシーケンスを考えると、は列挙可能ではありません。「すべての帰納的型は可算である」という形式の正しい記述が必要な場合は、許可される構文を厳しく制限する必要があります。

ホモトピー型理論では、より高い誘導-誘導型として構築できることを除いて、実数は誘導型として簡単に構築できません。HoTTブックの第11章を参照してください。これは不正行為であると主張することができます。

ジルの主張に反して、現実には建設的な定義や構造がいくつかあります。それらは大きく2つのクラスに分類できます。

  1. 実数が有理数のメトリック完了として見られるコーシー型の構文。この種の構成では、商を必要とすることがよくありますが、平等をどのように扱うかに依存して、協調的定義でうまくいく場合もあります。素朴な構造は通常、数え切れないほどの選択肢も必要ですが、フレッド・リッチマンは選択なしで建設的に機能する完了手順を提供しました。彼の実数およびその他の完了を参照してください。

  2. λΣ

実装側では、実数のさまざまな構造化された形式化があります(ただし、Coq標準ライブラリにあるものはひどいものではありません)。たとえば、Robbert KrebbersやBas Spitters's Computerは、Coqで効率的な正確な実数を認定しています

正確な実数の実際の実装については、NorbertMülleriRRAMを紹介します。

NN


おそらく、Coqの実際の閉じた場の理論を公理化することができます...
仮名

はい、できます。CyrilCohenがそれを行いました。hal.inria.fr/ hal-00671809v1 / documentを参照してください。あなたの論点は何ですか?
Andrej Bauer

ポイントはありません、それは単なる推定でした。
仮名2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.