4. Producto cartesiano y representación de relaciones

El producto cartesiano genera todos los pares ordenados posibles entre dos conjuntos. A partir de esos pares podemos definir relaciones discretas seleccionando solo los vínculos que cumplen una condición.

4.1 Introducción

Las relaciones discretas se construyen a partir de pares ordenados. Para saber qué pares pueden existir entre dos conjuntos, usamos el producto cartesiano.

El producto cartesiano permite formar todas las combinaciones posibles entre los elementos de un primer conjunto y los elementos de un segundo conjunto. Luego, una relación se obtiene seleccionando algunos de esos pares.

4.2 Qué es el producto cartesiano

Dados dos conjuntos A y B, el producto cartesiano A × B es el conjunto de todos los pares ordenados (a, b) donde a pertenece a A y b pertenece a B.

A = {1, 2} B = {x, y} A × B = {(1, x), (1, y), (2, x), (2, y)}

El primer componente de cada par sale de A. El segundo componente sale de B.

4.3 El orden de los conjuntos importa

El producto cartesiano no es conmutativo en general. Esto significa que A × B no representa lo mismo que B × A.

A = {1, 2} B = {x, y} A × B = {(1, x), (1, y), (2, x), (2, y)} B × A = {(x, 1), (x, 2), (y, 1), (y, 2)}

Los mismos elementos aparecen combinados, pero cada par tiene sus componentes en posiciones distintas.

4.4 Cantidad de pares generados

Si el conjunto A tiene m elementos y el conjunto B tiene n elementos, entonces A × B tiene m × n pares ordenados.

Conjunto A Conjunto B Cantidad en A × B
{1, 2} {a, b, c} 2 × 3 = 6 pares
{Ana, Luis, Marta} {leer, editar} 3 × 2 = 6 pares
{pendiente, aprobado} {aprobado, rechazado, archivado} 2 × 3 = 6 pares

4.5 Producto cartesiano en JavaScript

Podemos generar el producto cartesiano recorriendo cada elemento del primer conjunto y combinándolo con cada elemento del segundo conjunto.

function productoCartesiano(A, B) {
  const pares = [];

  for (const a of A) {
    for (const b of B) {
      pares.push([a, b]);
    }
  }

  return pares;
}

console.log(productoCartesiano([1, 2], ["x", "y"]));

El resultado es una lista con todos los pares ordenados posibles.

4.6 De producto cartesiano a relación

Una relación entre A y B es un subconjunto de A × B. Esto significa que una relación toma algunos pares posibles, no necesariamente todos.

A = {1, 2, 3} B = {1, 2, 3, 4} A × B contiene todos los pares posibles. R = {(1, 2), (2, 3), (3, 4)} es una relación de A en B.

En este ejemplo, la relación selecciona pares donde el segundo número es una unidad mayor que el primero.

4.7 Relaciones definidas por una condición

Muchas relaciones se definen mediante una condición lógica. Por ejemplo, podemos decir que a está relacionado con b si a < b.

const A = [1, 2, 3];
const B = [1, 2, 3, 4];

const relacionMenorQue = productoCartesiano(A, B)
  .filter(([a, b]) => a < b);

console.log(relacionMenorQue);

function productoCartesiano(A, B) {
  return A.flatMap(a => B.map(b => [a, b]));
}

Primero generamos todos los pares posibles y luego conservamos solo los que cumplen la condición.

4.8 Representación de relaciones

Una misma relación puede representarse de varias formas. La elección depende del problema y de las operaciones que queramos realizar.

Representación Descripción Uso habitual
Pares ordenados Lista explícita de vínculos. Permisos, asociaciones, dependencias.
Tabla Filas y columnas que muestran combinaciones. Bases de datos y reportes.
Matriz Valores 0 o 1 que indican si existe relación. Cálculo, análisis y algoritmos.
Grafo dirigido Nodos conectados por flechas. Rutas, redes, dependencias y estados.

4.9 Ejemplo: usuarios y permisos

Supongamos que tenemos usuarios y permisos disponibles. El producto cartesiano contiene todas las asignaciones posibles, pero la relación de permisos reales contiene solo las autorizadas.

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

const todosLosPares = productoCartesiano(usuarios, permisos);

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

console.log("Pares posibles:", todosLosPares);
console.log("Relación real:", permisosAsignados);

function productoCartesiano(A, B) {
  return A.flatMap(a => B.map(b => [a, b]));
}

La relación real es un subconjunto de todas las combinaciones posibles entre usuarios y permisos.

4.10 Representación tabular simple

Para conjuntos pequeños, una tabla puede mostrar con claridad qué pares pertenecen a una relación. Marcamos con 1 cuando el vínculo existe y con 0 cuando no existe.

Usuario / Permiso leer editar eliminar
Ana 1 1 0
Luis 1 0 0

Esta forma anticipa la representación matricial de relaciones, que estudiaremos más adelante.

4.11 Qué debes recordar de este tema

  • El producto cartesiano A × B contiene todos los pares ordenados posibles entre A y B.
  • El orden importa: A × B no representa lo mismo que B × A.
  • Si A tiene m elementos y B tiene n, entonces A × B tiene m × n pares.
  • Una relación entre A y B es un subconjunto de A × B.
  • Las relaciones pueden representarse mediante pares ordenados, tablas, matrices o grafos dirigidos.

4.12 Conclusión

El producto cartesiano nos da el universo de pares posibles. Una relación discreta selecciona algunos de esos pares para expresar vínculos concretos entre elementos.

En el próximo tema estudiaremos el concepto de relación binaria, una de las formas más importantes de relación en matemáticas discretas e informática.