- typ_var: ∀ (Γ : context) (x : ℕ) (T : Typ), valid_ctx Γ → binds x T Γ → typing Γ ($x) T
- typ_abs: ∀ (L : Finset ℕ) (Γ : context) (t : Trm) (T1 T2 : Typ), (∀ x ∉ L, typing ((x, T1) :: Γ) (t.open₀ ($x)) T2) → typing Γ (λt) (T1 -> T2)
- typ_app: ∀ (Γ : context) (t₁ t₂ : Trm) (T1 T2 : Typ), typing Γ t₁ (T1 -> T2) → typing Γ t₂ T1 → typing Γ (t₁ @ t₂) T2