Martin-Löf依存型理論のどの断片がJavaのジェネリック型を使用して表現できますか?


8

私は最近、数年前にJavaでさまざまな数学的理論を実装しようとしてい 多く 問題が、Javaの型付けシステムがすべてのMartin-Löf依存型理論をモデル化するほど強力ではないという事実に帰着したことに気づきました。

Java 5およびジェネリックの前は、クラスおよびインターフェースを介して型理論を実行することしかできませんでした。これにより、製品や関数の型を使用して、地上の型intdoubleなどから任意の型を構築できますcharList統一された方法ではありませんが、s などの再帰型を構築することもできます。

ジェネリックを使用すると、もう少し多くを行うことができます。これでList<T>、関数として 定義できる

タイプタイプ
ようになり、より高次の型が得られます。

話はこれで終わりではありません。ジェネリックトリックを使用して、いくつかの依存製品タイプをモデル化できます。たとえば 、次の構文を使用して、という形式のタイプを定義でき

ΠTタイプfT
ます。
public interface f<T extends f<T>>
{
  // We can now refer to T as much as we like
  // inside the class.  T has type f<T>.
}

例として、タイプ (つまり、指定された単位要素とに対する2項演算を持つセットです。Javaジェネリックを使用して、このタイプをモデル化できます。TT

ΠTタイプT×TTT
TT
public interface MonoidElement<T extends MonoidElement<T>>
{
  public T unit();

  public T mul(T op1, T op2);
}

ただし、より複雑な概念をモデル化しようとすると、型理論は破綻します。

Java型付けシステムで構築できる型に対応するMLTTのフラグメントの簡単な説明はありますか?

回答:


12

ここには多くの誤解があります。まず、MLTTにはサブタイプがないので、Javaは単にその一部ではありません。指定した型のいずれかを作成するために依存型は必要ありません。依存型システムは、一般に型の「型」(ユニバース)を持つ必要はありません(ただし、MLTTにはユニバースはあります)。また、それらの型を表現するために依存型も必要ありません。多型ラムダ計算/のようなシステムでは、システムF、あなたが言うことができ。JavaにはTypeに相当するものはありません。多相型としてアナログのない依存型は、たとえばnのようなものですT.T×(TTTまたは b B o o l ifnNatMatrバツ+1ΠbBoolf b the Nat else Bool

これは、Javaにのフラグメントを検討する方が理にかなっているシステムF<:すべての依存型システムではありません。それでもそれはそれのかなり弱い断片です。システムFと呼ばれるシステムFのバリアントがありますωこれは、完全な型レベルの関数をサポートします。基本的には型レベルでのラムダです(値と型レベルに関連し、システムFがすでに持っている型ラムダと混同しないでください)。JavaもHaskellもこれを行うことはできません。(標準の)HaskellまたはJavaが作成できる唯一のタイプレベルの「関数」は、解釈されない関数の構成です。型レベルでは計算動作はありません。Javaは、種類の高い型がないために親切なシステムがないため(または必要がないため)、さらに制限されています。つまり、「タイプ」(つまり、種類)T y p eT y p eT y p eのタイプレベル「関数」を持つことはできません。TypeTypeType例えば。これが、Javaで任意のモナドを操作するメソッドを作成できない理由です。システムFだけに戻ると、システムFには任意のランクタイプがあります。これは、を好きなだけ深くネストできることを意味します。自由に使用できます。JavaもHaskell(拡張機能なし)もこれをサポートしていません。どちらも間接的にいくつかの上位ランクタイプをキャプチャできると思いますが、どちらもHaskellのr u n Sのタイプを表すことはできません。拡張を必要とする Has a TS S T S A rあなたSTasST s aa

F<:F<:λλ2λPωλωω


誤解が何であるかはわかりませんが、ありがとう-これは私の質問にかなり答えました。
John Gowers、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.