Una función es una relación especial donde cada elemento del dominio tiene exactamente una imagen. Esta restricción simple es la base de toda la matemática aplicada y de cualquier programa de computadora.
Hasta aquí hemos estudiado relaciones binarias en toda su generalidad: un elemento puede estar relacionado con ninguno, uno o varios elementos del codominio. Las funciones son un caso particular muy importante: cada elemento del dominio tiene exactamente una imagen.
Esta condición de unicidad es lo que diferencia a una función de una relación general, y es precisamente lo que le da su poder expresivo: una función transforma cada entrada en una salida bien definida y predecible.
Una función f de un conjunto A en un conjunto B, escrita f : A → B, es una relación de A en B que cumple:
La imagen de a bajo f se escribe f(a) y se llama el valor de la función en a.
No toda relación es una función. La diferencia clave está en cuántas imágenes puede tener cada elemento del dominio:
| Situación | ¿Es función? | Motivo |
|---|---|---|
| Cada elemento tiene exactamente una imagen | Sí | Cumple existencia y unicidad |
| Un elemento tiene dos imágenes distintas | No | Viola la unicidad |
| Un elemento no tiene ninguna imagen | No | Viola la existencia |
| Dos elementos distintos tienen la misma imagen | Sí | No viola ninguna condición |
| Hay elementos del codominio sin preimagen | Sí | No es obligatorio que todo b ∈ B sea imagen |
Sea A = {1, 2, 3} y B = {a, b, c}. La relación:
Es una función porque cada elemento de A aparece exactamente una vez como primer componente. El hecho de que tanto 1 como 2 tengan imagen a no es un problema: la condición solo exige unicidad hacia la derecha.
La relación:
No es una función porque el elemento 1 tiene dos imágenes distintas: a y b. Viola la condición de unicidad.
Tampoco sería función si faltara algún elemento de A como primer componente, por ejemplo:
El elemento 3 no tiene imagen, lo que viola la condición de existencia.
Para verificar si una relación es función, comprobamos que todo elemento del dominio aparece como primer componente exactamente una vez.
function esFuncion(dominio, relacion) {
for (const a of dominio) {
const imagenes = relacion.filter(([x]) => x === a);
// Debe tener exactamente una imagen
if (imagenes.length !== 1) return false;
}
return true;
}
const A = [1, 2, 3];
const f = [[1, 'a'], [2, 'a'], [3, 'c']];
const R = [[1, 'a'], [1, 'b'], [2, 'c']];
const S = [[1, 'a'], [2, 'b']]; // falta el 3
console.log(esFuncion(A, f)); // true
console.log(esFuncion(A, R)); // false (1 tiene dos imágenes)
console.log(esFuncion(A, S)); // false (3 no tiene imagen)
Las funciones tienen una terminología propia que conviene conocer:
| Término | Símbolo | Significado |
|---|---|---|
| Función | f : A → B | f asigna a cada a ∈ A un único b ∈ B |
| Dominio | Dom(f) = A | Conjunto de todas las entradas posibles |
| Codominio | Cod(f) = B | Conjunto donde viven todas las posibles salidas |
| Imagen de a | f(a) | El único b tal que (a, b) ∈ f |
| Imagen de f | Im(f) | Conjunto de todos los valores realmente alcanzados |
| Preimagen de b | f⁻¹(b) | Conjunto de a ∈ A con f(a) = b |
En programación, las funciones (o métodos) son exactamente la misma idea: reciben una entrada y producen una salida bien definida. Una función pura en programación es aquella que, para la misma entrada, siempre devuelve la misma salida sin efectos secundarios.
// Una función matemática: f(x) = x² + 1
function f(x) {
return x * x + 1;
}
// Verificar que es una asignación única:
// para cada entrada existe exactamente una salida
console.log(f(2)); // 5
console.log(f(3)); // 10
console.log(f(2)); // siempre 5, nunca cambia
La condición de unicidad equivale a que la función sea determinista: la misma entrada produce siempre la misma salida.
Es importante distinguir entre la imagen de una función y su codominio. El codominio es el conjunto donde pueden vivir los resultados; la imagen es el conjunto de resultados que realmente se alcanzan.
const f = [[1, 'a'], [2, 'a'], [3, 'b']];
const codominio = ['a', 'b', 'c', 'd'];
function imagen(relacion) {
return [...new Set(relacion.map(([, b]) => b))];
}
console.log(imagen(f)); // ['a', 'b']
console.log(codominio); // ['a', 'b', 'c', 'd']
Según la relación entre dominio, codominio e imagen, las funciones se clasifican en tres tipos principales que estudiaremos en detalle en los próximos temas:
| Tipo | Condición | Ejemplo |
|---|---|---|
| Inyectiva | Elementos distintos tienen imágenes distintas | f(a) = f(b) implica a = b |
| Sobreyectiva | Todo elemento del codominio tiene preimagen | Im(f) = codominio |
| Biyectiva | Inyectiva y sobreyectiva a la vez | Correspondencia uno a uno |
| Contexto | Ejemplo de función | Dominio → Codominio |
|---|---|---|
| Matemáticas | f(x) = x² | ℝ → ℝ |
| Programación | parseInt(cadena) | String → Number |
| Bases de datos | Clave primaria → Fila | ID → Registro |
| Criptografía | Función hash | Mensaje → Resumen fijo |
| Teoría de grafos | Grado de un nodo | Nodo → ℕ |
El concepto de función es uno de los más fundamentales de las matemáticas y la informática. Su característica esencial, la unicidad de la imagen, garantiza que cada entrada produce una salida predecible y bien definida. Sobre esta base se construyen todos los tipos de funciones que estudiaremos a continuación.
En el próximo tema veremos cómo las funciones son un caso especial de relaciones binarias, y qué condiciones exactas sobre los pares ordenados determinan si una relación es o no una función.