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:

  1. Acesse o Circuit Verse.
  2. Clique em "Launch Simulator".
  3. No menu superior, vá em Tools > Combinational Analysis.
  4. No campo "Enter boolean function", insira a expressão lógica ((A+B')C)+((A B C)(A C')).
  5. Clique em "Next" para visualizar a tabela verdade resultante da expressão.
  6. Clique em "Generate circuit"
  7. Apague todas as conexões não utilizadas
  8. 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
  1. Depois de baixá-lo e instalá-lo na pasta de sua preferência, abra o aplicativo
  2. Acesse a análise combinacional em "Projeto > Analisar Circuito"
  3. 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).
  4. Depois disso, manualmente configurar a tabela verdade.
  5. A expressão resultante dependerá da configuração (manual) da tabela verdade
  6. Aí, sim, é que, na aba "Minimizada" é que o usuário terá o resultado da simplificação da expressão.
  7. 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.

Para comentários:

Destinado para esses comentários em geral:

https://www.youtube.com/@roberto_csantos/community