¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Funciones inyectivas, sobreyectivas y biyectivas

Después de esta lección: Puedo decir si una asignación es una función, inyectiva, sobreyectiva o biyectiva.

Lección de 55 min2 comandosLaboratorio de compiladores y arquitectura: gcc, flex, bison y RISC-V en una VM

Un alumno, un aula

Una función asigna a cada elemento de un conjunto exactamente un elemento de otro. Sirve para saber si puedes deshacer una asignación, por ejemplo si de un número de aula puedes volver al alumno.

Una facultad asigna aula a cada matrícula. Si dos alumnos comparten aula, el aula no te dice quién es quién. Esta lección da nombre a cada situación.

Al final de esta lección

Nota

Puedo decir si una asignación es una función, inyectiva, sobreyectiva o biyectiva.

Palabras clave

PalabraQué significa
Dominioel conjunto de donde salen las entradas
Codominioel conjunto donde pueden caer las salidas
Funciónuna asignación con una sola salida para cada entrada
Inyectivados entradas distintas nunca dan la misma salida
Sobreyectivatoda salida posible la da alguna entrada
Biyectivainyectiva y sobreyectiva a la vez

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una función da una salida por entrada

Una asignación une cada elemento del dominio con un elemento del codominio. Es una función si cada entrada tiene una salida, y solo una.

Varias entradas pueden compartir salida. Lo que no puede pasar es que una entrada tenga dos salidas, ni que se quede sin ninguna.

Dos preguntas definen los tres tipos

Primera pregunta: ¿alguna salida se repite? Si ninguna, la función es inyectiva: puedes volver de la salida a la entrada.

Segunda pregunta: ¿queda alguna salida sin usar? Si ninguna, es sobreyectiva. Si cumple las dos, es biyectiva: cada entrada tiene su pareja exacta.

Ejemplo resuelto: cuatro asignaciones

DominioCodominioAsignaciónTipo
1, 2, 3a, b, c1→a, 2→b, 3→cBiyectiva
1, 2a, b, c1→a, 2→bInyectiva, falta c
1, 2, 3a, b1→a, 2→b, 3→aSobreyectiva, a se repite
1, 2, 3a, b, c1→a, 2→b, 3→aNinguna, a se repite y falta c

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Python detecta una salida repetida

Comando
python3 -c "m = {1: 'a', 2: 'b', 3: 'a'}; print(len(m), len(set(m.values())), len(m) == len(set(m.values())))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que inyectiva y sobreyectiva son lo mismo. No lo son. Inyectiva mira si una salida se repite. Sobreyectiva mira si alguna salida queda sin usar. Una puede cumplirse sin la otra.

Dirección de memoria y línea de caché

Una caché pequeña tiene 4 líneas. La línea de una dirección de memoria es el resto de dividir la dirección entre 4. Es una función: cada dirección va a una sola línea.

Las direcciones 0 y 4 van a la misma línea, así que no es inyectiva. Las cuatro líneas se usan, así que sí es sobreyectiva.

Las líneas de las direcciones 0 a 7

Comando
python3 -c "print([a % 4 for a in range(8)])"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una relación de equivalencia reparte en grupos

Una relación dice qué pares de elementos están relacionados. Es de equivalencia si cumple tres cosas. Todo elemento se relaciona consigo mismo. Si A se relaciona con B, entonces B con A. Si A con B y B con C, entonces A con C.

«Vivir en la misma ciudad» lo cumple, y reparte a la gente en grupos que no se tocan.

Sobre este laboratorio y su código: Laboratorio de compiladores y arquitectura: gcc, flex, bison y RISC-V en una VM

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.