Una contingencia es una expresión lógica que a veces resulta verdadera y a veces falsa, según los valores de sus proposiciones simples.
Ya vimos dos casos extremos: las tautologías, que siempre son verdaderas, y las contradicciones, que siempre son falsas. Las contingencias ocupan el caso intermedio.
Una contingencia puede ser verdadera en algunas filas de su tabla de verdad y falsa en otras.
Una contingencia es una proposición compuesta cuyo valor de verdad depende de los valores de sus proposiciones simples.
La expresión p ∧ q no siempre es verdadera ni siempre es falsa. Depende de los valores de p y q.
| p | q | p ∧ q |
|---|---|---|
| V | V | V |
| V | F | F |
| F | V | F |
| F | F | F |
Como la columna final contiene valores verdaderos y falsos, la expresión es una contingencia.
La disyunción p ∨ q también es una contingencia.
| p | q | p ∨ q |
|---|---|---|
| V | V | V |
| V | F | V |
| F | V | V |
| F | F | F |
No es tautología porque hay una fila falsa. No es contradicción porque hay filas verdaderas.
Según su columna final, una expresión lógica puede clasificarse de tres maneras.
| Clasificación | Columna final | Ejemplo |
|---|---|---|
| Tautología | Siempre verdadera | p ∨ ¬p |
| Contradicción | Siempre falsa | p ∧ ¬p |
| Contingencia | Verdadera en algunos casos y falsa en otros | p ∧ q |
Para reconocer una contingencia mediante una tabla de verdad:
La implicación p → q es una contingencia.
| p | q | p → q |
|---|---|---|
| V | V | V |
| V | F | F |
| F | V | V |
| F | F | V |
Como tiene valores verdaderos y falsos en la columna final, no es tautología ni contradicción.
La mayoría de las condiciones útiles en programación son contingencias: a veces deben ser verdaderas y a veces falsas.
const edad = 20;
const esMayorDeEdad = edad >= 18;
if (esMayorDeEdad) {
console.log("Puede registrarse");
} else {
console.log("No puede registrarse");
}
La expresión edad >= 18 puede ser verdadera o falsa según el valor de edad.
Una condición útil normalmente debe distinguir casos. Si siempre es verdadera, no decide nada. Si siempre es falsa, nunca permite ejecutar el bloque.
| Tipo de condición | Comportamiento en código |
|---|---|
| Tautológica | El bloque se ejecuta siempre |
| Contradictoria | El bloque nunca se ejecuta |
| Contingente | El bloque depende de los datos |
Podemos comprobar si una expresión produce resultados diferentes para distintos valores.
const valores = [true, false];
for (const p of valores) {
for (const q of valores) {
const expresion = p && q;
console.log({ p, q, expresion });
}
}
La salida contendrá al menos un caso verdadero y al menos un caso falso.
En lógica, decir que una expresión es contingente no significa que sea confusa o desconocida. Significa que su valor depende de los valores de sus proposiciones simples.
Una regla de formulario suele ser contingente.
const nombreValido = true;
const emailValido = false;
const formularioValido = nombreValido && emailValido;
console.log(formularioValido);
La expresión será verdadera cuando ambos campos sean válidos y falsa cuando al menos uno no lo sea.
Una regla de acceso también suele ser contingente.
const esAdmin = false;
const esEditor = true;
const cuentaActiva = true;
const puedeEditar = (esAdmin || esEditor) && cuentaActiva;
console.log(puedeEditar);
Según los valores de rol y estado de cuenta, la expresión puede resultar verdadera o falsa.
Las contingencias representan expresiones cuyo valor depende de las proposiciones que las forman. Son esenciales para construir condiciones útiles, porque permiten distinguir entre distintos casos.
En el próximo tema estudiaremos las equivalencias lógicas fundamentales.