Ir para o conteúdo principal

Simplificação de Funções Lógicas: mintermos, maxtermos e mapa de Karnaugh

·4069 palavras·20 minutos·
Autor
Francisco Bustamante
Um químico trabalhando com Ciência de Dados e Programação em Python.
Tabela de conteúdos

Todo circuito digital — desde um somador simples até um processador moderno — começa com uma função lógica descrita em uma tabela verdade. A partir daí, o engenheiro precisa encontrar a expressão booleana que implementa essa função com o menor número possível de portas lógicas. Menos portas significa circuito menor, mais barato e mais rápido.

Este artigo é o complemento prático do artigo anterior Álgebra Booleana: fundamento matemático da computação digital: enquanto aquele artigo construiu os fundamentos teóricos — postulados, teoremas e identidades —, este os coloca em uso para simplificar funções lógicas. São apresentados três métodos: as formas canônicas (mintermos e maxtermos), que traduzem qualquer tabela verdade diretamente em expressão algébrica; a simplificação algébrica, que aplica os teoremas já estudados para reduzir termos e literais; e o mapa de Karnaugh, uma ferramenta gráfica que torna o processo visual e sistemático, sem depender de intuição algébrica.

Da tabela verdade à expressão: formas canônicas
#

Mintermos e a forma SOP
#

Considere o votador majoritário para três votantes A, B, C: a saída \(F\) vale 1 quando dois ou mais votantes votam 1.

A B C F
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1

Por inspeção, podemos escrever uma expressão para cada linha em que \(F = 1\):

$$F = \bar{A}BC + A\bar{B}C + AB\bar{C} + ABC$$

Cada um desses produtos contém todas as três variáveis (em forma direta ou complementada). Esses produtos completos têm um nome especial:

Mintermo

Um mintermo de \(n\) variáveis é um produto lógico que contém todas as \(n\) variáveis, cada uma aparecendo exatamente uma vez — em sua forma direta ou complementada.

Um mintermo vale 1 em exatamente uma linha da tabela verdade. A soma de mintermos (forma SOPSum of Products) representa a função nos pontos em que ela é 1.

Cada mintermo recebe um índice \(m_i\) igual ao valor decimal da combinação de entrada: lê-se os valores das variáveis como um número binário e converte-se para decimal. Por exemplo, a combinação A=0, B=1, C=1 forma o binário \(011_2 = 3_{10}\), logo o mintermo correspondente é \(m_3\).

O índice não depende da ordem da tabela

Quando a tabela verdade é montada na ordem binária crescente (000, 001, 010, …, 111), o índice do mintermo coincide com o número da linha (contando do zero). Mas essa coincidência não vale se a tabela estiver em outra ordem. O índice é sempre determinado pelo valor das variáveis, não pela posição na tabela.

A expressão acima pode então ser escrita na notação compacta:

$$F = \bar{A}BC + A\bar{B}C + AB\bar{C} + ABC = m_3 + m_5 + m_6 + m_7$$$$\boxed{F(A,B,C) = \sum(3,\, 5,\, 6,\, 7)}$$

Maxtermos e a forma POS
#

O ponto de partida é \(\bar{F}\) — o complemento de \(F\). Como \(F = 1\) nas combinações 3, 5, 6 e 7, então \(\bar{F} = 1\) nas combinações restantes: 0, 1, 2 e 4. Ou seja:

$$\bar{F} = m_0 + m_1 + m_2 + m_4$$

Agora aplicamos De Morgan a toda a expressão de \(\bar{F}\) para recuperar \(F\):

$$F = \overline{\bar{F}} = \overline{m_0 + m_1 + m_2 + m_4} = \bar{m}_0 \cdot \bar{m}_1 \cdot \bar{m}_2 \cdot \bar{m}_4$$

O que é \(\bar{m}_i\)? É De Morgan aplicado a um mintermo. Por exemplo:

$$\bar{m}_0 = \overline{\bar{A}\bar{B}\bar{C}} = A + B + C$$

Generalizando: a negação de um mintermo \(m_i\) é exatamente o maxtermo \(M_i\) — as variáveis que estavam complementadas ficam diretas, e vice-versa. Portanto:

$$F = \bar{m}_0 \cdot \bar{m}_1 \cdot \bar{m}_2 \cdot \bar{m}_4 = M_0 \cdot M_1 \cdot M_2 \cdot M_4$$
Maxtermo

