«Множество – это когда много вещей мыслятся как одно целое»
— Георг Кантор (неформально)
На прошлом уроке мы познакомились с векторами – «пакетами чисел», которые умеют складываться и умножаться на числа. Но числа сами по себе – это лишь один из видов «элементов». Чтобы строить математические модели любых явлений, нам нужна ещё более простая и фундаментальная концепция: множество. Это самый первый кирпичик, из которого складывается всё здание математики, а через неё – и всей галактики знаний.
Сегодня мы:
- Узнаем, что такое множество и элемент (очень просто, почти очевидно).
- Увидим, как эта простая идея проявляется в физике, биологии, социологии, программировании, лингвистике и даже в искусстве.
- Познакомимся с операциями над множествами (объединение, пересечение, разность) и обнаружим, что они описывают реальные процессы: от смешивания газов до поиска документов.
- Напишем код на Python, где множества есть прямо встроенный тип данных set, и выполним на них те же операции, что и в математике.
- Заглянем в будущее: узнаем, как множества связаны с теорией категорий (пока только намёк).
Важное правило соблюдается: ни одно понятие не будет использовано до того, как мы его объясним. Все новые термины вводятся через интуицию и примеры.
1. Интуиция: что такое множество?
Вы уже знаете, что такое «куча», «набор», «коллекция». В математике вместо этих слов используют слово множество.
Неформальное определение. Множество – это собрание любых объектов, объединённых по какому-то признаку или просто перечисленных. Каждый объект, входящий в это собрание, называется элементом множества.
Примеры из жизни:
- Множество всех планет Солнечной системы (элементы: Меркурий, Венера, Земля, …).
- Множество гласных букв русского алфавита (а, е, ё, и, о, у, ы, э, ю, я).
- Множество студентов в вашей группе.
- Множество всех возможных исходов броска игральной кости {1,2,3,4,5,6}.
Математика говорит: если мы можем однозначно сказать, принадлежит ли объект множеству или нет, то множество определено.
В Python мы будем пользоваться перечислением (явным списком) и операциями, которые работают с такими списками.
2. Множества в разных рукавах галактики
Идея множества настолько проста, что она проявляется буквально везде. Рассмотрим несколько областей.
2.1 Физика
В классической механике состояние частицы задаётся её положением и импульсом. Все возможные состояния образуют множество – фазовое пространство. Каждое конкретное состояние – элемент этого множества.
В квантовой механике у частицы есть множество возможных результатов измерения. Например, при измерении спина электрона множество возможных исходов: {«вверх», «вниз»}.
В классической термодинамике множество микросостояний бесконечно (непрерывно). Однако при квантовом описании фазовое пространство разбивается на ячейки размером h^(3N), где N - количество частиц. Число различимых микросостояний становится конечным для системы в конечном объёме. В статистической физике мы часто используем объём фазового пространства, который непрерывен, но при подсчёте энтропии по Больцману переходим к суммированию по квантовым состояниям.
2.2 Биология: виды, гены, особи
Множество видов животных в лесу. Множество генов в геноме человека (около 20 тысяч). Множество особей в популяции. Операции над множествами помогают описывать:
- Пересечение: животные, которые живут и в лесу, и в реке (например, бобры).
- Объединение: все виды, обитающие в двух соседних заповедниках.
- Разность: виды, которые есть в заповеднике А, но нет в заповеднике Б.
2.3 Социология и экономика: группы людей
Множество жителей города. Множество клиентов банка. Множество покупателей, купивших товар X. Пересечение множеств – это, например, «женщины старше 30 лет, имеющие высшее образование, которые купили товар Y». Рекламные таргетинги основаны на пересечении множеств.
2.4 Лингвистика: словарь и текст
Множество всех слов языка (лексикон). Множество слов, встретившихся в конкретном тексте. Пересечение словарей двух текстов – слова, общие для обоих. Разность – слова, которые есть в первом тексте, но отсутствуют во втором.
2.5 Программирование: типы данных и коллекции
В Python тип set – это прямое воплощение математического множества. Также любой тип данных (например, int, str) можно рассматривать как множество всех возможных значений этого типа. Переменная, хранящая конкретное значение, – это элемент этого множества.
2.6 Искусство: палитра цветов
Множество цветов, использованных художником. Множество нот в музыкальном произведении. Множество инструментов в оркестре. Пересечение палитр двух картин – общие цвета. Объединение – все цвета, использованные в обеих.
3 Основные операции над множествами
Теперь введём три простейшие операции. Они понадобятся нам не только в математике, но и во всех перечисленных областях.
4. Первый шаг к теории категорий (интуиция)
Пока без сложных определений. Теория категорий начинается с того, что мы смотрим не только на сами множества, но и на функции (отображения) между ними. Функция – это правило, которое каждому элементу одного множества ставит в соответствие элемент другого множества. В следующих уроках мы будем много работать с функциями. (Обычно мы употребляем слово "функция" когда говорим о числовых множествах, а "отображение" о нечисловых - слова, молекулы, буквы и т. п.).
Почему это важно? Потому что, когда мы хотим перевести знание из одной области науки в другую, мы на самом деле строим функцию из одного множества понятий в другое. Например, функция, которая каждому слову ставит в соответствие его длину – это отображение из множества слов во множество натуральных чисел. А функция, которая каждой молекуле газа ставит в соответствие её скорость, – это отображение из множества молекул в множество векторов скорости.
Категория множеств (называется Set) имеет своими объектами множества, а стрелками – функции. Пока нам достаточно знать, что такие «переходы» между множествами играют центральную роль. Мы вернёмся к этому на уроке, посвящённом функциям и категориям.
5. Программирование на Python: множество как set
Python имеет встроенный тип set. Он поддерживает все операции, которые мы обсуждали. Сейчас мы напишем код, который сначала работает с абстрактными числовыми множествами, а затем смоделирует пример из реальной области.
5.1 Базовые операции на числах
# Определяем два множества
A = {1, 2, 3}
B = {2, 3, 4}
# Объединение
union = A | B # или A.union(B)
print("Объединение:", union)
# Пересечение
intersection = A & B # или A.intersection(B)
print("Пересечение:", intersection)
# Разность
diff_AB = A - B # или A.difference(B)
print("A без B:", diff_AB)
diff_BA = B - A
print("B без A:", diff_BA)
# Проверка на пустоту
C = set() # пустое множество
print("Пусто ли C?", len(C) == 0) # или C == set()
Вывод:
Объединение: {1, 2, 3, 4}
Пересечение: {2, 3}
A без B: {1}
B без A: {4}
Пусто ли C? True
5.2 Пример из лингвистики: общие слова в двух текстах
Смоделируем два простых предложения. Разобьём их на слова (пока по пробелам, без учёта знаков препинания). Найдём пересечение – слова, которые встречаются в обоих текстах.
text1 = "кот любит молоко"
text2 = "кот любит рыбу"
# Разбиваем на множества слов
words1 = set(text1.split())
words2 = set(text2.split())
print("Слова в первом тексте:", words1)
print("Слова во втором тексте:", words2)
common = words1 & words2
print("Общие слова:", common)
only_in_first = words1 - words2
print("Только в первом:", only_in_first)
only_in_second = words2 - words1
print("Только во втором:", only_in_second)
Вывод:
Слова в первом тексте: {'молоко', 'любит', 'кот'}
Слова во втором тексте: {'рыбу', 'любит', 'кот'}
Общие слова: {'любит', 'кот'}
Только в первом: {'молоко'}
Только во втором: {'рыбу'}
Это основа для поисковых систем: по запросу «кот молоко» ищут пересечение множества документов, содержащих «кот», и множества, содержащих «молоко».
5.3 Пример из биологии: обитатели двух сред
Пусть у нас есть множество видов в лесу и множество видов в реке. Найдём виды, которые живут и там, и там (например, бобры, выдры).
forest = {"медведь", "волк", "бобр", "лось", "выдра"}
river = {"бобр", "выдра", "щука", "окунь"}
common_species = forest & river
print("Виды, обитающие и в лесу, и в реке:", common_species)
Вывод:
Виды, обитающие и в лесу, и в реке: {'бобр', 'выдра'}
Это полезно для экологов, изучающих переходные зоны.
5.4 Пример из физики (модельный): возможные состояния кубита
Пусть у нас есть множество возможных результатов измерения кубита. Но кубит может быть в суперпозиции, и результат измерения случаен. Множество возможных исходов – это просто два элемента.
measurement_outcomes = {"up", "down"}
# Но в квантовой механике есть ещё множество возможных состояний до измерения:
# это бесконечное множество (все векторы на сфере Блоха), но мы его не можем перечислить.
# Тем не менее, мы можем описать его свойством: "все нормированные векторы в C^2".
Здесь множество задаётся не перечислением, а свойством. Python не позволяет создать бесконечное множество, но мы можем работать с конечными подмножествами.
6. Зачем всё это? Мостик к будущему
Множества – это самый простой кирпичик. Но вскоре мы начнём наделять множества дополнительной структурой. Например, когда мы ввели векторные пространства, то фактически сказали: «Возьмём некоторое множество, определим на нём операцию сложения и умножения на число, и потребуем выполнения определённых правил». То есть векторное пространство – это множество плюс структура.
Аналогично, любая математическая теория (группы, топологические пространства, категории) строятся на множествах, но добавляют к ним стрелки, отношения, операции.
6.1 Лирическое отступление. Группы.
Группа как алгебраическая структура — это множество объектов (элементов) вместе с определённой операцией, которая «связывает» эти элементы, подчиняясь четырём простым правилам.
Ключевые правила (аксиомы) группы:
- Замкнутость
Результат операции всегда остаётся внутри множества.
Пример: сумма двух целых чисел — тоже целое число. - Ассоциативность
Порядок группировки элементов не важен.
Пример: (2 + 3) + 4 = 2 + (3 + 4). - Нейтральный (единичный) элемент
Есть элемент, который «не меняет» другие при операции.
Пример: для сложения это 0 (5 + 0 = 5). - Обратные элементы
Для каждого элемента есть «противоположный», «отменяющий» его действие.
Пример: для числа 5 обратный элемент −5 (5 + (−5) = 0).
Примеры групп
- Целые числа с сложением.
Сумма любых двух целых чисел — целое; 0 — нейтральный элемент; для числа a обратный — −a. - Рациональные числа (без нуля) с умножением.
Произведение двух рациональных чисел — рациональное; 1 — нейтральный элемент; обратный к a — 1/a. - Повороты квадрата на 0°, 90°, 180°, 270°.
Операция — последовательное выполнение поворотов; нейтральный элемент — поворот на 0°; каждый поворот обратим (например, поворот на 90° «отменяется» поворотом на 270°). - Группа симметрии фигуры — все преобразования (повороты, отражения), которые оставляют фигуру неизменной.
Краткий смысл
Группа описывает, как элементы «взаимодействуют» друг с другом, сохраняя определённые свойства. Это позволяет изучать симметрии (в геометрии, химии, физике), структуры уравнений (в теории Галуа) и многое другое.
Коротко:
Группа = множество + операция → замкнута, ассоциативна, имеет нейтральный элемент, все элементы обратимы.
6.2 Лирическое отступление II. Топологическое пространство.
Топологическое пространство — это, грубо говоря, множество точек с «правилами», которые определяют, какие его части считаются «открытыми». Эти «правила» (или топология) позволяют понять, как точки «связаны» друг с другом, не привязываясь к конкретным расстояниям или координатам.
Что это значит простыми словами?
Представьте себе набор точек (например, точки на плоскости, числа, абстрактные объекты). Чтобы превратить этот набор в топологическое пространство, мы решаем, какие группы точек будем считать «открытыми множествами». Эти множества должны подчиняться трём простым правилам:
- Само всё множество и пустое множество всегда считаются открытыми.
- Если объединить любое количество открытых множеств, результат тоже будет открытым.
- Если пересечь конечное число открытых множеств, результат тоже будет открытым.
Зачем это нужно?
Такие «правила» помогают определить:
- Окрестности (области вокруг точки, которые считаются «ближними»).
- Непрерывность (как «гладко» одна фигура переходит в другую без разрывов).
- Связность (можно ли разбить пространство на отдельные «куски»).
- Компактность (свойство, похожее на «ограниченность и замкнутость» в геометрии).
Примеры
- Обычная прямая чисел с интервалами (без границ) как открытыми множествами — простейший пример.
- Дискретное пространство: каждое подмножество (даже отдельные точки) считается открытым.
- Тривиальное (антидискретное) пространство: открыты только всё множество целиком и пустое множество.
- Метрическое пространство (например, евклидова плоскость): открытые множества — шары радиуса ε вокруг точек.
Аналогия
Представьте пластилиновую фигуру. Топология описывает, как её можно деформировать (растягивать, сжимать), но нельзя разрывать или склеивать далёкие части. Чашка и бублик топологически эквивалентны (гомеоморфны), потому что одну можно плавно превратить в другую.
Коротко:
Топологическое пространство = множество + правила, определяющие «открытые» области → позволяет изучать свойства, сохраняющиеся при непрерывных деформациях.
6.3 Лирическое отступление III. Категории
Теория категорий, в свою очередь, изучает не внутреннее устройство множеств (как устроены их элементы), а то, как множества связаны друг с другом через функции. Поэтому в следующем уроке мы перейдём к функциям и отношениям.
Важное замечание: Теория категорий может обойтись и без множеств вообще (существуют ли «категории без объектов»? Не совсем). Но наш путь идёт от множеств, через функции, к категориям. Это естественно для человека, который начинает с основ.
7. Рефлексия: повторяющиеся паттерны
Оглянемся на сегодняшний урок. Мы увидели, что:
- Одна и та же операция (объединение, пересечение) описывает разные явления: смешивание газов, поиск документов, общие виды в биологии.
- Множество – это «упаковка», которая позволяет нам игнорировать порядок элементов и сосредоточиться на принадлежности.
- Python реализует множества прямо «из коробки», и мы написали реальный код, который одинаково работает для чисел, слов, видов.
Это и есть дух нашего курса: находить общее в разном, видеть математическое ядро за многоликостью явлений.
8. Задания для самообучения (выполните в Python)
9. Краткое содержание урока
На следующем уроке: «Функции и отношения: как одно переходит в другое». Мы начнём строить мост от множеств к категориям, изучив правило, которое каждому элементу одного множества сопоставляет элемент другого. И обнаружим, что всюду – от физических законов до экономических зависимостей – работают одни и те же паттерны.