правила deMorgan объяснил - PullRequest
18 голосов
/ 30 января 2010

Не могли бы вы объяснить правила Деморгана настолько просто, насколько это возможно (например, кому-то, имеющему только математику в средней школе)?

Ответы [ 8 ]

32 голосов
/ 30 января 2010

У нас есть два значения: T и F.

Мы можем объединить эти значения тремя способами: NOT, AND и OR.

NOT является самым простым:

  • NOT T = F
  • NOT F = T

Мы можем записать это как таблицу истинности :

when given.. | results in...
============================
           T | F
           F | T

Для краткости

x | NOT x
=========
T | F
F | T

Думайте о NOT как о дополнении , то есть оно превращает одно значение в другое.

AND работает с двумя значениями:

x y | x AND y
=============
T T | T
T F | F
F T | F
F F | F

AND равен T только в том случае, если оба его аргумента (значения x и y в таблице истинности) равны T - и F в противном случае.

OR равно T, если хотя бы один из его аргументов равен T:

x y | x OR y
=============
T T | T
T F | T
F T | T
F F | F

Мы можем определить более сложные комбинации. Например, мы можем написать таблицу истинности для x AND (y OR z), и первая строка будет ниже.

x y z | x AND (y OR z)
======================
T T T | ?

Как только мы знаем, как оценивать x AND (y OR z), мы можем заполнить оставшуюся таблицу.

К оцените комбинацию, оцените фигуры и отработайте оттуда. Скобки показывают, какие части нужно оценить в первую очередь. То, что вы знаете из обычной арифметики, поможет вам разобраться. Скажем, у вас есть 10 - (3 + 5). Сначала вы оцениваете часть в скобках, чтобы получить

10 - 8

и оцените это как обычно, чтобы получить ответ, 2.

Оценка этих выражений работает аналогично. Мы знаем, как OR работает сверху, поэтому мы можем немного расширить наш стол:

x y z | y OR z | x AND (y OR z)
===============================
T T T | T      | ?

Теперь мы почти вернулись к столу x AND y. Мы просто подставляем значение y OR z и оцениваем. В первом ряду у нас есть

T AND (T OR T)

, что совпадает с

T AND T

что просто T.

Мы повторяем один и тот же процесс для всех 8 возможных значений x, y и z (2 возможных значения x умножить на 2 возможных значения y умножить на 2 возможных значения z ) чтобы получить

x y z | y OR z | x AND (y OR z)
===============================
T T T | T      | T
T T F | T      | T
T F T | T      | T
T F F | F      | F
F T T | T      | F
F T F | T      | F
F F T | T      | F
F F F | F      | F

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

x | NOT (NOT x)
===============
T | T
F | F

Другими словами, NOT (NOT x) это эквивалент просто x.

Правила Деморгана - это удобные приемы, которые позволяют нам преобразовывать эквивалентные выражения, соответствующие определенным шаблонам:

  • NOT (x AND y) = (NOT x) OR (NOT y)
  • NOT (x OR y) = (NOT x) AND (NOT y)

(Вы можете думать об этом как о том, как NOT распределяется через простые выражения AND и OR.)

Ваш здравый смысл, вероятно, уже понимает эти правила! Например, подумайте о том, что «народ не может быть в двух местах одновременно». Мы могли бы сделать его подходящим для первой части первого правила:

NOT (here AND there)

Применяя правило, это еще один способ сказать: «тебя здесь нет или тебя нет».

Упражнение: Как вы можете выразить второе правило простым английским языком?

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

x y | x AND y | NOT (x AND y)
=============================
T T | T       | F
T F | F       | T
F T | F       | T
F F | F       | T

Теперь правая сторона:

x y | NOT X | NOT Y | (NOT x) or (NOT y)
========================================
T T | F     | F     | F
T F | F     | T     | T
F T | T     | F     | T
F F | T     | T     | T

Окончательные значения одинаковы в обеих таблицах. Это доказывает, что выражения эквивалентны.

Упражнение: Докажите, что выражения NOT (x OR y) и (NOT x) AND (NOT y) эквивалентны.

16 голосов
/ 30 января 2010

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

Закон Деморгана относится к тому факту, что существует два идентичных способа записи любой комбинации двух условий - в частности, комбинации AND (оба условия должны быть выполнены) и комбинации OR (любой из них может быть верным). ). Примеры:

Часть 1 Закона Деморгана

Заявление: У Алисы есть брат и сестра.
Условия: У Алисы есть брат OR У Алисы есть сестра.
Напротив: Алиса - единственный ребенок (у NOT есть брат или сестра).
Условия: У Алисы NOT есть брат, AND У нее NOT есть сестра.

Другими словами: NOT [A OR B] = [NOT A] AND [NOT B]

Часть 2 Закона Деморгана

Заявление: Боб - водитель автомобиля.
Условия: У Боба есть машина AND У Боба есть лицензия.
Напротив: Боб NOT водитель автомобиля.
Условия: У Боба NOT есть машина, OR У Боба NOT есть лицензия.

Другими словами: NOT [A AND B] = [NOT A] OR [NOT B].

Я думаю, это было бы немного менее запутанным для 12-летнего. Это, конечно, менее запутанно, чем вся эта ерунда о таблицах истинности (даже я смущаюсь, глядя на все эти таблицы).

5 голосов
/ 30 января 2010

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

На простом английском языке:
Когда что-то не то или то, это тоже не то и не то.
Когда что-то не то и это, это тоже не то или не то.

Примечание: Учитывая неточность английского языка в слове 'или' Я использую его для обозначения неисключительного или в предыдущем примере.

Например, следующий псевдокод эквивалентен:
Если НЕТ (A ИЛИ B) ...
ЕСЛИ (НЕ А) И (НЕ Б) ....