Um maxtermo de \(n\) variáveis é uma soma lógica que contém todas as \(n\) variáveis, cada uma aparecendo exatamente uma vez.

Um maxtermo vale 0 em exatamente uma linha da tabela verdade. O produto de maxtermos (forma POSProduct of Sums) representa a função nos pontos em que ela é 0.

Na notação compacta:

$$\boxed{F(A,B,C) = \prod(0,\, 1,\, 2,\, 4)}$$
Relação SOP ↔ POS

Os índices de mintermos e maxtermos de uma mesma função são sempre complementares: se \(F = \sum(3,5,6,7)\), então necessariamente \(F = \prod(0,1,2,4)\). Os dois conjuntos somam todos os \(2^n\) índices possíveis.

Qual forma implementar?

Na prática, a escolha entre SOP e POS depende tanto do resultado da simplificação (qual forma tem menos termos e literais) quanto do hardware disponível:

  • Portas NAND (as mais comuns em tecnologia CMOS) favorecem a forma SOP: dois níveis de portas NAND implementam diretamente qualquer expressão soma de produtos.
  • Portas NOR favorecem a forma POS: dois níveis de portas NOR implementam diretamente qualquer expressão produto de somas.

Por isso, recomenda-se simplificar a função nas duas formas e comparar o custo em literais antes de escolher qual implementar.

Tabela geral de mintermos e maxtermos (3 variáveis)
#

Linha x y z Mintermo \(m_i\) Maxtermo \(M_i\)
0 0 0 0 \(\bar{x}\bar{y}\bar{z}\) \(x+y+z\)
1 0 0 1 \(\bar{x}\bar{y}z\) \(x+y+\bar{z}\)
2 0 1 0 \(\bar{x}y\bar{z}\) \(x+\bar{y}+z\)
3 0 1 1 \(\bar{x}yz\) \(x+\bar{y}+\bar{z}\)
4 1 0 0 \(x\bar{y}\bar{z}\) \(\bar{x}+y+z\)
5 1 0 1 \(x\bar{y}z\) \(\bar{x}+y+\bar{z}\)
6 1 1 0 \(xy\bar{z}\) \(\bar{x}+\bar{y}+z\)
7 1 1 1 \(xyz\) \(\bar{x}+\bar{y}+\bar{z}\)

Repare no padrão: no mintermo \(m_i\), uma variável aparece complementada se o bit correspondente em \(i\) for 0, e em forma direta se for 1. No maxtermo \(M_i\) acontece o contrário.

Por exemplo, a linha 5 tem \(x=1, y=0, z=1\), ou seja, \(i = 101_2 = 5_{10}\):

  • \(m_5 = x\bar{y}z\) — x direto (bit 1), y complementado (bit 0), z direto (bit 1)
  • \(M_5 = \bar{x}+y+\bar{z}\) — x complementado (bit 1), y direto (bit 0), z complementado (bit 1)

Exercícios
#

Exercício 1 — \(F(A,B,C) = \sum(1,3,5,7)\): representar por produto de maxtermos

Os índices ausentes (onde \(F = 0\)) são 0, 2, 4, 6. Portanto:

$$F(A,B,C) = \prod(0,2,4,6) = M_0 \cdot M_2 \cdot M_4 \cdot M_6$$

Expandindo:

$$F = (A+B+C)(A+\bar{B}+C)(\bar{A}+B+C)(\bar{A}+\bar{B}+C)$$

Observe que todos os maxtermos têm \(C\) em forma direta. Isso é um indício de que \(C\) é a variável determinante: \(\sum(1,3,5,7)\) são exatamente os índices ímpares, ou seja, todas as combinações com \(C=1\). A simplificação algébrica confirma:

Simplificação algébrica
$$\begin{align} F &= \bar{A}\bar{B}C + \bar{A}BC + A\bar{B}C + ABC \\ &= \bar{A}C\underbrace{(\bar{B}+B)}_{=1} + AC\underbrace{(\bar{B}+B)}_{=1} \\ &= \bar{A}C + AC = C\underbrace{(\bar{A}+A)}_{=1} = \boxed{C} \end{align}$$
Exercício 2 — Representar a função da tabela por SOP e POS
A B C F
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 0

\(F = 1\) nos índices 1, 2, 4 (combinações \(001_2\), \(010_2\), \(100_2\)):

