34. Álgebra de Boole

El álgebra de Boole estudia valores binarios y operaciones lógicas. Permite simplificar condiciones, razonar sobre decisiones de software y describe la base matemática de los circuitos digitales.

34.1 Introducción

Un programa toma decisiones de manera constante: permitir o negar acceso, repetir una tarea, validar un formulario, ejecutar una acción según el estado de un sistema. Estas decisiones se expresan mediante condiciones que pueden ser verdaderas o falsas.

El álgebra de Boole proporciona reglas para trabajar con esas condiciones. Sus operaciones básicas son la conjunción, la disyunción y la negación, conocidas en programación como AND, OR y NOT.

34.2 Valores booleanos

El álgebra booleana clásica usa dos valores: 0 y 1. Según el contexto se interpretan como falso y verdadero, apagado y encendido, o ausencia y presencia de una señal.

0 = falso = false.
1 = verdadero = true.

Una variable booleana solo puede representar uno de estos dos estados lógicos.

Los números 0 y 1 son símbolos de estados, no cantidades sobre las que se apliquen las reglas usuales de la aritmética. Por ejemplo, 1 + 1 vale 1 si el símbolo + representa OR, no 2.

34.3 Negación

La negación de una proposición p, escrita ¬p, invierte su valor lógico. En JavaScript se escribe normalmente con !.

p¬p
0 / falso1 / verdadero
1 / verdadero0 / falso

Ejemplo: si cuentaActiva es verdadero, !cuentaActiva expresa que la cuenta no está activa.

34.4 Conjunción: AND

La conjunción p ∧ q es verdadera solo cuando p y q son verdaderas. En JavaScript se representa con &&.

pqp ∧ q
000
010
100
111

Una condición «tiene credencial y cuenta activa» solo es verdadera si se cumplen ambos requisitos. AND es la operación adecuada para combinar condiciones obligatorias.

34.5 Disyunción: OR

La disyunción p ∨ q es verdadera cuando al menos una de las proposiciones es verdadera. En JavaScript se representa con ||.

pqp ∨ q
000
011
101
111

En lógica, OR suele ser inclusivo: si ambas condiciones son verdaderas, el resultado también lo es. El OR exclusivo, que exige exactamente una condición verdadera, es otra operación y se estudia más adelante.

34.6 Símbolos y operadores en programación

OperaciónNotación lógicaNotación booleana usualJavaScript
Negación¬pp'!p
Conjunciónp ∧ qp·qp && q
Disyunciónp ∨ qp + qp || q
Verdadero1true
Falso0false

Los signos + y · usados en álgebra de Boole no son suma y multiplicación aritméticas. En código, usar los operadores lógicos explícitos evita esa ambigüedad.

34.7 Definición algebraica

Un álgebra de Boole es una estructura con un conjunto de elementos, dos operaciones binarias (∧ y ∨), una operación de complemento (¬) y elementos distinguidos 0 y 1 que cumplen ciertas leyes.

Las operaciones ∧ y ∨ son conmutativas, asociativas y distributivas.
Existen identidades 0 y 1.
Cada elemento a tiene complemento ¬a:
a ∧ ¬a = 0 y a ∨ ¬a = 1.

El conjunto {0, 1} es el álgebra de Boole más conocida. También lo es el conjunto potencia de un conjunto U, usando intersección, unión y complemento respecto de U.

34.8 Leyes de identidad y dominación

Identidad:
p ∧ 1 = p.
p ∨ 0 = p.

Dominación:
p ∧ 0 = 0.
p ∨ 1 = 1.

La primera pareja muestra qué valor no cambia una expresión. La segunda muestra qué valor decide el resultado sin importar la otra entrada. Estas leyes ayudan a simplificar condiciones antes de implementarlas.

34.9 Idempotencia y complemento

Idempotencia:
p ∧ p = p.
p ∨ p = p.

Complemento:
p ∧ ¬p = 0.
p ∨ ¬p = 1.

Una condición repetida no agrega información. En cambio, una condición combinada con su negación produce una contradicción con AND y una tautología con OR.

34.10 Conmutatividad y asociatividad

Conmutatividad:
p ∧ q = q ∧ p.
p ∨ q = q ∨ p.

Asociatividad:
(p ∧ q) ∧ r = p ∧ (q ∧ r).
(p ∨ q) ∨ r = p ∨ (q ∨ r).

Podemos cambiar el orden o reagrupar condiciones conectadas únicamente por el mismo operador sin modificar el resultado lógico. Esto no autoriza a ignorar paréntesis cuando se mezclan AND y OR.

34.11 Distributividad

En álgebra booleana, ambas operaciones se distribuyen una sobre la otra:

p ∧ (q ∨ r) = (p ∧ q) ∨ (p ∧ r).

p ∨ (q ∧ r) = (p ∨ q) ∧ (p ∨ r).

La segunda ley es notable porque no tiene un análogo en la aritmética ordinaria. La distributividad permite reescribir expresiones en formas útiles para simplificación, circuitos y consultas.

34.12 Leyes de absorción

p ∨ (p ∧ q) = p.
p ∧ (p ∨ q) = p.

Ejemplo:
cuentaActiva OR (cuentaActiva AND esAdmin)
es equivalente a cuentaActiva.

Si p ya es verdadera, el término adicional no cambia el OR; si p es falsa, también es falso p ∧ q. Reconocer absorciones evita condiciones redundantes.

