タグ付けされた質問 「type-inference」

2
文脈依存文法とタイプ
1)静的型付けと正式な文法との関係は、もしあれば、何ですか? 2)特に、線形有界オートマトンは、たとえばC ++またはSMLプログラムが適切に入力されたかどうかをチェックできますか?ネストされたスタックオートマトン? 3)静的型付け規則を正式な文法用語で表現する自然な方法はありますか?

1
交差点タイプと共用体タイプの実際的な問題は何ですか?
学習体験として、静的に型付けされた単純な関数型プログラミング言語を設計しています。 私がこれまでに実装した型システムは、(少し余分な作業を行うことで)交差型と共用体型を組み込むことができるようです。 <Union String Integer> <Union Integer Foo> 上記の2つのタイプの共通部分はプレーンです Integer 2つのタイプの結合は次のようになります <Union String Integer Foo> もちろん、これが可能であるという事実は、必ずしもそれが優れたデザインアイデアであることを意味するわけではありません。特に、型をばらばらにしたり、重複を処理したりすることの実装の難しさを少し心配しています。 このような機能を型システムに組み込むことの長所と短所は何ですか?

3
タイプチェッカーの正当性の証明は実際に何を証明すべきですか?
私は数年プログラミングをしてきましたが、理論上のCSにはあまり慣れていません。私は最近プログラミング言語を研究しようと試みており、その一環として、型チェックと推論を行っています。 私の質問は、プログラミング言語の型推論およびチェックプログラムを作成しようとして、タイプチェッカーが機能することを証明したい場合、私が探している証拠は何ですか? 平易な言葉で言えば、実行時に発生する可能性のあるコードの一部のエラーをタイプチェッカーで識別できるようにしたいと思います。Coqのようなものを使用して私の実装が正しいことを証明しようとした場合、この「正確性の証明」は何を表示しようとするのでしょうか。

2
ボックス化されていない型よりも上位の多態性
Hindley–Milnerに基づいて型推論を行い、デフォルトで型がボックス化されていない言語があります。主に存在型を扱うために、より高いランクのポリモーフィズムを追加したいと思います。 これらの型をチェックする方法は理解していると思いますが、コンパイルするときに何をすべきかわかりません。現在、私はC ++テンプレートのように特殊化を生成することによってポリモーフィックな定義をコンパイルし、ボックス化されていない値を処理できるようにしています。たとえば、の定義が与えられf<T>、プログラムがf<Int32>and のみを呼び出す場合、f<Char>それらの特殊化のみがコンパイルされたプログラムに表示されます。(今のところ、プログラム全体のコンパイルを想定しています。) しかし、多態性関数を引数として渡すと、実行時に関数を選択できるため、適切な特殊化を静的に生成する方法がわかりません。ボックス化された表現を使用する以外に選択肢はありませんか?または問題を回避する方法はありますか? 私の最初の考えは、なんとかしてランクnの多型をランク1としてエンコードすることでしたが、構造論理の式は必ずしも通常の形をしているわけではないので、一般にそれが可能であるとは思いません。

3
代入以外の命令文の型推論
命令型言語の型システムに関する研究論文を検索したところ、参照が可変で、複合演算子、ループ、条件などの真の命令型制御構造を持たない言語の解決策しか見つかりませんでした。 したがって、http://rust-lang.orgなどの部分的な型推論を伴う命令型言語をどのように実装できるかは明確ではありません。 論文ではList of a、パラメータ化された型はHindley-Milner型システムの自明な拡張であるなど、パラメータ化された型については触れられていません。統合アルゴリズムのみを拡張する必要があり、残りの推論はそのまま機能します。ただし、パラドックスが発生するため、割り当てを簡単に追加できないため、ML値の制限などの特別な手法を適用する必要があります。 命令型ループ、条件、IO、および複合ステートメントを含む言語の型システムについて説明した論文や本をお勧めしますか?

2
SMLデータ型のサブセットとしてのサブタイプ
純粋に機能的なデータ構造に関する岡崎の本で私が嫌いないくつかのことの1つは、彼のコードが網羅的なパターンマッチングで散らかされていることです。例として、彼にリアルタイムキューの実装を示します(不要な中断を排除するためにリファクタリングしました)。 infixr 5 ::: datatype 'a stream = Nil | ::: of 'a * 'a stream lazy structure RealTimeQueue :> QUEUE = struct (* front stream, rear list, schedule stream *) type 'a queue = 'a stream * 'a list * 'a stream (* the front stream is one element …

