コロンが値が型に属していることを示すのはなぜですか?


19

Pierce(2002)は、次のように記述して、92ページのタイピング関係を紹介しています

「t:T」と書かれた算術式の型付け関係は、用語を型に割り当てる推論規則のセットによって定義されます

脚注には、「:」の代わりに記号「がよく使用されます。私の質問は、単に型理論家が:を使用することを好む理由です。型が値のセットである場合、を記述することは完全に理にかなっています。新しい表記は必要ありません。TtT

これは、一部のcsライターが好み、表記法の乱用であり、と書くべきだと思っているのと似ていますか?3n2=O(n2)3n2O(n2)


7
会員述語 タイピングのに対し、trueまたはfalseをすることができ宣言、一般的にされた事実上の文としてinterepretedされる宣言真であるとか、それの真実をすることによって導出することができ、純粋に構文的な手段。これを素数であるのとは対照的に、メンバーシップの構文的方法では十分ではありません。xX x:X
ムーサアルハシー

4
@ MusaAl-hassy:それは何が起こっているかを不正確に表しています。それは、たとえば「:」を「宣言」できることを意味するため、真であると宣言されていません。また、たとえば、家族を含むカテゴリーの内部型理論の場合、「純粋に構文的な手段」によって判断を導き出さなければならない場合もありません。falseint
アンドレイバウアー


2
@ MusaAl-hassyのコメントに追加するために、ボブ・コンスタブル、スチュアート・アレン、ボブ・ハーパーなどの計算型理論では、はメンバーシップ述語に似ているため、判定の入力に日常的に使用されます(この講演、スライド25、例)。
xrq