$$F = \sum(1,2,4) = \bar{A}\bar{B}C + \bar{A}B\bar{C} + A\bar{B}\bar{C}$$

\(F = 0\) nos índices 0, 3, 5, 6, 7 (combinações \(000_2\), \(011_2\), \(101_2\), \(110_2\), \(111_2\)):

$$F = \prod(0,3,5,6,7) = (A+B+C)(A+\bar{B}+\bar{C})(\bar{A}+B+\bar{C})(\bar{A}+\bar{B}+C)(\bar{A}+\bar{B}+\bar{C})$$
Índices SOP e POS são sempre complementares

Cada mintermo \(m_i\) vale 1 exatamente na combinação \(i\), portanto o SOP lista os índices onde \(F = 1\). Cada maxtermo \(M_i\) vale 0 exatamente na combinação \(i\), portanto o POS lista os índices onde \(F = 0\). Como toda combinação pertence a um dos dois casos, \(\{1,2,4\} \cup \{0,3,5,6,7\} = \{0,\ldots,7\}\) — os dois conjuntos particionam o espaço de entradas.

Observe também a regra de complementação oposta: para o índice 1 (\(001_2\)), o mintermo é \(m_1 = \bar{A}\bar{B}C\) (bit 0 → complementado, bit 1 → direto), enquanto o maxtermo é \(M_1 = A+B+\bar{C}\) (bit 0 → direto, bit 1 → complementado). O mesmo padrão de bits gera literais opostos nas duas formas.

Simplificação algébrica
#

Com a expressão em forma canônica em mãos, podemos aplicar os postulados e teoremas da Álgebra de Boole para reduzir o número de termos e literais. O resultado é uma expressão equivalente, mas mais simples.

Exemplo 1 — Votador majoritário: \(F(A,B,C) = \sum(3,5,6,7)\)
$$\begin{align} F &= \bar{A}BC + A\bar{B}C + AB\bar{C} + ABC \\ &= \bar{A}BC + A\bar{B}C + AB\underbrace{(\bar{C}+C)}_{=1} \\ &= \bar{A}BC + A\bar{B}C + AB \\ &= B\underbrace{(\bar{A}C + A)}_{\text{Teorema: }X + \bar{X}Y = X+Y} + A\bar{B}C \\ &= B(A + C) + A\bar{B}C \\ &= AB + BC + A\bar{B}C \\ &= AB + C\underbrace{(B + A\bar{B})}_{\text{Teorema: }X + \bar{X}Y = X+Y} \\ &= AB + C(B + A) \\ &\boxed{F = AB + AC + BC} \end{align}$$
Exemplo 2 — \(F(A,B,C) = \sum(3,7)\)
$$F = \bar{A}BC + ABC = BC\underbrace{(\bar{A}+A)}_{=1} = \boxed{BC}$$
Exemplo 3 — \(F(A,B,C) = \sum(4,5,6,7)\)
$$\begin{align} F &= A\bar{B}\bar{C} + A\bar{B}C + AB\bar{C} + ABC \\ &= A\bar{B}\underbrace{(\bar{C}+C)}_{=1} + AB\underbrace{(\bar{C}+C)}_{=1} \\ &= A\bar{B} + AB = A\underbrace{(\bar{B}+B)}_{=1} = \boxed{A} \end{align}$$
Exemplo 4 — \(F(A,B,C) = \sum(0,2,4,6)\)
$$\begin{align} F &= \bar{A}\bar{B}\bar{C} + \bar{A}B\bar{C} + A\bar{B}\bar{C} + AB\bar{C} \\ &= \bar{A}\bar{C}\underbrace{(\bar{B}+B)}_{=1} + A\bar{C}\underbrace{(\bar{B}+B)}_{=1} \\ &= \bar{A}\bar{C} + A\bar{C} = \bar{C}\underbrace{(\bar{A}+A)}_{=1} = \boxed{\bar{C}} \end{align}$$
Limitação da simplificação algébrica

O método funciona bem para funções simples, mas não é sistemático: não há um procedimento garantido que leve ao mínimo, e a sequência de passos depende de intuição e experiência. Para funções com muitos mintermos ou muitas variáveis, o mapa de Karnaugh é muito mais eficiente.

Mapa de Karnaugh
#

