Lambda Cubeの他のポイントからどのように構築の計算を取得しますか?


21

CoCは、ラムダキューブの3つの次元すべての集大成と言われています。これは私にはまったく明らかではありません。私は個々の次元を理解していると思いますし、任意の2つの組み合わせは比較的単純な結合をもたらすようです(おそらく何かが足りないのでしょうか?)。しかし、CoCを見ると、3つすべての組み合わせのように見えるのではなく、まったく異なるもののように見えます。タイプ、プロップ、スモール/ラージタイプはどの次元からのものですか?依存製品はどこに消えましたか?そして、なぜ型とプログラムではなく命題と証明に焦点が当てられているのですか?型とプログラムに焦点を合わせた同等のものはありますか?

編集:明確でない場合、CoCがどのようにLambda Cubeディメンションの単純な結合と同等であるかの説明を求めています。そして、私が研究できるどこかで3つすべての実際の結合がありますか(つまり、証明と命題ではなくプログラムとタイプの面で)?これは、質問に対するコメントに対するものであり、現在の回答に対するものではありません。


1
少なくともこれはでなければなりませんsoft-question。ここには実際に技術的な質問はありません。おそらく、あなたが求めていることに関してもう少し具体的になることができますか?
アンドレイバウアー

3
@AndrejBauer質問ではありません:CoCのBarendregt-cube / PTSプレゼンテーションとCoquand&Huetによる元のプレゼンテーションの関係は何ですか?
マーティンバーガー

1
@AndrejBauer:この質問は、CoCの表示の違い(どちらかというと)と、実際の特定の機能の強調についても尋ねているようです。CoCの実践が他の機能を強調する一方で、CoCのPTS指向のバージョンがいくつかの機能を重要であると強調しているのは事実です。私は、ソフト質問タグを持たなければならないことに同意します。
ジャックカレット

1
誰かがこれに答えることができるのを見てうれしいです。
アンドレイバウアー

回答:


28

まず、codyのポイントの1つを繰り返すと、帰納的構築の計算(Coqのカーネルの基になっている)は構築の計算とは大きく異なります。これは、ユニバースを使用したMartin-Löf型理論から開始し、型階層の下部にソートプロップを追加することとして最もよく考えられています。これは、F-オメガの依存バージョンとして最もよく考えられている元のCoCとは非常に異なる獣です。(たとえば、CiCには集合理論モデルがありますが、CoCにはありません。)

とはいえ、ラムダキューブ(CoCがメンバーになっている)は、通常、型付け規則の数が少ないという理由で、純粋な型システムとして提示されます。ソート、タイプ、および用語を同じ構文カテゴリーの要素として扱うことにより、はるかに少ないルールを書き留めることができ、証明の冗長性もかなり少なくなります。

ただし、理解するために、さまざまなカテゴリを明示的に区別すると役立つ場合があります。3つの構文カテゴリ、種類(メタ変数で範囲k)、タイプ(メタ変数で範囲A)、および用語(メタ変数で範囲)を導入できeます。そうすると、8つのシステムすべてが、3つのレベルのそれぞれで許可されるもののバリエーションとして理解できます。

λ→(単純型付きラムダ計算)

 k ::= ∗
 A ::= p | A → B
 e ::= x | λx:A.e | e e

これは、基本的な型付きラムダ計算です。型の種類であるkindが1つあります。型自体は原子型pと関数型A → Bです。用語は、変数、抽象概念、またはアプリケーションです。

λω_(STLC +高次型演算子)

 k ::= ∗ | k → k
 A ::= a | p | A → B | λa:k.A | A B
 e ::= x | λx:A.e | e e

STLCは、用語レベルでの抽象化のみを許可します。型のレベルで追加する場合k → kは、型レベルの関数の型である新しい種類を追加し、型レベルでも抽象化λa:k.Aとアプリケーションを追加A Bします。したがって、ポリモーフィズムはありませんが、型演算子はあります。

メモリが機能する場合、このシステムにはSTLCよりも高い計算能力はありません。型を短縮する機能を提供するだけです。

λ2(システムF)

 k ::= ∗
 A ::= a | p | A → B  | ∀a:k. A 
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

型演算子を追加する代わりに、ポリモーフィズムを追加することもできます。型レベル∀a:k. Aでは、ポリモーフィック型フォーマーであるものを追加し、用語レベルでは、型Λa:k. eと型applicationの抽象化を追加しますe [A]

このシステムはSTLCよりもはるかに強力であり、2次演算と同じくらい強力です。

λω(システムFオメガ)

 k ::= ∗ | k → k 
 A ::= a | p | A → B  | ∀a:k. A | λa:k.A | A B
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

型演算子とポリモーフィズムの両方がある場合、F-オメガが得られます。このシステムは、ほとんどの最新の関数型言語(MLやHaskellなど)のカーネル型理論です。また、System Fよりもはるかに強力であり、強度が高次の算術演算と同等です。

λP(LF)

 k ::= ∗ | Πx:A. k 
 A ::= a | p | Πx:A. B | Λx:A.B | A [e]
 e ::= x | λx:A.e | e e

多態性の代わりに、単純に型付けされたラムダ計算から依存関係の方向に進むこともできました。関数の型が引数を戻り値の型で使用することを許可した場合(つまり、のΠx:A. B(x)代わりに書き込むA → B)、λPを取得します。これを本当に役立つものにするΠx:A. kためには、引数として用語を受け取る種類の演算子で種類のセットを拡張する必要があります。そのため、対応する抽象化Λx:A.BとアプリケーションA [e]を型レベルでも追加する必要があります。

