19. Relaciones inversas

La relación inversa de una relación R intercambia el orden de cada par: donde antes iba de a hacia b, ahora va de b hacia a. Permite recorrer vínculos en sentido contrario.

19.1 Introducción

Muchas relaciones tienen un sentido natural: "es mayor que", "es padre de", "depende de". Pero a veces necesitamos recorrer esa relación al revés: "es menor que", "es hijo de", "es requerido por".

La relación inversa formaliza esa inversión de sentido. Dada cualquier relación, su inversa existe siempre y se obtiene simplemente intercambiando los componentes de cada par.

19.2 Definición

Sea R una relación de A en B. La relación inversa de R, escrita R⁻¹, es la relación de B en A definida por:

R⁻¹ = {(b, a) | (a, b) ∈ R}

Es decir, (b, a) ∈ R⁻¹ si y solo si (a, b) ∈ R. También se la llama relación transpuesta o relación conversa.

19.3 Ejemplo básico

Sea R = {(1, a), (2, a), (3, b), (3, c)} de A = {1, 2, 3} en B = {a, b, c}.

R⁻¹ = {(a, 1), (a, 2), (b, 3), (c, 3)}

El dominio de R⁻¹ es {a, b, c} y su codominio es {1, 2, 3}: exactamente al revés que R.

19.4 Relación inversa en JavaScript

Calcular la inversa es sencillo: basta con intercambiar cada par.

const R = [[1, 'a'], [2, 'a'], [3, 'b'], [3, 'c']];

function inversa(relacion) {
  return relacion.map(([a, b]) => [b, a]);
}

console.log(inversa(R));
// [['a', 1], ['a', 2], ['b', 3], ['c', 3]]

La función usa map para transformar cada par [a, b] en [b, a].

19.5 Representación matricial de la inversa

Si M_R es la matriz booleana de R, entonces la matriz de R⁻¹ es la transpuesta de M_R: se intercambian filas y columnas.

M_{R⁻¹}[i][j] = M_R[j][i]
function transponer(matriz) {
  const filas = matriz.length;
  const cols = matriz[0].length;
  const resultado = Array.from({ length: cols }, () => Array(filas).fill(false));

  for (let i = 0; i < filas; i++) {
    for (let j = 0; j < cols; j++) {
      resultado[j][i] = matriz[i][j];
    }
  }

  return resultado;
}

// Matriz de R: A={1,2,3}, B={a,b,c}
const MR = [
  [true,  false, false],  // fila 1: (1,a)
  [true,  false, false],  // fila 2: (2,a)
  [false, true,  true ]   // fila 3: (3,b), (3,c)
];

console.log(transponer(MR));

La matriz transpuesta tiene las dimensiones invertidas: si M_R es de tamaño n×m, entonces M_{R⁻¹} es de tamaño m×n.

19.6 Propiedades de la relación inversa

Propiedad Enunciado
Involución (R⁻¹)⁻¹ = R
Inversa de la unión (R ∪ S)⁻¹ = R⁻¹ ∪ S⁻¹
Inversa de la intersección (R ∩ S)⁻¹ = R⁻¹ ∩ S⁻¹
Inversa de la composición (S ∘ R)⁻¹ = R⁻¹ ∘ S⁻¹
Inversa de la identidad I_A⁻¹ = I_A

La propiedad de involución garantiza que invertir dos veces devuelve la relación original, igual que en los números con el recíproco doble.

19.7 Inversa y propiedades estructurales

La inversa conserva o transforma algunas propiedades de la relación original de manera predecible:

Propiedad de R ¿La conserva R⁻¹? Justificación
Reflexiva (a, a) ∈ R implica (a, a) ∈ R⁻¹
Simétrica Si R es simétrica, R⁻¹ = R
Antisimétrica La condición antisimétrica se preserva al invertir
Transitiva Si a→b→c en R, entonces c→b→a en R⁻¹
Orden parcial R⁻¹ también es un orden parcial (el "orden dual")

19.8 Orden dual

Si R es una relación de orden parcial, su inversa R⁻¹ también lo es. Este orden inverso se llama orden dual o orden opuesto.

Si (A, ≤) es un conjunto parcialmente ordenado, entonces (A, ≥) también lo es: ese es el orden dual.

Ejemplo: En divisibilidad sobre {1, 2, 3, 6}, la inversa de "a divide a b" es "b es múltiplo de a". Ambas son órdenes parciales válidos sobre el mismo conjunto.