34.13 Leyes de De Morgan

Las leyes de De Morgan describen cómo distribuir una negación sobre una expresión compuesta:

¬(p ∧ q) = ¬p ∨ ¬q.
¬(p ∨ q) = ¬p ∧ ¬q.

«No ocurre p y q» equivale a «no p o no q».

Estas leyes son fundamentales para transformar condiciones negativas, filtros y validaciones. También conectan la lógica con los complementos, uniones e intersecciones de conjuntos.

34.14 Ejemplo de simplificación

Consideremos la expresión p ∧ (p ∨ q). Aplicando la ley de absorción obtenemos directamente p.

p ∧ (p ∨ q) = p.

Otro ejemplo:
(p ∧ q) ∨ (p ∧ ¬q)
= p ∧ (q ∨ ¬q)
= p ∧ 1
= p.

La segunda transformación usa distributividad, complemento e identidad. El resultado indica que el valor de q no influye en la expresión original.

34.15 Equivalencia lógica y tablas de verdad

Dos expresiones son lógicamente equivalentes si producen el mismo resultado para toda combinación posible de sus variables. Una tabla de verdad permite comprobarlo de forma exhaustiva cuando hay pocas variables.

pqp ∧ (p ∨ q)p
0000
0100
1011
1111

La tabla verifica la absorción para dos variables. Con n variables hay 2n filas, por lo que las leyes algebraicas son preferibles cuando la cantidad de variables crece.

34.16 Evaluar condiciones en JavaScript

function puedeAcceder(esAdmin, tieneMembresia, cuentaActiva) {
  return cuentaActiva && (esAdmin || tieneMembresia);
}

console.log(puedeAcceder(true, false, true));  // true
console.log(puedeAcceder(false, true, true));  // true
console.log(puedeAcceder(false, true, false)); // false

Los paréntesis hacen explícita la intención. Primero se resuelve la alternativa «administrador o membresía», y luego se exige que la cuenta esté activa.

34.17 Precedencia y evaluación de cortocircuito

En JavaScript, ! tiene mayor precedencia que &&, y && mayor que ||. Aun así, los paréntesis mejoran la legibilidad y evitan suposiciones erróneas.

function obtenerNombre(usuario) {
  return usuario && usuario.nombre;
}

console.log(obtenerNombre({ nombre: "Ana" })); // "Ana"
console.log(obtenerNombre(null));                // null

Los operadores && y || usan cortocircuito: pueden evitar evaluar la segunda parte. Además devuelven uno de sus operandos, no siempre un booleano; para una condición estrictamente booleana se puede usar Boolean(valor) o !!valor.

34.18 Operadores lógicos y operadores de bits

JavaScript distingue los operadores lógicos &&, || y ! de los operadores bit a bit &, | y ~. Los segundos actúan sobre la representación binaria de números enteros.

Lógico: true && false → false.
Bit a bit: 6 & 3 → 2, porque 110 & 011 = 010.

No son operadores intercambiables.

Los operadores bit a bit son útiles para máscaras y banderas, pero convierten sus operandos a enteros de 32 bits. Para condiciones ordinarias se deben usar los operadores lógicos.

34.19 Álgebra de conjuntos como álgebra booleana

Para un universo U, los subconjuntos de U forman un álgebra de Boole si interpretamos:

0 = ∅.
1 = U.
A ∧ B = A ∩ B.
A ∨ B = A ∪ B.
¬A = U \ A.

Las leyes de De Morgan de conjuntos son exactamente las versiones de las leyes lógicas: el complemento de una intersección es la unión de los complementos, y viceversa.

34.20 Aplicaciones prácticas

  • Validación de formularios y reglas de negocio.
  • Filtros de búsquedas y consultas con AND, OR y NOT.
  • Control de acceso basado en permisos y estados de cuenta.
  • Predicados para filtrar y transformar colecciones.
  • Circuitos digitales, puertas lógicas y sistemas embebidos.

Una expresión lógica clara facilita revisar reglas complejas. Simplificar no solo puede ahorrar operaciones: también reduce la posibilidad de que una condición de seguridad o negocio se interprete mal.

34.21 Errores frecuentes

  • Confundir OR inclusivo con OR exclusivo.
  • Usar & o | cuando corresponde && o ||.
  • Olvidar paréntesis en expresiones que mezclan AND y OR.
  • Creer que && y || siempre devuelven true o false.
  • Negar una expresión compuesta sin aplicar correctamente las leyes de De Morgan.
  • Eliminar una condición aparentemente redundante sin verificar la equivalencia lógica.

34.22 Qué debes recordar y conclusión

  • El álgebra de Boole clásica trabaja con los valores 0 y 1, o falso y verdadero.
  • NOT invierte, AND exige ambas condiciones y OR exige al menos una.
  • Las leyes de identidad, complemento, absorción, distributividad y De Morgan simplifican expresiones.
  • Dos expresiones equivalentes tienen la misma tabla de verdad.
  • En JavaScript, los operadores lógicos y los operadores bit a bit tienen usos diferentes.
  • Las expresiones booleanas modelan decisiones de software y la lógica de circuitos.

El álgebra de Boole permite pasar de reglas expresadas en lenguaje natural a condiciones precisas y comprobables. En el próximo tema estudiaremos funciones booleanas, que asignan un resultado lógico a cada combinación de entradas.