Faça assim para simplificar Expressões Lógicas
Data de publicação: 07/02/2025
Descrição do artigo 49:
Neste artigo, explicamos como simplificar expressões lógicas utilizando Álgebra Booleana, Mapas de Karnaugh e ferramentas como CircuitVerse e Logisim. Além disso, mostramos a aplicação prática da simplificação em código Python.
🔢 Simplificação de Expressão Lógica
📌 Introdução
A simplificação de expressões lógicas é fundamental na otimização de circuitos digitais e na redução da complexidade computacional. Em sistemas embarcados e aplicações industriais, expressões lógicas mais simples resultam em menor consumo de energia, maior eficiência e menor custo de implementação pois necessitam de menos componentes.
Na área da programação, muitas vezes ocorre de o programador se deparar com um complexo aninhamento de expressões lógicas, em um fluxo de controle (ifs, elses, do cases..). Não raro, é possível encontrar expressões equivalentes lógicas simplificadas. É isso o que mostraremos neste artigo.
💡 Contexto e Necessidade
As expressões lógicas são utilizadas nas mais diversas áreas, em sistemas eletrônicos e softwares. A formulação correta e eficiente das regras de implementação da funções lógicas e dos circuitos equivalentes evita falhas e otimiza a segurança do sistema, além de tornar os códigos mais simples e legíveis.
🔬 Fundamentos Teóricos
📘 Álgebra Booleana
A Álgebra Booleana é a base da lógica digital. Ela se fundamenta em operações com os operadores ou portas lógicas (AND, OR e NOT em especial), e é essencial para a formulação e simplificação tanto circuitos quanto de aplicativos de programação.
Veja mais em: https://pt.wikipedia.org/wiki/%C3%81lgebra_booliana_(estrutura)📊 Mapa de Karnaugh
O Mapa de Karnaugh é uma técnica gráfica utilizada para minimizar expressões booleanas, reduzindo a complexidade de circuitos lógicos. Ele permite visualizar padrões e agrupar termos semelhantes para encontrar expressões equivalentes mais simples.
Aplicativos como o Logisim permitem a visualização dos mapas de Karnaugh relacionados a uma expressão lógica. O aplicativo online Circuit Verse também permite a simplificação lógica, além de apresentar o circuito correpondente, assim como o Logisim.
A simplificação das expressões lógicas na prática
📝 Vejamos, na prática, como uma expressão complexa pode ser simplificada. Suponhamos algum dos sistemas exemplificados na parte final deste artigo. Como esses exemplos são formados por 4 variáveis boleanas na entrada, a tabela verdade de sua função lógica conterá 16 linhas. Isso porque as tabelas verdade contêm tantas linhas quanto o resultado da fórmula: 2 elevado a n, onde n é a quantidade de variáveis de entrada. Portanto, para n=4, haverá 16 linhas (2^4=16). Caso se tratasse de exemplos com 3 variáveis, haveria 8 linhas (2^3=8); se fossem 5 variáveis, 32 linhas (2^5=32) e assim por diante.
Digamos que, em uma abordagem ingênua (naive no inglês), um programador ou projetista de circuitos estivesse analisando uma tabela verdade de 16 linhas, igual à do Exemplo 1 , "Controle de Acesso a um Sistema" apresentado lá embaixo e, para programar seus vários casos, utilizasse o seguinte fluxo de execução:
🪟Tabela verdade do exemplo 1
A tabela verdade em questão, que o programador teria presumidamente utilizado, seria esta:
🐞 Expressão lógica boleana, não simplificada, para trabalhar com a tabela verdade acima
✅ Expressão lógica boleana simplificada
⚖️Código para comparar os resultados entre os algoritmos nas versões "ingênua" e simplificada
Comparem as duas versões da função contidas no código abaixo. Ambas produzem o mesmo resultado. Porém, enquanto a versão simplificada contém apenas 3 linhas de código, a versão "ingênua" contém quase 50 linhas.
🔎 No exemplo 8, as vantagens da simplificação são mais evidentes
Se analisarmos o exemplo 8, do "Sistema de Controle de Tráfego", veremos ainda mais nítidas as vantagens da simplificação.
🪟Tabela verdade do exemplo 8
🐞 Expressão lógica boleana, não simplificada, para trabalhar com a tabela verdade do exemplo 8
✅ Expressão lógica boleana simplificada para o exemplo 8
⚡ Como realizar, na prática, a simplificação das expressões lógicas?
Bem, o melhor conselho seria estudar e aprofundar-se nas técnicas de álgebra boleana. Tudo fica mais fácil quando, além das experiências práticas, domina-se também a teoria envolvida.
Apresentaremos três outras formas de resolver essa simplificação:
1️⃣ Resolver com a ajuda do ChatGPT
Esta é a opção mais simples, mas também a menos indicada por ora, ao menos na versão gratuita.
Copie a expressão a simplificar, por exemplo, F=(((A'B'C'D)+(A'B'CD')+(A'B'CD)+(A'BC'D)+(A'BCD')+(A'BCD)+(AB'C'D)+(AB'CD')+(AB'CD)+(ABC'D')+(ABC'D)+(ABCD')+(ABCD)))
e, no prompt do ChatGPT, solicite a simplificação.
Um exemplo de prompt pode ser:
Simplifique esta expressão lógica o máximo que puder, considerando-se que utiliza a notação do caracter ' para o operador lógico not e + para o operador or. A expressão em questão: ((A'B'C'D)+(A'B'CD')+(A'B'CD)+(A'BC'D)+(A'BCD')+(A'BCD)+(AB'C'D)+(AB'CD')+(AB'CD)+(ABC'D')+(ABC'D)+(ABCD')+(ABCD)). Quando não houver caractere nenhum, considere que ali vai um operador lógico and. As variáveis de entrada são A, B, C e D e a função de saída é S=f(A,B,C,D).
Repito o alerta de que, por ora ao menos, e na versão gratuita, e nos momentos em que estiver utilizando os modelos mais simples dessa IA, este é o método mais sujeito a falhas e respostas erradas. Ainda assim, é bastante útil para uma visão geral, e como começo de verificação, para confirmação posterior por outros métodos, como os apresentados abaixo.
2️⃣ Resolver a simplificação da expressão lógica com o Circuit Verse
O Circuit Verse é uma ferramenta online que permite simular circuitos digitais. Para utilizar a ferramenta de análise combinacional que o Circuit Verse mantém disponível, siga estes passos:
- Acesse o Circuit Verse.
- Clique em "Launch Simulator".
- No menu superior, vá em Tools > Combinational Analysis.
- No campo "Enter boolean function", insira a expressão lógica
((A+B')C)+((A B C)(A C'))
. - Clique em "Next" para visualizar a tabela verdade resultante da expressão.
- Clique em "Generate circuit"
- Apague todas as conexões não utilizadas
- O circuito que restar corresponderá à versão lógica simplificada
3️⃣ Resolver a simplificação no aplicativo Logisim
A simplificação realizada no aplicativo Logisim é, de certo modo, ainda mais simples do que a apresentada acima, do Circuit Verse. Isso por que é diretamente apresentada na janela em que mostra o mapa de Karnaugh. O ponto negativo é que tem menos flexibilidade para tabelas maiores, pois tem um limite baixo de possíveis variáveis de entradas (limite de 12, na versão testada: 2.7.1).
Baixe o Logisim aqui: https://www.cburch.com/logisim/pt/index.html- Depois de baixá-lo e instalá-lo na pasta de sua preferência, abra o aplicativo
- Acesse a análise combinacional em "Projeto > Analisar Circuito"
- Ao contrário do Circuit Verse, o Logisim não permite a entrada direta da expressão a minimizar, portanto, é preciso entrar com as variáveis de entrada (A,B,C) e com a de saída (F).
- Depois disso, manualmente configurar a tabela verdade.
- A expressão resultante dependerá da configuração (manual) da tabela verdade
- Aí, sim, é que, na aba "Minimizada" é que o usuário terá o resultado da simplificação da expressão.
- Na aba "Minimizada", poderá escolher entre uma das formas de minimização: Soma de Produtos ou Produto das somas. Em cada caso, um ou outro pode ser o mais vantajoso em termos de simplicidade e de economia de recursos.
Exemplos de sistemas hipotéticos relativamente complexos
Solicitei ao ChatGpt para indicar alguns exemplos de sistemas hipotéticos relativamente complexos, com 4 variáveis booleanas na entrada e 1 na saída. Vejam as sugestões recebidas, já com as adaptações que fiz:
1. Controle de Acesso a um Sistema
Entrada:
- A = Usuário autenticado
- B = Possui permissão de administrador
- C = Senha válida
- D = Autenticação de dois fatores ativada
Saída:
S = Acesso permitido
Função Lógica simples:
Explicação:
Usuário autenticado com senha válida e, além disso, ou é administrador ou tem 2FA ativado
2. Sistema de Segurança Residencial
Entrada:
- A = Sensor de porta ativado
- B = Sensor de movimento detectado
- C = Alarme ativado
- D = Presença do proprietário
Saída:
S = Disparar alarme
Função Lógica simples:
Explicação:
O alarme toca se estiver ativado e houver movimento ou porta aberta, mas não se o proprietário estiver presente
3. Carro Autônomo em Situação de Tráfego
Entrada:
- A = Placa de pare detectada
- B = Obstáculo à frente
- C = Veículo em movimento
- D = Sinal verde
Saída:
S = Frear
Função Lógica simples:
Explicação:
Freia se houver placa de pare, obstáculo ou se estiver em movimento sem sinal verde
4. Sistema de Aprovação de Crédito
Entrada:
- A = Renda mínima atingida
- B = Nome limpo
- C = Histórico de crédito positivo
- D = Emprego formal confirmado
Saída:
S = Crédito aprovado
Função Lógica simples:
Explicação:
Aprovação se renda for suficiente, nome estiver limpo e houver um histórico positivo ou emprego confirmado
5. Sistema de Irrigação Automática
Entrada:
- A = Umidade do solo baixa
- B = Previsão de chuva
- C = Horário permitido para irrigação
- D = Sensor de temperatura indicando calor excessivo
Saída:
S = Acionar irrigação
Função Lógica simples:
Explicação:
Aciona a irrigação se a umidade do solo estiver baixa e estiver em horário permitido, além de não haver previsão para chuva ou o sensor de temperatura estiver marcando calor excessivo
6. Sistema de Detecção de Fraude em Transações
Entrada:
- A = Transação acima do valor médio
- B = Localização suspeita
- C = Cartão usado recentemente
- D = Usuário autenticado via biometria
Saída:
S = Bloquear transação
Função Lógica simples:
Explicação:
Bloqueia a transação se for acima do valor médio e se a localização for suspeita ou o cartão não foi usado recentemente além de o usuário não ter usado identificação por biometria
7. Gerenciamento de Carga em Veículo Elétrico
Entrada:
- A = Bateria abaixo de 20%
- B = Carregador disponível
- C = Rede elétrica sobrecarregada
- D = Modo de carregamento rápido ativado
Saída:
S = Iniciar carregamento
Função Lógica simples:
Explicação:
Inicia o carregamento se a bateria estiver abaixo de 20% e o carregador estiver disponível e se a rede não estiver sobrecarregada ou se o modo de carregamento rápido estiver ativado
8. Sistema de Controle de Tráfego
Entrada:
- A = Tráfego intenso
- B = Tempo de espera longo
- C = Veículo de emergência detectado
- D = Sinalização manual ativa
Saída:
S = Liberar sinal verde
Função Lógica simples:
Explicação:
Libera o sinal verde em caso de tráfego intenso e tempo de espera longo ou se estiver passando um veículo de emergência ou se a sinalização manual estiver ativa
9. Sistema de Iluminação Pública Inteligente
Entrada:
- A = Horário noturno
- B = Movimento detectado
- C = Nível de luminosidade baixo
- D = Modo de economia de energia ativado
Saída:
S = Acionar iluminação
Função Lógica simples:
Explicação:
Aciona a iluminação se estiver de noite e o nível de luminosidade estiver baixo ou se houver movimento detectado e o modo de economia estiver desativado
10. Controle de Temperatura em Estufas
Entrada:
- A = Temperatura acima do limite
- B = Umidade adequada
- C = Ventilação disponível
- D = Rega automática ativada
Saída:
S = Ativar sistema de resfriamento
Função Lógica simples:
Explicação:
Ativa o resfriamento se temperatura acima do limite e umidade não estiver adequada, se houver ventilação disponível e se a rega automática estiver desativada
11. Sistema de Verificação de E-mails Suspeitos
Entrada:
- A = Contém links externos
- B = Possui anexos desconhecidos
- C = Remetente não verificado
- D = Linguagem persuasiva detectada
Saída:
S = E-mail suspeito
Função Lógica simples:
Explicação:
É suspeito se houver links externos ou anexos desconhecidos ou se o remetente for duvidoso e apresentar linguagem persuasiva
12. Automação de Marketing Digital
Entrada:
- A = Usuário visitou a página de produto
- B = Adicionou ao carrinho
- C = Abandonou o carrinho
- D = E-mail de recuperação enviado
Saída:
S = Enviar lembrete por e-mail
Função Lógica simples:
Explicação:
Envia lembrete se o usuário visitou, adicionou ao carrinho, mas abandonou e ainda não recebeu e-mail
Código para apresentar as tabelas verdade de cada um dos exemplos acima
📈 Conclusão
A simplificação de expressões lógicas é essencial para tornar circuitos mais eficientes e econômicos. Utilizando técnicas de simplificação das expressões lógicas, seja com o uso de álgebra booleana, do Mapa de Karnaugh ou de ferramentas como o CircuitVerse, o Logisim e os portais de IA como o ChatGPT, podemos construir sistemas otimizados e de melhor desempenho.