19.9 Relación simétrica y su inversa

Una relación es simétrica si y solo si coincide con su inversa.

R es simétrica ⟺ R = R⁻¹

Esto puede aprovecharse como criterio de verificación:

function esSimetrica(relacion) {
  return relacion.every(([a, b]) =>
    relacion.some(([x, y]) => x === b && y === a)
  );
}

const R1 = [[1, 2], [2, 1], [3, 3]];
const R2 = [[1, 2], [2, 3]];

console.log(esSimetrica(R1)); // true
console.log(esSimetrica(R2)); // false

19.10 Inversa de la composición

La inversa de una composición invierte el orden de los factores, igual que ocurre con las matrices y con las funciones inversas.

(S ∘ R)⁻¹ = R⁻¹ ∘ S⁻¹

Ejemplo: Si R representa "trabaja en" (empleado → empresa) y S representa "tiene sede en" (empresa → ciudad), entonces S ∘ R representa "trabaja en una empresa con sede en" (empleado → ciudad).

La inversa (S ∘ R)⁻¹ representa "tiene un empleado que trabaja en" (ciudad → empleado), y puede calcularse como R⁻¹ ∘ S⁻¹.

19.11 Aplicaciones en informática

Área Relación original Relación inversa
Grafos dirigidos Aristas del grafo Grafo transpuesto (aristas al revés)
Bases de datos Tabla de referencia (clave foránea) Consulta de quién referencia a quién
Sistemas de archivos Directorio contiene archivo Archivo pertenece a directorio
Herencia en POO Clase hereda de superclase Superclase tiene como subclase
Algoritmos de grafos Alcanzabilidad hacia adelante Alcanzabilidad hacia atrás (Kosaraju)

19.12 Grafo transpuesto en JavaScript

En algoritmos de grafos como el de Kosaraju para componentes fuertemente conexas, se necesita el grafo transpuesto, que no es más que la relación inversa representada como lista de adyacencia.

// Grafo como lista de adyacencia
const grafo = {
  1: [2, 3],
  2: [4],
  3: [4],
  4: []
};

function transponerGrafo(g) {
  const transpuesto = {};

  for (const nodo of Object.keys(g)) {
    transpuesto[nodo] = transpuesto[nodo] || [];
    for (const vecino of g[nodo]) {
      transpuesto[vecino] = transpuesto[vecino] || [];
      transpuesto[vecino].push(Number(nodo));
    }
  }

  return transpuesto;
}

console.log(transponerGrafo(grafo));
// { '1': [], '2': [1], '3': [1], '4': [2, 3] }

El grafo transpuesto se usa para verificar alcanzabilidad en sentido inverso.

19.13 Errores comunes

  • Confundir la relación inversa con la relación complemento: la inversa invierte pares, el complemento incluye los pares que no estaban.
  • Creer que la inversa solo existe cuando la relación es biyectiva: toda relación tiene inversa.
  • Suponer que (S ∘ R)⁻¹ = S⁻¹ ∘ R⁻¹: el orden se invierte, es R⁻¹ ∘ S⁻¹.
  • Olvidar que la matriz de la inversa es la transpuesta, no la inversa algebraica.
  • Pensar que la inversa de una función siempre es una función: puede ser una relación con múltiples imágenes.

19.14 Qué debes recordar de este tema

  • La relación inversa R⁻¹ se obtiene intercambiando cada par (a, b) por (b, a).
  • Toda relación tiene inversa, siempre.
  • La doble inversa devuelve la relación original: (R⁻¹)⁻¹ = R.
  • Matricialmente, la inversa corresponde a la transpuesta de la matriz.
  • Una relación es simétrica si y solo si R = R⁻¹.
  • La inversa de un orden parcial es otro orden parcial: el orden dual.
  • La inversa de una composición invierte el orden: (S ∘ R)⁻¹ = R⁻¹ ∘ S⁻¹.

19.15 Conclusión

La relación inversa es una operación simple pero poderosa: intercambiar los pares de una relación da acceso a la perspectiva opuesta del vínculo. Es fundamental en grafos transpuestos, órdenes duales, verificación de simetría y composición inversa.

En el próximo tema estudiaremos las propiedades algebraicas de las relaciones, reuniendo en un marco unificado las operaciones de unión, intersección, complemento, composición e inversa.