La lógica formal nació como una forma de estudiar razonamientos correctos y evolucionó hasta convertirse en una base esencial de la matemática, la computación y los lenguajes de programación.
La lógica formal estudia la estructura de los razonamientos sin depender del tema concreto del que hablan. No se centra en si una frase trata sobre personas, números, programas o circuitos, sino en si la relación entre las afirmaciones está bien construida.
Esta idea es muy importante en programación: un programa puede manipular datos distintos, pero sus condiciones, decisiones y reglas deben tener una estructura lógica correcta.
En lógica, la palabra formal indica que se analiza la forma del razonamiento. Se dejan de lado detalles secundarios del lenguaje natural y se trabaja con símbolos, reglas y estructuras precisas.
Por ejemplo, los siguientes razonamientos tienen la misma forma:
Aunque hablan de situaciones diferentes, ambos siguen el mismo patrón lógico.
Uno de los antecedentes más importantes de la lógica formal se encuentra en la obra de Aristóteles, en la antigua Grecia. Su estudio de los silogismos buscaba identificar cuándo una conclusión se obtiene correctamente a partir de ciertas premisas.
Un silogismo clásico tiene una estructura como esta:
La importancia de este ejemplo no está solo en su contenido, sino en que muestra cómo una conclusión puede derivarse de reglas generales y hechos concretos.
Durante muchos siglos, la lógica se expresó principalmente mediante lenguaje natural. Con el tiempo, matemáticos y filósofos comenzaron a usar símbolos para representar afirmaciones y relaciones lógicas con mayor precisión.
Este paso fue fundamental porque el lenguaje natural puede ser ambiguo. La lógica simbólica reduce esa ambigüedad mediante expresiones más exactas.
| Lenguaje natural | Idea lógica | Forma simbólica aproximada |
|---|---|---|
| No está activo | Negación | ¬p |
| Está activo y tiene permiso | Conjunción | p ∧ q |
| Está activo o tiene permiso | Disyunción | p ∨ q |
| Si está activo, puede ingresar | Implicación | p → q |
En el siglo XIX, George Boole desarrolló una forma algebraica de trabajar con valores lógicos. En lugar de operar solo con números, su álgebra permitía operar con valores como verdadero y falso.
El álgebra booleana es una de las bases de la computación moderna. Las computadoras trabajan internamente con señales binarias, y muchas decisiones de los programas se expresan mediante operaciones booleanas.
const tieneUsuario = true;
const tienePassword = true;
const formularioCompleto = tieneUsuario && tienePassword;
console.log(formularioCompleto);
En este ejemplo, la variable formularioCompleto almacena un valor booleano: verdadero o falso.
Gottlob Frege impulsó la lógica moderna al proponer un sistema formal más potente para representar razonamientos matemáticos. Su trabajo ayudó a desarrollar la lógica de predicados, que permite hablar de objetos, propiedades, relaciones y cuantificadores.
Gracias a este enfoque se pueden expresar afirmaciones más ricas que las de la lógica proposicional. Por ejemplo:
Más adelante estudiaremos este tipo de expresiones mediante predicados, variables y cuantificadores.
La relación entre lógica y computación es profunda. Antes de que existieran las computadoras modernas, ya se estudiaban preguntas sobre procedimientos, demostraciones, reglas formales y cálculo mecánico.
La programación heredó muchas de esas ideas:
La lógica clásica se apoya en varios principios fundamentales. Estos principios ayudan a entender cómo se manejan los valores verdadero y falso.
| Principio | Idea | Ejemplo |
|---|---|---|
| Identidad | Una proposición es igual a sí misma | Si p es verdadero, p es verdadero |
| No contradicción | Una proposición no puede ser verdadera y falsa al mismo tiempo | No puede ocurrir p y no p simultáneamente |
| Tercero excluido | Una proposición es verdadera o falsa | p o no p |
Un punto central de la lógica formal es distinguir entre verdad y validez. La verdad se refiere al valor de una proposición. La validez se refiere a la estructura de un argumento.
Por ejemplo:
La conclusión se obtiene correctamente a partir de las premisas. Ese tipo de relación será importante cuando estudiemos argumentos e inferencias.
Cuando escribimos una condición en un programa, estamos creando una pequeña estructura lógica. Si esa estructura no coincide con la regla que queremos representar, el programa puede comportarse mal.
const stock = 15;
const pagoAprobado = true;
if (stock > 0 && pagoAprobado) {
console.log("La compra puede realizarse");
} else {
console.log("La compra no puede realizarse");
}
La condición combina dos proposiciones: hay stock y el pago fue aprobado. La compra solo avanza cuando ambas son verdaderas.
Conocer la historia de la lógica ayuda a entender que muchos conceptos usados en programación no son invenciones aisladas. Tienen raíces en siglos de estudio sobre razonamiento, lenguaje, demostración y cálculo.
Cuando usamos operadores como &&, || o !, estamos aplicando ideas que provienen de la lógica formal y del álgebra booleana.
La lógica formal evolucionó desde el análisis de argumentos hasta convertirse en una herramienta fundamental para la matemática, la computación y la programación. Sus símbolos y reglas permiten expresar razonamientos de manera precisa.
En el próximo tema estudiaremos las proposiciones y los enunciados lógicos.