Módulo 1 · Lógica e demonstrações
Lógica proposicional e booleana
Aula 1.1 · cerca de 15 minutos
Todo if que você escreve é uma fórmula de lógica proposicional. Uma proposição é uma afirmação que é verdadeira ou falsa. Combinamos proposições com os conectivos ¬ (não), ∧ (e), ∨ (ou), → (implica) e ↔ (se e somente se).
A implicação que engana
A implicação p → q só é falsa quando p é verdadeira e q é falsa. Por isso ela equivale a ¬p ∨ q. Em código: !p || q. Uma premissa falsa torna a implicação verdadeira: “se 2 + 2 = 5, então eu sou o papa” é uma frase verdadeira.
p → q ≡ ¬p ∨ q ≡ ¬q → ¬p (contrapositiva)
Leis de De Morgan
As leis de De Morgan simplificam condições negadas, e é aqui que surgem muitos bugs de refatoração.
¬(p ∧ q) ≡ ¬p ∨ ¬q ¬(p ∨ q) ≡ ¬p ∧ ¬q
# Antes
if not (user.is_admin and user.is_active):
deny()
# Depois (equivalente, por De Morgan)
if not user.is_admin or not user.is_active:
deny()Quantificadores
∀x P(x) (“para todo x”) é o all() do Python. ∃x P(x) (“existe x”) é o any(). A negação troca um pelo outro: ¬∀x P(x) ≡ ∃x ¬P(x). Para refutar “todo teste passa”, basta um teste que falha.
itertools.product([False, True], repeat=3).Exercício 1
Simplifique not (a or not b).
Exercício 2
Escreva a negação de “todo usuário tem pelo menos um pedido” usando quantificadores.