ЕСЛИ НЕТ (А И Б) ...
ЕСЛИ НЕТ (A) ИЛИ НЕТ (B) ...

2 голосов
/ 30 января 2010

Нарисуйте простую диаграмму Венна, две пересекающиеся окружности. Поместите A слева и B справа. Теперь (A и B), очевидно, является пересекающимся битом. Так что НЕ (А и В) - это все, что не находится в пересекающемся бите, остальное в обоих кругах. Цвет, который в.

Нарисуйте еще два круга, как прежде, A и B, пересекающихся. Теперь НЕ (A) - это все, что находится в правом круге (B), но не на пересечении, потому что это, очевидно, A, а также B. Раскрасьте это. Аналогично NOT (B) это все в левом круге, но не на пересечении потому что это B, а также A. Раскрась это.

Два рисунка выглядят одинаково. Вы доказали, что NOT (A и B) = NOT (A) или NOT (B). Другой случай оставлен в качестве упражнения для студента.

2 голосов
/ 30 января 2010

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

ФОРМУЛЯЦИЯ 1 (А И В)

Если они до возраста ограничить И пить алкоголик напитки, арестуйте их.

ФОРМУЛЯЦИЯ 2 (НЕ (НЕ А ИЛИ НЕ Б))

Если они более возрастное ограничение ИЛИ пить безалкогольный напиток, отпустите.

Это, кстати, не мой пример. Насколько я знаю, это было частью научного эксперимента, в котором одно и то же правило выражалось по-разному, чтобы выяснить, насколько сильно оно изменило способность людей понимать их.

2 голосов
/ 30 января 2010

«У него нет ни машины, ни автобуса». означает то же самое, что «У него нет машины, и у него нет автобуса».

"У него нет машины и автобуса." означает то же самое, что «У него либо нет машины, либо нет автобуса, я не уверен, что, может быть, у него нет ни того, ни другого».

Конечно, на простом английском: «У него нет машины и автобуса». имеет сильное значение, что у него есть по крайней мере одна из этих двух вещей. Но, строго говоря, с логической точки зрения утверждение также верно, если у него нет ни одного из них.

Формально:

  • не (автомобиль или автобус) = (не автомобиль) и (не автобус)
  • не (автомобиль и автобус) = (не автомобиль) или (не автобус)

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

Вот таблица истинности, которая показывает, как это работает:

Первый случай: не (кор или автобус) = (не автомобиль) и (не автобус)

 c | b || c or b | not (c or b) || (not c) | (not b) | (not c) and (not b)
---+---++--------+--------------++---------+---------+--------------------
 T | T ||    T   |      F       ||    F    |    F    |        F
---+---++--------+--------------++---------+---------+--------------------
 T | F ||    T   |      F       ||    F    |    T    |        F
---+---++--------+--------------++---------+---------+--------------------
 F | T ||    T   |      F       ||    T    |    F    |        F
---+---++--------+--------------++---------+---------+--------------------
 F | F ||    F   |      T       ||    T    |    T    |        T
---+---++--------+--------------++---------+---------+--------------------

Второй случай: не (автомобиль и автобус) = (не автомобиль) или (не автобус)

 c | b || c and b | not (c and b) || (not c) | (not b) | (not c) or (not b)
---+---++---------+---------------++---------+---------+--------------------
 T | T ||    T    |       F       ||    F    |    F    |        F
---+---++---------+---------------++---------+---------+--------------------
 T | F ||    F    |       T       ||    F    |    T    |        T
---+---++---------+---------------++---------+---------+--------------------
 F | T ||    F    |       T       ||    T    |    F    |        T
---+---++---------+---------------++---------+---------+--------------------
 F | F ||    F    |       T       ||    T    |    T    |        T
---+---++---------+---------------++---------+---------+--------------------
1 голос
/ 08 июня 2017

Не уверен, почему я сохранил это все эти годы, но это оказалось полезным в ряде случаев.Спасибо мистеру Бейли, моему учителю математики в 10 классе.Он назвал ее теоремой Деморгана.

!(A || B) <==> (!A && !B)
!(A && B) <==> (!A || !B)

Когда вы перемещаете отрицание в скобках или за скобками, логический оператор (И, ИЛИ) изменяется.

1 голос
/ 30 января 2010

Закон Деморгана позволяет вам сформулировать строку логических операций различными способами. Это относится к логике и теории множеств, где в теории множеств вы используете дополнение для not, пересечение для and и union для or.

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

Итак, если у вас есть следующее на C-подобном языке

if !(x || y || z) { /* do something */ }

Это логически эквивалентно:

if (!x && !y && !z)

Это также работает так:

if !(x && !y && z)

превращается в

if (!x || y || !z)

И вы можете, конечно, пойти в обратном направлении.

Эквивалентность этих утверждений легко увидеть, используя нечто, называемое таблицей истинности. В таблице истинности вы просто размещаете свои переменные (x, y, z) и перечисляете все комбинации входов для этих переменных. Затем у вас есть столбцы для каждого предиката или логического выражения, и вы определяете для заданных входных данных значение выражения. Любая университетская учебная программа по информатике, вычислительной технике или электротехнике, скорее всего, приведет вас в замешательство с количеством и размером таблиц истинности, которые вы должны построить.

Так зачем их учить? Я думаю, что самая большая причина в вычислениях заключается в том, что они могут улучшить читаемость больших логических выражений. Некоторым людям не нравится использовать логические выражения "не * 1021" перед выражениями, поскольку они думают, что это может запутать кого-то, если они его пропустят. Влияние использования закона Деморгана на уровень микросхем шлюза полезно, однако, поскольку некоторые типы вентилей быстрее, дешевле или вы уже используете для них целую интегральную схему, так что вы можете уменьшить количество пакетов микросхем, необходимых для результат.

...