6. Dominio, codominio e imagen de una relación

El dominio, el codominio y la imagen ayudan a describir qué elementos participan en una relación, desde dónde salen los vínculos y hacia qué elementos llegan realmente.

6.1 Introducción

Cuando definimos una relación entre dos conjuntos, no alcanza con listar sus pares ordenados. También conviene identificar qué elementos pueden aparecer como origen, qué elementos pueden aparecer como destino y cuáles aparecen efectivamente relacionados.

Para eso usamos tres conceptos: dominio, codominio e imagen. Estos conceptos son útiles tanto en matemática como en programación, especialmente cuando validamos datos, permisos, estados o asociaciones.

6.2 Relación entre dos conjuntos

Supongamos que tenemos una relación R de un conjunto A en un conjunto B. La relación está formada por pares ordenados (a, b), donde a pertenece a A y b pertenece a B.

A = {Ana, Luis, Marta} B = {leer, editar, eliminar} R = {(Ana, leer), (Ana, editar), (Luis, leer)}

Con esta información podemos distinguir dominio, codominio e imagen.

6.3 Dominio de una relación

El dominio de una relación es el conjunto de elementos que aparecen como primer componente en algún par ordenado de la relación.

R = {(Ana, leer), (Ana, editar), (Luis, leer)} Dominio de R = {Ana, Luis}

Aunque Marta pertenece al conjunto A, no aparece en ningún par de la relación. Por eso no forma parte del dominio efectivo de R.

6.4 Codominio de una relación

El codominio es el conjunto de posibles valores de llegada. En una relación de A en B, el codominio es B.

B = {leer, editar, eliminar} Codominio de R = {leer, editar, eliminar}

El codominio incluye todos los destinos permitidos por la definición de la relación, aunque algunos no estén usados en los pares existentes.

6.5 Imagen de una relación

La imagen de una relación es el conjunto de elementos del codominio que aparecen efectivamente como segundo componente en algún par ordenado.

R = {(Ana, leer), (Ana, editar), (Luis, leer)} Imagen de R = {leer, editar}

El permiso eliminar pertenece al codominio, pero no pertenece a la imagen porque ningún usuario está relacionado con ese permiso.

6.6 Comparación entre los tres conceptos

Concepto Qué representa En el ejemplo
Dominio Elementos que aparecen como origen en la relación. {Ana, Luis}
Codominio Todos los destinos posibles definidos para la relación. {leer, editar, eliminar}
Imagen Destinos que aparecen realmente en los pares de la relación. {leer, editar}

6.7 Dominio, codominio e imagen en JavaScript

Podemos calcular dominio e imagen recorriendo los pares de una relación. El codominio normalmente se conoce porque fue definido antes.

const usuarios = ["Ana", "Luis", "Marta"];
const permisos = ["leer", "editar", "eliminar"];

const relacion = [
  ["Ana", "leer"],
  ["Ana", "editar"],
  ["Luis", "leer"]
];

const dominio = new Set(relacion.map(([origen]) => origen));
const codominio = new Set(permisos);
const imagen = new Set(relacion.map(([, destino]) => destino));

console.log([...dominio]);
console.log([...codominio]);
console.log([...imagen]);

El uso de Set evita repeticiones y permite representar los conjuntos resultantes de manera directa.

6.8 Elementos sin relación

Comparar el conjunto de partida con el dominio permite detectar elementos que no participan como origen. Comparar el codominio con la imagen permite detectar destinos que no reciben vínculos.

const usuarios = ["Ana", "Luis", "Marta"];
const permisos = ["leer", "editar", "eliminar"];

const relacion = [
  ["Ana", "leer"],
  ["Ana", "editar"],
  ["Luis", "leer"]
];

const dominio = new Set(relacion.map(([usuario]) => usuario));
const imagen = new Set(relacion.map(([, permiso]) => permiso));

const usuariosSinPermisos = usuarios.filter(usuario => !dominio.has(usuario));
const permisosNoAsignados = permisos.filter(permiso => !imagen.has(permiso));

console.log(usuariosSinPermisos);
console.log(permisosNoAsignados);

Este tipo de análisis es útil para auditorías, validaciones y detección de datos incompletos.

6.9 Ejemplo con estados de un sistema

En una máquina de estados, una relación puede indicar transiciones válidas. El dominio contiene estados desde los cuales se puede salir. La imagen contiene estados a los que se puede llegar.

Estados = {pendiente, aprobado, rechazado, archivado} Transiciones = { (pendiente, aprobado), (pendiente, rechazado), (aprobado, archivado) } Dominio = {pendiente, aprobado} Codominio = {pendiente, aprobado, rechazado, archivado} Imagen = {aprobado, rechazado, archivado}

El estado pendiente pertenece al codominio, pero no a la imagen en esta relación, porque ninguna transición llega a pendiente.

6.10 Errores comunes

  • Confundir el conjunto de partida con el dominio efectivo de la relación.
  • Confundir codominio con imagen.
  • Suponer que todos los elementos del codominio deben aparecer en algún par.
  • Olvidar que el dominio se obtiene mirando el primer componente de los pares.
  • Olvidar que la imagen se obtiene mirando el segundo componente de los pares.

6.11 Aplicaciones en programación

Situación Dominio Imagen
Usuarios y permisos Usuarios con algún permiso asignado Permisos usados realmente
Productos y categorías Productos clasificados Categorías utilizadas
Nodos y conexiones Nodos con aristas salientes Nodos con aristas entrantes
Estados y transiciones Estados desde los que se puede avanzar Estados alcanzables por transición

6.12 Qué debes recordar de este tema

  • El dominio de una relación contiene los elementos que aparecen como primer componente.
  • El codominio es el conjunto de posibles destinos definido para la relación.
  • La imagen contiene los elementos que aparecen realmente como segundo componente.
  • La imagen siempre está contenida en el codominio.
  • El dominio efectivo no siempre coincide con todo el conjunto de partida.
  • En programación, estos conceptos ayudan a detectar datos no relacionados, permisos no usados y estados no alcanzables.

6.13 Conclusión

Dominio, codominio e imagen permiten describir una relación con más precisión que una simple lista de pares. Estos conceptos ayudan a entender qué elementos participan, cuáles son destinos posibles y cuáles aparecen realmente conectados.

En el próximo tema veremos con más detalle la representación de relaciones mediante pares ordenados.