Definición
Un marco formal de clasificación que asigna tipos a expresiones y especifica reglas sobre cómo pueden combinarse entidades tipadas, con el objetivo de hacer cumplir invariantes, detectar errores y guiar la construcción de programas de forma estática o dinámica.

Principio

Principio
Restringir la composición: los tipos constituyen una disciplina sintáctica y semántica que limita qué operaciones son permitidas sobre valores, posibilitando el razonamiento sobre corrección y comprobaciones automáticas (comprobación o inferencia de tipos).

Demostración

Demostración
Una regla de tipado de función sencilla: de Γ ⊢ f : A → B y Γ ⊢ x : A inferir Γ ⊢ f x : B; un ejemplo es tipar map : (A → B) → Lista A → Lista B en un sistema polimórfico.

Aplicación incorrecta

Aplicación incorrecta
Confiar en exceso en el sistema de tipos para garantizar propiedades semánticas que no expresa (por ejemplo, presumir que un tipo asegura terminación o seguridad) o diseñar tipos demasiado restrictivos que rechacen programas válidos sin una ganancia proporcional en seguridad.

Consecuencia

Consecuencia
Cuando se elige adecuadamente, un sistema de tipos proporciona garantías en tiempo de compilación (evitando ciertas clases de errores en tiempo de ejecución), documentación de la intención, oportunidades de optimización y una base para la verificación de programas.

Inversión

Inversión
Enfoques no tipados o de tipado dinámico que difieren la clasificación a comprobaciones en tiempo de ejecución o a la disciplina del programador, permitiendo más flexibilidad pero desplazando algunas responsabilidades de corrección a la ejecución.

Límite

Límite
Cubre la clasificación sintáctica y la comprobación estática/dinámica; no determina por sí solo la semántica completa del programa, el comportamiento en tiempo de ejecución ni la decidibilidad de tareas de verificación — ello depende de la disciplina de tipado elegida y de las reglas asociadas.

Tensión semántica

Tensión semántica
Tensión entre tipado estático y dinámico, tipado nominal y estructural, y entre sistemas de tipos expresivos (dependientes, sensibles a efectos) y sistemas más simples y decidibles que favorecen inferencia y comprobación de tipos manejables.

Síntesis

Síntesis
Un sistema de tipos es un conjunto estructurado de reglas que asigna tipos a construcciones del programa para restringir composiciones permitidas y capturar invariantes; equilibra expresividad, decidibilidad y seguridad práctica para ofrecer detección temprana de errores y guiar la construcción correcta del programa.