Para superar essas limitações, o mapa de Karnaugh oferece um procedimento visual e sistemático que garante a expressão mínima sem depender de intuição algébrica.

Definição

O mapa de Karnaugh (K-map; Maurice Karnaugh, 1953, inspirado no diagrama de Veitch de 1952) é uma representação gráfica da tabela verdade onde cada célula corresponde a um mintermo. Os mintermos são organizados de modo que células vizinhas diferem em exatamente uma variável — isso permite enxergar grupos simplificáveis de forma visual.

O código Gray: por que a ordem importa
#

A sequência das colunas não é binária!

As colunas (e linhas) do mapa de Karnaugh seguem o código Gray: cada posição adjacente difere em apenas 1 bit. Para dois bits, a sequência é:

$$00 \;\to\; 01 \;\to\; 11 \;\to\; 10$$

Note que a ordem não é 00 → 01 → 10 → 11 (binária normal). Essa peculiaridade é o que garante a adjacência lógica entre células vizinhas.

Mapa de 2 variáveis
#

Para \(F(A,B)\), o mapa é uma grade 2×2:

\(A \backslash B\) \(B=0\) \(B=1\)
\(A=0\) \(m_0\) \(m_1\)
\(A=1\) \(m_2\) \(m_3\)

Exemplo: \(F(A,B) = \bar{A}B + A\bar{B}\)

karnaugh2x2
Exemplo de mapa de Karnaugh para 2 variáveis
As células \(m_1\) e \(m_2\) valem 1 e são diagonalmente opostas no mapa — não formam nenhum grupo adjacente válido. A expressão canônica já é a forma mínima: \(F = A \oplus B\) (XOR).

Mapa de 3 variáveis
#

Para \(F(A,B,C)\), o mapa é uma grade 2×4, com as colunas rotuladas pelo par \(BC\) na sequência Gray:

\(A \backslash BC\) 00 01 11 10
0 \(m_0\) \(m_1\) \(m_3\) \(m_2\)
1 \(m_4\) \(m_5\) \(m_7\) \(m_6\)

Exemplo: \(F(A,B,C) = \bar{A}\bar{B}\bar{C} + \bar{A}BC + AB\bar{C} + ABC\)

\(A \backslash BC\) 00 01 11 10
0 1 0 1 0
1 1 0 1 0

As células \(m_0, m_3, m_4, m_7\) valem 1, o que equivale a \(F(A,B,C) = \sum(0,3,4,7)\).

A seguir, veremos como esses mapas permitem simplificar funções lógicas.

Regras de simplificação com Karnaugh
#

Antes de ver exemplos, vale sistematizar as regras:

Tamanho do grupo Variáveis eliminadas Variáveis que restam
1 célula 0 \(n\)
2 células 1 \(n-1\)
4 células 2 \(n-2\)
8 células 3 \(n-3\)

O algoritmo de simplificação segue esta ordem:

  1. Células isoladas primeiro — mintermos sem nenhum vizinho com valor 1; eles não simplificam, mas fazem parte da função.
  2. Única possibilidade — mintermos que só podem pertencer a um grupo; esse grupo é obrigatório (implicante primo essencial).
  3. Máximo de células — para os mintermos restantes, forme o maior grupo possível (potência de 2).
  4. Evite redundância — se todos os mintermos de um grupo já foram cobertos por grupos anteriores, esse grupo gera um termo redundante e deve ser descartado.
Implicante e implicante primo
  • Implicante de \(F\): qualquer produto de literais \(P\) tal que, sempre que \(P = 1\), também \(F = 1\). No K-map, corresponde a qualquer grupo válido de 1s.
  • Implicante primo: implicante do qual não se pode remover nenhum literal sem que deixe de ser implicante — ou seja, o maior grupo possível que cobre determinados mintermos.
  • Implicante primo essencial: implicante primo que é o único a cobrir pelo menos um mintermo. Deve obrigatoriamente fazer parte da cobertura mínima.
Grupos só com potências de 2

Grupos de 3, 5, 6 ou qualquer número que não seja potência de 2 são inválidos. O tamanho deve ser sempre 1, 2, 4, 8, 16…

Simplificação POS: agrupe os 0s

O procedimento apresentado aqui — agrupar os 1s — produz a forma SOP (soma de produtos). Para obter a forma POS (produto de somas) diretamente pelo K-map, aplica-se o mesmo processo aos 0s do mapa: cada grupo de 0s gera um maxtermo simplificado, e o resultado final é o produto desses maxtermos.

