型付き
ラムダ計算は、無名関数を表現するために特殊なシンボル「λ」を用いる形式的な手法です。この概念はコンピュータ科学において重要であり、特にMLや
Haskellなどの型付き関数型
プログラミング言語の基礎を形成しています。さらに、型付き命令型
プログラミング言語にも間接的に影響を及ぼしています。
この計算モデルは
数理論理学と
証明論に密接に結びついており、さらに
圏論におけるクラスの内部言語とも見なすことができます。単純な型付き
ラムダ計算は、
デカルト閉圏(CCC)の言語として機能します。つまり、型付き
ラムダ計算は単なる
ラムダ計算の拡張にとどまらず、より深い理論的意味も有しています。型のない
ラムダ計算を1つの特殊ケースと見ることもできます。
さまざまな型付きラムダ計算の研究
これまでの研究においては、さまざまな型付き
ラムダ計算の体系が提案されました。例えば、単純型付き
ラムダ計算は基本的な型や型変数、関数型によって構成されています。System Tはこれをさらに発展させ、自然数型や高階原始再帰を含むものとなっており、全ての再帰可能な関数が表現可能です。
System Fは、全ての型に対する全称量化を適用し、
ポリモーフィズムを実現します。この観点から、
二階述語論理に属する全ての関数を表すことができるという特徴があります。また、依存型のある
ラムダ計算は直観主義的型理論の土台として、calculus of constructionsやlogical framework (LF) の基盤を形成しています。
さらに、ラムダ・キューブという理論は、これらの形式を系統的に整理したものです。これは、単純型付き
ラムダ計算やSystem F、LF、calculus of constructionsなどの関係性を一元的に理解する手助けとなります。
サブタイピングとその応用
一部の型付き
ラムダ計算では、「サブタイピング」という概念が導入されています。サブタイピングとは、ある型Aが型Bの下位型であるとき、A型の項がB型の項でもあることを意味します。このような関係は
型システムに柔軟性をもたらし、新しい型を追加する際の利便性が高まります。具体例として、単純型付き
ラムダ計算にconjunctive typeを加えたものや、System F-sub(F<:)が存在します。
強く正規化とその例外
ほとんどの型付き
ラムダ計算は「強く正規化」されており、すべての計算が必ず停止します。このことは、論理的な整合性を持つことを示していますが、強く正規化しない型付き
ラムダ計算も存在します。例えば、依存型付き
ラムダ計算はGirard's paradoxにより正規化しない特徴があります。また、明示的な再帰コンビネータを持つシステムも正規化しないことが一般的です。
一方で、
プログラミング言語の中には、型付き関数型
プログラミング言語でありながら、停止を保証しないものもあります。PCF(Computable Functionsのための
プログラミング言語)はその一例で、型はプログラムが正確に動作するために使用されますが、必ずしも計算の終了を保証するわけではありません。
型付きラムダ計算とプログラミング
型付き
ラムダ計算は
プログラミング言語の設計において新しい
型システムを創出する上で重要な役割を果たします。型付け可能性は、プログラミングにおける好ましい特性を反映し、例としてメモリアクセス違反を防ぐ手助けをします。強い型付けを持つ
プログラミング言語の関数やプロシージャは、型付き
ラムダ計算と密接に関連しています。
Eiffelプログラミング言語では、「inline agent」という記法が提供され、型付きラムダ式を直接的に定義し、操作することが可能です。たとえば、agent (p: PERSON): STRING do Result := p.spouse.name end という式は、特定の人の配偶者の名前を返す関数を表しています。このように、型付き
ラムダ計算は現代のプログラミングにおいて極めて重要かつ有用な基盤を提供しているのです。