🚀 Capítulo 04: Programação Lógica (Prolog) (Tema: Sherlock Holmes)

NOTE

Este capítulo utiliza a temática de Sherlock Holmes para explicar a Programação Lógica. Para resolver um crime, você não diz ao computador o que fazer, mas sim os fatos e as regras para que ele deduza o culpado!


1. 🎯 Objetivo da Aula

Compreender o conceito de Programação Lógica, baseada em Fatos, Regras e Consultas, e como ela se diferencia dos paradigmas imperativo e funcional.

2. 🏢 O Cenário Prático (Seu Desafio)

Sherlock Holmes está investigando o roubo do diamante da coroa. Ele coletou as seguintes informações:

  • Fatos:
    • O mordomo estava na mansão.
    • O diamante sumiu às 22h.
    • O mordomo tinha a chave do cofre.
  • Regras:
    • Uma pessoa é suspeita se ela estava na mansão E tinha a chave do cofre.

Em vez de escrever um algoritmo com if e for para buscar o culpado, Sherlock usa a Programação Lógica. Ele joga os fatos e as regras no sistema e faz uma pergunta (Consulta): "Quem é o suspeito?". O computador faz a dedução sozinho! Seu desafio é entender como estruturar esse raciocínio lógico.

3. 🧠 Fundamentos: A Teoria Traduzida

A Programação Lógica (cujo maior exemplo é a linguagem Prolog) é um tipo de paradigma declarativo. Você não diz ao programa COMO resolver, mas fornece a base de conhecimento.

🧩 Os Três Componentes:

  1. Fatos: São as verdades absolutas do problema.
    • Exemplo: mordomo_estava_na_mansao.
  2. Regras: São as condições que permitem deduzir novos fatos a partir dos existentes.
    • Exemplo: suspeito(X) :- estava_na_mansao(X), tinha_chave(X). (Lê-se: X é suspeito SE X estava na mansão E X tinha a chave).
  3. Consultas (Queries): As perguntas que você faz ao sistema.
    • Exemplo: ?- suspeito(Quem).

4. 📖 Exemplo Guiado: Deduzindo o Culpado

Vamos escrever isso em um pseudocódigo estilo Prolog:

Base de Conhecimento:

estava_na_mansao(mordomo).
estava_na_mansao(watson).
tinha_chave(mordomo).
 
suspeito(X) :- estava_na_mansao(X), tinha_chave(X).

Consulta: ?- suspeito(Quem).

Resposta do Sistema: Quem = mordomo.


5. 🛠️ Prática Obrigatória 1: Criando Regras

Com base no exemplo acima, imagine que adicionamos um novo fato e uma nova regra:

  • Fato: tem_motivo(mordomo).
  • Regra: culpado(X) :- suspeito(X), tem_motivo(X).
  1. Se fizermos a consulta ?- culpado(Quem)., qual será a resposta do sistema?
  2. E se o fato fosse tem_motivo(watson)., quem seria o culpado?

6. 🛠️ Prática Obrigatória 2: Onde usar isso?

A programação lógica não é usada para fazer sites ou aplicativos comuns. Pesquise em quais áreas da tecnologia a linguagem Prolog e a programação lógica em geral são mais utilizadas. (Dica: Pense em Inteligência Artificial e sistemas de tomada de decisão).


7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 04 Paradigmas) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_10_paradigmas_e_padroes_de_projeto/
├── capitulos/
│   ├── capitulo_04_logica.md
│   └── codigos/
│       └── cap04/
│           └── detetive.pl

9. 💡 Checkpoint de Lógica

Na programação lógica, se o sistema não encontrar uma resposta que prove a sua consulta com base nos fatos, ele retorna false (falso). Isso significa que a afirmação é falsa ou apenas que o sistema não sabe a resposta?

10. 🔥 Desafio de Fixação

Pesquise o que significa o mecanismo de Backtracking usado pelo Prolog para encontrar soluções.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. O culpado será o mordomo (ele é suspeito e tem motivo).
  2. O sistema retornaria false ou vazio, pois o Watson não é considerado suspeito pela regra anterior (ele não tinha a chave), então ele não pode ser culpado mesmo tendo motivo.

Capitulo Anterior | Proximo Capitulo