Paradigmas de Linguagens de Programação em Python: Python Lógico (Part. 09)
- #Python
Aprender diferentes paradigmas de programação nos ajuda a pensar de formas diversas e a escolher abordagens mais adequadas para certos tipos de problemas. Hoje, vamos explorar o paradigma lógico, um estilo de programação baseado em regras e dedução automática — bem diferente da forma sequencial tradicional.
Embora o Python não seja uma linguagem lógica nativa, ele permite simular esse paradigma com bibliotecas específicas. Para tornar essa jornada mais divertida e didática, vamos aprender esse conceito por meio da Nico Robin, a arqueóloga do bando dos Chapéus de Palha em One Piece, que decifra os mistérios do mundo a partir dos Poneglyphs — uma metáfora perfeita para a programação lógica.
🔎 O que é Programação Lógica?
(com o exemplo da Nico Robin e os Poneglyphs 🗿📜)
A programação lógica é um paradigma declarativo baseado em lógica de predicados, onde você declara fatos e regras, e o sistema é responsável por deduzir respostas a partir dessas informações. O raciocínio é feito por um motor lógico de inferência, que resolve perguntas de forma simbólica, sem que o programador diga como chegar à resposta.
Isso lembra exatamente o que Robin faz: ela encontra fragmentos de verdade espalhados pelo mundo (os Poneglyphs), e, com base em seu conhecimento, reconstrói a história perdida e localiza artefatos lendários. Vamos modelar isso em lógica!
Fatos: os Poneglyphs encontrados
prolog
% Localização dos Poneglyphs e seus tipos
poneglyph(ilha_ohara, historico).
poneglyph(ilha_sky_piea, historico).
poneglyph(ilha_zou, road).
poneglyph(ilha_wano, road).
poneglyph(ilha_alabasta, localização_pluton).
% Robin é a única que sabe ler
sabe_ler_poneglyph(robin).
Regra: Robin descobre segredos se encontrar Poneglyphs não-históricos
prolog
descobre_segredo(Personagem, Ilha) :-
sabe_ler_poneglyph(Personagem),
poneglyph(Ilha, Tipo),
Tipo \= historico.
Consulta: Quais segredos Robin pode descobrir?
prolog
?- descobre_segredo(robin, Ilha).
% Ilha = ilha_zou ;
% Ilha = ilha_wano ;
% Ilha = ilha_alabasta.
Você declara os fatos e as regras, e o sistema responde automaticamente. Esse é o poder do paradigma lógico.
🧠 Comparativo: Python vs Prolog
🐍 Python é uma linguagem lógica?
Não. Python é uma linguagem multiparadigma, mas não possui suporte nativo ao paradigma lógico, como Prolog. Em lógica, é necessário um mecanismo de inferência, unificação de variáveis e backtracking — funcionalidades ausentes no núcleo do Python.
Contudo, com bibliotecas como:
kanren
(miniKanren para Python)pyDatalog
sympy.logic
constraint
...é possível simular o comportamento lógico, e realizar consultas e deduções com base em fatos e regras.
Exemplo prático com kanren
: Robin em Python
Vamos simular um exemplo similar ao anterior com a biblioteca kanren
, usando Python puro:
python
from kanren import Relation, facts, run, var
# Definindo os fatos
poneglyph = Relation()
facts(poneglyph,
("ilha_ohara", "historico"),
("ilha_sky_piea", "historico"),
("ilha_zou", "road"),
("ilha_wano", "road"),
("ilha_alabasta", "localizacao_pluton")
)
# Quem sabe ler
sabe_ler = Relation()
facts(sabe_ler, ("robin",))
# Variáveis lógicas
x = var()
# Consulta: quais segredos Robin pode descobrir (onde tipo != historico)?
def descobre_segredo(pessoa):
return run(0, x,
sabe_ler(pessoa),
poneglyph(x, var()),
~poneglyph(x, "historico")
)
print(descobre_segredo("robin"))
# Saída esperada: ('ilha_zou', 'ilha_wano', 'ilha_alabasta')
💡 Aplicações do Paradigma Lógico
A lógica é útil quando precisamos descrever conhecimento e deixá-lo operar por si só, como em:
- Sistemas especialistas (regras de decisão)
- IA simbólica e raciocínio dedutivo
- Consultas sobre grafos de conhecimento
- Regras de negócio (com compliance e validação)
📦 Outras bibliotecas Python úteis
🔚 Conclusão
Assim como Nico Robin reconstrói a verdade escondida no mundo com base em fragmentos de pedra, o paradigma lógico nos permite inferir respostas com base em fatos e regras — sem programar cada passo.
Embora o Python não seja uma linguagem lógica nativa, sua versatilidade permite que ele adote esse estilo de pensamento, especialmente com o suporte de bibliotecas como kanren
. Esse paradigma é uma poderosa ferramenta para quem deseja explorar raciocínio automático, IA simbólica e modelagem de regras complexas.
👉 No próximo artigo, vamos explorar sobre Python declarativo...