Simplificação: mapa de 3 variáveis
#

Retomando o exemplo \(F(A,B,C) = \sum(0,3,4,7)\) apresentado acima, há dois grupos de células adjacentes com valor 1. A figura a seguir os destaca:

karnaugh3x4
Exemplo de mapa de Karnaugh para 3 variáveis, com os grupos destacados

  • Grupo 1: \(m_0\) e \(m_4\) (coluna 00, ambas as linhas) → \(\bar{B}\bar{C}\)
  • Grupo 2: \(m_3\) e \(m_7\) (coluna 11, ambas as linhas) → \(BC\)

Logo, a função pode ser simplificada para:

$$\boxed{F = \bar{B}\bar{C} + BC}$$

Mapa de 4 variáveis
#

Para \(F(A,B,C,D)\), o mapa é uma grade 4×4, com linhas rotuladas por \(AB\) e colunas por \(CD\), ambas em sequência Gray:

\(AB \backslash CD\) 00 01 11 10
00 \(m_0\) \(m_1\) \(m_3\) \(m_2\)
01 \(m_4\) \(m_5\) \(m_7\) \(m_6\)
11 \(m_{12}\) \(m_{13}\) \(m_{15}\) \(m_{14}\)
10 \(m_8\) \(m_9\) \(m_{11}\) \(m_{10}\)
O mapa é toroidal — as bordas se tocam

O mapa de Karnaugh deve ser imaginado como um toroide: a primeira e a última colunas são adjacentes, e o mesmo vale para a primeira e a última linhas. Isso significa que os quatro cantos (\(m_0, m_2, m_8, m_{10}\)) também formam um grupo válido!

Para entender a geometria, pense em dobrar o retângulo duas vezes: primeiro juntando as bordas laterais (formando um cilindro), depois juntando as bordas circulares do cilindro (formando o toroide):

Transformação de retângulo em toroide
Do retângulo plano ao toroide: primeiro as bordas laterais se unem, depois as bordas superior e inferior. Fonte: Wikipedia

O resultado final, com os mintermos posicionados na superfície toroidal:

Mapa de Karnaugh como superfície toroidal
Representação toroidal do mapa de Karnaugh — bordas opostas são adjacentes. Fonte: Wikipedia

Fonte: Karnaugh map — Wikipedia

A figura abaixo mostra como a função \(F(A,B,C,D) = \bar{A}\bar{B}\bar{C}D + \bar{A}\bar{B}C\bar{D} + \bar{A}\bar{B}CD + \bar{A}BC\bar{D} + \bar{A}BCD + A\bar{B}\bar{C}D + AB\bar{C}\bar{D} \) pode ser simplificada usando o mapa de Karnaugh:

karnaugh4x4
Exemplo de mapa de Karnaugh para 4 variáveis, com os grupos destacados

O mapa preenchido — equivalente a \(F = \sum(1,2,3,6,7,9,12)\) — é:

\(AB \backslash CD\) 00 01 11 10
00 0 1 1 1
01 0 0 1 1
11 1 0 0 0
10 0 1 0 0

Os grupos identificados são:

  • Grupo de 4: \(m_2, m_3, m_6, m_7\) — colunas \(CD = 10\) e \(CD = 11\), linhas \(AB = 00\) e \(AB = 01\); variáveis fixas \(A = 0\) e \(C = 1\) → \(\bar{A}C\)
  • Grupo de 2 (toroidal): \(m_1, m_9\) — coluna \(CD = 01\), linhas \(AB = 00\) e \(AB = 10\); as bordas superior e inferior se tocam no toroide; variáveis fixas \(B = 0, C = 0, D = 1\) → \(\bar{B}\bar{C}D\)
  • Célula isolada: \(m_{12}\) — todos os quatro vizinhos são 0; \(A = 1, B = 1, C = 0, D = 0\) → \(AB\bar{C}\bar{D}\)
$$\boxed{F = \bar{A}C + \bar{B}\bar{C}D + AB\bar{C}\bar{D}}$$

Mapa de 5 variáveis
#

