Static disciplines that classify program values and rule out classes of errors before execution. Type systems range from simple (Hindley-Milner) to dependent (Coq, Lean) — more expressive types catch more errors but cost more to check.