25. Relaciones de equivalencia

Una relación de equivalencia permite agrupar elementos que se consideran iguales según un criterio. Debe ser reflexiva, simétrica y transitiva.

25.1 Introducción

No siempre necesitamos que dos elementos sean idénticos para tratarlos como equivalentes. A veces basta con que compartan una característica importante.

Por ejemplo, dos usuarios pueden pertenecer al mismo rol, dos archivos pueden tener la misma extensión, dos números pueden tener el mismo resto al dividir por 3 o dos productos pueden estar en la misma categoría.

25.2 Qué es una relación de equivalencia

Una relación R sobre un conjunto A es una relación de equivalencia si cumple tres propiedades: reflexividad, simetría y transitividad.

R es relación de equivalencia si: 1. R es reflexiva 2. R es simétrica 3. R es transitiva

Estas tres propiedades garantizan que la relación agrupe elementos de manera coherente.

25.3 Reflexividad

Una relación de equivalencia debe ser reflexiva: todo elemento debe estar relacionado consigo mismo.

Para todo a ∈ A, se cumple a R a

Si el criterio es "tener la misma extensión de archivo", entonces todo archivo tiene la misma extensión que sí mismo.

25.4 Simetría

Una relación de equivalencia debe ser simétrica: si un elemento está relacionado con otro, el segundo también debe estar relacionado con el primero.

Si a R b, entonces b R a

Si Ana tiene el mismo rol que Luis, entonces Luis tiene el mismo rol que Ana.

25.5 Transitividad

Una relación de equivalencia debe ser transitiva: si un elemento está relacionado con un segundo, y el segundo con un tercero, entonces el primero debe estar relacionado con el tercero.

Si a R b y b R c, entonces a R c

Si tres usuarios pertenecen al mismo rol por cadenas de igualdad de rol, todos quedan dentro del mismo grupo de equivalencia.

25.6 Ejemplo: tener el mismo resto

En el conjunto de los números enteros, podemos definir una relación: dos números están relacionados si tienen el mismo resto al dividir por 3.

a R b si a y b tienen el mismo resto al dividir por 3

Por ejemplo, 2 y 5 están relacionados porque ambos dejan resto 2 al dividir por 3.

25.7 Verificación del ejemplo

Propiedad Por qué se cumple
Reflexiva Todo número tiene el mismo resto que sí mismo
Simétrica Si a tiene el mismo resto que b, entonces b tiene el mismo resto que a
Transitiva Si a y b tienen el mismo resto, y b y c también, entonces a y c tienen el mismo resto

Por lo tanto, esta relación es una relación de equivalencia.

25.8 Clases de equivalencia

Una relación de equivalencia agrupa elementos en clases. Cada clase contiene elementos equivalentes entre sí.

Resto 0: {..., -3, 0, 3, 6, ...} Resto 1: {..., -2, 1, 4, 7, ...} Resto 2: {..., -1, 2, 5, 8, ...}

Estas clases serán estudiadas con más detalle en el próximo tema.

25.9 Ejemplo: misma categoría

En un sistema de productos, podemos relacionar dos productos si pertenecen a la misma categoría.

teclado R mouse porque ambos pertenecen a periféricos teclado no está relacionado con monitor si monitor pertenece a pantallas

Esta relación permite agrupar productos por categoría.

25.10 Ejemplo: mismo rol de usuario

También podemos definir equivalencia entre usuarios según su rol.

Ana R Luis si Ana y Luis tienen el mismo rol

Esto permite formar grupos como administradores, editores y lectores.

25.11 No toda relación es equivalencia

Una relación puede fallar alguna de las propiedades necesarias.

Relación Propiedad que falla Motivo
Menor que Reflexividad y simetría Un número no es menor que sí mismo y si a < b, no ocurre b < a
Ser jefe de Simetría Si Ana es jefa de Luis, Luis no es jefe de Ana
Estar conectado directamente Transitividad Si A conecta con B y B con C, A no necesariamente conecta directamente con C

25.12 Relación de equivalencia en JavaScript

Podemos modelar una equivalencia por categoría usando una función que compare propiedades.

const productos = [
  { nombre: "teclado", categoria: "periféricos" },
  { nombre: "mouse", categoria: "periféricos" },
  { nombre: "monitor", categoria: "pantallas" }
];

function mismaCategoria(a, b) {
  return a.categoria === b.categoria;
}

console.log(mismaCategoria(productos[0], productos[1]));
console.log(mismaCategoria(productos[0], productos[2]));

La función define cuándo dos productos se consideran equivalentes.

25.13 Agrupar por equivalencia en JavaScript

Si conocemos el criterio de equivalencia, podemos agrupar elementos en clases.

const productos = [
  { nombre: "teclado", categoria: "periféricos" },
  { nombre: "mouse", categoria: "periféricos" },
  { nombre: "monitor", categoria: "pantallas" }
];

function agruparPorCategoria(productos) {
  return productos.reduce((grupos, producto) => {
    const clave = producto.categoria;
    if (!grupos[clave]) {
      grupos[clave] = [];
    }
    grupos[clave].push(producto.nombre);
    return grupos;
  }, {});
}

console.log(agruparPorCategoria(productos));

Cada clave del objeto representa una clase de equivalencia.

25.14 Verificar propiedades con datos finitos

Para un conjunto finito, podemos verificar una relación revisando las tres propiedades.

function esEquivalencia(elementos, relacion) {
  const esReflexiva = elementos.every(a => relacion(a, a));
  const esSimetrica = elementos.every(a =>
    elementos.every(b => !relacion(a, b) || relacion(b, a))
  );
  const esTransitiva = elementos.every(a =>
    elementos.every(b =>
      elementos.every(c =>
        !(relacion(a, b) && relacion(b, c)) || relacion(a, c)
      )
    )
  );

  return esReflexiva && esSimetrica && esTransitiva;
}

const numeros = [0, 1, 2, 3, 4, 5];
const mismoRestoModulo3 = (a, b) => a % 3 === b % 3;

console.log(esEquivalencia(numeros, mismoRestoModulo3));

La función verifica reflexividad, simetría y transitividad para el conjunto dado.

25.15 Aplicaciones prácticas

Área Criterio de equivalencia Resultado
Usuarios Mismo rol Grupos de permisos
Archivos Misma extensión Tipos de archivo
Productos Misma categoría Catálogos agrupados
Números Mismo resto módulo n Clases modulares
Datos Mismo valor normalizado Agrupación de registros equivalentes

25.16 Errores frecuentes

  • Creer que una relación simétrica ya es una equivalencia.
  • Olvidar verificar la transitividad.
  • Confundir igualdad exacta con equivalencia por criterio.
  • Usar un criterio que no agrupa de manera consistente.
  • Creer que toda agrupación visual define automáticamente una relación de equivalencia.

25.17 Qué debes recordar de este tema

  • Una relación de equivalencia debe ser reflexiva, simétrica y transitiva.
  • Permite tratar elementos como equivalentes según un criterio.
  • Las relaciones de equivalencia forman clases de equivalencia.
  • No toda relación es una equivalencia.
  • La equivalencia puede usarse para agrupar datos.
  • En JavaScript, se puede modelar una equivalencia mediante funciones de comparación.

25.18 Conclusión

Las relaciones de equivalencia permiten organizar elementos en grupos coherentes. Al cumplir reflexividad, simetría y transitividad, garantizan que la agrupación sea consistente.

En el próximo tema estudiaremos clases de equivalencia y particiones.