Para \(F(A,B,C,D,E)\), o mapa cresce para 32 células — além do limite prático para trabalho manual, mas a estrutura segue o mesmo princípio. Usam-se dois grids 4×4 lado a lado: um para \(A=0\) e outro para \(A=1\). Em cada grid, as linhas são rotuladas por \(BC\) e as colunas por \(DE\), ambas em código Gray (00 → 01 → 11 → 10).

A adjacência funciona normalmente dentro de cada grid. Além disso, há adjacência cruzada entre os dois grids: uma célula na posição \((i,j)\) do grid \(A=0\) é adjacente à célula na mesma posição do grid \(A=1\), pois as duas diferem apenas em \(A\). Grupos podem, portanto, estender-se pelos dois grids.

Exemplo — \(F(A,B,C,D,E) = \sum(0,1,16,17,31)\)

Grid \(A=0\):

\(BC \backslash DE\) 00 01 11 10
00 1 1 0 0
01 0 0 0 0
11 0 0 0 0
10 0 0 0 0

Grid \(A=1\):

\(BC \backslash DE\) 00 01 11 10
00 1 1 0 0
01 0 0 0 0
11 0 0 1 0
10 0 0 0 0

Grupos identificados:

  • Grupo de 4 (cruzado): \(\{m_0, m_1\}\) no grid \(A=0\) e \(\{m_{16}, m_{17}\}\) no grid \(A=1\) — mesma posição (linha \(BC=00\), colunas \(DE=00\) e \(DE=01\)). As quatro células diferem apenas em \(A\) e \(E\); o que fica fixo é \(B=0, C=0, D=0\) → \(\bar{B}\bar{C}\bar{D}\).
  • Célula isolada: \(m_{31}\) no grid \(A=1\), linha \(BC=11\), coluna \(DE=11\) → \(A=1, B=1, C=1, D=1, E=1\) → \(ABCDE\).
$$\boxed{F = \bar{B}\bar{C}\bar{D} + ABCDE}$$

Para funções com 6 ou mais variáveis o K-map se torna impraticável; nesse ponto, o método de Quine-McCluskey (algorítmico) é a alternativa natural.

Condições de indiferença (Don’t Care)
#

Em muitos sistemas reais, algumas combinações de entrada nunca ocorrem — ou ocorrem, mas o resultado da saída não importa. Essas condições são chamadas de indiferença (don’t care) e são marcadas com X no mapa.

O exemplo clássico é o decodificador BCD (Binary-Coded Decimal): os dígitos decimais 0–9 usam apenas as combinações 0000 a 1001. As combinações 1010 a 1111 (10 a 15) são inválidas — nunca aparecem como entrada. Logo, o comportamento da saída para essas células é irrelevante e pode ser marcado como X.

Regras de uso dos X no mapa
  • Use os X para ampliar grupos quando isso resultar em um grupo maior (potência de 2 maior) e, portanto, em um termo mais simples.
  • Nunca forme um grupo composto só de X: esses mintermos não precisam ser cobertos — incluí-los desnecessariamente apenas acrescenta termos.
  • Um X que não ajuda nenhum grupo pode ser simplesmente ignorado.
Exemplo com don’t care

Suponha \(F(A,B,C,D) = \sum m(1,3,5,7) + \sum d(9,11,13,15)\), onde \(d\) indica os don’t-cares.

\(AB \backslash CD\) 00 01 11 10
00 0 1 1 0
01 0 1 1 0
11 0 X X 0
10 0 X X 0

Sem os X, os mintermos 1, 3, 5, 7 formam um grupo de 4 (\(A=0\), \(D=1\)) → \(\bar{A}D\).

Com os X disponíveis, os mintermos 1, 3, 5, 7 podem se juntar a 9, 11, 13 e 15 para formar um grupo de 8 (toda a coluna \(D=1\)). Resultado: simplesmente \(\boxed{F = D}\).

A solução mínima pode não ser única

Dependendo das escolhas de agrupamento, um mesmo mapa de Karnaugh pode gerar duas ou mais expressões mínimas igualmente válidas. Isso ocorre quando um mintermo pode ser incluído em grupos diferentes sem alterar o número de termos ou literais do resultado final.

Por exemplo, num mapa de 3 variáveis, \(m_4\) pode ser agrupado tanto com \(\{m_0, m_4\}\) → \(\bar{B}\bar{C}\) quanto com \(\{m_4, m_6\}\) → \(A\bar{C}\); ambas as escolhas produzem expressões mínimas corretas.