2
MLTTでの型推論と型チェックの決定可能性
マーティン・LOFのではタイプのアン直観主義論:叙述パートにはタイプがチェックしていることを証明された決定可能であるの対象とされてtypeable閉じtypeable用語の正規化定理を証明することによって、最初の場所インチ 一方、複数の場所(Wikipedia、Nördstromなど)で記述されており、(意図的な)MLTTでの型チェックは決定可能であることがわかりました。それらは暗黙的に型付け可能な用語に制限していますか?a :Aa:あa \colon Aaaa タイプ可能な用語に限定しない場合、意図的なMLTTでの型推論または型チェックの決定可能性について何か知っていますか?たとえば、型なしの用語を認識する決定プロセスがあるかもしれません。たとえば、どのコンストラクターにも対応しないフォームに正規化することによって、または型なしの用語に非周期的な削減のシーケンスがないことを示すことなどです。 私は文学であまり見つけることができませんでした。

1
システムF(中typabilityの決定可能性という単純な証拠
typabilityと型チェックの両方がシステムFに決定不能であることを、我々は1994年からジョー・B. Wellsの結果を知っていないと仮定(AKA )。Barendregtの型付きLambda計算(1992)で、私はMalecki 1989による型チェックが型の可能性を意味するという証明を見つけました。それの訳はλ2λ2\lambda 2 存在その結果、M :σをσσ\sigmaM:σM:σM:\sigma に相当 (λxy.y)M:(α→α)(λxy.y)M:(α→α)(\lambda xy.y)M : (\alpha\rightarrow\alpha) (これは、用語がシステムFで入力可能である場合、そのすべてのサブ用語が入力可能であるためです。) 逆の簡単な証明はありますか?つまり、タイプ可能性がシステムFでのタイプチェックを意味するという証拠ですか

2
呼び出しサイトに基づく型推論に関する研究?
(関数本体を使用する標準的なアプローチに加えて)関数呼び出しサイトからの情報を使用して型情報を計算する、プログラム全体の型チェックと型推論システムについて詳しく学びたいと思っています。たとえば、このようなアルゴリズムでは、関数の呼び出しを使用しfoo(1)て、関数in fooが整数の引数をとることを推測する場合があります。明らかにこれは推論を非常に複雑にし、チェックを非モジュラーにします。 とにかく、私がこのアプローチに関する研究を見つけることができなかったのは、おそらく私が話していることを説明する正しい用語がわからないためです。ポインタはありますか?

1
二色構造計算の役割は何ですか?
だから、私は詳細について、特に2色の構造の計算に基づくアルゴリズムについて少し読んでいますが、少し混乱しています。目的が正確に理解できません。関数の暗黙的引数と明示的引数に違いがあることを除いて、C Cと同じように見えます。特に、どのように書けるかわかりません(i dCCb iCCbiCC^{bi}CCCCCC(i dの代わりに(私はd0 )(id0)(id\; 0)。グローバル定義のシステムを想定すると、(idN0)(idN0)(id\; \mathbb{N}\; 0) id:(ΠA|Type.(Πx:A.A))id:(ΠA|Type.(Πx:A.A))id : (\Pi A\; |\; \mathsf{Type}\; . (\Pi x : A\; . A)) そして 。id=(λA|Type.(λx:A.x))id=(λA|Type.(λx:A.x))id = (\lambda A\; |\; \mathsf{Type}\; . (\lambda x : A . x)) ルールで本当に許可されているか?もちろん構文にはありますが、型付けの関係ではわかりません。何か不足していますか?C C b iの役割を正しく理解していますか?(id0)(id0)(id\; 0)CCbiCCbiCC^{bi} また、合流性は失われないのでは?私の問題は、これまでにについてあまり読んだことがなく、詳細について読んでいることだと思います。それとそれだけを紹介する良い紙は何ですか?CCbiCCbiCC^{bi} 編集:より具体的に言うと、私はは(i d(id0)(id0)(id\; 0)場合の両方明示的および暗黙のための規則 Πのアプリケーションは、同一のモジュロsytnaxあります。:と |の間に違いはありません。両方のルールは同じように見えます。(idN0)(idN0)(id\; \mathbb{N}\; 0)ΠΠ\Pi:::||| 編集:私はImplicit …

1
System Fàla Churchでは、for-all除去のために型推論を自動化できますか?
質問は次のとおりです。一般に、ような用語がある場合、インスタンスように、この用語を型に適用することで forallを削除できます。(Λ X 。T )[ T ] → T [ X := T ]Λ X。tΛX.t\Lambda X.t(Λ X。t )[ T] → t [ X:= T](ΛX.t)[T]→t[X:=T](\Lambda X.t)[T]\to t[X:=T] ここで、これが矢印であり、引数を与えたいとすると、この項を適切な型に適用して、そのような引数を受け取ることができるようにする必要があります。それが私が自動化できるかどうかを尋ねています:2つの項を取り、型を返す関数を 構築して、が、でのというように、tは引数受け入れることができrは?F &lt; Λ X 。t &gt; &lt; r &gt; X tffff&lt; Λ X。t &gt; &lt; r &gt;f&lt;ΛX.t&gt;&lt;r&gt;f<{\Lambda X.t}><{r}>バツXXttttttrrr いくつかの例: 。f&lt; Λ X。λ Xバツ→ …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.