Solucionador de Expressões Booleanas

tabela de verdade com colunas de subexpressões passo a passo

A carregar a simulação interativa...

Escolha a variável que mais explica 🖖

Truque de hardware útil: escolhe uma entrada que melhor separa o comportamento VERDADEIRO/FALSO, implementa cada ramo e multiplexa por essa entrada.

uma linha para cada possibilidade 🖖

Uma tabela verdade é simplesmente uma lista exaustiva: escreve todas as combinações possíveis de entradas VERDADEIRO/FALSO e mostra o que a expressão faz em cada caso. Com n variáveis há 2ⁿ linhas, então cada nova entrada dobra a tabela — 3 variáveis dão 8 linhas, 5 dão 32. As colunas intermediárias também importam: constroem cada subexpressão passo a passo, para você acompanhar a lógica operador por operador em vez de confiar apenas no resultado final.

32 linhas, quatro bilhões de funções 🖖

A tabela com 5 variáveis tem apenas 32 linhas. No entanto, o número de expressões diferentes que se podem definir com elas é 2³² = 4.294.967.296. Cada preenchimento distinto da coluna de saída com 0 e 1 corresponde a uma função booleana própria; ao todo, existem 2^(2ⁿ). Assim, esta ferramenta discreta explora um espaço de mais de quatro bilhões de circuitos lógicos possíveis, um para cada padrão que a última coluna pode assumir.

EXPRESSÕES BOOLEANAS — QUE LEI SIMPLIFICA ESTA?

Em que caso de simplificação você está?

Duas expressões são a mesma expressão exatamente quando suas tabelas-verdade coincidem, e esse é o único teste que resolve a questão. As leis da álgebra de Boole são apenas as coincidências que vale reconhecer de bate-pronto: empurrar um NOT para dentro, abrir um parêntese, largar um termo que não muda nada e enxergar o termo que os outros já cobriam. Monte a tabela e a resposta deixa de estar em dúvida.

Um NOT em cima de um parêntese — De Morgan troca o conectivo ¬(A ∧ B) = ¬A ∨ ¬B
Um parêntese para abrir — distribuição A ∧ (B ∨ C) = (A∧B) ∨ (A∧C)
Um termo que não acrescenta nada — absorção A ∨ (A ∧ B) = A
Um termo que os outros já cobrem — o teorema do consenso (A∧B) ∨ (¬A∧C) ∨ (B∧C) = (A∧B) ∨ (¬A∧C)
A expressão deixa de depender das entradas por completo A ∨ ¬A = 1

01

Um NOT em cima de um parêntese — De Morgan troca o conectivo

O que você sabe: Uma negação aplicada a uma expressão inteira. Empurrá-la para dentro transforma AND em OR, ou OR em AND, e nega cada parte no caminho.

Lei: ¬(A ∧ B) = ¬A ∨ ¬B

Exemplo resolvido: !(A & B) é a mesma expressão que !A | !B — as duas colunas de saída coincidem nas quatro linhas

Abrir este caso: De Morgan !(A & B)
Um NOT em cima de um parêntese — De Morgan troca o conectivo. Empurre o NOT para dentro e o AND vira OR; as duas colunas de saída são idênticas. Uma negação aplicada a uma expressão inteira. Empurrá-la para dentro transforma AND em OR, ou OR em AND, e nega cada parte no caminho.
Empurre o NOT para dentro e o AND vira OR; as duas colunas de saída são idênticas.

02

Um parêntese para abrir — distribuição

O que você sabe: O AND se distribui sobre o OR exatamente como a multiplicação sobre a soma. Abrir dá uma soma de produtos, a forma padrão para transformar expressão em circuito.

Lei: A ∧ (B ∨ C) = (A∧B) ∨ (A∧C)

Exemplo resolvido: A & (B | C) é o mesmo que (A & B) | (A & C), nas oito linhas de três variáveis

Abrir este caso: A & (B | C)
Um parêntese para abrir — distribuição. Abrir o parêntese dá dois termos produto cujo OR reproduz o original. O AND se distribui sobre o OR exatamente como a multiplicação sobre a soma. Abrir dá uma soma de produtos, a forma padrão para transformar expressão em circuito.
Abrir o parêntese dá dois termos produto cujo OR reproduz o original.

03

Um termo que não acrescenta nada — absorção

O que você sabe: Quando um termo já implica o outro, o mais fraco pode cair. A | (A & B) é simplesmente A, seja B o que for.

Lei: A ∨ (A ∧ B) = A

Exemplo resolvido: A | (A & B) = A: onde A vale 1 a saída é 1 de todo jeito, e onde A vale 0 o segundo termo também é 0

Abrir este caso: lei da absorção
Um termo que não acrescenta nada — absorção. O segundo termo só dispara onde o primeiro já disparava, então nunca afeta a saída. Quando um termo já implica o outro, o mais fraco pode cair. A | (A & B) é simplesmente A, seja B o que for.
O segundo termo só dispara onde o primeiro já disparava, então nunca afeta a saída.

