language agnostic - ¿Qué se simplifica a! A &&(a || b)?
language-agnostic boolean-logic (9)
Tabla de tautología
| a | b | !a | a || b | !a && (a || b) | !a && b | [ !a && (a || b) ] <=> [!a && b] |
|---|---|----|--------|------------------|---------|-------------------------------------|
| 0 | 0 | 1 | 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 | 0 | 1 |
| 1 | 1 | 0 | 1 | 0 | 0 | 1 |
"Prueba"
- De acuerdo con la declaración del Principio de Distributividad
!a && (a || b)
es equivalente a(!a && a) || (!a && b)
(!a && a) || (!a && b)
. - Acordeón a la Ley de no contradicción
(!a && a)
es equivalente afalse
Poniendolo todo junto:
!a && (a || b) <=> (!a && a) || (!a && b) <=> false || (!a && b) <=> !a && b
Estoy un poco confundido sobre !a&&(a||b)
. Si lo miro directamente e interpreto simplemente, parece como si fuera lo mismo que
!a&&a or !a&&b
pero esto parece un poco extraño porque como a
no puede ser verdadero y falso, solo sería verdad si el último fuera verdad. También lo interpreté así
!a || a&&b
Realmente no sé cómo se me ocurrió esto, pero parece más lógico ya que no hay contradicciones. ¿Alguien puede ayudarme en esto por favor?
Parece que se simplificará solo
!a && b
Si abre el paréntesis, tendrá
(!a && a) || (!a && b)
La primera parte (! A && a) siempre es falsa, así que puedes omitirla.
Puede simplificarlo así (!a && b)
porque en la expresión (!a && a || !a && b)
la condición !a && a
es siempre falsa
Simplemente significa !a && b
, a debe ser falso yb debe ser verdadero, para que sea cierto
Supongo que el "o" es de menor prioridad (normalmente la lógica booleana && o || son iguales y, como tal, esto habría sido ambiguo
!a&&a or !a&&b
= (!a&&a) || (!a && b)
= false || (!a && b)
// because X and not X will never be true for any combination of X
= (!a && b)
// because false || X == X for any value of X
= !a && b
// removed parens
Te recomiendo que uses Wolfram alpha para simplificaciones como estas, puede ser sorprendente lo que puede hacer con tus expresiones a veces. Esta expresión particular se simplifica a !a && b
Enlace a WA: http://www.wolframalpha.com/input/?i=%21a%26%26%28a%7C%7Cb%29
!a && (a || b)
se puede considerar con una tabla de verdad binaria
a b out true true false false true true false false false true false false
Entonces la única circunstancia que pasa es
(!a && b)
y podríamos aplicar las leyes de DeMorgan a eso y obtener
!(a || !b)
(!a && a) || (!a && b)
(!a && a) || (!a && b)
es una expansión correcta de esto (usando la ley distributiva).
Esto se puede simplificar a !a && b
.
Las leyes distributivas para el álgebra de Boole son:
a && (b || c) == (a && b) || (a && c)
a || (b && c) == (a || b) && (a || c)
En Java, como en la mayoría de los 1 idiomas, ¡el unario !
tiene una precedencia mayor que &&
.
Entonces !a&&(a||b)
es (!a)&&(a||b)
Puedes representar la tabla de verdad de esa expresión usando un mapa de Karnaugh :
| a = 0 | a = 1 |
------+-------+-------+
b = 0 | 0 | 0 |
------+-------+-------+
b = 1 | 1 | 0 |
------+-------+-------+
Ahora, se puede ver fácilmente que el único caso verdadero es cuando (!a) && b
.
Así que !a&&(a||b)
es !a && b
1 Ver comentarios a continuación.