数理論理学および理論計算機科学において、型理論とは、式や数学的対象をその型によって分類する形式体系の研究である。大まかに言えば、型はプログラミングにおけるデータ型と同様の役割を果たす。つまり、式がどのような種類のものであり、どのように使用できるかを指定する。型理論は、プログラミング言語(型体系)、形式論理、および数学の形式化の研究に用いられる。
数学の基礎として集合論に代わるものとして、いくつかの型理論が提案されてきた。例としては、アロンゾ・チャーチの単純型理論や、ペル・マルティン=レーフの直観主義型理論などが挙げられる。
多くの証明支援システムは型理論に基づいている。例えば、Rocq(旧Coq)の基盤となる形式言語は帰納的構成の計算であり、Leanは依存型理論に基づいている。
型理論は、素朴集合論や形式論理におけるパラドックス、例えばラッセルのパラドックスなどを回避するために考案されました。ラッセルのパラドックスとは、適切な公理がない場合、自分自身の要素ではないすべての集合の集合を定義することが可能であり、この集合は自分自身を含みつつ、自分自身を含まないという矛盾を抱えていることを示すものです。1902年から1908年にかけて、バートランド・ラッセルはこの問題に対する様々な解決策を提案しました。
1908年までに、ラッセルは型に関する分岐理論と還元可能性の公理に到達し、これらはどちらも1910年、1912年、1913年に出版されたホワイトヘッドとラッセルの『プリンキピア・マテマティカ』に登場した。この体系は、型の階層構造を作成し、各具体的な数学的実体を特定の型に割り当てることで、ラッセルのパラドックスで示唆された矛盾を回避した。ある型の実体は、その型のサブタイプのみから構成されるため、実体がそれ自身を用いて定義されることはなかった。このラッセルのパラドックスの解決は、ツェルメロ=フレンケル集合論などの他の形式体系で採用されているアプローチと類似している。[ 4 ]
型理論は、アロンゾ・チャーチのラムダ計算と特に結びついて人気があります。型理論の初期の注目すべき例の1つは、チャーチの単純型付きラムダ計算です。チャーチの型理論[ 5 ]は、形式体系が、元の型なしラムダ計算を悩ませていたクリーネ・ロッサーのパラドックスを回避するのに役立ちました。チャーチは[ c ] 、それが数学の基礎として機能できることを示し、高階論理と呼ばれました。
現代の文献では、「型理論」とはラムダ計算に基づいた型付きシステムを指します。影響力のあるシステムの一つは、構成的数学の基礎として提案されたペル・マルティン=レーフの直観主義型理論です。もう一つは、ティエリー・コカンの構成計算で、これはRocq(以前はCoqとして知られていた)、Lean、その他のコンピュータ証明支援システムの基礎として使用されています。型理論は活発な研究分野であり、その方向性の一つとしてホモトピー型理論の開発が挙げられます。
最初のコンピュータ証明支援システムであるAutomathは、型理論を用いてコンピュータ上で数学を符号化した。Martin-Löfは、数学の新たな基礎となるよう、すべての数学を符号化するために直観主義型理論を開発した。ホモトピー型理論を用いた数学的基礎に関する研究は現在も継続中である。
圏論を研究する数学者たちは、広く受け入れられているツェルメロ・フレンケル集合論の基礎を扱うことに既に困難を抱えていた。このため、ローヴェアの集合圏の初等理論(ETCS)などの提案がなされた。 [ 7 ]ホモトピー型理論は、型理論を用いてこの流れを継承している。研究者たちは、依存型(特に恒等型)と代数トポロジー(特にホモトピー)との関連性を探求している。
型理論に関する現在の研究の多くは、証明チェッカー、対話型証明支援システム、自動定理証明器によって推進されている。これらのシステムのほとんどは、証明を符号化するための数学的基盤として型理論を使用しているが、型理論とプログラミング言語の密接な関係を考えると、これは驚くべきことではない。
LEGOとIsabelleは多くの型理論をサポートしています。Isabelleは型理論以外にも、 ZFCなどの基礎体系もサポートしています。Mizarは集合論のみをサポートする証明システムの一例です。
コンパイラのセマンティック解析フェーズにおける型チェックアルゴリズムなど、あらゆる静的プログラム解析は型理論と関連している。代表的な例として、型システムにUTT(Luoの依存型統一理論)を採用しているプログラミング言語Agdaが挙げられる。
プログラミング言語MLは型理論を操作するために開発されたものであり(「計算可能な関数の論理」を参照)、その型システム自体も型理論から大きな影響を受けている。
型理論は、自然言語の意味論の形式理論[ 8 ] [ 9 ] 、特にモンタギュー文法[ 10 ]とその派生理論でも広く用いられています。特に、範疇文法や前群文法では、単語の型(名詞、動詞など)を定義するために型コンストラクタが多用されています。
最も一般的な構造は、基本的なタイプを採用しています。そしてそれぞれ個体と真理値に対して、型セットを再帰的に次のように定義します。
複合型は、型のエンティティからの関数のタイプです。タイプのエンティティへ。したがって、次のような型があります。実体から真理値への関数セットの要素、すなわち実体セットの指示関数として解釈されるもの。これは、実体の集合から真理値への関数、つまり集合の集合の(指示関数)です。この後者のタイプは、一般的に、 everybodyやnobodyのような自然言語の量化子のタイプとみなされています(Montague 1973、Barwise and Cooper 1981)。[ 11 ]
レコードを用いた型理論は、レコードを使用して型理論の型を表現する形式意味論表現フレームワークです。これは、主に計算意味論や対話システムなどの自然言語処理で使用されています。[ 12 ] [ 13 ]
グレゴリー・ベイトソンは、論理類型論を社会科学に導入した。彼の「二重拘束」や「論理レベル」といった概念は、ラッセルの類型論に基づいている。
型理論は数理論理学の一種であり、つまり、判断を導き出す推論規則の集合である。ほとんどの論理学は「命題は~である」と主張する判断を持つ。「その式は真である」または「その式は真である」は整形式式である。[ 14 ]型理論には、型を定義し、それを項と呼ばれる形式的オブジェクトの集合に割り当てる判断がある。項とその型は、しばしば一緒に次のように書かれる。 :{\mathsf {type}}} 。
論理における項は、定数記号、変数、または関数適用(ある項が別の項に適用される)として再帰的に定義されます。定数記号には自然数が含まれます。、ブール値 、そして後継関数などの関数条件演算子したがって、いくつかの用語は、 、 、そして .
ほとんどの類型理論には4つの判断基準がある。
判断は仮定から生じる場合がある。例えば、「仮定するとタイプの用語ですそしてタイプの用語ですしたがって、タイプの用語です 。このような判決は、正式には回転式改札機のシンボル で表記されます。 .
前提条件がなければ、改札口の左側には何も存在しないだろう。
左側の前提条件のリストは、判決の文脈です。大文字のギリシャ文字、例えば、そして、は仮定の一部または全部を表す一般的な選択肢です。したがって、4つの異なる判断は通常次のように記述されます。
一部の教科書では、3つの等号が使用されています。これは判断に基づく平等であり、したがって外在的な平等の概念であることを強調するためである。[ 15 ]判断は、すべての用語にタイプがあることを強制する。タイプは、用語に適用できる規則を制限する。
型理論の推論規則は、他の判断の存在に基づいてどのような判断ができるかを示します。規則は、水平線を使用したゲンツェン式の演繹として表現され、必要な入力判断が線の上に、結果として得られる判断が線の下に示されます。[ 16 ]例えば、次の推論規則は、判断の等価性に対する置換規則を示しています。ルールは構文的であり、書き換えによって機能します。メタ変数、 、 、 、そして実際には、単一の記号だけでなく、多くの機能アプリケーションを含む複雑な用語や型で構成されている場合があります。
型理論において特定の判断を生成するには、その判断を生成する規則と、その規則に必要なすべての入力を生成する規則などが必要です。適用された規則は証明木を形成し、最上位の規則は仮定を必要としません。入力を必要としない規則の一例として、定数項の型を宣言する規則があります。例えば、ある項が存在することを主張する場合、タイプの、次のように書くでしょう。
一般的に、型理論における証明の望ましい結論は、型占有の結論である。[ 17 ]型占有の決定問題(略称は ?} ) は:
ジラールのパラドックスは、型の占有が、カリー・ハワード対応との整合性に強く関連していることを示している。健全なシステムであるためには、占有されていない型が存在しなければならない。
型理論には通常、以下のような規則がいくつか含まれます。
また、「ルールによる」タイプごとに、4種類のルールが存在します。
規則の例については、興味のある読者はホモトピー型理論の書籍の付録A.2を参照するか[ 15 ] 、またはMartin-Löfの直観主義型理論[ 18 ]を読むとよい。
型理論の論理的枠組みは、直観主義論理または構成的論理に類似している。形式的には、型理論は直観主義論理のBrouwer–Heyting–Kolmogorov解釈の実装としてよく引用される。[ 18 ]さらに、圏論やコンピュータプログラムとの関連性も指摘できる。
基礎として使用されるとき、特定の型は命題(証明可能な文)として解釈され、その型に属する項はその命題の証明として解釈されます。いくつかの型が命題として解釈される場合、それらを接続して型からブール代数を作成するために使用できる共通の型のセットが存在します。ただし、この論理は古典論理ではなく直観主義論理であり、排中律も二重否定もありません。
この直観主義的な解釈では、論理演算子として機能する共通の型が存在する。
排中律が成り立たないため、タイプの項は存在しない。同様に、二重否定は成り立たないため、タイプの項は存在しない。 .
排中律と二重否定を、規則または仮定によって型理論に組み込むことは可能である。しかし、項が標準項に計算されない場合があり、2つの項が判断的に等しいかどうかを判断する能力を妨げることになる。
ペル・マルティン=レーフは、構成的数学の基礎として直観主義型理論を提案した。[ 14 ]構成的数学では、「ある型が存在する」ことを証明する際に、不動産付き「、特定のそしてそれが特性を持っているという証明型理論では、存在は依存積型を用いて実現され、その証明にはその型の項が必要となる。
非構成的証明の一例として、背理法による証明がある。最初のステップは、存在しないことを反証する。その段階からの結論は「存在しない」。最後のステップは、二重否定によって、存在する。構成的数学では、二重否定を取り除く最後のステップで、存在する。[ 19 ]
基礎として提案されている型理論のほとんどは構成的であり、証明支援系で使用される型理論のほとんどもこれに該当します。型理論には、規則または仮定によって非構成的な機能を追加することも可能です。これには、現在の継続での呼び出しなどの継続に対する演算子が含まれます。しかし、これらの演算子は、正準性やパラメトリック性といった望ましい特性を損なう傾向があります。
カリー・ハワード対応とは、論理とプログラミング言語の間に見られる類似性である。論理における含意は、「ABは、型Aから型Bへの関数に似ています。さまざまな論理体系において、規則はプログラミング言語の型における式に似ています。さらに、規則の適用はプログラミング言語のプログラムに似ているため、この対応関係はしばしば「証明をプログラムとして捉える」と要約されます。
用語と型の対立は、実装と仕様の対立と見なすこともできる。プログラム合成では、(計算上の対応物である)型インビテーションを使用して、型情報の形式で与えられた仕様から(プログラム全体または一部)を構築することができる。[ 20 ]
型理論を扱う多くのプログラム(例えば、対話型定理証明器)は、型推論も行います。これにより、ユーザーの操作を最小限に抑えつつ、ユーザーが意図するルールを選択できるようになります。
圏論の当初の動機は基礎主義とはかけ離れていましたが、この2つの分野は深い繋がりがあることが判明しました。ジョン・レーン・ベルが書いているように、「実際、圏自体をある種の型理論と見なすことができます。この事実だけでも、型理論が集合論よりも圏論にずっと密接に関係していることを示しています。」簡単に言うと、圏は対象を型(またはソート[21])と見なすことで型理論と見なすことができます。つまり、「大まかに言えば、圏は構文を取り除いた型理論と考えることができます。」このようにして、多くの重要な結果が導き出されます。[ 22 ]
カテゴリー論理として知られるこの相互作用は、それ以来活発な研究の対象となっており、例えばジェイコブス(1999)のモノグラフを参照されたい。
ホモトピー型理論は、型理論と圏論を組み合わせようとする試みです。特に型間の等式に焦点を当てています。ホモトピー型理論は、主に等式型の扱い方において直観主義型理論とは異なります。2016年に、正規化を伴うホモトピー型理論である立方体型理論が提案されました。[ 23 ] [ 24 ]
最も基本的な型はアトムと呼ばれ、アトムの型を持つ項はアトム項として知られています。型理論に含まれる一般的なアトム項は自然数であり、多くの場合、型 で表記されます。、ブール論理値( そして )、タイプで表記、および型が異なる可能性のある形式変数。 [ 17 ]例えば、以下は原子項である可能性があります。
原子型に加えて、ほとんどの現代の型理論では関数も許容されます。関数型は矢印記号を導入し、帰納的に定義されます。そしては型であり、表記法はは、型のパラメータを受け取る関数の型です。そして型の項を返します . この形式の型は単純型として知られています。 [ 17 ]
以下の用語のように、一部の用語は単純な型を持つものとして直接宣言できます。これは、2 つの自然数を順番に入力として受け取り、1 つの自然数を返します。
厳密に言えば、単純な型は入力と出力がそれぞれ1つずつしか許されないので、上記の型をより忠実に解釈すると次のようになる。自然数を入力として受け取り、次の形式の関数を返す関数です。括弧は、タイプがありません、これは自然数の関数を受け取り、自然数を返す関数になります。慣例として、矢印は右結合であるため、括弧は省略できます。のタイプ。 [ 17 ]
新しい関数項はラムダ式を用いて構築することができ、ラムダ項と呼ばれます。これらの項は帰納的にも定義されます。ラムダ項は次の形式をとります。、そこでは形式変数であり、は用語であり、その型は表記されます。、そこでは、タイプです。、そしては、タイプです。 . [ 17 ]次のラムダ項は、入力された自然数を2倍にする関数を表します。
変数はそして(ラムダ項の型から暗黙的に)型は でなければならない。 . 用語タイプがありますこれは、関数適用推論規則を2回適用することで確認できます。したがって、ラムダ項の型はつまり、これは自然数を引数として受け取り、自然数を返す関数であるということです。
ラムダ項は名前を持たないため、匿名関数です[ d ] 。匿名関数の概念は多くのプログラミング言語に見られます。
型理論の強みは、推論規則によって項をどのように組み合わせることができるかを規定することにある。[ 5 ]関数を持つ型理論には、関数適用の推論規則もある。タイプの用語です、そしてタイプの用語です、そして適用へ、しばしば書かれる、タイプがあります例えば、型表記法がわかっている場合、 、そして 、すると関数適用から以下の型表記を推論できる。 [ 17 ]
括弧は演算の順序を示しますが、慣例として関数適用は左結合であるため、適切な場合は括弧を省略できます。[ 17 ]上記の3つの例の場合、最初の2つではすべての括弧を省略でき、3つ目は次のように簡略化できます。 .
ラムダ項を許容する型理論には、推論規則も含まれる。-削減と-還元。これらは関数適用の概念をラムダ項に一般化したものです。記号的には、次のように記述されます。
最初の簡約では、ラムダ項を評価する方法を説明します。ラムダ式が用語に適用されます、1 はすべての出現箇所を置き換えますでと共に。2番目の簡約は、ラムダ式と関数型の間の関係を明確にします。がラムダ項であれば、それはこれは関数項です。なぜなら、これは に適用されているからです。したがって、ラムダ式は単に と同等です。、どちらも1つの引数を受け取り、適用しますそれに対して。[ 5 ]
例えば、次の用語は削減された。
型と項の等価性の概念も確立する型理論では、対応する推論規則が存在する。-平等と-平等。[ 17 ]
空の型には項がありません。型は通常次のように記述されます。または。空の型の用途の 1 つは、型の占有の証明です。型の場合、 、型の関数を導出することは一貫性がある、それからそこは無人地帯であり、つまり、そこには何の条件も存在しない。
単位型には、正準項がちょうど 1 つあります。型は次のように記述されます。またはそして、唯一の正準項は次のように書かれる。。ユニットタイプは、タイプの居住証明にも使用されます。タイプの場合、 、型の関数を導出することは一貫性がある、それから居住されている、つまり、1つ以上の用語を持つ必要がある。
ブール型には、正確に2つの標準項があります。この型は通常次のように記述されます。またはまたは。通常、標準的な用語はそして .
自然数は通常、ペアノ算術のスタイルで実装されます。標準的な用語があります。ゼロの場合。ゼロより大きい標準値には、後継関数の反復適用を使用します。 :{\mathsf {nat}}\to {\mathsf {nat}}} .
型理論の中には、関数やリストなどの複雑な項の型が引数の型に依存することを許容するものがあり、これらは型コンストラクタと呼ばれます。たとえば、型理論は依存型を持つことができます。 、これは用語のリストに対応する必要があり、各用語はタイプを持つ必要がありますこの場合、種類がある、そこでは、理論におけるあらゆるタイプの宇宙を表す。
製品タイプ、は2つのタイプに依存し、その項は一般的に順序対として表される。 . そのペア製品タイプ、そこでは、そしては、タイプです。各製品タイプは通常、消去関数で定義されます。 :\sigma \times \tau \to \sigma } および :\sigma \times \tau \to \tau } 。
順序対の他に、この型は論理積と論理積の概念にも使用されます。
和型は次のように記述されます。またはプログラミング言語では、和型はタグ付き共用体と呼ばれることがあります。各型通常はコンストラクタで定義されます :\sigma \to (\sigma \sqcup \tau )} および \tau \to (\sigma \sqcup \tau )} は単射であり、消去関数で :(\sigma \to \rho )\to (\tau \to \rho )\to (\sigma \sqcup \tau )\to \rho } となるように、
一部の理論では、用語の定義が型に依存することも許容されています。たとえば、任意の型の恒等関数は次のように記述できます。。この関数は、 において多相的であると言われている。、または一般的な .
別の例として、関数を考えてみましょう。、これはそして、タイプの用語、そして、末尾に要素を持つリストを返します。このような関数の型注釈は次のようになります。 :\forall \,a.{\mathsf {list}}\,a\to a\to {\mathsf {list}}\,a} は「任意の型に対して」と読むことができます。、パスインそして、そしてを返します "。ここ多型性を持つ .
ポリモーフィズムにより、エリミネータ関数はすべての製品タイプに対して一般的に定義できます。 :\forall \,\sigma \,\tau .\sigma \times \tau \to \sigma } および :\forall \,\sigma \,\tau .\sigma \times \tau \to \tau } 。
同様に、和型コンストラクタは、すべての有効な和メンバー型に対して次のように定義できます。 :\forall \,\sigma \,\tau .\sigma \to (\sigma \sqcup \tau )} および :\forall \,\sigma \,\tau .\tau \to (\sigma \sqcup \tau )} 、これらは単射で、消去関数は次のように与えられる。 :\forall \,\sigma \,\tau \,\rho .(\sigma \to \rho )\to (\tau \to \rho )\to (\sigma \sqcup \tau )\to \rho } が 成り立つ。
一部の理論では、型が型ではなく項に依存することも許容されます。たとえば、ある理論は型を持つことができます。、そこでタイプの用語ですベクトルの長さをエンコードします。これにより、より高い特異性と型の安全性が実現します。ベクトルの長さの制限や長さの一致要件を持つ関数(ドット積など)は、この要件を型の一部としてエンコードできます。[ 26 ]
依存型から生じる根本的な問題として、理論が許容される依存関係に注意を払わない場合、ジラールのパラドックスなどが生じる可能性がある。論理学者ヘンク・バレンデグトは、依存型のさまざまな制約とレベルを研究するための枠組みとしてラムダキューブを導入した。 [ 27 ]
2つの一般的な型依存性、依存積型と依存和型は、全称量化と存在量化の等価物として機能することで、理論がBHK直観主義論理を符号化することを可能にします。これはカリー・ハワード対応によって形式化されています。[ 26 ]これらは集合論における積と和にも関連しているため、しばしば記号で表されます。そしてそれぞれ。
和型は従属ペアで見られ、2番目の型は最初の項の値に依存します。これは、関数が入力に基づいて異なる型の出力を返すことがあるコンピュータサイエンスにおいて自然に発生します。たとえば、ブール型は通常、消去関数で定義されます。は 3 つの引数を取り、以下のように動作します。
一般的な定義必要とするそして同じ型を持つ。型理論が依存型を許容するならば、依存型を定義することが可能である。そのため
種類次のように書くことができます。 .
カリー=ハワード対応の概念に倣って、アイデンティティ型は、型理論が既に提供している判断的(構文的)等価性とは対照的に、命題的等価性を反映するために導入された型である。
同一性型は、同じ型の2つの項を必要とし、記号 で表されます。例えば、そして用語は、は可能なタイプです。正規用語は反射関数で作成されます。。 期間、呼び出し型に属する正規の用語を返します。 .
型理論における等価性の複雑さは、活発な研究テーマとなっている。ホモトピー型理論は、主に型理論における等価性を扱う注目すべき研究分野である。
帰納型は、多様な型を作成するための一般的なテンプレートです。実際、上記で説明したすべての型、そしてそれ以上の型を、帰納型の規則を用いて定義できます。帰納型を生成する方法としては、帰納再帰と帰納帰納の2つがあります。ラムダ式のみを使用する方法としては、スコット符号化があります。
Rocq(以前はCoqとして知られていた)やLeanなどの証明支援システムの中には、帰納的構成の計算体系に基づいているものがあり、これは帰納型を持つ構成の計算体系である。
数学の基礎として最も一般的に受け入れられているのは、ツェルメロ=フレンケル集合論の選択公理(ZFCと略記)の言語と公理を用いた一階述語論理である。十分な表現力を持つ型理論も、数学の基礎として機能することがある。これら二つのアプローチには、いくつかの相違点がある。
型理論の支持者は、 BHK解釈を通じた構成的数学との関連性、カリー・ハワード同型性による論理学との関連性、そして圏論との関連性も指摘するだろう。
用語は通常、単一の型に属します。しかし、「サブタイピング」を定義する型理論も存在します。
計算は、規則を繰り返し適用することによって行われます。多くの種類の理論は強く正規化されており、これは規則を適用する順序に関係なく、常に同じ結果が得られることを意味します。しかし、そうでないものもあります。正規化型の理論では、一方向の計算規則は「還元規則」と呼ばれ、規則を適用することで項が「還元」されます。規則が一方向でない場合は、「変換規則」と呼ばれます。
型の組み合わせの中には、他の型の組み合わせと等価なものがある。関数を「べき乗」とみなすと、型の組み合わせは代数的恒等式と同様に記述できる。[ 28 ]したがって、、 、 、 、 .
ほとんどの型理論には公理がありません。これは、型理論が推論規則によって定義されるためです。これは、集合論に精通している人々にとって混乱の原因となります。集合論では、理論は(一階述語論理などの)論理の推論規則と集合に関する公理の両方によって定義されるからです。
型理論では、時としていくつかの公理を追加することがあります。公理とは、推論規則を用いた導出なしに受け入れられる判断のことです。これらは、規則だけでは明確に追加できない性質を保証するために追加されることが多いです。
公理は、それらの項を計算する方法がない項を導入すると問題を引き起こす可能性があります。つまり、公理は型理論の正規化特性を妨げる可能性があります。 [ 29 ]
よく見られる公理には以下のようなものがあります。
選択公理は型理論に追加する必要はありません。なぜなら、ほとんどの型理論では推論規則から導出できるからです。これは、型理論が構成的性質を持つためであり、値が存在することを証明するには、その値を計算する方法が必要となります。選択公理は、ほとんどの集合論に比べて型理論では強力ではありません。なぜなら、型理論の関数は計算可能でなければならず、構文駆動型であるため、型の項の数は可算でなければならないからです。(「選択公理 § 構成的数学において」を参照。)
(x,y) -> x^5+y{{cite journal}}: CS1メンテナンス: DOIは2025年7月現在非アクティブです(リンク)