Зарегистрируйтесь, чтобы продолжить обучение

Закон Де Моргана Теория множеств

// source_path[42182/800-de_morgan/README.adoc] image::https://cdn2.hexlet.io/derivations/image/original/eyJpZCI6ImZkYWY1MjY3ODRkODg1OGMwYmE1NDM2MTAyZmQwY2UyLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=48dc3e79a5c506eabe36c8fbadfae8a917ab118c5c879aba9ca6bc6fc9072c4c[]

Законы де Моргана описывают, как математические утверждения и понятия связаны через их противоположности. В теории множеств законы де Моргана связывают пересечение и объединение множеств через их дополнения.

Если мы хотим упростить операции с множествами, то мы используем законы де Моргана. В этом уроке мы познакомимся с утверждениями законов де Моргана, их применением и примерами.

:stem:

Что такое законы де Моргана?

Закон де Моргана описывает взаимосвязь между тремя фундаментальными операциями над множествами:

  • Дополнением множеств
  • Объединением множеств
  • Пересечением множеств

В зависимости от взаимосвязи между объединением и пересечением множеств, существует два типа закона де Моргана. Буквально их можно представить так:

====

  • Не (stem:[A] и stem:[B]) — это то же самое, что Не stem:[A] или Не stem:[B]

- Не (stem:[A] или stem:[B]) — это то же самое, что не stem:[A] и не stem:[B]

Для множеств закон де Моргана — это просто наблюдения о связи между множествами и их дополнениями. Простой способ визуализации этих правил — диаграммы Венна.

Переходим к первому закону.

Закон пересечения де Моргана

На диаграмме два множества: stem:[A] и stem:[B]. Мы объединяем их дополнения: на диаграмме это объединение охватывает все пространство, кроме пересечения двух множеств.

