La expresión lógica ( a && b )
(ambos a
y b
tienen valores booleanos) puede escribirse como !(!a || !b)
, por ejemplo. ¿No significa esto que &&
es "innecesario"? ¿Significa esto que todas las expresiones lógicas se pueden hacer solo con ||
y !
?
logic
logical-operators
JakeTheSnake
fuente
fuente
A and B == !A nor !B == !(!A or !B)
. Del mismo modoA or B == !A nand !B == !(!A and !B)
. Obviamente, pasar el mismo valor a ambas entradas de un NAND o NOR dará el mismo resultado que un simple NOT. XOR y XNOR también son posibles pero más complejos. Ver el teorema de De MorganRespuestas:
Sí, como señalaron las otras respuestas, el conjunto de operadores que comprende
||
y!
está funcionalmente completo . Aquí hay una prueba constructiva de eso, que muestra cómo usarlos para expresar las dieciséis posibles conexiones lógicas entre las variables booleanasA
yB
: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)
Tenga en cuenta que tanto NAND como NOR son por sí mismos funcionalmente completos (lo que se puede probar usando el mismo método anterior), por lo que si desea verificar que un conjunto de operadores esté funcionalmente completo, es suficiente para demostrar que puede expresar NAND o NOR con eso.
Aquí hay un gráfico que muestra los diagramas de Venn para cada uno de los conectores enumerados anteriormente:
[ fuente ]
fuente
||
más que a|
) o los efectos secundarios (relevante porque la expansión de verdadero, falso, XOR y XNOR evalúan sus argumentos más veces que la constante u operador original)!(!A || !B)
tiene el mismo recuento de cortocircuitos y evaluaciónA && B
). No creo que pueda hacer esto para XOR y XNOR sin construcciones adicionales (por ejemploa ? !b : b
), y verdadero o falso no es un problema si puede guardar valores, ya que podría iniciar su programa definiendotrue
yfalse
usando alguna variable booleana ficticia.Lo que estás describiendo es integridad funcional .
Esto describe un conjunto de operadores lógicos que es suficiente para "expresar todas las tablas de verdad posibles". Su conjunto de operadores Java, {
||
,!
}, es suficiente; corresponde al conjunto {∨, ¬}, que se enumera en la sección "Conjuntos de operadores funcionalmente completos mínimos".El conjunto de todas las tablas de verdad significa todos los conjuntos posibles de 4 valores booleanos que pueden ser el resultado de una operación entre 2 valores booleanos. Debido a que hay 2 valores posibles para un booleano, hay 2 4 , o 16, posibles tablas de verdad.
Aquí hay una tabla de los números de la tabla de verdad (0-15), las combinaciones
||
y!
que la producen, y una descripción.Hay muchos otros conjuntos funcionalmente completos, incluidos los conjuntos de un elemento {NAND} y {NOR}, que no tienen operadores individuales correspondientes en Java.
fuente
Si.
Todas las puertas lógicas pueden estar hechas de puertas NOR.
Dado que una compuerta NOR se puede hacer desde un NOT y un OR, el resultado sigue.
fuente
[citation-needed]
marca allí mismo.Tómese el tiempo para leer las Leyes de DeMorgan si puede.
Encontrará la respuesta en la lectura allí, así como referencias a las pruebas lógicas.
Pero esencialmente, la respuesta es sí.
EDITAR : Para ser explícito, mi punto es que uno puede inferir lógicamente una expresión OR a partir de una expresión AND, y viceversa. También hay más leyes para la equivalencia lógica y la inferencia, pero creo que esta es la más adecuada.
EDIT 2 : Aquí hay una prueba a través de la tabla de verdad que muestra la equivalencia lógica de la siguiente expresión.
Ley de DeMorgan:
!(!A || !B) -> A && B
fuente
NAND y NOR son universales, se pueden utilizar para construir cualquier operación lógica que desee en cualquier lugar; otros operadores están disponibles en lenguajes de programación para facilitar la escritura y la creación de códigos legibles.
Además, todas las operaciones lógicas que se necesitan para cablearse en el circuito también se desarrollan utilizando circuitos integrados NAND o NOR solamente.
fuente
Sí, de acuerdo con el álgebra booleana, cualquier función booleana se puede expresar como una suma de minterms o un producto de maxterms, que se llama forma canónica normal . No hay ninguna razón por la cual esa lógica no pueda aplicarse a los mismos operadores que se usan en informática.
https://en.wikipedia.org/wiki/Canonical_normal_form
fuente