このシステムは、LF、またはエジンバラ論理フレームワークと呼ばれることもあります。

単純に型付けされたラムダ計算と同じ計算強度を持ちます。

λP2(特別な名前なし)

 k ::= ∗ | Πx:A. k 
 A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e]
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

λP2を取得するために、ポリモーフィズムをλPに追加することもできます。このシステムはあまり使用されないため、特定の名前はありません。(私がそれを使ったある論文は、ハーマン・ゲーバーの帰納法は二次依存型理論では導出できない。)

このシステムには、システムFと同じ強度があります。

λPω_(特別な名前なし)

 k ::= ∗ | Πx:A. k | Πa:k. k'
 A ::= a | p | Πx:A. B | Λx:A.B | A [e] | λa:k.A | A B 
 e ::= x | λx:A.e | e e 

型演算子をλPに追加して、λPω_を取得することもできます。これにはΠa:k. k'、型演算子の種類の追加、および対応する型レベルの抽象化Λx:A.Bとアプリケーションが含まれますA [e]

また、STLCに比べて計算の強度が急増することはないため、このシステムは論理フレームワークの基礎にもなりますが、誰もそれを行っていません。

λPω(構造の計算)

 k ::= ∗ | Πx:A. k | Πa:k. k'
 A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e] | λa:k.A | A B 
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

最後に、λPω_を取得し、多相型のフォーマー∀a:k.Aと用語レベルの抽象化Λa:k. eとそのアプリケーションe [A]を追加することにより、構築の計算であるλPωを取得します。

このシステムのタイプは、F-オメガよりもはるかに表現力豊かですが、同じ計算強度を持っています。


3
01

2
λω_

3
@cody:私は参考文献を知りません-ケビン・ワトキンスは私のために証拠をホワイトボードにスケッチしました!アイデアは、λω_でタイプされた用語を使用し、すべてのタイプをベータ正規イータロング形式に入れてから、元のプログラムの個別の正規形ごとに新しいアトミックタイプを導入することでSTLCに埋め込みます。次に、削減シーケンスが1対1で並ばなければならないことは明らかです。
ニールクリシュナ

1
01nat

1
FwはSystem Fよりも「非常に強力」だと言いますが、これについての参考資料はありますか?特に、自然数には、Fwでは証明できるがFでは証明できない関数がありますか?
アルテンキルヒ

21

λ

しかし、最初に、おそらくさまざまな問題を解き明かそうとする必要があります。Coqの対話型定理証明器は、基礎となる型理論に基づいており、時には愛を込めて宇宙を伴う帰納的構成の計算と呼ばれます。これは、単に「計算の計算」というよりも口いっぱいのものであり、実際、CoCだけでなく他にも多くのものがあります。特に、どの機能がCoC固有であるかについて正確に混乱していると思います。特に、Set / Propの区別とユニバースはCoCには表示されません。

ここではPure Type Systemsの完全な概要を説明しませんが、重要なルール(CoCのような機能的PTSの場合)は次のとおりです。

ΓA:sΓ,x:AB:kΓΠx:A.B : k (s,k)R

s,kS(s,k)RS

SRΠx:A.B

S

{,}
R={(,),(,),(,),(,)}

したがって、4つの異なる目的に対応する4つのルールがあります。

  • (,)

  • (,)

  • (,)

  • (,)

これらのそれぞれについて詳しく説明します。


ABΠx:A.BxB

natboolx=yxy

タイプファミリー:これはあなたに家族について話す能力を与えますlistlist:listnat,listbool(,)

Πt:. tt
λ(t:)(x:t).xΠt:._(,)tt(,)

AB:=Πt:. (ABt)t
AB:=Πt:. (At)(Bt)t
:=Πt:. t
:=Πt:. tt
x:A. P(x):=Πt:. (Πy:A. P(y)t)t
(,)

(,)

(,)

Πc:.  c natc nat

依存型:これは、型として命題パラダイムを機能させる方法です。実際、すべての可能な証明を表す型が必要です。0=1

= : natnat
= : Πt:. tt
natnat(,)

わかりましたが、宇宙はどうですか?CoCでは、実際に次のようなことを書くことができないことがわかります ii=1,2,3,i:i+1

(i,i)

ΓA:iΓA:j ij

これらの余分なソートやルールを使用すると、何かを取得しませ PTS、何かの近くに。これは、(ほぼ)拡張構造計算法であり、Coqの基底に近いものです。ここでの大きな欠落部分は誘導型であり、ここでは説明しません。

編集:機能的なプログラミング言語の中間表現の良い候補であるPTSを記述することにより、PTSのフレームワークにおけるプログラミング言語のさまざまな機能を記述するかなり良いリファレンスがあります:

Henk:型付き中間言語、SPジョーンズ&E.メイジャー。


2
高度なトピックタイプではと言語、プログラミングS2.6S2.7を
カヴェー

2
ところで「タイプファミリ」は、多くの場合、より高い種類のタイプとも呼ばれます。
マーティンバーガー

1
PTSは20年前には良いアイデアでしたが、その後も状況は変化しています。
トルステンアルテンキルヒ

@ThorstenAltenkirch排他主義の必要はありません、Thorsten!PTSを使用することを検討するいくつかの楽しいものがまだあります。たとえば、内部化されたパラメトリック性に関するBernardyの研究が思い浮かびます。
コディ

@cody排他主義は意図していませんが、構文型理論の過去にこだわるべきではありません。Bernardiの仕事は優れており、ユニバースを使用することでより良く行うことができます。
トーステン・アルテンキルヒ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.