2. linguagem de programação prolog
Post on 29-Dec-2021
7 Views
Preview:
TRANSCRIPT
1 Inteligência Artificial – IBM1024
Inteligência Artificial - IBM1024
2. Linguagem de Programação Prolog
Prof. Renato Tinós
Local: Depto. de Computação e Matemática
(FFCLRP/USP)
2 Inteligência Artificial – IBM1024
Principais Tópicos
2. Linguagem de Programação Prolog
2.1. Conceitos básicos
2.2. Sintaxe e semântica
2.3. Conceitos avançados
3 Inteligência Artificial – IBM1024
2.1. Conceitos Básicos
• Prolog
Origem: 1970, grupo de Alam Colmerauer
(França)
É uma linguagem de programação lógica
associada com IA e linguística computacional
Tem suas raízes na lógica de primeira ordem
É para computação simbólica (não-numérica)
É declarativa
A lógica de programação é expressa em termos de
relações
– Representadas sobre fatos e regras
4 Inteligência Artificial – IBM1024
• Definindo relações por meio de fatos
% Parent example
parent(tom,bob).
parent(pam,bob).
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
parent(tom,liz).
pam
liz bob
jim
pat ann
tom
2.1. Conceitos Básicos
5 Inteligência Artificial – IBM1024
• Questões
Bob é um dos pais de Pat?
?- parent( bob, pat).
?- parent( liz, pat).
?- parent( tom, ben).
Quem é um dos pais de Liz?
?- parent( X, liz).
Quem são os filhos de Bob?
?- parent( bob, X).
2.1. Conceitos Básicos
pam
liz bob
jim
pat ann
tom
6 Inteligência Artificial – IBM1024
jim
parent
parent
X
Y grandparent
pam
liz bob
jim
pat ann
tom • Questões
Quem é pai de quem?
Ache X and Y de modo que X é um dos
pais de Y
?- parent( X, Y).
Quem são os avós de Jim?
?- parent( Y, jim),
parent( X, Y).
2.1. Conceitos Básicos
7 Inteligência Artificial – IBM1024
• Questões
Quem são os netos de Tom?
?- parent( tom, X),
parent( X, Y).
Têm Ann e Pat um pai em comum?
?- parent( X, ann),
parent( X, pat).
pam
liz bob
jim
pat ann
tom
2.1. Conceitos Básicos
8 Inteligência Artificial – IBM1024
• Prolog
É recomendado para resolver problemas que envolvem
relações entre objetos
O usuário pode facilmente fazer questões (querys) sobre
as relações definidas no programa
Um programa em Prolog consiste de cláusulas Cada cláusula termina com um ponto final
– Exemplo: o programa anterior tinha 6 cláusulas
2.1. Conceitos Básicos
9 Inteligência Artificial – IBM1024
• Prolog
Os agumentos das relações podem ser Átomos: objetos concretos ou constantes
– Exemplos: tom, bob
Variáveis: objetos genéricos
– Exemplos: X, Y
Questões para o sistema são feitas para se atingir um ou
mais objetivos Uma resposta para uma questão pode ser positiva (sucesso) ou negativa
(facrasso)
– Se diversas respostas satisfazem uma questão, Prolog as encontrará
2.1. Conceitos Básicos
10 Inteligência Artificial – IBM1024
• Definindo relações por meio de regras
Relações
Binárias
– Entre pares de objetos
Unárias – Para um objeto
% Family example
...
female( pam).
female( liz).
female( ann).
female( pat).
male( tom).
male( bob).
male( jim).
...
2.1. Conceitos Básicos
11 Inteligência Artificial – IBM1024
• Definindo relações por meio de regras
Como definiriamos a relação offspring?
Fato
offspring( liz, tom).
Regra offspring( Y, X) :- parent( X, Y).
– Para todo X e Y,
Y é filho (offspring) de X se
X é pai de Y
2.1. Conceitos Básicos
X
Y
parent offspring
12 Inteligência Artificial – IBM1024
• Cláusulas em Prolog consistem de: Condição (“corpo”)
Uma lista de objetivos separados por vírgulas
Conclusão (“cabeça”)
• As cláusulas são de 3 tipos:
i. Regras
Declaram fatos que são verdade dependendo das condições
Possuem cabeça e corpo
– Exemplo:
offspring( Y, X) :- parent( X, Y).
Cabeça Corpo
2.1. Conceitos Básicos
13 Inteligência Artificial – IBM1024
• As cláusulas são de 3 tipos:
ii. Fatos
Declaram fatos que são sempre verdade
Possuem apenas cabeça
iii. Questões Permite ao usuário descobrir fatos que são verdade
Possuem apenas corpo
2.1. Conceitos Básicos
14 Inteligência Artificial – IBM1024
Exercício 2.1. Defina as relações “mother”, “grandparent” e “sister” para o exemplo anterior (“family”).
.
2.1. Conceitos Básicos
...
female( pam).
female( liz).
female( ann).
female( pat).
male( tom).
male( bob).
male( jim).
...
% Family example
parent(tom,bob).
parent(pam,bob).
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
parent(tom,liz).
...
15 Inteligência Artificial – IBM1024
2.1. Conceitos Básicos
• Como definimos a relação “predecessor”?
parent
X
Y
predecessor
Z
parent
parent
X
Y predecessor
parent
X
Y1
predecessor
Z
.
:
predecessor
16 Inteligência Artificial – IBM1024
• Regras Recursivas
predecessor( X, Z):- parent( X, Z).
predecessor( X, Z):-
parent( X, Y), predecessor( Y, Z).
Interpretação:
Para todo X e Z,
X é um predecessor de Z se
existe um Y tal que
(1) X é um pai de Y e
(2) Y é um predecessor de Z
parent
X
Y1
predecessor
Z
.
:
predecessor
2.1. Conceitos Básicos
17 Inteligência Artificial – IBM1024
2.1. Conceitos Básicos
• Todo processo recursivo consiste de duas
partes
i. Um caso base de tamanho mínimo que é
processado sem recursão
ii. Um método geral que reduz o caso particular em
um ou mais casos menores, fazendo o processo
progredir até eventualmente reduzir o problema até
o caso base
18 Inteligência Artificial – IBM1024
• Projeto de Algoritmos Recursivos
Alguns dos principais aspectos no projeto de
algoritmos recursivos são
i. Ache o método geral (passo chave)
Como o problema pode ser dividido em partes menores?
Uma vez que um passo pequeno e simples em direção à
solução é encontrado, pergunte se o restante do problema pode
ser resolvido do mesmo modo ou de modo similar
2.1. Conceitos Básicos
19 Inteligência Artificial – IBM1024
ii. Ache o caso base (ou regra de parada)
A regra de parada é geralmente o caso especial (pequeno)
que é trivial ou fácil de se resolver sem a necessidade de
recursão
iii. Escreva o algoritmo
Combine o passo chave e a regra de parada
2.1. Conceitos Básicos
20 Inteligência Artificial – IBM1024
iv. Verifique se o algoritmo termina Comece com uma situação geral e verifique se, depois de um
número finito de passos, a regra de parada será satisfeita
Considere também os casos extremos
Exemplo: Se for pedido para fazer nada, o algoritmo não deve retornar nenhum valor (e não, como fazem muitos programas, uma mensagem)
v. Desenhe a árvore de recursão Utilize um ou dois exemplos para gerar a árvore
Lembre-se que o tamanho da árvore é relacionado com a quantidade de memória que o programa necessita
O tamanho total da árvore reflete o número de vezes que o passo chave será executado
Tempo total do programa
2.1. Conceitos Básicos
22 Inteligência Artificial – IBM1024
22
• Procedimento
No exemplo, existem duas cláusulas para a relação
predecessor. predecessor( X, Z) :- parent( X, Z).
predecessor( X, Z) :- parent( X, Y), predecessor( Y, Z).
Um conjunto de cláusulas sobre a mesma relação é
chamado de procedimento
• Comentários
Exemplos
/* This is a comment */
% This is also a comment
2.1. Conceitos Básicos
23 Inteligência Artificial – IBM1024
• Como Prolog responde as questões?
Para responder a uma questão, Prolog tenta satisfazer todos os
objetivos Isto é, demonstrar que o objetivo é verdadeiro assumindo que as relações definidas no
programa são verdadeiras
Prolog aceita fatos e regras como um conjunto de axiomas
Prolog aceita a questão do usuário como a conjectura de um
teorema
Prolog tenta então provar este teorema Isto é, demonstrar que ele pode ser logicamente derivado a partir dos axiomas
2.1. Conceitos Básicos
24 Inteligência Artificial – IBM1024
Exemplo 2.1.
Axiomas: Todos os seres-humanos são falíveis
O professor é um ser-humano
Teorema: O professor é falível
O primeiro axioma pode ser re-escrito como Para todo X, se X é um ser-humano, então X é falível.
Assim, o exemplo escrito em Prolog fica
falivel( X) :- humano( X).
humano( professor).
?- falivel( professor).
2.1. Conceitos Básicos
25 Inteligência Artificial – IBM1024
Exemplo 2.2.
predecessor( X, Z) :- parent( X, Z).
% Regra 1
predecessor( X, Z) :- parent( X, Y), predecessor( Y, Z).
% Regra 2
?- predecessor( tom, pat).
Funcionamento
Prolog testa a cláusula que aparece primeiro (Regra
1)
X= tom, Z = pat.
– O objetivo predecessor( tom, pat) é então substituído
por parent( tom, pat)
– No entanto, não existem cabeças com o objetivo
parent( tom, pat).
pam
liz bob
jim
pat ann
tom
2.1. Conceitos Básicos
26 Inteligência Artificial – IBM1024
Exemplo 2.2.
predecessor( X, Z) :- parent( X, Z). % Regra 1
predecessor( X, Z) :- parent( X, Y), predecessor( Y, Z). % Regra 2
?- predecessor( tom, pat).
Funcionamento
Aplicando agora a Regra 2, temos que X = tom, Z = pat,
mas Y ainda não foi instanciada
parent( tom, Y)
predecessor( Y, pat)
O primeiro objetivo agora satisfaz um dos fatos
Y = bob
O segundo objetivo agora fica
predecessor( bob, pat)
Usando a Regra 1, este objetivo é agora satisfeito
predecessor( bob, pat) :- parent( bob, pat)
pam
liz bob
jim
pat ann
tom
2.1. Conceitos Básicos
27 Inteligência Artificial – IBM1024
1 ?- trace.
true.
[trace] 1 ?- predecessor(tom,pat).
Call: (7) predecessor(tom, pat) ?
Call: (8) parent(tom, pat) ?
Fail: (8) parent(tom, pat) ?
Redo: (7) predecessor(tom, pat) ?
Call: (8) parent(tom, _G2174) ?
Exit: (8) parent(tom, bob) ?
Call: (8) predecessor(bob, pat) ?
Call: (9) parent(bob, pat) ?
Exit: (9) parent(bob, pat) ?
Exit: (8) predecessor(bob, pat) ?
Exit: (7) predecessor(tom, pat) ?
true .
[trace] 2 ?- notrace.
true.
predecessor( tom, pat)
predecessor( bob, pat)
parent( tom, Y) predecessor( Y, pat)
parent( tom, pat)
parent( bob, pat)
no
Por meio da Regra 1 Por meio da Regra 2
Por meio do fato parent( tom, bob)
Y = bob
Por meio da Regra 1
yes
…
parent(tom,bob).
parent(pam,bob).
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
parent(tom,liz).
...
...
predecessor( X, Z) :- parent( X, Z). % Regra 1
predecessor( X, Z) :- parent( X, Y), predecessor( Y, Z). % Regra 2
...
28 Inteligência Artificial – IBM1024
Sugestão de Leitura
Capítulo 1 do livro:
BRATKO, I. (2012). “Prolog Programming for
Artificial Intelligence”, 4rd ed., Pearson Addison
Wesley.
29 Inteligência Artificial – IBM1024
Agradecimentos
• Parte do material desta apresentação foi
obtida através de:
Material de apoio do livro:
BRATKO, I. (2012). “Prolog Programming for Artificial
Intelligence”, 4rd ed., Pearson Addison Wesley.
top related