Capítulo 01: Lógica Matemática, Álgebra Booleana e Circuitos Lógicos
Capítulo 01: Lógica Matemática, Álgebra Booleana e Circuitos Lógicos
Módulo 01: Fundamentos da Computação • Ciência da Computação Formal
🗺️ 1. Mapa Conceitual da Lógica e Circuitos
flowchart TD
A["Proposições e Conectivos Lógicos"] --> B["Tabelas-Verdade"]
B --> C["Álgebra Booleana (Leis de De Morgan)"]
C --> D["Portas Lógicas Digitais (AND, OR, NOT, XOR)"]
D --> E["Minimização: Mapas de Karnaugh"]
E --> F["Circuitos Integrados e ALUs"]
style A fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
style C fill:#ede7f6,stroke:#7e57c2,stroke-width:2px
style D fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style F fill:#fff3e0,stroke:#ff9800,stroke-width:2px
🏛️ 2. Fundamentação Teórica e Formal
A Lógica Proposicional e a Álgebra Booleana (desenvolvida por George Boole em 1854 e aplicada a circuitos elétricos por Claude Shannon em 1937) constituem o fundamento matemático de toda a computação digital. Na máquina binária, toda informação e processamento são expressos por meio de estados discretos de tensão: $1$ (Verdadeiro / High) e $0$ (Falso / Low).
2.1 Conectivos Lógicos Fundamentais
Sejam $P$ e $Q$ duas proposições lógicas:
| Operação | Símbolo Booleano | Notação Lógica | Expressão em Código | Descrição Formal |
|---|---|---|---|---|
| Negação (NOT) | $\overline{A}$ ou $A’$ | $\neg P$ | !P ou not P |
Inverte o valor lógico. |
| Conjunção (AND) | $A \cdot B$ | $P \land Q$ | P && Q ou P and Q |
Verdadeiro apenas se ambos forem 1. |
| Disjunção (OR) | $A + B$ | $P \lor Q$ | P || Q ou P or Q |
Verdadeiro se pelo menos um for 1. |
| Disjunção Exclusiva (XOR) | $A \oplus B$ | $P \oplus Q$ | P ^ Q |
Verdadeiro se as entradas forem distintas. |
| Não-Conjunção (NAND) | $\overline{A \cdot B}$ | $\neg(P \land Q)$ | !(P && Q) |
Porta universal: 0 apenas se ambos forem 1. |
| Não-Disjunção (NOR) | $\overline{A + B}$ | $\neg(P \lor Q)$ | !(P || Q) |
Porta universal: 1 apenas se ambos forem 0. |
| Implicação | $\overline{A} + B$ | $P \to Q$ | !P || Q |
Falso apenas quando $P=1$ e $Q=0$. |
| Bicondicional | $A \odot B$ | $P \leftrightarrow Q$ | P == Q |
Verdadeiro quando $P$ e $Q$ possuem o mesmo valor. |
2.2 Postulados e Leis da Álgebra Booleana
As identidades fundamentais permitem otimizar expressões lógicas para reduzir a quantidade física de transistores em um chip:
- Elemento Neutro: $A + 0 = A \quad \text{e} \quad A \cdot 1 = A$
- Elemento Nulo: $A + 1 = 1 \quad \text{e} \quad A \cdot 0 = 0$
- Idempotência: $A + A = A \quad \text{e} \quad A \cdot A = A$
- Complementaridade: $A + \overline{A} = 1 \quad \text{e} \quad A \cdot \overline{A} = 0$
- Comutatividade: $A + B = B + A \quad \text{e} \quad A \cdot B = B \cdot A$
- Associatividade: $(A + B) + C = A + (B + C) \quad \text{e} \quad (A \cdot B) \cdot C = A \cdot (B \cdot C)$
- Distributividade: $A \cdot (B + C) = (A \cdot B) + (A \cdot C) \quad \text{e} \quad A + (B \cdot C) = (A + B) \cdot (A + C)$
- Teoremas de De Morgan: \(\overline{A \cdot B} = \overline{A} + \overline{B}\) \(\overline{A + B} = \overline{A} \cdot \overline{B}\)
2.3 O Princípio da Universalidade das Portas NAND e NOR
Na engenharia de semicondutores e fabricação de circuitos integrados (VLSI), construir transistores CMOS que realizam a operação NAND ou NOR é fisicamente mais simples e rápido do que fabricar portas AND ou OR diretas. Pelo Teorema da Universalidade:
- Qualquer função booleana concebível pode ser sintetizada utilizando exclusivamente portas NAND (ou exclusivamente NOR).
- Exemplo: $\text{NOT}(A) = A \text{ NAND } A$.
- $\text{AND}(A, B) = \text{NOT}(A \text{ NAND } B) = (A \text{ NAND } B) \text{ NAND } (A \text{ NAND } B)$.
2.4 Síntese de Circuitos: Somador Completo (Full Adder)
Um computador realiza somas binárias encadeando blocos de Somador Completo, que computa a soma de dois bits ($A, B$) mais o bit de transporte de entrada ($C_{in}$):
\(\text{Soma } (S) = A \oplus B \oplus C_{in}\) \(\text{Transporte de Saída } (C_{out}) = (A \cdot B) + (C_{in} \cdot (A \oplus B))\)
A propagação do sinal $C_{out}$ através de somadores em série constitui a base do Ripple-Carry Adder, elemento nuclear da Unidade Lógica e Aritmética (ALU).
💻 3. Implementação e Simulação Computacional
Abaixo está um simulador em Python que gera tabelas-verdade completas, valida as Leis de De Morgan e emula o circuito de um Somador Completo de 8 bits com detecção de overflow:
def full_adder(a: int, b: int, cin: int) -> tuple[int, int]:
"""Emula uma unidade funcional de somador completo de 1 bit."""
s = a ^ b ^ cin
cout = (a & b) | (cin & (a ^ b))
return s, cout
def adder_8bit(x: int, y: int) -> tuple[int, int]:
"""Soma dois inteiros de 8 bits usando portas lógicas bit a bit."""
soma = 0
cin = 0
for i in range(8):
bit_a = (x >> i) & 1
bit_b = (y >> i) & 1
s, cin = full_adder(bit_a, bit_b, cin)
soma |= (s << i)
return soma, cin
def validar_de_morgan() -> bool:
"""Verifica exaustivamente as Leis de De Morgan para todas as combinações binárias."""
for a in [0, 1]:
for b in [0, 1]:
# Lei 1: !(a & b) == !a | !b
if (not (a and b)) != ((not a) or (not b)):
return False
# Lei 2: !(a | b) == !a & !b
if (not (a or b)) != ((not a) and (not b)):
return False
return True
if __name__ == "__main__":
print("=== SIMULAÇÃO DE CIRCUITO DIGITAL SOMADOR 8-BIT ===")
x, y = 45, 27
resultado, overflow = adder_8bit(x, y)
print(f"Entrada A : {x:3d} (binário: {x:08b})")
print(f"Entrada B : {y:3d} (binário: {y:08b})")
print(f"Soma : {resultado:3d} (binário: {resultado:08b})")
print(f"Carry-Out : {overflow} (Overflow: {'SIM' if overflow else 'NÃO'})")
assert resultado == x + y, "Erro no circuito somador!"
print(f"Validação Formal De Morgan: {'APROVADA' if validar_de_morgan() else 'FALHA'}")