Язык математики

Отношения и эквивалентность

Отношение как подмножество A × B, классы эквивалентности и почему это то же самое, что разбиение

Шаг 4 из 117 · ~22 мин

Отношение — это множество пар

Определение выглядит неожиданно скупо:

RA×BR \subseteq A \times B

Отношение — это просто подмножество декартова произведения. Никакой отдельной сущности «отношение» нет: есть набор пар, которые мы объявили связанными.

Вместо (a,b)R(a, b) \in R обычно пишут aRba \mathbin{R} b. Именно поэтому \le, == и \subseteq — это отношения: \le на N\N есть множество пар {(0,0),(0,1),(1,1),(0,2),}\{(0,0), (0,1), (1,1), (0,2), \dots\}.

В коде отношение — это либо set[tuple], либо предикат f(a, b) -> bool, либо матрица смежности. Три представления одного и того же.

Свойства

Для отношения на одном множестве (RA×AR \subseteq A \times A) важны три свойства:

СвойствоФормальноСловами
рефлексивностьa,  aRa\forall a,\; a \mathbin{R} aкаждый связан сам с собой
симметричностьaRbbRaa \mathbin{R} b \Rightarrow b \mathbin{R} aсвязь не имеет направления
транзитивностьaRbbRcaRca \mathbin{R} b \wedge b \mathbin{R} c \Rightarrow a \mathbin{R} cсвязь передаётся по цепочке

Проверьте на знакомых примерах:

  • == обладает всеми тремя
  • \le рефлексивно и транзитивно, но не симметрично
  • << транзитивно, но не рефлексивно и не симметрично
  • «быть другом» симметрично, но обычно не транзитивно

Отношение эквивалентности

Отношение, обладающее всеми тремя свойствами, называется эквивалентностью и обозначается \sim.

Смысл прост: эквивалентность — это «равенство с точностью до чего-то». Мы объявляем неразличимыми объекты, которые различаются только тем, что нас сейчас не интересует.

Примеры, которые пригодятся позже:

  • сравнение по модулю: ab    ab(modn)a \sim b \iff a \equiv b \pmod n
  • векторы, отличающиеся положительным множителем: xy    x=λy,  λ>0x \sim y \iff x = \lambda y,\; \lambda > 0 — направления, а не векторы
  • матрицы, подобные друг другу — один и тот же оператор в разных базисах (блок 1)

Классы и разбиения

Класс эквивалентности элемента aa — это все объекты, ему эквивалентные:

[a]={xA:xa}[a] = \{x \in A : x \sim a\}

Дальше происходит вещь, которую стоит один раз осознать и потом использовать как факт:

Классы эквивалентности образуют разбиение. И наоборот: любое разбиение задаёт отношение эквивалентности («лежать в одной группе»).

Это два описания одной структуры. Транзитивность и симметричность — ровно то, что не даёт классам частично перекрываться: если у двух классов есть общий элемент, они совпадают целиком.

Практическое следствие: когда вы видите \sim, можно сразу думать «groupby по какому-то ключу». Множество классов обозначается A/A/{\sim} и называется фактормножеством.

Порядок — второй важный тип

Если отношение рефлексивно, транзитивно и антисимметрично (aRbbRaa=ba \mathbin{R} b \wedge b \mathbin{R} a \Rightarrow a = b), оно называется частичным порядком. Пример — \subseteq на подмножествах: два множества могут быть несравнимы, ни одно не включено в другое.

Частичный порядок понадобится, чтобы аккуратно говорить про sup и inf в следующем уроке.

Чего здесь нет

Решёток, вполне упорядоченных множеств, теоремы Цермело. Для чтения статей достаточно узнавать \sim и понимать, что за ним стоит группировка.

Источники

  • Hammack — Book of Proof, гл. 11 — Relations, equivalence relations, equivalence classes
  • Jeremy Kun — A Programmer's Introduction to Mathematics — Изложение под профиль программиста

Проверки

0 из 2
  1. Какие отношения — эквивалентности

    Отметьте все отношения, которые являются отношениями эквивалентности.

  2. Классы эквивалентности

    Реализуйте equivalence_classes(items, pairs).

    На вход приходят элементы items и список пар pairs, объявленных эквивалентными. Само отношение при этом задано не полностью: пары нужно замкнуть по рефлексивности, симметричности и транзитивности.

    Верните разбиение — список классов, где каждый класс отсортирован по возрастанию, а сами классы отсортированы по своему первому элементу.

    Например, для items = [1, 2, 3, 4] и pairs = [[1, 2], [2, 3]] результат [[1, 2, 3], [4]]: элемент 4 ни с чем не связан, но образует собственный класс — рефлексивность обязывает.

    функция equivalence_classes

    Загрузка редактора…

    Ctrl/⌘ + Enter