Skip to content

Latest commit

 

History

History
290 lines (235 loc) · 7.23 KB

introducao.org

File metadata and controls

290 lines (235 loc) · 7.23 KB

Uma introdução à Linguagem Prolog

1 PROLOG ≈ PROgrammation LOGique

  • Desenvolvida por Alain Colmerauer e Philippe Roussel
  • Concebida em 1970, primeiro sistema Prolog em 1972
  • \alert{Cálculo de Predicados} e \alert{Princípio de Resolução}
    • Informar ao computador os fatos e as regras
    • Usar o princípio da resolução para inferir verdades
  • Diferentes dialetos e implementações
    • BProlog, Ciao, ECLiPSe, GNU Prolog, Jekejeke Prolog, Logic Programming Associates, Poplog Prolog, P#, Quintus, SICStus, Strawberry, SWI-Prolog, tuProlog, XSB, YAP-Prolog
    • Diferem-se na sintaxe e nas bibliotecas
      → Funcionamento se mantém semelhante
  • SWI-Prolog
    • Open Source (Kernel licenciado pela LGPL)
      http://www.swi-prolog.org/
    • Disponível para diferentes plataformas
      No Debian/Ubuntu Linux, o binário se chama swipl

2 Olá Mundo em Lógica

Em um terminal, executar o \texttt{swipl}

write('Ola Mundo').

Ou:

Coloque o conteúdo acima em codigo.pl (todas as letras do nome do arquivo devem ser minúsculas) e depois

cat codigo.pl | swipl

3 Arquitetura

./arquitetura-logica.png

Consultas

  • Usuário
  • Banco de dados Inteligente (BDI) & Sistemas Especialistas

4 Fundamentos

Modelo imperativo e funcional

  • Implementam um mapeamento da entrada para a saída
  • Em geral, um para um

Modelo lógico

  • Implementa uma relação (que pode ser de vários tipos)
  • Um elemento se relaciona com outro
  • Relação é mais geral que o mapeamento (maior abstração)

5 Relação

Sejam dois conjuntos de valores S e T

./relacao-logica.png

  • Relação é estabelecida, resulta em verdadeiro ou falso
  • Não há distinção entre entrada e saída
    • y não é gerado a partir de x
    • uma entrada não é transformada em saída

6 Cláusulas Horn

  • Alfred Horn, propôs tais cláusulas em 1951
  • Um programa lógico é uma coleção de cláusulas Horn

H ← B_1, B_2, B_3, …, B_n

Lê-se: H é verdade se B_1, …, B_n forem verdades

Tipos

  • Fato (cláusula incondicional)
    inteiro(3)
  • Consulta (cláusula negativa)
    inteiro(3)
  • Regra (cláusula positiva)
    inteiro(N)natural(N)
  • Regra (cláusula condicional)
    natural(N)inteiro(N), positivo(N)

7 Termo

É o único tipo da linguagem

  • Representam qualquer coisa; natureza é indefinida
pessoa(joao).
pessoa(jose).
masculino(joao).
masculino(jose).
pai(joao,jose).

Nota de sintaxe

  • Termos são todos em minúsculas e sem espaço
  • Variáveis tem a primeira letra em maiúscula

8 Termos simples e funcionais

Termos simples

  • Átomos
    • Constantes alfanuméricas: leonardo, 'Porto Alegre'
    • Constantes numéricas: 1, 12.12
  • Variáveis: X, Cidades, _ruas, _123abc

Termos funcionais (cláusulas)

  • Fatos/consultas: pessoa(pedro,22,masculino).
  • Regras:
    capital_pais(X,Y):-pais(X), cidade(Y), capital(X,Y).

9 Exercício #1 (Base de conhecimento)

Especifique, no arquivo exercicio.pl (este arquivo deve ser composto apenas de letras minúsculas) os fatos que representem a árvore seguinte, considerando as pessoas e seus respectivos sexos

./arvore-genealogica.png

pessoa(maria).
feminino(maria).

10 Exercício #1 (Consultas)

Lançar swipl e executar o comando

[exercicio].

Realizar uma consulta simples

pessoa(leandro). %Leandro é uma pessoa?

Descobrir o conhecimento sobre o mundo (barra de espaço, enter)

pessoa(X).
masculino(X).
feminino(X).
  • Termos com letra maiúscula são variáveis
  • Uma consulta pode ter uma única resposta
    • verdadeiro ou falso
    • várias ou nenhuma

11 Hipótese do Mundo Fechado

  • Um programa lógico é considerado um “mundo fechado”
  • Tudo que a máquina sabe deve ser definida nele
  • O que não se sabe ser verdadeiro é considerado falso
  • O que não se pode provar é considerado falso
    (mas não prova que não é verdade)

12 Consultas

Prolog permite especificar e consultar

  • Dados a e b, determinar se r(a,b). é verdadeira
  • Dado a, encontrar todo X, tal que r(a,X). é verdadeira
  • Dado b, encontrar todo X, tal que r(X,b). é verdadeira
  • Encontrar todo X e Y, tal que r(X,Y). é verdadeira

13 Exercício #2 (Base de conhecimento)

Adicione novos fatos à base de conhecimento, no arquivo exercicio.pl, que especifiquem relações entre pais e filhos

./arvore-genealogica.png

pai(ana,joao).     
mae(ana,maria).

14 Exercício #2 (Consultas)

Determinar se as relações são válidas

  • João é pai de José?

Encontrar elementos que satisfaçam relações

  • Quem é o pai de José?
  • Quem são os avôs ou avós de Marcelo?

Sabe se há um elemento que satisfaça uma relação

  • Existem pais?
  • Existem filhos?
  • Existem avôs e avós?

15 Regras

Descritas por cláusulas Horn Condicionais

irmao(X,Y) :- pai(X,P),
              pai(Y,P),
              X \= Y.

irmao(X,Y) :- mae(X,M),
              mae(Y,M),
              X \= Y.

16 Operadores

,            e                  
;            ou                 
=            unificação         
\=           Negação da unificação
==           teste de identidade
\==          negação da identidade
=:=         igualdade aritmética 
< > >= <=    relacional           
:=           condicional          

17 Programação

O que significa “Eu programo em Prolog”? Alguém que sabe como especificar uma base de conhecimento com fatos e regras utilizando a sintaxe da linguagem Prolog

capital(‘Brasil’, ‘Brasilia’).
capital(‘Franca’, ‘Paris’).
capital(‘RS’, 'Porto Alegre').
capital(‘SC', ‘Florianopolis’).
estadode(‘Brasil’, ‘SC’).
estadode(‘Brasil, ‘RS’).
estadode(‘Franca’, ‘Bretanha').
estadode(‘Franca’, ‘Normandia').
capital_pais(X, Y) :- pais(X), cidade(Y), capital(X,Y).
capital_estado(X,Y) :- estado(X), cidade(Y), capital(X,Y).