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.
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.
Formalmente, una función f : A → B es sobreyectiva si y solo si cumple la siguiente condición lógica:
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:
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**.
Es muy común confundir el codominio con la imagen de una función. La distinción es clave para entender la sobreyectividad:
Una función es sobreyectiva cuando esta contención es una igualdad total: no sobra nada en el codominio.
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.
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.
Ejemplo 2: Analizar si f(x) = x² sobre f : ℝ → ℝ es sobreyectiva.
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
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). | Sí | No necesariamente (pueden sobrar elementos) |
| Cada elemento de llegada recibe al menos una flecha (1 o más). | No necesariamente (pueden repetir elementos) | Sí |
| Cada elemento de llegada recibe exactamente una flecha. | Sí | Sí (esto es biyectiva) |
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.