3
確かまた、表記の乱用であり、実際に書き込むべきλ N .3 N 2O λ N N 2?(数学を好むかもしれないN 3 N 2O N N 23n2O(n2)λn.3n2O(λn.n2)n3n2O(nn2)
オスカーカニンガム

回答:


12

コロンの右側にあるものは必ずしもセットではなく、コロンの左側にあるものは必ずしもそのセットのメンバーではないためです。

型理論は、数学の基礎へのアプローチとして20世紀初頭に始まりました。バートランド・ラッセルは、素朴な集合論にパラドックスを発見し、集合論の表現力を制限してこの(および他の)パラドックスを回避する方法として型理論に取り組んだ。長年にわたり、ラッセルなどは多くのタイプの理論を定義してきました。型の一部の理論では、型は特定のプロパティを持つセットですが、他の種類では、別の種類の獣です。

特に、型の多くの理論には構文定式化があります。ものに型を持たせるルールがあります。タイピングルールが理論の基礎として使用される場合、追加の外部知識を適用することにより、タイピングルールが何を言おうとしているかを推測することが重要です。これは、タイピングルールが証明理論の基礎である場合に特に重要です。たとえば、古典的な論理と選択の公理を含む集合論に基づいた定理は、建設的な論理に当てはまる場合とそうでない場合があります。この領域の独創的な論文の1つは、教会タイプの単純理論の定式化(1940)です。

おそらく、型とセットの区別が最も明白な方法は、セットの最も基本的なルール、つまり2つのセットが同じ要素を持っている場合に等しいということです。通常、タイプには適用されません。ここにあるAndrej Bauerの回答、関連する質問に対するいくつかの例の回答を参照してください。その2番目のスレッドには、読む価値のある他の回答があります。

型付き計算では、型がセットであると言うことは、実際に型にセマンティクスを与えることです。微積分に型理論的なセマンティクスを与えることは簡単ではありません。たとえば、関数を使用して言語を定義するとします。関数のタイプはどのようなセットですか?集合理論101で教えられているように、全関数はグラフによって決定されます。しかし、部分関数はどうでしょうか。すべての非終了関数に同じセマンティクスを与えたいですか?その質問に答えるまで、再帰関数を許可する計算のセットとして型を解釈することはできません。プログラミング言語または計算に表示的なセマンティクスを与えることは、1970年代初頭の難しい問題でした。ここでの独創的な論文は、コンピューター言語(1971)の数学的なセマンティクスに向けダナスコットクリストファーストラチーHaskellのwikibookは、トピックの良いプレゼンテーションを持っています。

上記で書いたように、答えの2番目の部分は、型に集合論的なセマンティクスを与えたとしても、コロンの左側にあるものが常に集合の要素ではないということです。値には型がありますが、式や変数などの他の要素にも型があります。たとえば、型付きプログラミング言語の式には、終了しなくても型があります。あなたは融合する意思であるかもしれないintegerZが、(x := 0; while true; do x := x + 1; x)の要素ではないZ

型のコロン表記がいつ発生したかはわかりません。現在はセマンティクスの標準であり、プログラミング言語では一般的ですが、ラッセルもチャーチも使用していません。アルゴルはそれを使用しませんでしたが、非常にアルゴルに触発されたパスカルは1971年に使用しました。しかし、1970年代初期の理論論文の多くはこの表記法を使用しているため、以前の使用。興味深いことに、これはプログラミングとロジックの型の概念が統一された直後です。SimonMartiniが「プログラミング言語の型のいくつかの型」で示しているように、1960年代までのプログラミング言語の「型」は、型理論からではなく、単語の使用。


37

コロン表記好む主な理由t:T会員関係にtTあるため、メンバーシップ関係は誤解を招くことができるということです種類は(単に)のコレクションではありません

[ 補足:歴史的に型理論を使用して書かれたことに注意する必要があります。タイプのマーティン・LOFの概念は、建設セットをキャプチャすることを意図し、すでにラッセルとホワイトヘッドを使用したϵクラスmemebrshipのために。:より一般的になった瞬間を追跡することは興味深いでしょう。]

タイプは、特定の種類の構造、つまり、特定の構造を持つオブジェクトの作成方法、それらの使用方法、およびそれらについて保持される方程式を記述します。

たとえば、製品タイプA×Bは、順序付きペアの作成方法を説明する導入ルールと、A×B任意の要素から1番目と2番目のコンポーネントを投影できることを説明する排除ルールがあります。定義A×Bないではない言葉「すべてのコレクション...」で始まりませんし、どちらもそれは「のすべての要素のようなどこにでも何でも言うんA×B(ペアで、」しかし、それは、以下のすべての要素という定義からA×B命題的ペアに等しい)。constrastでは、一連の理論的な定義X×Y され、「すべての順序対の集合...」と述べました。

表記法t:Tは、tTによって記述された構造を持っているという事実を意味します。

タイプTは、その拡張子(タイプTすべてのオブジェクトのコレクション)と混同しないでください。型はされていないグループは、そのキャリアのセットによって決定されていない同じように、その拡張子によって決定されます。さらに、次のように、2つのタイプの拡張子が同じでも異なる場合があります。

  1. 2より大きいすべての偶数素数の型:Σ(n:N).isprime(n)×iseven(n)×(n>2)
  2. 2より小さいすべての奇数素数のタイプ:Σ(n:N).isprime(n)×isodd(n)×(n<2)

両方の拡張子は空ですが、同じタイプではありません。

型理論的な:と集合理論的なはさらに違いがあります。集合論のオブジェクトa、それが属する集合とは無関係に存在し、複数の集合に属する場合があります。対照的に、ほとんどのタイプの理論はタイピングの一意満たす場合t:Tおよびt:U次いでTU。または、別の言い方をすれば、型理論構築tは正確に1つの型Tがあり、実際には(一意に決定された)型のないオブジェクトtだけを作成する方法はありません。

もう一つの違いは、集合論に我々ができることです否定する事実をそのA書き込みによって¬ A またはAt Tは型理論の規則を使用して導出できる判断であるため、これは型理論では不可能ですが、型理論には何かが導出されていないことを示すことはできません。子供がLEGOブロックから何かを作ると、彼らは誇らしげに両親に駆けつけて建設を見せますが、彼らは両親に走って彼らが作ったものを見せません。aA¬(aA)aAt:T


1
アンドレイ、素晴らしい答え。コロン表記の歴史的な起源を知っていますか?
アンドレアスロスバーグ

悲しいかな、私はしません。教会の型理論は添字、すなわち、使用型の変数のためのα。ラッセルとホワイトヘッドは、クラスへの帰属関係にϵを使用しました。Algol 68は、変数名の前に型を置きます。1972マーティン・LOF型理論の用途、そしてそうする1984年版は、しかし、[1994年版]はコロンを使用しています。xααϵ
アンドレイバウアー

1
あなたの議論は、型はグループのようなものだということですか?つまり、理にかなっているが、表記抽象代数学で一般的です。gG
ビョルン・リンドクヴィスト

2
@BjörnLindqvist:この答えがすべてではないと思います。標準数学でも「」を使用して、fSからTまでの関数であることを示します。なぜ我々は「使用しなかったF S T 」またはそのような何かを?まあ、私たちはしませんでした。もちろん、特定の種類の型理論のプレゼンテーションで " "の使用を避ける正当な理由があります。ZFCの指導を受けた人々にZFCセットのようなものだと思わせたくないからです。場合。しかし、それはコロンがない持っていることを意味するものではありませんすでにf:STfSTf(ST)型理論が普及するずっと前から広く使われていました。
user21820

1
@ user21820 "なぜ私たちが使用していませんでした?" 数学者はS Tを集合とは考えなかったからです。この表記法の歴史については、こちらをご覧くださいf S Tのコロンが型理論家のインスピレーションだったとは思えません。より可能性の高い型理論家のコロンは、εがASCII文字ではないという事実に関係しています。f(ST)STf:ST
マイケル

5

ビョルン、

おそらく以前のリファレンスがありますが、1つには、コロンがPascalプログラミング言語で使用されていました。

Pascalの最初のGoogleヒット


2
以前に使用したプログラミング言語はありませんでした:か?
アンドレイバウアー

@AndrejBauer確かに、私は「おそらく以前の参照がありますが...」と書いて、その可能性のある事実を防止しました。
ビョルンジョスハンセン

@AndrejBauer Algolはしませんでした。された:1970年代の前に理論の論文で使用されますか?
ジル「SO-悪であるのをやめ

1
FortranにはありますREAL :: xが、これがPascalよりも前かどうかはわかりません。
マイケル

1
@Michael FortranはPascalよりも前(1955年頃と1970年頃)でしたが、この特定の構文はFortran 90でしか導入されていなかったため、Pascalよりもずっと遅れていました。例はこちらをご覧くださいfortranwiki.org/fortran/show/Modernizing+Old+Fortran
Federico
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.