04

Um termo que os outros já cobrem — o teorema do consenso

O que você sabe: Três termos em que o terceiro é o consenso dos dois primeiros: ele só cobre casos que aqueles dois já cobrem juntos. Removê-lo não muda nenhuma linha da tabela.

Lei: (A∧B) ∨ (¬A∧C) ∨ (B∧C) = (A∧B) ∨ (¬A∧C)

Exemplo resolvido: (A & B) | (!A & C) | (B & C) é igual a (A & B) | (!A & C) — o terceiro termo é redundante nas oito linhas

Abrir este caso: teorema do consenso
Um termo que os outros já cobrem — o teorema do consenso. Largar o terceiro termo deixa a coluna de saída intacta em todas as linhas. Três termos em que o terceiro é o consenso dos dois primeiros: ele só cobre casos que aqueles dois já cobrem juntos. Removê-lo não muda nenhuma linha da tabela.
Largar o terceiro termo deixa a coluna de saída intacta em todas as linhas.

05

A expressão deixa de depender das entradas por completo

O que você sabe: Uma coluna só de uns é uma tautologia; uma só de zeros é uma contradição. Nos dois casos as variáveis deixaram de importar.

Lei: A ∨ ¬A = 1

Exemplo resolvido: A | !A vale 1 nas duas linhas, e sua imagem espelhada A & !A vale 0 nas duas

Abrir este caso: tautologia A | !A
A expressão deixa de depender das entradas por completo. As duas linhas dão a mesma saída, então a entrada não tem influência nenhuma. Uma coluna só de uns é uma tautologia; uma só de zeros é uma contradição. Nos dois casos as variáveis deixaram de importar.
As duas linhas dão a mesma saída, então a entrada não tem influência nenhuma.
Referências (2)

Problemas resolvidos na íntegra

  1. Soma de mintermos para a expressão !(A & B) 5 passos

    A expressão é !(A & B), nas duas variáveis A e B. Conte as linhas onde o resultado é 1, escreva a função como uma soma de mintermos e, em seguida, descubra o que pode construir a partir desta única porta e de mais nada.

    1. Duas variáveis, cada uma livre de ser 0 ou 1, pelo que a tabela fica com uma linha por par. O analisador indica essa contagem antes de avaliar qualquer coisa, porque a dimensão da questão é fixada pelas variáveis e não pela expressão escrita sobre elas.

    2. Preencha primeiro a coluna interior. A & B é 1 apenas quando ambas as entradas são 1, pelo que três linhas contêm 0 e a última contém 1. A tabela imprime esta subexpressão como a sua própria coluna ao lado do resultado, o que lhe permite verificar a análise sintática em vez de apenas a resposta.

    3. O NOT inverte cada entrada e não faz mais nada. Os três zeros passam a uns e o único um passa a zero, pelo que a coluna de resultados é o exato negativo da coluna acima dela.

    4. Isso deixa 3 das 4 linhas a 1. Como fração, é 0,75, que o painel indica como uma percentagem das combinações de entrada.

    5. Nomeie cada linha verdadeira pela conjunção que é 1 nessa linha e em nenhuma outra — o seu mintermo — e faça a operação OR entre as três. Esta é a forma normal disjuntiva canónica, e é a lista que a ferramenta imprime por baixo da tabela.

    Resposta

    NAND é 1 em 3 das 4 linhas, 75,0%, e a sua forma normal são esses 3 mintermos. Agora a recompensa. Introduza A em ambas as entradas e A NAND A é !(A & A), que é !A — obteve NOT. Introduza a saída de um NAND de volta em ambas as entradas de outro e as duas negações cancelam-se, portanto (A NAND B) NAND (A NAND B) é AND. Para OR, negue ambas as entradas primeiro: (A NAND A) NAND (B NAND B) é !(!A & !B), e !A & !B é 1 na única linha 0,0, pelo que a sua negação é 1 nas outras 3 — o que é A OR B. NOT, AND e OR são exatamente o que o passo 5 usou para escrever uma função como forma normal, pelo que esta única coluna de 4 linhas pode expressar qualquer função booleana com qualquer número de variáveis.

  2. Construir a coluna de raiz para !A | !B 6 passos

    Agora tome !A | !B, que não partilha qualquer operador com !(A & B) — sem parênteses negados, sem AND em lado nenhum. Construa a sua coluna do zero e veja onde ela vai dar.

    1. Duas colunas NOT, ambas impressas ao lado do resultado. !A é 1 nas 2 linhas onde A é 0; !B é 1 nas 2 linhas onde B é 0. Coincidem numa linha e ambas falham numa linha.

    2. OR é 0 apenas onde ambas as suas entradas são 0, e isso acontece em exatamente uma linha: A=1, B=1, a linha onde nenhuma negação sobrevive. Qualquer outra linha tem pelo menos um 1 para contribuir.

    3. Assim, 3 das 4 linhas são 1 — o mesmo 0,75, indicado como a mesma percentagem.

    4. Os mintermos também coincidem, termo a termo e pela mesma ordem que no primeiro problema.

    5. Agora compare as duas expressões sem qualquer tabela. A & B é 1 em exatamente uma linha, pelo que !(A & B) é 0 em exatamente essa linha, e é a mesma linha que acaba de derrotar !A | !B. Duas colunas que são 0 no mesmo sítio e 1 em todos os outros lados são uma única coluna.

    6. Quão impressionado deve ficar? Uma tabela de 4 linhas tem 4 células de resultado, cada uma 0 ou 1, pelo que duas variáveis admitem apenas 16 funções distintas no total. A concordância é fácil num conjunto tão pequeno — e é por isso que o passo 5 é a parte que importa: fixou uma linha e nunca contou o resto.

    Resposta

    Ambas as expressões resultam em 75,0% com os mesmos 3 mintermos, porque são uma única função com dois nomes. A forma canónica é uma impressão digital: duas expressões são equivalentes precisamente quando os seus conjuntos de mintermos coincidem, pelo que a questão de saber se dois circuitos se comportam da mesma forma se reduz a saber se duas listas concordam. O que não se reduz é o custo de construir as listas. 2 variáveis precisam de 4 linhas e fez essas de cabeça; 20 variáveis precisam de 1 048 576; 100 variáveis precisam de cerca de 1,27×10³⁰ linhas, e a impressão digital continua a ser a ideia certa, enquanto a tabela deixou de ser um método. O argumento linha a linha do passo 5 é o que sobrevive ao salto, porque nunca mencionou quantas linhas existiam.

