29. Funciones biyectivas

Una función es biyectiva si es inyectiva y sobreyectiva al mismo tiempo. Establece un emparejamiento perfecto uno a uno entre el dominio y el codominio, permitiendo transformaciones completamente reversibles.

29.1 Introducción

Hemos estudiado dos propiedades fundamentales de las funciones: la **inyectividad** (que garantiza que entradas diferentes vayan a salidas diferentes) y la **sobreyectividad** (que garantiza que todo el codominio sea alcanzado por la función).

Cuando una función cumple con **ambas propiedades simultáneamente**, se denomina **función biyectiva** o *biyección*. Las biyecciones son el tipo de relación más restrictivo y limpio, ya que emparejan de forma perfecta cada elemento de partida con un único elemento de llegada, sin que sobre ni falte nada.

29.2 Definición Formal

Formalmente, una función f : A → B es biyectiva si cumple las siguientes dos condiciones:

1. f es Inyectiva: ∀ x₁, x₂ ∈ A, si f(x₁) = f(x₂) ⇒ x₁ = x₂ 2. f es Sobreyectiva: ∀ y ∈ B, ∃ x ∈ A tal que f(x) = y

Bajo una función biyectiva, cada elemento de A tiene exactamente una imagen en B, y cada elemento de B tiene exactamente una preimagen en A. Esta correspondencia mutua se conoce como **correspondencia biunívoca**.

29.3 Cardinalidad en Conjuntos Finitos

Para conjuntos finitos, la biyectividad impone una restricción matemática muy importante sobre el tamaño de los conjuntos:

Si existe una función biyectiva f : A → B, entonces **el dominio y el codominio deben tener exactamente el mismo número de elementos**:

|A| = |B|
  • Si |A| > |B|, por el principio del palomar, al menos dos elementos de A compartirán salida, rompiendo la inyectividad.
  • Si |A| < |B|, no habrá suficientes elementos en A para cubrir todo el codominio, rompiendo la sobreyectividad.

29.4 Simulador: Mapeo de Biyecciones

Prueba el simulador para analizar cómo se acoplan las flechas en una biyección. Selecciona diferentes funciones y observa cómo el sistema colorea en verde los elementos que cumplen la regla de biyectividad (reciben exactamente una flecha) y en rojo/amarillo aquellos que violan la regla (reciben 0 o más de una flecha).

Inspector de Biyectividad (Mapeo de Flechas) Es Biyectiva
¡La función es biyectiva! Correspondencia perfecta 1 a 1.

29.5 Demostración Analítica

Para demostrar que una función es biyectiva, se deben presentar dos pruebas independientes: la de inyectividad y la de sobreyectividad.

Ejemplo: Demostrar que f(x) = 2x + 5 de f : ℝ → ℝ es biyectiva.

1. Demostración de Inyectividad: Partimos de: f(a) = f(b) 2a + 5 = 2b + 5 2a = 2b a = b ⇒ Es Inyectiva. 2. Demostración de Sobreyectividad: Sea y ∈ ℝ (codominio). Queremos encontrar x ∈ ℝ (dominio) tal que f(x) = y: 2x + 5 = y 2x = y - 5 x = (y - 5) / 2 Como y es real, (y - 5) / 2 siempre existe y es real. Evaluamos f((y-5)/2) = 2((y-5)/2) + 5 = y - 5 + 5 = y. ⇒ Es Sobreyectiva. Al cumplir ambas condiciones, f es una función biyectiva.

29.6 Biyectividad en Programación

Para comprobar computacionalmente si una función sobre colecciones finitas es biyectiva, podemos verificar la inyectividad y la sobreyectividad juntas mediante código.

const dominio = [1, 2, 3, 4];
const codominio = [3, 4, 5, 6];

// Función f(x) = x + 2
const f = (x) => x + 2;

function esInyectiva(dom, func) {
  const salidas = dom.map(func);
  return new Set(salidas).size === dom.length;
}

function esSobreyectiva(dom, codom, func) {
  const salidas = dom.map(func);
  return codom.every(y => salidas.includes(y));
}

function esBiyectiva(dom, codom, func) {
  // Una función es biyectiva si cumple ambas propiedades
  return esInyectiva(dom, func) && esSobreyectiva(dom, codom, func);
}

console.log("¿f(x) es Inyectiva?", esInyectiva(dominio, f));
console.log("¿f(x) es Sobreyectiva?", esSobreyectiva(dominio, codominio, f));
console.log("¿f(x) es Biyectiva?", esBiyectiva(dominio, codominio, f));
// ¿f(x) es Inyectiva? true
// ¿f(x) es Sobreyectiva? true
// ¿f(x) es Biyectiva? true

29.7 Errores Comunes

  • Asumir biyectividad solo comparando tamaños de conjuntos: Si bien |A| = |B| es una condición necesaria para que exista una biyección entre conjuntos finitos, esto no significa que *cualquier* función que definas entre ellos vaya a ser biyectiva. Aún debes comprobar que la asignación específica sea uno a uno.
  • Ignorar el dominio en funciones reales: La función exponencial f(x) = eˣ es inyectiva de ℝ → ℝ, pero no es sobreyectiva (nunca produce valores negativos ni cero). Sin embargo, si redefinimos el codominio a los reales positivos, f : ℝ → ℝ⁺, la función se vuelve perfectamente biyectiva.

29.8 Qué debes recordar de este tema

  • Una función es biyectiva si es inyectiva y sobreyectiva simultáneamente.
  • Establece una correspondencia biunívoca (emparejamiento perfecto sin elementos sobrantes).
  • Para conjuntos finitos, es obligatorio que |A| = |B| para que pueda existir una biyección.
  • En diagramas de flechas, todos los elementos de llegada reciben exactamente una flecha.
  • Las funciones biyectivas son las únicas que admiten una **función inversa**.

29.9 Conclusión

La importancia principal de la biyectividad radica en que **las funciones biyectivas son reversibles**. Al existir un emparejamiento perfecto uno a uno en ambas direcciones, podemos deshacer la transformación de datos sin ninguna ambigüedad. Esta reversibilidad es el pilar conceptual necesario para estudiar las funciones inversas.

En el próximo tema estudiaremos las **funciones inversas**, analizando cómo construir la función que recorre el camino de regreso desde el codominio hacia el dominio, y cómo implementarla en programación.