Главная | Все статьи | Код

Закон де Моргана и другие правила логики в программировании

Без стека Время чтения статьи ~7 минут
Закон де Моргана и другие правила логики в программировании главное изображение

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

Курс по системе контроля версий Git бесплатно

Записаться на бесплатный курс

Закон де Моргана

Огюст де Морган (1806–1871) был английским математиком и логиком. Его работы заложили основы современной логики и алгебры логики. Законы де Моргана позволяют преобразовывать логические выражения, что полезно в различных сферах.

  • Программирование. Оптимизация логических выражений в условных операторах.
  • Математика. Упрощение логических операций.
  • Схемотехника. Преобразование булевых выражений в логических схемах.
  • Поиск информации. Использование логических операторов в поисковых системах.
  • Искусственный интеллект. Обработка булевых выражений в системах логического вывода.

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

Чтобы понять формулировку законов де Моргана, нужно запомнить понятие конъюнкции (И) — в программировании это оператор and, а также дизъюнкции (ИЛИ) — в программировании оператор or.

Законы де Моргана гласят:

  1. Отрицание конъюнкции (И) превращается в дизъюнкцию (ИЛИ) отрицаний.
  2. Отрицание дизъюнкции (ИЛИ) превращается в конъюнкцию (И) отрицаний.

Простые примеры:

  • «Не оба друга пришли на встречу» эквивалентно «Один из друзей не пришел».
  • «Не люблю ни чай, ни кофе» эквивалентно «Не люблю чай и не люблю кофе».

Закон де Моргана в теории множеств

Теория множеств — это раздел математики, изучающий свойства и отношения между множествами — совокупностями элементов, объединенными по определенному признаку. Например, в группе людей есть студенты, работники или те, кто совмещает оба занятия.

Закон де Моргана применяется в теории множеств следующим образом:

  • Пересечение множеств: A∩BA BA∩B — это множество всех людей, которые одновременно и студенты, и работники.
  • Объединение множеств: A∪BA BA∪B — это множество всех людей, которые либо студенты, либо работники, либо и те и другие.

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

Читайте также: Что такое MongoDB и для чего она нужна?

Закон поглощения

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

Формулировка

  1. Поглощение конъюнкции: A ∪ (A ∩ B) = A. Если A истинно, выражение A ∪ (A ∩ B) всегда будет истинно независимо от B, поэтому его можно упростить до A.
  2. Поглощение дизъюнкции: A ∩ (A ∪ B) = A. Если A ложно, выражение A ∩ (A ∪ B) всегда будет ложным независимо от B, что также приводит к A.

При создании кода закон поглощения может применяться так:

# Исходное условие
if user_is_admin or (user_is_admin and has_permissions):
    grant_access()

# После применения закона поглощения
if user_is_admin:
    grant_access()

В первом выражении пользователь получает доступ, если он администратор и имеет разрешение. Но администратор и так имеет разрешение, поэтому второе условие можно удалить, на результат оно не влияет. Таким образом, мы избавились от лишнего условия и упростили код.

Логика в программировании

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

Понимание структуры кода

Логика помогает программисту разбирать сложные структуры кода, видеть закономерности и сокращать логические выражения. Это важно при написании условных операторов (if, while, for и т. д.) и работе с булевыми выражениями, которые имеют только два значения: 0 или 1, или true — false.

Также полезно: Что такое хеширование?

Оптимизация кода

Знание законов логики, таких как законы де Моргана, позволяет упрощать логические условия, устраняя избыточные проверки. Это делает код более читаемым, понятным и эффективным. Рассмотрим пример упрощения выражения с помощью закона де Моргана.

# Без оптимизации
if not (a and b):
    print("Истина")


# Используем закон де Моргана
if not a or not b:
print("Истина")

Во втором варианте код проще и быстрее выполняется. Также можно заметить, что такой вариант упрощения выражения похож на одну из простых алгебраических формул. Дело в том, что логика программирования и логика алгебры используют одни и те же правила.

Дебаггинг и поиск ошибок

Логика помогает находить ошибки в коде. Например, часто встречаются ошибки в логических выражениях, которые приводят к некорректному поведению программы.

is_admin = True
is_moderator = False

Если разработчик хотел предоставить доступ администратору или модератору, но использовал and вместо or, условие сработает только в том случае, если оба флага True. Корректно будет выдать права таким образом:

if is_admin and is_moderator:
    print("Доступ разрешен")
else:
    print("Доступ запрещен")

Научитесь основам тестирования бесплатно

Записаться на курс

Алгоритмы и структуры данных

Понимание логики помогает лучше разрабатывать и анализировать алгоритмы, например двоичный поиск, деревья решений, графовые алгоритмы. Рассмотрим базовый двоичный поиск:

def binary_search(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid  # Элемент найден
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1  # Элемент не найден

Алгоритм использует логику деления массива пополам на каждом шаге. Если target больше среднего элемента, поиск продолжается в правой половине, иначе — в левой. Это значительно сокращает количество проверок по сравнению с линейным поиском.

Работа с базами данных и SQL

В SQL-запросах часто используются логические операторы (AND, OR, NOT), и понимание логики помогает писать правильные запросы.

SELECT * FROM users WHERE NOT (is_banned AND is_admin);

Этот запрос выбирает всех пользователей, кроме тех, кто одновременно администратор (is_admin = TRUE) и заблокирован (is_banned = TRUE).

Изучите базу языка запросов SQL бесплатно

Начать бесплатный курс

Формальные языки и компиляторы

Логика также применяется в проектировании языков программирования, компиляторов и автоматизированных систем тестирования. Рассмотрим выражения в компиляторе:

int result = 3 + 4 * 2;

Компилятор использует логические правила для определения порядка выполнения операций:

  1. Сначала выполняется умножение (4 * 2 → 8), так как оно имеет более высокий приоритет.
  2. Затем выполняется сложение (3 + 8 → 11).

Если бы компилятор не учитывал приоритет операторов, могло бы произойти ошибочное вычисление ((3 + 4) * 2 → 14).

Заключение

В программировании, где каждое действие должно приводить к предсказуемому результату, очень важно опираться на законы логики. Это помогает программистам писать более понятный, оптимизированный и эффективный код. В частности, законы де Моргана позволяют эффективно выбирать группы данных для работы из общего множества, а закон поглощения позволяет упростить выражения, избавляя их от избыточных частей. Например, определить уровень доступа пользователя можно по характеристике с наивысшим приоритетом, остальными можно пренебречь. Подробнее познакомиться с законами де Моргана и их практическим применением можно на курсе «Теория множеств» Хекслет.

Аватар пользователя Валерия Белякова
Валерия Белякова 2 дня назад
0
Похожие статьи