Problemas de exemplo

  • AND simples - AND: a saída é 1 somente quando A e B são ambos 1
  • (A OR B) AND NOT C - 3 variáveis, 8 linhas — mostra como o NOT inverte um ramo inteiro
  • maioria 3 entradas - Voto majoritário: 1 quando pelo menos 2 entre A, B, C são 1
  • multiplexador 2:1 - Multiplexador: S=0 gera A na saída, S=1 gera B na saída
  • tautologia A | !A - A | !A é verdadeira em todas as linhas, por isso a coluna de saída contém apenas 1 e a entrada nunca faz diferença. Juntamente com a sua oposta, A & !A, forma o par de funções que a tabela-verdade pode representar sem sequer consultar a variável.
  • contradição A & !A - A & !A é falsa em todas as linhas. Todas as outras expressões desta página ficam entre esta e a sua oposta. Por isso, ambas marcam os extremos da escala, em vez de serem simples curiosidades.
  • De Morgan !(A & B) - Carregue esta expressão e, em seguida, a sua equivalente !A | !B. As duas colunas de saída são idênticas, exatamente como afirma a lei de De Morgan: negar uma conjunção transforma-a numa disjunção das negações. Duas expressões, a mesma função.
  • De Morgan !A | !B - A outra metade do par de De Morgan. Coloque-a ao lado de !(A & B): as colunas de saída coincidem linha a linha. Portanto, as duas expressões não são equivalentes apenas em alguns casos; são a mesma função escrita de duas formas.
  • A & (B | C) - A & (B | C), o lado esquerdo da lei distributiva. A expressão correspondente desenvolve-se em (A & B) | (A & C). As tabelas coincidem em todas as linhas; é isso que torna o desenvolvimento válido, e não apenas plausível.
  • (A & B) | (A & C) - A forma desenvolvida. Exige duas portas E e uma porta OU, enquanto a forma compacta exige uma de cada. Portanto, uma lei que não altera a tabela-verdade ainda pode ter um custo físico no circuito. É pela mesma razão que vale a pena trabalhar a álgebra antes de construir.
  • XOR forma expandida - O XOR escrito a partir dos dois casos em que as entradas diferem. A ausência de um operador XOR é intencional: entendê-lo como uma soma de mintermos mostra como qualquer função pode ser construída com as três operações que já conhece.
  • A AND A AND A AND A - A conjunção de quatro cópias da mesma variável devolve a própria variável. Repare no custo: três portas que não alteram nada, precisamente o que um otimizador deve eliminar.
  • lei da absorção - A | (A & B) reduz-se a A. A coluna B está ali justamente para mostrar que é ignorada: quando A é verdadeira, toda a expressão é verdadeira; quando A é falsa, o segundo termo também é falso.
  • teorema do consenso - O termo do meio é redundante, como a tabela demonstra: retire B & C e a coluna de saída não se altera. É difícil perceber isso de imediato, daí o teorema ter um nome.
  • implicação A -> B - A implica B não é uma operação primitiva: equivale a !A | B, e a tabela fornece a prova. A linha que costuma surpreender é aquela em que A é falsa e B é verdadeira; nesse caso, a implicação é válida.
  • paridade 3 entradas - Verdadeira quando um número ímpar de entradas vale 1, esta função corresponde ao XOR encadeado entre três variáveis. É o bit de verificação de uma palavra de memória e deteta qualquer erro de um único bit, pois inverter uma entrada inverte a saída.