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

Материал из testwiki
Перейти к навигации Перейти к поиску
Диаграммы Венна законов де Моргана
Представление правил де Моргана через логические элементы

Законы де Мо́ргана (правила де Мо́ргана) — логические правила, связывающие пары логических операций при помощи логического отрицания. Названы в честь шотландского математика Огастеса де Моргана. В краткой форме звучат так:

Отрицание конъюнкции есть дизъюнкция отрицаний.
Отрицание дизъюнкции есть конъюнкция отрицаний.

Определение

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

не (a и b) = (не a) или (не b)
не (a или b) = (не a) и (не b)

Символьно это можно записать так:

¬(ab)=¬a¬b¬(ab)=¬a¬b Шаблон:0 или по-другому: Шаблон:0 (ab)=ab(ab)=ab

В теории множеств:

AB=ABAB=AB Шаблон:0 или по-другому: Шаблон:0 (AB)C=ACBC,(AB)C=ACBC.

Эти правила также действительны для множества элементов (семейств):

iIAi=iIAi Шаблон:0 и Шаблон:0 iIAi=iIAi.

В исчислении предикатов:

¬xP(x)x¬P(x),
¬xP(x)x¬P(x).

Следствия:

Используя законы де Моргана, можно выразить конъюнкцию через дизъюнкцию и три отрицания. Аналогично можно выразить дизъюнкцию:

ab=¬(¬a¬b)
ab=¬(¬a¬b)

В виде теоремы:

Если существует суждение, выраженное операцией логического умножения двух или более элементов, то есть операцией «и»: (AB), то для того, чтобы найти обратное ¬(AB) от всего суждения, необходимо найти обратное от каждого элемента и объединить их операцией логического сложения, то есть операцией «или»: (¬A¬B). Закон работает аналогично в обратном направлении: ¬(AB)=(¬A¬B).

Применение

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

В программировании

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

Пример на Python:

# Исходное выражение (дизъюнкция отрицаний)
if not a or not b:
    # ...

# Преобразованное выражение (отрицание конъюнкции)
if not (a and b):
    # ...

Пример на Java:

// Исходное выражение (отрицание дизъюнкции)
if (!(a || b)) {
    // ...
}

// Преобразованное выражение (конъюнкция отрицаний)
if (!a && !b) {
    // ...
}

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

История

Шаблон:Начало цитаты Противоречащая противоположность дизъюнктивного суждения — конъюнктивное суждение, составленное из противоречащих противоположностей частей дизъюнктивного суждения. Шаблон:Оригинальный текст Шаблон:Конец цитаты

См. также

Ссылки

Шаблон:Вс Шаблон:Законы логики Шаблон:Теория множеств Шаблон:Rq