12. Bicondicional o equivalencia lógica

El bicondicional expresa que dos proposiciones tienen el mismo valor de verdad. Se lee “si y solo si” y permite representar equivalencias entre condiciones.

12.1 Introducción

El bicondicional es un operador lógico que relaciona dos proposiciones y afirma que ambas tienen el mismo valor de verdad.

Se escribe p ↔ q y se lee "p si y solo si q". También se lo llama equivalencia lógica cuando se usa para indicar que dos expresiones tienen el mismo comportamiento lógico.

12.2 Idea principal

El bicondicional es verdadero cuando las dos proposiciones son verdaderas o cuando las dos son falsas. Es falso cuando una es verdadera y la otra es falsa.

p ↔ q significa que p y q coinciden en su valor de verdad.

Ejemplo en lenguaje natural:

  • El usuario puede acceder si y solo si su cuenta está habilitada.
  • Un número es par si y solo si es divisible por 2.
  • El botón se activa si y solo si el formulario es válido.

12.3 Tabla de verdad

La tabla de verdad del bicondicional muestra que el resultado es verdadero cuando p y q tienen el mismo valor.

p q p ↔ q
V V V
V F F
F V F
F F V

12.4 Bicondicional y doble implicación

El bicondicional puede entenderse como dos implicaciones que se cumplen al mismo tiempo.

p ↔ q equivale a (p → q) ∧ (q → p)

Esto significa que p implica q y q implica p. Por eso el bicondicional expresa una relación más fuerte que una implicación simple.

12.5 Ejemplo con números

La siguiente afirmación es un bicondicional:

Un número entero es par si y solo si es divisible por 2.

La relación funciona en ambos sentidos:

  • Si un número es par, entonces es divisible por 2.
  • Si un número es divisible por 2, entonces es par.

12.6 Bicondicional en JavaScript

Para dos valores booleanos, el bicondicional puede expresarse verificando si ambos valores son iguales.

const formularioValido = true;
const botonActivado = true;

const reglaCumplida = formularioValido === botonActivado;

console.log(reglaCumplida);

El resultado es true porque ambas proposiciones tienen el mismo valor de verdad.

12.7 Cuando el bicondicional falla

El bicondicional falla cuando las proposiciones no coinciden en su valor de verdad.

const cuentaHabilitada = false;
const puedeAcceder = true;

const reglaCumplida = cuentaHabilitada === puedeAcceder;

console.log(reglaCumplida);

La regla falla porque la cuenta no está habilitada pero el acceso aparece permitido.

12.8 Diferencia entre implicación y bicondicional

La implicación simple solo exige una dirección. El bicondicional exige ambas direcciones.

Forma Lectura Exige
p → q Si p, entonces q Que q se cumpla cuando p se cumple
p ↔ q p si y solo si q Que p y q siempre coincidan

12.9 Expresar bicondicional con AND, OR y NOT

El bicondicional también puede construirse usando operadores básicos.

p ↔ q equivale a (p ∧ q) ∨ (¬p ∧ ¬q)

Esto significa: ambas son verdaderas o ambas son falsas.

const p = true;
const q = true;

const bicondicional = (p && q) || (!p && !q);

console.log(bicondicional);

12.10 Relación con XOR

XOR es verdadero cuando dos proposiciones tienen valores distintos. El bicondicional es verdadero cuando tienen valores iguales.

p ↔ q equivale a ¬(p ⊕ q)

En JavaScript, para dos booleanos:

const p = false;
const q = false;

const xor = p !== q;
const bicondicional = p === q;

console.log(xor);
console.log(bicondicional);

12.11 Caso práctico: botón y formulario

Una regla de interfaz puede decir: el botón de enviar está habilitado si y solo si el formulario es válido.

const nombreValido = true;
const emailValido = true;

const formularioValido = nombreValido && emailValido;
const botonEnviarHabilitado = true;

const interfazCorrecta = formularioValido === botonEnviarHabilitado;

console.log(interfazCorrecta);

La interfaz cumple la regla cuando el estado del botón coincide con la validez del formulario.

12.12 Caso práctico: permisos

Supongamos que una acción debe estar disponible si y solo si el usuario tiene permiso.

const tienePermiso = false;
const accionDisponible = false;

const reglaPermisosCorrecta = tienePermiso === accionDisponible;

console.log(reglaPermisosCorrecta);

Si la acción estuviera disponible sin permiso, o si estuviera bloqueada con permiso, el bicondicional sería falso.

12.13 Equivalencia lógica

Dos expresiones son lógicamente equivalentes cuando siempre producen el mismo valor de verdad para los mismos valores de sus variables.

Por ejemplo, estas dos expresiones son equivalentes:

p → q
¬p ∨ q

Cuando estudiemos equivalencias lógicas, veremos cómo demostrar estas relaciones mediante tablas de verdad y leyes lógicas.

12.14 Errores comunes

  • Confundir "si" con "si y solo si".
  • Usar bicondicional cuando solo se necesita una implicación.
  • No verificar ambas direcciones de la relación.
  • Comparar valores no booleanos con === creyendo que siempre representa una equivalencia lógica.
  • Olvidar que el bicondicional también es verdadero cuando ambas proposiciones son falsas.

12.15 Qué debes recordar de este tema

  • El bicondicional se escribe p ↔ q y se lee "p si y solo si q".
  • Es verdadero cuando p y q tienen el mismo valor de verdad.
  • Equivale a (p → q) ∧ (q → p).
  • Para dos booleanos en JavaScript, puede expresarse con p === q.
  • Es útil para reglas donde dos condiciones deben coincidir exactamente.

12.16 Conclusión

El bicondicional expresa equivalencia entre proposiciones. Es más fuerte que una implicación porque exige que ambas direcciones se cumplan.

En el próximo tema estudiaremos la construcción de expresiones lógicas.