整数ではなく自然なのはなぜですか?


28

自然言語がプログラミング言語の理論と型理論に関する本の著者に愛されている理由に興味があります(たとえば、J。Mitchell、プログラミング言語の基礎、B。Pierce、型とプログラミング言語)。単純に型付けされたラムダ計算、特にPCFプログラミング言語の記述は、通常、NatとBoolに基づいています。汎用の工業用PLを使用および指導している人々にとって、自然の代わりに整数を扱う方がはるかに自然です。PL理論家がnatを好む理由をいくつか挙げてください。それに加えて、少し複雑ではありません。基本的な理由はありますか、それとも伝統を称えるだけですか?

UPDナチュラルの「ファンダメンタリティ」に関するすべてのコメントについて:私はそれらのすべてのクールなものについてはかなり知っていますが、PLの理論の型理論でそれらの特性を持つことが本当に重要な場合、例を見てみたいです。例えば、広く言及された誘導。基本的な1次論理のように、任意の種類の論理(単純にLCと入力)がある場合、誘導を使用しますが、派生ツリー(ラムダにもあります)の誘導を使用します。

私の質問は基本的に、プログラミング言語の基本的な理論を獲得したい業界の人々から来ています。彼らはプログラムに整数を持ち、研究されている理論(私たちの場合は型理論)への具体的な議論と応用なしに、なぜnatだけで言語を研究するのか、彼らは全くがっかりしています。


これは研究レベルの質問ではありませんが、興味深い質問です。
ラファエル

4
そうではありませんが、それは一種の大局的な質問であり、私たちはそれを受け入れます。
Suresh Venkat

1
後者には存在しない0値の一意の特性により、何らかの方法で非負整数のセットが自然数よりもさらに基本的であるのではないかと思っています。また、私は、これが0の重要性を与えられたデジタルコンピュータの基本的な数値型の選択肢として、より有効であることを示唆している
リチャード・クック

あなたのUPDがわかりません。ナチュラルは整数よりも基本的であり、答えはなぜそうなのかの例を示しています。
ラドゥグリゴー

日時:UPD。「産業界の人々」が「失望する」理由はよくわかりません。(私は自分の業界で自分のキャリアを過ごしてきました。)なぜ誰もが、その理論がすでに慣れ親しんでいるものの明らかな拡張であると期待する必要があるのでしょうか?整数変数によく似た、業界で一般的な特定のものが、深い理論的な理由よりも「歴史的な理由」により多く存在することは非常に一般的です。
マークハーマン

回答:


24

簡単な答え:ナチュラルは最初の制限の序数です。したがって、彼らは公理集合論(例えば、無限の公理は存在する主張である)と論理の中心的な役割を果たし、PL理論家は論理学者と基本的な先入観を共有する傾向がある。帰納法の原理にアクセスして、完全な正確性、終了、および同様の特性を証明したいと考えています。自然は、適切な順序の(より)自然な選択です。

ただし、有限幅の2進整数がそれほどクールではないオブジェクトであることを暗示したくはありません。それらはp進法の表現であり、数論と組み合わせ論でべき級数法を使用することができます。これは、PLよりもアルゴリズムの方がその重要性がより明確になることを意味します。これは、終了よりも複雑さを重視するときだからです。


20

ナチュラルは、整数よりもはるかに基本的な概念です。

帰納法は自然に対して行われ、整数は単項逆演算子を単純に追加するだけで自然から導出できます。

私は実際に逆の質問をしたいと思います:初期のプログラミング言語(およびマシンの登録)デザイナーは、整数が非常に二次的であり、自然から簡単に派生しているときに、なぜ基本データ型として崇拝するのですか?

整数をエレガントに処理できるクールなバイナリエンコーディングがあったからだと思います。;-)

プログラマチック整数の負の範囲を無視したい頻度を考え、失われたビットを回復するためにインパルスに符号なし整数型があると考えてください。


5
別の理由:教会の数字のようなものが必要な場合、負の整数は関数の反転を示す必要があります。そのため、そのコンテキストでは、計算可能な全単射関数の計算では整数がより自然になります。
ヴォーグセンごと10

@パーヴォグンセン:あなたがそこに主張している方法がわからない。しかし、ほとんどの場合、計算可能な全単射関数は、任意の計算可能な関数よりも基本的ではないと言っても安全だと思います。;-)
マークハーマン

数値階層の最上位にある複素数は自然数->整数->有理数->実数->複素数が「より良い」代数的性質を持っているため、他のものより基本的であることは疑いありません。それらは科学のいたるところにありますが、数学の「基礎」には顕著に欠けています。したがって、より「基本的な」整数または自然なものに対する答えは、あなたが尋ねる人に本当に依存します:アルゴリズム主義者または代数論者。
手切ねなし

これはTCSサイトであるため、コンピューターサイエンスの観点を活用することは安全だと思います。;-)計算上、その階層はプログレッシブです。新しいエントリはそれぞれ文字通り前のエントリの上に構築されます。「基本的」とは通常、基盤にあるものを指すので、自然な終わりがそのタイトルを授与するのにふさわしいと思います。
マークハーマン


11

さらにもう1つの理由(すでに与えられたものに関連しているが、この答えは新しい情報を追加する)は、自然の非常に単純で商のない構成があり、それが素敵な帰納法の原理とともに来ることである。拡張されていないのは、商のない整数の構築を考えるのがどれほど難しいかです。

高度な保証が必要な場所でプログラミングを行うほど、自然が必要になります。また、整数のみを事前に定義しておくことは非常に苦痛です。


自然の基本的なタイプを持つ言語があります。
ラファエル

@ラファエル:わかった。しかし、私が好きなもの(つまりHaskellとOCaml)ではありません。AgdaまたはCoqで「プログラミング」を開始する準備ができていません。
ジャックキャレット

商の何がそんなに悪いのですか?
デビッドハリス

3
商はセマンティクスに優れています。これらは、実際の計算や具体的な表現で扱うのがはるかに困難です。Coq、Isabelle、Agda(一般的な型理論)などには、それらに対処する方法に関する無数の論文があります。
ジャックキャレット

2
これが束の最強の答えだと思います:Naturalsは最も単純な非自明な帰納的データ型です。定義を与え、自然数の単純なプロパティを証明したら、リストやツリーなど、より複雑な帰納的データ型への道を開きました。
コーディ

7

PL理論家が整数ではなく自然を好む理由はありますか?いくつかありますが、プログラミング言語のセマンティクスに関する教科書には、必要な技術的理由はないと思います。PL理論でデータの帰納が重要な依存型システム以外の場所は考えられません。Mike GordonDavid SchmidtBob TennentJohn Reynoldsによる他の教科書はそれをしません。(そして、それらの本は、おそらく汎用産業PLを気にする人々を教えるのにはるかに適しているでしょう!)

だから、あなたはそれが必要ではないという証拠を持っています。実際、優れたPL理論の教科書は、プログラミング言語の原始的なタイプではパラメトリックである必要があると主張するでしょう。


6

Naturalsとboolsおよびそれらに対する操作は、いわゆるチャーチ数字(およびチャーチbools)として、単純な方法で純粋なラムダ計算でエンコードできます。整数をうまくエンコードする方法は明らかではありませんが、明らかにできます。


まず、型付きラムダ計算を意味しました。私が一番上の投稿で言及した本のコースはそれに基づいています。型付けされていないラムダは、最近の型理論やPLの理論ではそれほど重要ではないと思います(私は間違っているかもしれませんが、それはそれらの本で見られるものです)。とにかくありがとうございました!
アルテムペレニツィン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.