Логическое выражение ( a && b )
(как a
, так и b
имеет логические значения) может быть написано, например, как !(!a || !b)
. Разве это не означает, что &&
является "ненужным"? Означает ли это, что все логические выражения могут быть сделаны только с использованием ||
и !
?
Являются ли || а также! операторов, достаточных для создания всех возможных логических выражений?
Ответ 1
Да, как указывали другие ответы, набор операторов, состоящий из ||
и !
, функционально завершен. Вот конструктивное доказательство этого, показывающее, как использовать их для выражения всех шестнадцати возможных логических связок между булевыми переменными A
и B
:
- True:
A || !A
- NAND B:
!A || !B
- B подразумевает A:
!B || A
- A подразумевает B:
!A || B
- A ИЛИ B:
A || B
- Не B:
!B
- Не A:
!A
- XOR B:
!(!A || B) || !(A || !B)
- XNOR B:
!(!A || !B) || !(A || B)
- A:
A
- B:
B
- NOR B:
!(A || B)
- A не означает B:
!(!A || B)
- B не подразумевает A:
!(!B || A)
- A И B:
!(!A || !B)
- False:
!(A || !A)
Обратите внимание, что как NAND, так и NOR сами по себе функционально полны (что может быть доказано с использованием того же метода выше), поэтому, если вы хотите проверить, что набор операторов функционально завершен, достаточно показать, что вы можете выразить либо NAND или NOR.
Вот график, показывающий диаграммы Венна для каждой из перечисленных выше соединений:
[источник]
Ответ 2
То, что вы описываете, это функциональная полнота.
Здесь описывается набор логических операторов, достаточный для "выражения всех возможных таблиц истинности". Ваш оператор Java, { ||
, !
}, достаточен; он соответствует множеству {∨, ¬}, который указан в разделе "Минимальные функционально полные операторные множества".
Набор всех таблиц истинности означает все возможные наборы из 4 булевых значений, которые могут быть результатом операции между двумя булевыми значениями. Поскольку существует 2 возможных значения для булева, существуют 2 4 или 16 возможных таблиц истинности.
A B | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
----+------------------------------------------------
T T | T T T T T T T T F F F F F F F F
T F | T T T T F F F F T T T T F F F F
F T | T T F F T T F F T T F F T T F F
F F | T F T F T F T F T F T F T F T F
Вот таблица чисел таблицы истинности (0-15), комбинаций ||
и !
, которые дают ее, и описание.
Table | Operation(s) | Description
-------+----------------------------------+-------------
0 | A || !A | TRUE
1 | A || B | OR
2 | A || !B | B IMPLIES A
3 | A | A
4 | !A || B | A IMPLIES B
5 | B | B
6 | !(!A || !B) || !(A || B) | XNOR (equals)
7 | !(!A || !B) | AND
8 | !A || !B | NAND
9 | !(A || !B) || !(!A || B) | XOR
10 | !B | NOT B
11 | !(!A || B) | NOT A IMPLIES B
12 | !A | NOT A
13 | !(A || !B) | NOT B IMPLIES A
14 | !(A || B) | NOR
15 | !(A || !A) | FALSE
Существует множество других таких функционально полных наборов, в том числе один набор элементов {NAND} и {NOR}, которые не имеют соответствующих одиночных операторов в Java.
Ответ 3
Да.
Все логические ворота могут быть сделаны из ворот NOR.
Так как логический элемент NOR может быть сделан из NOT и OR, результат следует.
Ответ 4
Потратьте время, чтобы прочитать DeMorgan Laws, если сможете.
Вы найдете ответ в чтении там, а также ссылки на логические доказательства.
Но, по сути, ответ да.
РЕДАКТИРОВАТЬ. Для объяснения, я хочу сказать, что логически можно вывести выражение OR из выражения AND и наоборот. Существует также больше законов для логической эквивалентности и вывода, но я думаю, что это наиболее вероятно.
EDIT 2. Здесь приведено доказательство с помощью таблицы истинности, показывающей логическую эквивалентность следующего выражения.
Закон DeMorgan: !(!A || !B) -> A && B
_____________________________________________________ | A | B | !A | !B | !A || !B | !(!A || !B) | A && B | ------------------------------------------------------- | 0 | 0 | 1 | 1 | 1 | 0 | 0 | ------------------------------------------------------- | 0 | 1 | 1 | 0 | 1 | 0 | 0 | ------------------------------------------------------- | 1 | 0 | 0 | 1 | 1 | 0 | 0 | ------------------------------------------------------- | 1 | 1 | 0 | 0 | 0 | 1 | 1 | _______________________________________________________
Ответ 5
NAND и NOR являются универсальными, они могут использоваться для создания любой логической операции вы хотите где угодно; другой оператор доступен в языках программирования, чтобы упростить запись и делать читаемые коды.
Также все логические операции, которые необходимы для проводки в цепи, также разрабатываются с использованием либо NAND, либо только NOR.
Ответ 6
Да, согласно булевой алгебре любая булева функция может быть выражена как сумма minterms или произведение maxterms, которое называется канонической нормальной формой. Нет причин, по которым такая логика не может применяться к тем же операциям, которые используются в информатике.