Na prática, qualquer solução mínima é aceitável. Ferramentas de síntese lógica escolhem automaticamente entre as alternativas disponíveis.

Grupos redundantes e hazards

Em projetos de hardware, engenheiros às vezes adicionam intencionalmente grupos redundantes no K-map — mesmo que não cubram nenhum mintermo novo — para eliminar hazards (glitches): pulsos espúrios na saída causados pelo atraso de propagação entre grupos adjacentes quando as entradas mudam. Esse refinamento vai além da minimização lógica pura e pertence à análise temporal de circuitos combinatórios.

Exercícios resolvidos
#

Ex. 1 — \(F(A,B,C) = \sum(0,2,4,5,6)\)
#

\(A \backslash BC\) 00 01 11 10
0 1 0 0 1
1 1 1 0 1

Mapa de Karnaugh — Exercício 1
Mapa de Karnaugh para F(A,B,C) = Σ(0,2,4,5,6)

  • Grupo de 4 células — vermelho: \(m_0, m_2, m_4, m_6\) (colunas 00 e 10, ambas as linhas) → \(\bar{C}\)
  • Grupo de 2 células — verde: \(m_4, m_5\) (linha \(A=1\), colunas 00 e 01) → \(A\bar{B}\)
$$\boxed{F = \bar{C} + A\bar{B}}$$

Ex. 2 — \(F(A,B,C,D) = \sum(3,4,5,7,9,13,14,15)\)
#

\(AB \backslash CD\) 00 01 11 10
00 0 0 1 0
01 1 1 1 0
11 0 1 1 1
10 0 1 0 0

Mapa de Karnaugh — Exercício 2
Mapa de Karnaugh para F(A,B,C,D) = Σ(3,4,5,7,9,13,14,15): quatro implicantes primos essenciais destacados

Identificando os implicantes primos essenciais:

Grupo Cor no mapa Mintermos Expressão Por que essencial
\(\bar{A}CD\) vermelho \(\{3,7\}\) \(A=0, C=1, D=1\) único grupo cobrindo \(m_3\)
\(\bar{A}B\bar{C}\) verde \(\{4,5\}\) \(A=0, B=1, C=0\) único grupo cobrindo \(m_4\)
\(A\bar{C}D\) amarelo \(\{9,13\}\) \(A=1, C=0, D=1\) único grupo cobrindo \(m_9\)
\(ABC\) ciano \(\{14,15\}\) \(A=1, B=1, C=1\) único grupo cobrindo \(m_{14}\)

Verificação: \(\{3,7\} \cup \{4,5\} \cup \{9,13\} \cup \{14,15\} = \{3,4,5,7,9,13,14,15\}\) ✓

$$\boxed{F = \bar{A}CD + \bar{A}B\bar{C} + A\bar{C}D + ABC}$$

Ex. 3 — \(F(A,B,C,D) = \sum(0,2,5,7,8,10,13,15)\)
#

\(AB \backslash CD\) 00 01 11 10
00 1 0 0 1
01 0 1 1 0
11 0 1 1 0
10 1 0 0 1

Mapa de Karnaugh — Exercício 3
Mapa de Karnaugh para F(A,B,C,D) = Σ(0,2,5,7,8,10,13,15): dois grupos de 4 no padrão xadrez

  • Grupo de 4 — vermelho: \(m_0, m_2, m_8, m_{10}\) (quatro cantos nas colunas 00/10, linhas 00/10) → \(\bar{B}\bar{D}\)
  • Grupo de 4 — verde: \(m_5, m_7, m_{13}, m_{15}\) → \(BD\)
$$\boxed{F = \bar{B}\bar{D} + BD = \overline{B \oplus D}}$$
Resultado elegante

Esta é a função XNOR(B, D): a saída é 1 quando B e D têm o mesmo valor. O padrão xadrez no mapa de Karnaugh é sempre sinal de uma função XOR ou XNOR.

Ex. 4 — \(F(A,B,C,D) = \sum(0,2,3,4,6,9,10,11,12,14)\)
#

\(AB \backslash CD\) 00 01 11 10
00 1 0 1 1
01 1 0 0 1
11 1 0 0 1
10 0 1 1 1

Mapa de Karnaugh — Exercício 4
Mapa de Karnaugh para F(A,B,C,D) = Σ(0,2,3,4,6,9,10,11,12,14): quatro grupos destacados

