language-agnostic boolean-logic

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"

  1. De acuerdo con la declaración del Principio de Distributividad !a && (a || b) es equivalente a (!a && a) || (!a && b) (!a && a) || (!a && b) .
  2. Acordeón a la Ley de no contradicción (!a && a) es equivalente a false
  3. 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



!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.