製品タイプとタイプ推論
私は、連結言語用のコンパイラに取り組んでおり、型推論のサポートを追加したいと考えています。Hindley–Milnerは理解していますが、型理論を学んでいるので、それをどのように適応させるかわかりません。次のシステムは健全で、決定的に推測できますか? 用語は、リテラル、用語の構成、用語の引用、またはプリミティブです。 e::=x∣∣ee∣∣[e]∣∣…e::=x|ee|[e]|… e ::= x \:\big|\: e\:e \:\big|\: [e] \:\big|\: \dots すべての用語は関数を示します。2つの関数およびe 2の場合、e 1e1e1e_1e2e2e_2並置が逆組成を示しています。リテラルはニラディック関数を示します。e1e2=e2∘e1e1e2=e2∘e1e_1\:e_2 = e_2 \circ e_1 構成以外の用語には、基本的なタイプルールがあります。 x:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γx:ι[Lit]Γ⊢e:σΓ⊢[e]:∀α.α→σ×α[Quot],α not free in Γ \dfrac{}{x : \iota}\text{[Lit]} \\ \dfrac{\Gamma\vdash e : \sigma}{\Gamma\vdash [e] : \forall\alpha.\:\alpha\to\sigma\times\alpha}\text{[Quot]}, \alpha \text{ not free in } \Gamma 連結言語にはアプリケーションルールがないため、アプリケーションのルールは特にありません。 型は、リテラル、型変数、またはスタックからスタックへの関数のいずれかです。ここで、スタックは右ネストされたタプルとして定義されます。すべての関数は、「残りのスタック」に関して暗黙的にポリモーフィックです。 τρσ::=ι∣∣α∣∣ρ→ρ::=()∣∣τ×ρ::=τ∣∣∀α.στ::=ι|α|ρ→ρρ::=()|τ×ρσ::=τ|∀α.σ …