1
Martin-Löf依存型理論のどの断片がJavaのジェネリック型を使用して表現できますか?
私は最近、数年前にJavaでさまざまな数学的理論を実装しようとしていた 多く の 問題が、Javaの型付けシステムがすべてのMartin-Löf依存型理論をモデル化するほど強力ではないという事実に帰着したことに気づきました。 Java 5およびジェネリックの前は、クラスおよびインターフェースを介して型理論を実行することしかできませんでした。これにより、製品や関数の型を使用して、地上の型int、doubleなどから任意の型を構築できますchar。List統一された方法ではありませんが、s などの再帰型を構築することもできます。 ジェネリックを使用すると、もう少し多くを行うことができます。これでList<T>、関数として 定義できるタイプ→ タイプタイプ→タイプ \DeclareMathOperator{\Type}{Type}\Type\to\Type ようになり、より高次の型が得られます。 話はこれで終わりではありません。ジェネリックトリックを使用して、いくつかの依存製品タイプをモデル化できます。たとえば 、次の構文を使用して、という形式のタイプを定義でき ΠT:タイプf(T)ΠT:タイプf(T) \prod_{T\colon\Type}f(T) ます。 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× (T→ T→ T)ΠT:タイプT×(T→T→T) \prod_{T\colon\Type}T\times …