28. Funciones sobreyectivas

Una función es sobreyectiva si cubre por completo el codominio. Es decir, bajo una función sobreyectiva, no hay ningún elemento en el conjunto de llegada que se quede huérfano de preimagen.

28.1 Introducción

Cuando definimos una función f : A → B, especificamos un conjunto de partida A (dominio) y un conjunto de llegada B (codominio). Sin embargo, no siempre es obligatorio que los valores calculados por la función (la imagen) cubran por completo todo el codominio.

Una función es **sobreyectiva** (o *suprayectiva*) si la imagen de la función es igual a su codominio. En la práctica, esto significa que cualquier elemento que elijas del conjunto de llegada B tiene, como mínimo, un elemento en el conjunto de partida A que lo produce.

28.2 Definición Formal

Formalmente, una función f : A → B es sobreyectiva si y solo si cumple la siguiente condición lógica:

∀ y ∈ B, ∃ x ∈ A tal que f(x) = y

Esto se traduce directamente como: *Para todo elemento y en el codominio B, existe al menos un elemento x en el dominio A tal que su imagen bajo la función es y.*

En términos de conjuntos, una función es sobreyectiva si:

Im(f) = B

Si existe al menos un elemento y ∈ B que no tiene ninguna preimagen (es decir, ningún x cumple f(x) = y), entonces la función **no es sobreyectiva**.

28.3 Diferencia entre Codominio e Imagen

Es muy común confundir el codominio con la imagen de una función. La distinción es clave para entender la sobreyectividad:

  • Codominio (B): Es el conjunto total de valores que la función *podría* potencialmente devolver (declarado al definir la función).
  • Imagen (Im(f)): Es el conjunto de valores que la función *realmente* devuelve al evaluar todos los elementos del dominio. La imagen siempre es un subconjunto del codominio (Im(f) ⊆ B).

Una función es sobreyectiva cuando esta contención es una igualdad total: no sobra nada en el codominio.

28.4 Tablero de Mapeo Interactivo

Utiliza el siguiente visualizador interactivo para examinar cómo viajan las flechas y cómo se comporta la sobreyectividad. Observa que en las opciones no sobreyectivas, los elementos "huérfanos" del codominio (aquellos que no reciben ninguna flecha) parpadean en rojo y amarillo para alertar el fallo de la condición.

Tablero de Mapeo (Test de Sobreyectividad) Es Sobreyectiva
¡La función es sobreyectiva! Todos los elementos de B reciben al menos una flecha.

28.5 Demostración Algebraica

Para demostrar analíticamente que una función es sobreyectiva, tomamos un elemento genérico y del codominio e intentamos resolver la ecuación f(x) = y en términos de x, verificando que la solución x pertenezca al dominio.

Ejemplo 1: Demostrar que f(x) = 2x - 3 sobre f : ℝ → ℝ es sobreyectiva.

Queremos ver si para cualquier y ∈ ℝ, existe x ∈ ℝ tal que: 2x - 3 = y Despejamos x: 2x = y + 3 x = (y + 3) / 2 Dado que y es un número real, (y+3)/2 también es siempre un número real. Por lo tanto, x ∈ ℝ siempre existe. Al evaluar f((y+3)/2) obtenemos y. La función es sobreyectiva.

Ejemplo 2: Analizar si f(x) = x² sobre f : ℝ → ℝ es sobreyectiva.

Queremos resolver f(x) = y, es decir: x² = y x = ±√y Si elegimos un elemento del codominio y = -4 (que es un número real), x = ±√(-4) = ±2i. Como 2i no es un número real, no existe ningún número real x tal que x² = -4. La función no es sobreyectiva sobre ℝ.

28.6 Verificar Sobreyectividad en Programación

En programación, podemos verificar si una función discreta es sobreyectiva sobre un dominio y codominio finitos mapeando las salidas y comprobando si cada elemento del codominio está incluido en los resultados. El método every() de JavaScript es ideal para esta validación.

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

// Función f(n) = n² - n
const f = (n) => n * n - n;

function esSobreyectiva(dom, codom, func) {
  const imagenes = dom.map(func);
  
  // Comprobar si cada elemento del codominio está incluido en las imágenes
  return codom.every(y => imagenes.includes(y));
}

console.log("¿f(n) es sobreyectiva?", esSobreyectiva(dominio, codominio, f));

// Si ampliamos el codominio añadiendo un valor no alcanzable:
const codominioAmpliado = [0, 2, 6, 12, 20, 99];
console.log("¿Es sobreyectiva con codominio ampliado?", esSobreyectiva(dominio, codominioAmpliado, f));
// ¿f(n) es sobreyectiva? true
// ¿Es sobreyectiva con codominio ampliado? false

28.7 Comparativa de Propiedades

A modo de repaso rápido, comparemos visualmente inyectividad y sobreyectividad sobre diagramas de flechas:

Caso en Diagrama de Flechas ¿Es Inyectiva? ¿Es Sobreyectiva?
Cada elemento de llegada recibe a lo sumo una flecha (0 o 1). No necesariamente (pueden sobrar elementos)
Cada elemento de llegada recibe al menos una flecha (1 o más). No necesariamente (pueden repetir elementos)
Cada elemento de llegada recibe exactamente una flecha. (esto es biyectiva)

28.8 Errores Comunes

  • Analizar solo la fórmula sin mirar el codominio: Una función no es sobreyectiva "por sí sola". Siempre se define en relación a su codominio. Por ejemplo, f(x) = sen(x) no es sobreyectiva de ℝ → ℝ (porque los valores fuera de [-1, 1] no se alcanzan), pero sí es sobreyectiva de ℝ → [-1, 1].
  • Confundir existencia con unicidad: La sobreyectividad requiere que *exista al menos una* preimagen. No importa si existen dos o tres preimágenes para una misma salida (eso solo violaría la inyectividad, no la sobreyectividad).

28.9 Qué debes recordar de este tema

  • Una función es sobreyectiva si su imagen coincide con su codominio: Im(f) = B.
  • Simbólicamente: ∀ y ∈ B, ∃ x ∈ A tal que f(x) = y.
  • En diagramas de flechas, todos los elementos del codominio tienen al menos una flecha apuntando a ellos.
  • Se puede probar analíticamente despejando la variable independiente y comprobando que existe en el dominio para cualquier elemento de llegada.

28.10 Conclusión

La sobreyectividad nos garantiza que ningún valor del conjunto de llegada quede aislado o inutilizado. En bases de datos y diseño de sistemas, esto se traduce en garantizar que todos los estados posibles sean alcanzables, o que todas las categorías del sistema tengan al menos un objeto asociado. Al combinar inyectividad y sobreyectividad, obtenemos las funciones biyectivas, que abren la puerta al cálculo de funciones inversas.

En el próximo tema uniremos ambas propiedades para estudiar las **funciones biyectivas**, viendo cómo la correspondencia perfecta uno a uno entre dominio y codominio nos permite realizar transformaciones de datos completamente reversibles.