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.

    Abrir este problema na ferramenta

    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.

    Abrir este problema na ferramenta

    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.