La tabla de verdad enumera todas las combinaciones de entradas y la salida correspondiente de una función booleana. Es la representación tabular completa que permite analizar, comparar y verificar expresiones lógicas.
En el tema anterior vimos funciones booleanas individuales y sus operaciones básicas. Para estudiarlas con rigor, necesitamos una forma sistemática de listar **todas** las entradas posibles y sus salidas.
La **tabla de verdad** cumple ese papel: es la tabla de valores de una función booleana, donde cada fila representa una combinación de bits de entrada y el valor resultante. Es el equivalente lógico de la tabla de una función discreta finita (tema 25).
Dada una función booleana f : Bⁿ → B, su tabla de verdad tiene 2ⁿ filas (una por cada tupla de entrada) y una columna de salida.
Para n = 2 variables p y q, la tabla estándar incluye estas columnas:
La tabla define completamente la función: conocer las cuatro salidas equivale a conocer f sin ambigüedad.
Para construir una tabla de verdad de n variables, sigue este procedimiento:
Con tres variables p, q, r se obtienen 8 filas, desde (0,0,0) hasta (1,1,1). Este orden garantiza que no se omita ninguna combinación del dominio Bⁿ.
La tabla de verdad permite detectar propiedades de la función de un vistazo:
Ejemplo de equivalencia: p → q y ¬p ∨ q producen la misma columna de salida en todas las filas, por lo que representan la misma función booleana.
Selecciona una función booleana de dos variables y observa cómo se completa su tabla de verdad fila a fila. Las celdas con valor 1 se muestran en verde y las de valor 0 en rojo. Usa **Siguiente Fila** para avanzar o **Reproducir** para ver la tabla completa.
Un generador automático recorre todas las combinaciones de bits y evalúa la función, produciendo la tabla completa sin errores de omisión.
// Generar todas las tuplas de n bits
function combinaciones(n) {
const result = [];
const total = Math.pow(2, n);
for (let i = 0; i < total; i++) {
const tupla = [];
for (let bit = n - 1; bit >= 0; bit--) {
tupla.push((i >> bit) & 1);
}
result.push(tupla);
}
return result;
}
function tablaVerdad(vars, expresion) {
const filas = combinaciones(vars.length);
console.log(`Tabla de verdad para ${vars.join(', ')}:`);
console.log([...vars, 'f'].join('\t'));
for (const fila of filas) {
const env = Object.fromEntries(vars.map((v, i) => [v, fila[i] === 1]));
const resultado = expresion(env) ? 1 : 0;
console.log([...fila, resultado].join('\t'));
}
}
tablaVerdad(['p', 'q'], ({ p, q }) => !p || q);
// Tabla de verdad para p, q:
// p q f
// 0 0 1
// 0 1 1
// 1 0 0
// 1 1 1
function sonEquivalentes(vars, expr1, expr2) {
const filas = combinaciones(vars.length);
return filas.every(fila => {
const env = Object.fromEntries(vars.map((v, i) => [v, fila[i] === 1]));
return Boolean(expr1(env)) === Boolean(expr2(env));
});
}
console.log("¿p→q equivale a ¬p∨q?", sonEquivalentes(
['p', 'q'],
({ p, q }) => !p || q,
({ p, q }) => !p || q
));
// ¿p→q equivale a ¬p∨q? true
Las tablas de verdad son la herramienta fundamental para analizar funciones booleanas de forma exhaustiva. Permiten verificar equivalencias, simplificar expresiones y conectar la lógica proposicional con el diseño de circuitos digitales.
En el próximo tema estudiaremos el **álgebra booleana aplicada**, donde las leyes algebraicas (conmutativa, asociativa, De Morgan, etc.) permiten manipular expresiones lógicas sin enumerar todas las filas de la tabla.