Язык математики
Множества и операции
∈, ⊂, ∪, ∩, разность и дополнение — язык, на котором записано всё остальное
Множество — это набор различимых объектов, взятый как единое целое. Всё. Никаких дополнительных требований: элементы не упорядочены, не повторяются, и это может быть что угодно — числа, векторы, функции, другие множества.
Программисту проще всего думать о множестве как о set из стандартной
библиотеки. Аналогия хорошая и почти нигде не подводит.
Принадлежность и включение
Два разных отношения, которые постоянно путают.
Принадлежность — «объект является элементом ». Слева стоит элемент, справа множество.
Включение — «каждый элемент является элементом ». Слева и справа стоят множества.
Разница видна на примере. Пусть . Тогда:
- — верно, лежит в
- — верно, множество из одной единицы вкладывается в
- — ложно: элементы — это числа, а не множества
В коде это разница между x in s и s1.issubset(s2).
Обозначение у разных авторов означает то (включение, возможно совпадающее), то строгое включение . Если различие важно, хорошие авторы пишут и явно. Если видите голое — почти всегда имеется в виду .
Способы задать множество
Перечислением: .
Через условие — это называется аксиома выделения, а выглядит как list comprehension:
Двоеточие (или вертикальная черта ) читается «такое, что». Слева — откуда
берём кандидатов, справа — какому условию они должны удовлетворять. Один в один
[x for x in naturals if is_prime(x) and x < 10].
Пустое множество обозначается или . Оно единственно и является подмножеством любого множества — включая само себя.
Операции
A ∪ B — объединение: всё, что лежит хотя бы в одном из множеств.
Здесь это: {1, 2, 3, 4, 5, 6, 8}
Все операции над множествами — это ровно те же операции, что над булевыми условиями:
| Множества | Условие на | Логика |
|---|---|---|
| или | or | |
| и | and | |
| и | and not | |
not |
Это не совпадение и не мнемоника: операции над множествами определены именно через логические связки. Отсюда же берётся то, что законы де Моргана выглядят одинаково для тех и других:
Про дополнение
Запись (или ) имеет смысл только когда задан универсум — множество, внутри которого мы работаем. Дополнение — это . Без явного или подразумеваемого запись бессмысленна: «всё, что не в » — это не множество, а источник парадоксов.
В вероятности универсум — это пространство элементарных исходов , и означает «событие не произошло». В блоке 3 это пригодится сразу.
Мощность
— число элементов. Для конечных множеств это len(s). Для бесконечных всё
интереснее, и к этому мы вернёмся в уроке про счётность.
Полезное тождество, которое стоит запомнить, — формула включения-исключения для двух множеств:
Логика простая: сложив мощности, мы посчитали пересечение дважды, поэтому один раз его нужно вычесть.
Чего здесь намеренно нет
Аксиоматики ZFC, парадокса Рассела, ординалов и кардинальной арифметики. Для чтения статей по ML нужен словарь, а не теория множеств как дисциплина.
Источники
- Hammack — Book of Proof, гл. 1 — Sets, subsets, set operations
- Halmos — Naive Set Theory — Первые главы, если хочется более неформального изложения
- Deisenroth, Faisal, Ong — Mathematics for Machine Learning — Приложение с обозначениями
Проверки
0 из 2Принадлежность против включения
Пусть . Отметьте все верные утверждения.
Операции над множествами
Реализуйте функцию
set_ops(a, b), которая принимает два списка чисел и возвращает список из четырёх отсортированных списков:- (симметрическая разность)
Входные списки могут содержать дубликаты — множество их не различает.
Встроенные
setиспользовать можно и нужно: смысл упражнения в том, чтобы увидеть, что нотация из урока — это ровно эти четыре операции.Загрузка редактора…
Ctrl/⌘ + Enter