2. linguagem de programação prolog

28
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)

Upload: others

Post on 29-Dec-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2. Linguagem de Programação Prolog

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)

Page 2: 2. Linguagem de Programação Prolog

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

Page 3: 2. Linguagem de Programação Prolog

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

Page 4: 2. Linguagem de Programação Prolog

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

Page 5: 2. Linguagem de Programação Prolog

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

Page 6: 2. Linguagem de Programação Prolog

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

Page 7: 2. Linguagem de Programação Prolog

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

Page 8: 2. Linguagem de Programação Prolog

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

Page 9: 2. Linguagem de Programação Prolog

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

Page 10: 2. Linguagem de Programação Prolog

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

Page 11: 2. Linguagem de Programação Prolog

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

Page 12: 2. Linguagem de Programação Prolog

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

Page 13: 2. Linguagem de Programação Prolog

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

Page 14: 2. Linguagem de Programação Prolog

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).

...

Page 15: 2. Linguagem de Programação Prolog

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

Page 16: 2. Linguagem de Programação Prolog

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

Page 17: 2. Linguagem de Programação Prolog

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

Page 18: 2. Linguagem de Programação Prolog

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

Page 19: 2. Linguagem de Programação Prolog

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

Page 20: 2. Linguagem de Programação Prolog

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

Page 21: 2. Linguagem de Programação Prolog

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

Page 22: 2. Linguagem de Programação Prolog

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

Page 23: 2. Linguagem de Programação Prolog

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

Page 24: 2. Linguagem de Programação Prolog

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

Page 25: 2. Linguagem de Programação Prolog

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

Page 26: 2. Linguagem de Programação Prolog

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

...

Page 27: 2. Linguagem de Programação Prolog

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.

Page 28: 2. Linguagem de Programação Prolog

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.