Errores comunes de lógica booleana y cómo detectarlos
Veinticinco maneras en que una regla booleana sale mal, cada una con la fórmula incorrecta y la correcta lado a lado, la fila en la que difieren y la solución.
La mayoría son errores de traducción: meter NOT a través de AND sin invertirlo, leer «o» como exclusivo, leer «a menos que» como OR, confundir una implicación con su recíproca, tratar «solo si» como «si». Algunos son errores de notación que el analizador detecta por ti: = y == no son operadores, AB es un nombre y no A AND B, ^ es XOR en la mayoría de los lenguajes, un & simple es bit a bit. El resto son errores de confianza: una verdad vacua que parece un aprobado, supuestos inconsistentes que hacen pasar todas las pruebas, un tiempo agotado leído como éxito, la cobertura leída como corrección.
Cuando un error es un par de fórmulas, el motor calculó ambas columnas y marcó las filas en las que no coinciden; el veredicto de equivalencia y el contraejemplo son del motor, no una afirmación. Cuando un error es una grafía, la página muestra exactamente lo que dice el analizador y la corrección que ofrece.
Cada página enlaza a la ley que explica el error y a la lección que lo enseña.
- NOT (A AND B) no es NOT A AND NOT B: el error de De Morgan
NOT (A AND B) significa «no ambos»; NOT A AND NOT B significa «ninguno». Difieren en dos de las cuatro filas, y la comprobación de equivalencia del motor nombra la primera de ellas como contraejemplo. - «A o B y C»: la ambigüedad de agrupación y cómo resolverla
«A o B y C» tiene dos lecturas, y son funciones distintas. El analizador lee A OR B AND C como A OR (B AND C); la otra lectura, (A OR B) AND C, difiere en dos de las ocho filas. - XOR de tres entradas es paridad impar, no «exactamente uno»
A XOR B XOR C es VERDADERO cuando un número impar de entradas son VERDADERAS, así que es VERDADERO cuando lo son las tres. - A → B no da B → A
A -> B no da B -> A. Las dos implicaciones difieren en las filas en que se cumple exactamente una de A y B, y la comprobación del motor nombra A = FALSO, B = VERDADERO como contraejemplo. - Necesario frente a suficiente: «solo si» no es «si»
«A solo si B» hace de B una condición necesaria para A: A -> B. «A si B» hace de B una condición suficiente para A: B -> A. - O inclusivo frente a exclusivo: «o ambos» es el valor por defecto
En lógica, A OR B es VERDADERO cuando se cumplen los dos. El «o» cotidiano muchas veces no lo es. - «A menos que» en una regla: AND NOT, no OR
«Los socios pueden entrar a menos que estén vetados» es member AND NOT banned. Escrita con OR, member OR NOT banned, la regla admite a dos grupos que no debería, y la tabla muestra las dos filas. - «Ni A ni B» es NOT A AND NOT B
«Ni A ni B» significa que fallan los dos: NOT A AND NOT B, que es NOR(A, B). - Verdad vacua: una propiedad que se cumple porque nada satisface los supuestos
De las premisas A y NOT A se sigue cualquier cosa, incluida B. - Los supuestos inconsistentes hacen que todas las pruebas pasen
Una regla comprobada bajo supuestos que no pueden cumplirse a la vez aprueba todas las pruebas por una mala razón. - «=» no es un operador booleano: usa ↔ o compara las fórmulas
A = B no es una fórmula en este lenguaje. - AB es un nombre, no A AND B: la multiplicación implícita
AB es un nombre, no A AND B. Los libros omiten el punto en A·B; el analizador no, porque las entradas de una regla tienen nombres como member y banned, y AB tiene que poder ser uno de ellos. - ^ significa XOR en C, Java y Python, no AND ni potencia
^ es el o exclusivo en C, Java, JavaScript y Python, una potencia en Excel y muchas calculadoras, y la conjunción en algunos textos de lógica. - & y | simples son operaciones bit a bit en la mayoría de lenguajes
Un & o un | simple es un operador bit a bit en C, Java y JavaScript, y en Java es además un operador lógico sin cortocircuito. El analizador rechaza los dos y ofrece la palabra o el símbolo doble. - ~ es NOT bit a bit en código y NOT lógico en algunos libros
~ es el complemento bit a bit en C, Java, JavaScript y Python, donde ~1 es -2, y el NOT lógico en algunos libros de lógica. El analizador rechaza ~A y ofrece NOT, ! o ¬. - El doble igual (==) compara valores; para equivalencia lógica usa ↔
== compara dos valores en un programa y devuelve un booleano. - != entre booleanos es XOR
Entre dos valores booleanos, != es el o exclusivo: VERDADERO exactamente cuando difieren. El analizador rechaza A != B y ofrece XOR, que es la misma función bajo su nombre lógico. - Variantes de flechas: => y <=> frente a → y ↔, qué significa cada una
-> y → son la implicación; <-> y ↔ son el bicondicional. - NULL no es FALSO: la lógica trivaluada de SQL
a OR NOT a es una tautología sobre dos valores, y el motor lo demuestra en las dos filas. En SQL, donde a puede ser NULL, la misma expresión es NULL, y una cláusula WHERE descarta la fila. - Una entrada sin asignar no es FALSO: asignaciones incompletas
Una entrada sin valor no es FALSO. Evaluar A AND B con A = VERDADERO y B sin asignar no da ningún valor, y el motor dice qué entrada falta en lugar de adivinar. - «Simplificado» no es «mínimo»: lo que un simplificador puede prometer
El simplificador no encontró ninguna ley que acorte (A AND B) OR (A AND NOT B) OR (NOT A AND B), y sin embargo la función es A OR B. - Un tiempo agotado no es un aprobado: resultados «No determinado»
Cuando el motor se queda sin presupuesto o alcanza un límite de tamaño, informa «No determinado», nunca un aprobado. - La cobertura no es corrección: las pruebas siguen necesitando resultados esperados
Un conjunto de pruebas puede cubrir todas las entradas y todas las ramas de una regla y aun así no detectar el error, porque la cobertura mide lo que las pruebas tocaron, no si los resultados… - Nombres confundibles: l, 1, I, O y 0 en los nombres de variables
l1 e I1 son entradas distintas que se ven iguales en pantalla, y rate y Rate difieren solo en las mayúsculas. - La precedencia cambia entre lenguajes: not a == b en Python
not a == b es not (a == b) en Python, porque la comparación liga con más fuerza que not. En C, a & b == c es a & (b == c).
Preguntas
¿Cuál es el error más común?
Al escribir reglas, el error de De Morgan (NOT (A AND B) leído como NOT A AND NOT B) y el de agrupación (A OR B AND C leído con la agrupación equivocada). En código, el ampersand simple y el acento circunflejo. El ejemplo de la regla de entrada muestra un error de agrupación que deja pasar a un socio vetado.
Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.