タグ付けされた質問 「java」

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 …

2
Java(または一般的な命令型言語)の正式な実行モデル
いくつかの厳しい制限の下でJavaプログラムの実行に関するいくつかのステートメントを証明しようとしています(基本的に、2つのメソッドが特定の入力の一連の制約を満たす場合、それらは同等であると推測されます(つまり、戻り値と後の状態)実行は同じです)。これを証明するために、私はこれについて話すことができるある種の形式主義を探しています。 私は関数型言語の操作上のセマンティクスに精通しており、forループ/ whileループを再帰的な関数に変換できる可能性があります...これを行うのではなく、いくつかの機械を用意して命令型の土地に留まることができるとよいでしょう。 より具体的には、実行のk番目のステップでのメソッドの状態について推論したいと思います。これには、グローバルな状態が含まれます。 this.field = 2クラスの状態を更新するような呼び出し パラメータを変更する呼び出しは、メソッドの外部で状態を更新します。 myParam.setFoo(...) myParam.x = y 静的メソッドの呼び出し Blah.static_side_effects() これはすべて確定的であると想定しています。つまり、状態に対するこれらのグローバル更新のいずれかが2つのメソッドで発生し、その両方のグローバル実行状態とローカル実行状態が同じである場合、新しい状態も同じになるという仮定を正式化したいと思います-計算の各ステップが決定されるということです正確には、グローバル状態とローカル状態によって。これは明らかにRNGと並列処理を排除します(ただし、これは後で処理する可能性があります...)。 これにどのように取り組むことができるかについてのアイデアや情報源はありますか?私の唯一の考えは、メソッドをステートメントのリストとして扱い、ステートメントのセマンティクスを正式に記述しようとすることです。 できれば、JVMレベルではなく、Java言語レベルでこれを実行したいと思います。これは現実的ではないかもしれませんが、今の私の目標は、運用上のセマンティクスについていくつかの合理的な仮定を行い、そこからそれを取得することです。 ああ、最後のメモです。この質問をどのように改善できるかについての提案があれば、大歓迎です。私は質問をするのに適切な言語を見つけようとするのにちょっと気まぐれになっていて、用語を乱用しているかどうか(ローカル/グローバル実行状態など)は、これを修正したいです。

3
継承、およびJavaのような言語でのメンバー/属性およびメソッドへの動的アクセス
JavaのようなOOプログラミング言語での継承について質問があります。メソッドとその呼び出しをコンパイルする方法を説明したとき、それは私のコンパイラクラスで思い付きました。コンパイルするソース言語の例としてJavaを使用していました。 次に、このJavaプログラムについて考えてみましょう。 class A { public int x = 0; void f () { System.out.println ( "A:f" ); } } class B extends A { public int x = 1; void f () { System.out.println ( "B:f" ); } } public class Main { public static void main ( String …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.