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

2
ペアを持つSystem Fには、強力な正規化およびサブジェクト削減のプロパティがありますか?
多くの教科書では、System Fの主題の削減と強力な正規化の証明を見るのは簡単です。また、System Fのペアの定義もあります。ここで、(t、r)はエンコードだけでなく用語です。問題は、このシステムのリファレンスは何でしょうか?

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

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.