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

Произведение, степень, семейства

Как из множеств строят новые множества — и почему A × B лежит в основании всего остального

Шаг 3 из 117 · ~25 мин

Три конструкции, из которых потом собирается почти всё: пары, множество всех подмножеств и индексированные семейства.

Декартово произведение

A×B={(a,b):aA,  bB}A \times B = \{(a, b) : a \in A,\; b \in B\}

Множество всех упорядоченных пар, где первый элемент взят из AA, второй из BB. Ключевое слово — упорядоченных: (1,2)(2,1)(1, 2) \ne (2, 1), в отличие от {1,2}={2,1}\{1, 2\} = \{2, 1\}.

Для конечных множеств A×B=AB|A \times B| = |A| \cdot |B| — отсюда и слово «произведение». Это в точности вложенный цикл:

[(a, b) for a in A for b in B]

Степень AnA^n — это A×A××AA \times A \times \dots \times A, то есть множество кортежей длины nn. И вот тут конструкция окупается:

Rn=R×R××Rn раз\htmlData{k=rn}{\R^n} = \underbrace{\R \times \R \times \cdots \times \R}_{\htmlData{k=n}{n} \text{ раз}}

Вектор из Rn\R^n — это просто элемент декартовой степени, то есть кортеж из nn чисел. Никакой магии в записи xR784x \in \R^{784} нет: это картинка MNIST, развёрнутая в 784 числа.

Так же читается и форма тензора: XRm×nX \in \R^{m \times n} — матрица, элемент множества всех таблиц mm на nn.

Множество всех подмножеств

2A=P(A)={S:SA}2^A = \mathcal{P}(A) = \{S : S \subseteq A\}

Элементы 2A2^A — это сами множества. Для A={1,2}A = \{1, 2\}:

2A={,  {1},  {2},  {1,2}}2^A = \{\emptyset,\; \{1\},\; \{2\},\; \{1,2\}\}

Обозначение 2A2^A объясняется мощностью: 2A=2A|2^A| = 2^{|A|}. Каждое подмножество однозначно задаётся битовой маской длины A|A| — для каждого элемента решаем, брать его или нет. Буквально itertools.product([0,1], repeat=len(A)).

Заметьте: \emptyset и само AA всегда входят в 2A2^A.

Где это встретится: в блоке 3 вероятность определяется как функция на множестве подмножеств Ω\Omega — событие и есть подмножество исходов.

Индексированные семейства

Запись {Ai}iI\{A_i\}_{i \in I} означает: у нас есть множество индексов II, и каждому iIi \in I сопоставлено множество AiA_i. Это словарь, где ключи — индексы.

Зачем нужна отдельная нотация, если можно просто перечислить? Затем, что II может быть бесконечным. Тогда объединение и пересечение записываются так:

iIAi={x:iI,  xAi},iIAi={x:iI,  xAi}\bigcup_{i \in I} A_i = \{x : \exists i \in I,\; x \in A_i\}, \qquad \bigcap_{i \in I} A_i = \{x : \forall i \in I,\; x \in A_i\}

Обратите внимание на квантор в каждой формуле: объединение — это «существует хотя бы один», пересечение — «для всех». Та же пара or / and, что и в уроке про операции, только теперь по произвольному числу аргументов.

Разбиение

Семейство {Ai}iI\{A_i\}_{i \in I} называется разбиением множества AA, если:

  1. все AiA_i непусты,
  2. они попарно не пересекаются: AiAj=A_i \cap A_j = \emptyset при iji \ne j,
  3. в объединении дают всё: iAi=A\bigcup_i A_i = A.

Разбиение — это ровно то, что делает groupby: каждый элемент попадает в одну и только одну группу. В следующем уроке выяснится, что разбиения и отношения эквивалентности — это одно и то же, увиденное с двух сторон.

Где это встретится дальше

  • Rn\R^n, Rm×n\R^{m \times n} — весь блок 1
  • 2Ω2^\Omega — определение вероятности, блок 3
  • \bigcup и \bigcap по бесконечному семейству — формулировки в теории меры
  • разбиение — формула полной вероятности

Источники

Проверки

0 из 2
  1. Мощность степени множества

    Пусть A=5|A| = 5. Сколько элементов в 2A×A2^{A} \times A?

    Подсказка: мощность произведения — произведение мощностей.

  2. Множество всех подмножеств

    Реализуйте power_set(items) — постройте 2A2^A для списка items.

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

    Например, для [2, 1] результат: [[], [1], [2], [1, 2]].

    Не пользуйтесь itertools.powerset-подобными готовыми решениями — постройте подмножества сами. Самый короткий путь — перебрать битовые маски от 00 до 2n12^n - 1: это и есть объяснение обозначения 2A2^A.

    функция power_set

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

    Ctrl/⌘ + Enter