Логическое выражение ( a && b )
(оба a
и b
имеют логические значения) может быть написано !(!a || !b)
, например, как. Разве это не значит, что &&
это «ненужное»? Означает ли это, что все логические выражения могут быть сделаны только с использованием ||
и !
?
logic
logical-operators
JakeTheSnake
источник
источник
A and B == !A nor !B == !(!A or !B)
. Точно так жеA or B == !A nand !B == !(!A and !B)
. Очевидно, что передача одного и того же значения на оба входа NAND или NOR даст тот же результат, что и простое NOT. XOR и XNOR также возможны, но более сложны. См. Теорему де МорганаОтветы:
Да, как указывалось в других ответах, набор операторов состоит из
||
и!
является функционально полным . Вот конструктивное доказательство этого, показывающее, как использовать их для выражения всех шестнадцати возможных логических связок между булевыми переменнымиA
иB
:A || !A
!A || !B
!B || A
!A || B
A || B
!B
!A
!(!A || B) || !(A || !B)
!(!A || !B) || !(A || B)
A
B
!(A || B)
!(!A || B)
!(!B || A)
!(!A || !B)
!(A || !A)
Обратите внимание, что и NAND, и NOR сами по себе функционально завершены (что можно доказать с помощью того же метода, что и выше), поэтому, если вы хотите проверить, что набор операторов функционально завершен, достаточно показать, что вы можете выразить либо NAND, либо NOR с этим.
Вот график, показывающий диаграммы Венна для каждого из перечисленных выше соединительных элементов:
[ источник ]
источник
||
а не|
) или побочных эффектов (уместно, потому что расширение истинных, ложных, XOR и XNOR оценивает их аргументы чаще, чем исходная константа или оператор).!(!A || !B)
имеет такое же количество коротких замыканий и оценок, что иA && B
). Я не думаю, что вы можете сделать это для XOR и XNOR без дополнительных конструкций (напримерa ? !b : b
), и true или false не проблема, если вы можете сохранить значения, так как вы могли бы запустить вашу программу, определивtrue
иfalse
использовав некоторую фиктивную логическую переменную.То, что вы описываете, является функциональной полнотой .
Это описывает набор логических операторов, достаточных для «выражения всех возможных таблиц истинности». Ваш набор операторов Java {
||
,!
} достаточен; оно соответствует набору {∨, ¬}, указанному в разделе «Минимальные функционально полные операторные множества».Набор всех таблиц истинности означает все возможные наборы из 4 логических значений, которые могут быть результатом операции между 2 логическими значениями. Поскольку для логического значения есть 2 возможных значения, существует 2 4 или 16 возможных таблиц истинности.
Ниже приведена таблица из чисел таблицы истинности (0-15), то
||
и!
комбинаций , которые дают его, и описание.Существует множество других таких функционально полных наборов, включая наборы одного элемента {NAND} и {NOR}, которые не имеют соответствующих отдельных операторов в Java.
источник
Да.
Все логические ворота могут быть сделаны из ворот NOR.
Поскольку ворота NOR могут быть сделаны из NOT и OR, результат следует.
источник
[citation-needed]
отметку прямо здесьПотратьте время, чтобы прочитать законы DeMorgan, если вы можете.
Вы найдете ответ в чтении там, а также ссылки на логические доказательства.
Но по сути, ответ - да.
РЕДАКТИРОВАТЬ : Для ясности, моя точка зрения заключается в том, что можно логически вывести выражение ИЛИ из выражения И, и наоборот. Есть и другие законы для логической эквивалентности и умозаключения, но я думаю, что это самое подходящее.
РЕДАКТИРОВАТЬ 2 : Вот доказательство через таблицу истинности, показывающее логическую эквивалентность следующего выражения.
Закон Деморгана:
!(!A || !B) -> A && B
источник
NAND и NOR универсальны, их можно использовать для построения любой логической операции, которую вы хотите где угодно; другие операторы доступны на языках программирования, что упрощает написание и создание читаемых кодов.
Кроме того, все логические операции, которые необходимо встроить в схему, также разрабатываются с использованием микросхем NAND или только NOR.
источник
Да, согласно булевой алгебре, любая булева функция может быть выражена как сумма минтермов или произведение макротерм, которое называется канонической нормальной формой . Нет причин, по которым такую логику нельзя было бы применить к тем же операторам, которые используются в информатике.
https://en.wikipedia.org/wiki/Canonical_normal_form
источник