Γ ⊢ true : bool Γ ⊢ false : bool

\frac{n ∈}{Γ ⊢ n : int}  \overline{Γ ⊢ [] : α list}

\frac{Γ ⊢ e_{1} : int  Γ ⊢ e_{2} : int}{Γ ⊢ e_{1} + e_{2} : int}  \frac{Γ ⊢ e_{1} : int  Γ ⊢ e_{2} : int}{Γ ⊢ e_{1} − e_{2} : int}

\frac{Γ ⊢ e_{1} : int  Γ ⊢ e_{2} : int}{Γ ⊢ e_{1} ∗ e_{2} : int}  \frac{Γ ⊢ e_{1} : int  Γ ⊢ e_{2} : int}{Γ ⊢ e_{1}/e_{2} : int}

\frac{Γ ⊢ e_{1} : α Γ ⊢ e_{2} : α}{Γ ⊢ e_{1} = e_{2} : bool}

\frac{Γ ⊢ e_{1} : α Γ ⊢ e_{2} : α list}{Γ ⊢ e_{1} :: e_{2} : α list}

\frac{Γ ⊢ e_{1} : bool  Γ ⊢ e_{2} : α  Γ ⊢ e_{3} : α}{Γ ⊢ if e_{1} then e_{2} else e_{3} : α}

\frac{Γ(e_{1}) = α}{Γ ⊢ e_{1} : α} (monomorphic)  \frac{Γ(e_{1}) = ∀τ_{1} …τ_{n}.α}{Γ ⊢ e_{1} : α[τ⃗/μ⃗]} (polymorphic)

\frac{Γ ⊢ e_{1} : α → β Γ ⊢ e_{2} : α}{Γ ⊢ e_{1} e_{2} : β}

\frac{Γ ⊢ e_{1} : α  τ_{1} …τ_{n} = FV_{Γ}(α)  Γ, v : ∀τ_{1} …τ_{n}.α ⊢ e_{2} : β}{Γ ⊢ let v = e_{1} in e_{2} : β}

(FV_{Γ}(α): α 中で自由な型変数で Γ 内の変数型に自由変数として現れていないものの列)

\frac{Γ, v : α ⊢ e_{1} : α  τ_{1} …τ_{n} = FV_{Γ}(α)  Γ, v : ∀τ_{1} …τ_{n}.α ⊢ e_{2} : β}{Γ ⊢ letrec v = e_{1} in e_{2} : β}