Grupo Cor no mapa Mintermos Expressão Por que essencial
\(\bar{A}\bar{D}\) vermelho \(\{0,2,4,6\}\) \(A=0, D=0\) único grupo cobrindo \(m_0\)
\(\bar{B}C\) verde \(\{2,3,10,11\}\) \(B=0, C=1\) único grupo cobrindo \(m_3\)
\(B\bar{D}\) amarelo \(\{4,6,12,14\}\) \(B=1, D=0\) único grupo cobrindo \(m_{12}\)
\(A\bar{B}D\) ciano \(\{9,11\}\) \(A=1, B=0, D=1\) único grupo cobrindo \(m_9\)
$$\boxed{F = \bar{A}\bar{D} + \bar{B}C + B\bar{D} + A\bar{B}D}$$

Ex. 5 — \(F(A,B,C,D) = \sum(0,1,2,4,8,9,10,12,14)\)
#

\(AB \backslash CD\) 00 01 11 10
00 1 1 0 1
01 1 0 0 0
11 1 0 0 1
10 1 1 0 1

Mapa de Karnaugh — Exercício 5
Mapa de Karnaugh para F(A,B,C,D) = Σ(0,1,2,4,8,9,10,12,14): quatro grupos destacados

Grupo Cor no mapa Mintermos Expressão Por que essencial
\(\bar{B}\bar{C}\) vermelho \(\{0,1,8,9\}\) \(B=0, C=0\) único grupo cobrindo \(m_1\)
\(\bar{B}\bar{D}\) verde \(\{0,2,8,10\}\) \(B=0, D=0\) único grupo cobrindo \(m_2\)
\(\bar{C}\bar{D}\) amarelo \(\{0,4,8,12\}\) \(C=0, D=0\) único grupo cobrindo \(m_4\)
\(A\bar{D}\) ciano \(\{8,10,12,14\}\) \(A=1, D=0\) único grupo cobrindo \(m_{14}\)
$$\boxed{F(A,B,C,D) = \bar{B}\bar{C} + \bar{B}\bar{D} + \bar{C}\bar{D} + A\bar{D}}$$

Comparando os métodos
#

Os dois métodos apresentados neste artigo — simplificação algébrica e mapa de Karnaugh — atacam o mesmo problema com abordagens bem diferentes. A tabela abaixo os compara e inclui o algoritmo de Quine-McCluskey, uma terceira alternativa de uso computacional que não foi detalhada aqui:

Método Vantagem Limitação
Algébrico Funciona com qualquer número de variáveis Não sistemático; depende de intuição
Karnaugh Visual e intuitivo; fácil identificar grupos Prático apenas até 4–5 variáveis
Quine-McCluskey Sistemático e algoritmicamente implementável Prático apenas para implementação computacional

O algoritmo de Quine-McCluskey é essencialmente o mapa de Karnaugh convertido em um procedimento tabular: ele encontra todos os implicantes primos por comparação sistemática de mintermos e depois seleciona a cobertura mínima. A ideia central é agrupar os mintermos pelo número de 1s em sua representação binária e comparar apenas grupos adjacentes — pois dois mintermos só podem se combinar se seus números decimais diferirem por exatamente uma potência de 2 (o que equivale a diferirem em exatamente um bit). Por ser determinístico e mecânico, é a base das ferramentas de síntese lógica usadas na indústria — mas a complexidade cresce exponencialmente com o número de variáveis, tornando-o impraticável à mão para funções grandes.

Conclusão
#

Partindo de uma tabela verdade, aprendemos a:

  1. Escrever a forma canônica — soma de mintermos (SOP) ou produto de maxtermos (POS) — diretamente por inspeção.
  2. Simplificar algebricamente, aplicando os teoremas da Álgebra de Boole em sequência.
  3. Usar o mapa de Karnaugh para identificar grupos de mintermos adjacentes e obter a expressão mínima de forma visual.

O resultado de cada simplificação não é apenas uma expressão matemática mais bonita: é um circuito digital mais econômico, com menos portas e menor consumo de energia. Esse processo está na base do projeto de todo hardware digital.

Para aprofundar os teoremas e identidades utilizados ao longo deste artigo, consulte Álgebra Booleana: fundamento matemático da computação digital.

Até a próxima!

Relacionados