Напомним, что дополнение обозначается значком stem:['].

Так закон де Моргана для дополнения пересечения двух множеств можно обозначить на схеме:

image::https://cdn2.hexlet.io/derivations/image/original/eyJpZCI6IjQ0MmMyMmFlMmYzZDlkNGIwYjIwYzViMzY4ZjM0MDEwLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=bc84a60d201f4195153992ea50cb11105ec02cdfb1c6dd3a4de031c5c77561de[]

Дополнение пересечения множеств stem:[A] и stem:[B] — это все пространство на диаграмме, кроме пересечения stem:[A] и stem:[B].

Оно равно объединению stem:[A'] и stem:[B']:

====

stem:[(A cap B)' = A' cup B']

Перейдем к второму закону.

Закон объединения де Моргана

Теперь мы объединяем не дополнения, а сами множества stem:[A] и stem:[B] и смотрим на пересечение их дополнений.

На диаграмме Венна это пересечение охватывает все пространство, кроме объединения двух множеств. Как в первом случае, только наоборот. Отсюда следует закон де Моргана для дополнения объединения двух множеств:

====

stem:[(A cup B)' = A' cap B']

Как и в предыдущем случае, этот закон можно описать такой формулой и показать на диаграмме:

image::https://cdn2.hexlet.io/derivations/image/original/eyJpZCI6IjA0NWMwYjljNDBmMDIwMWI1MDcwMGFhNWViMGMyZTU4LnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=e75fe12b70b5e7561d4492583b67bea347d0b6712be836427b9913ec4d07ec34[]

Как работают законы де Моргана

Рассмотрим закон де Моргана на простом примере. Возьмем такое условие задачи:

====

В ходе недавнего опроса студентов спрашивали, планируют ли они пойти на баскетбольный или футбольный матч. +

Всего было опрошено stem:[200] человек. +

stem:[58] учащихся заявили, что они пропустят хотя бы одну из игр. В это число входят и студенты, которые планируют пропустить обе игры. +

Сколько студентов планируют посетить обе игры? +

Применим закон объединения де Моргана:

==== stem:[58] студентов пропустят хотя бы одну из игр — это можно интерпретировать как «stem:[58] студентов пропустят баскетбольную игру или пропустят футбольную игру». +

По закону де Моргана, это множество из stem:[58] студентов является дополнением множества студентов, которые посетят обе игры. +

Таким образом, вычислим количество студентов, которые посетят обе игры: +

stem:[200-58=142]

Другой пример:

====

Найдем, сколько целых чисел от stem:[1] до stem:[1000] включительно не являются ни кратными stem:[2], ни кратными stem:[5].

Применим закон де Моргана:

==== По условию:

  • stem:[A] — множество целых чисел от stem:[1] до stem:[1000], которые кратны stem:[2]
  • stem:[B] — множество целых чисел от stem:[1] до stem:[1000], которые кратны stem:[5]

Вопрос состоит в том, чтобы найти stem:[(A' cap B')].

По законам де Моргана нам надо найти stem:[(A cup B)']:

  • stem:[1000 divide 2 = 500] целых чисел от stem:[1] до stem:[1000], которые делятся на stem:[2]. Это наше множество stem:[A]
  • stem:[1000 divide 5 = 200] целых чисел от stem:[1] до stem:[1000], которые делятся на stem:[5]. Это наше множество stem:[B]
  • stem:[1000 divide (2 times 5) = 100] целых чисел от stem:[1] до stem:[1000], которые кратны и stem:[2], и stem:[5]

Теперь мы можем найти количество целых чисел от stem:[1] до stem:[1000], которые кратны stem:[2] или stem:[5]: +

stem:[(A cup B) = 500 + 200 - 100 = 600] +

Следовательно, количество целых чисел от stem:[1] до stem:[1000], которые не кратны ни stem:[2] ни stem:[5]:

stem:[(A cup B)' = 1000 - 600 = 400]

Формула закона де Моргана

Закрепим, что законы де Моргана используется в теории множеств и в булевой алгебре.

Используя эти законы, можно установить связь между объединением и пересечением через дополнение.

Ниже мы разберем различные формы формул в теории множеств:

====

  • stem:[(A cap B)' = A' cup B']

- stem:[(A cup B)' = A' cap B']

Также различные формы формул есть в булевой алгебре:

====

  • stem:[~(A+B) = ~A*~B]

- stem:[~(A*B) = ~A+~B]

Применение законов де Моргана

Законы де Моргана используются как в элементарной, так и в булевой алгебре. Они помогают сократить сложные выражения, и поэтому широко используются в большинстве инженерных отраслей для создания аппаратуры и упрощения операций.

Рассмотрим такие примеры:

  • Применение закона де Моргана можно увидеть в электронной технике для разработки логических вентилей. С помощью этого закона уравнения могут быть построены с использованием только stem:NAND или stem:NOR. Это приводит к удешевлению аппаратуры
  • Законы де Моргана используются в программировании. Они помогают упростить логические выражения, записанные в коде — тем самым уменьшают количество строк и помогают оптимизировать код. Кроме того, эти законы значительно упрощают и ускоряют проверку некоторых кодов, например на SAS

Самостоятельная работа

// source_path[42182/800-de_morgan/self_study.adoc]

Задача №1:

:stem:

Докажите первый закон де Моргана при таком условии:

  • stem:[A = {3, 5}] +
  • stem:[B = {5, 7, 9}] +
  • stem:[U = {1, 3, 5, 7, 9, 11}] +

.Нажмите, чтобы увидеть ответ [%collapsible]

==== Согласно второму закону де Моргана, stem:[(A cup B)' = A' cap B']. + + Таким образом: +

  • stem:[(A cup B) = {3, 5, 7, 9}] +
  • stem:[(A cup B)' = {1, 11}] +
  • stem:[A' = {1, 7, 9, 11}] +
  • stem:[B' = {1, 3, 11}] +
  • stem:[A' cap B' = {1, 11}]

====



Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff