Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação em Lógica Prof. Marco Túlio de Oliveira Valente Prof. César Francisco de Moura Couto Prof. Pedro Felipe 2 Programação em Lógica § Paradigma Imperativo: § Programas: mapeamento de entradas em saídas § Modelo computacional: von Neumann (variáveis, atribuição, comando de repetição etc) § Estilo procedimental (“como fazer”) § Paradigma Lógico: § Programas especificam conhecimento a respeito de um problema e não uma seqüência de passos § Modelo computacional: lógica matemática § Estilo declarativo (“o que fazer”) § Programação simbólica (não-numérica) § Computação: verificar se uma consulta pode ser deduzida a partir das relações do programa. 3 Programação em Lógica: Exemplo § Programa: avo(X, Y) :- pai(X, Z), pai(Z, Y). avo(X, Y) :- pai(X, Z), mae(Z, Y). pai(carlos, joao). pai(joao, jose). § Computação: resposta a consultas § avo(carlos, jose) - avo(carlos, joao) § yes no § avo(X,jose) - avo(manoel,carlos) § X= carlos no 4 PROLOG § Origem: § Universidade de Marseille e Edinburgh (década 70) § Objetivo: ferramenta para experimentos em IA e para definição de gramáticas. § Valores: § Constantes. Exemplos: maria, 125 § Estruturas (tuplas rotuladas). Exemplos: ponto (5,6), data(01,01,2000) § Listas. Exemplos: [1,2,3], [maria, jose, joao] § Variáveis (identificadores que iniciam por uma letra maiúscula). Exemplos: X, Y, Estudante 5 Cláusulas de Horn § Programa: uma coleção de Cláusulas de Horn § Cláusulas de Horn: § Subconjunto das cláusulas da lógica de predicados § Forma geral: B :- A1, A2, ..., An. onde cada Ai é uma relação da forma Ri (.....) § Interpretação: se as condições A1, A2, ... e An forem verdadeiras, então a conclusão B é verdadeira § Se fosse procedimental: if condições then conclusão § Se n = 0, a cláusula é chamada de fato § Se n > 0, a cláusula é chamada de regra § Toda cláusula termina com um “.” 6 Exemplo 1 estrela(sol). estrela(sirius). orbita(venus, sol). orbita(terra, sol). orbita(marte, sol). orbita(lua, terra). orbita(phobos, marte). orbita(deimos, marte). planeta(B) :- orbita(B, sol). satélite(B) :- orbita(B, P), planeta(P). Consultas: orbita(venus, sol) ? Yes orbita(B, marte) ? B= phobos, B = deimos orbita(B, venus) ? No planeta(mercúrio) ? No planeta(X) ? X = venus, X = terra, X = marte satélite(X) ? X = lua, X = phobos, X = deimos 7 Exemplo 2 § Programa: gosta(maria, peixe). gosta(pedro, vinho). gosta(maria, vinho). gosta(pedro, maria). § Consultas: § Quem gosta de peixe ? gosta (X, peixe) § Pedro e Maria se gostam ? gosta (pedro, maria), gosta (maria, pedro) § Existe algo que Pedro e Maria (ambos) gostem ? gosta (pedro, X), gosta (maria, X) 8 Unificação § Algoritmo utilizado em Prolog para determinar se existe uma maneira de instanciar as variáveis de dois predicados de modo a torná-los iguais. § Exemplos: § p (X, Y) e q (X, Y) ⇒ No § p (X, Y) e p (joao, jose) ⇒ X= joao; Y=jose § p (X, Y) e p (joao, Z) ⇒ X= joao; Y=Z § p (X, X) e p (1, 1) ⇒ X = 1 § p (X, X) e p (1, W) ⇒ X = 1; W = 1 § p (X, X) e p (1, 2) ⇒ No § p (X, X, 2) e p (1, W, W) ⇒ No § p (G, jose) e p (X, Y) ⇒ X = G, Y = jose 9 Algoritmo de Resolução § Busca em profundidade em uma árvore de pesquisa § Resolução de um objetivo: § Lista de cláusulas é pesquisada de cima para baixo § Se unificação com lado esquerdo de uma cláusula for bem sucedida então: § Passa-se a tentar resolver os sub-objetivos do lado direito desta cláusula (da esquerda para a direita) § Resolução inclui retrocesso (backtracking) para pesquisa de outras respostas (resultantes de unificações alternativas) § Resolução falha se todas as alternativas forem exploradas sem sucesso. § Resolução é sujeita à ordem em que as cláusulas foram escritas 10 Resolução: Exemplo 1 § Programa: homem(francisco). mae(joao, roberta). pai(joao, paulo). mae(francisco, roberta). pai(francisco, paulo). pais(X, M, P) :- mae(X, M), pai(X, P). irmao(X, Y) :- homem(Y), pais(X, M, P), pais(Y,M, P). § Consulta: ?- irmao (joao, francisco) 11 Resolução: Exemplo 1 irmao(joao,francisco) homem(francisco) pais(joao,M,P) pais(francisco,M,P) mae(joao,M) pai(joao,P) mae(joao,roberta) pai(joao,paulo) mae(francisco,roberta) pai(francisco,paulo) X= joao, Y= francisco M= roberta P= paulo 12 Resolução: Exemplo 2 § Programa: gosta(maria, peixe). gosta(maria, vinho). gosta(pedro, vinho). gosta(pedro, maria). § Consulta: gosta (maria, X), gosta(pedro,X) gosta(maria,X),gosta(pedro,X) gosta(maria,peixe) X=peixe gosta(pedro,peixe) falha (backtracking) gosta(maria,X),gosta(pedro,X) gosta(maria,vinho) X=vinho gosta(pedro,vinho) 13 Cláusulas Recursivas § Exemplo: pai(carlos,madalena). mae(madalena,manoel). pai(manoel,felipe). pais(X,Y) :- pai(X,Y). pais(X,Y) :- mae(X,Y). descendente(X,Y):- pais(Y,X). % caso base da recursao descendente(X,Y):- % passo recursivo pais(Z,X), descendente(Z,Y). 14 Variáveis Anônimas § Variável Anônima (“_”): variável cujo valor não é importante § Exemplo: Caso pretenda-se saber apenas se Paulo tem filhos ?- pai(paulo,_) yes ?- pai(paulo,X) X=pedro; X=maria; X=simao 15 Listas § Notação: [1, 2, 3, 4] [1, [2 , 3], 4] % lista com elementos lista [] % lista vazia [ H | T ] % lista com cabeça H e cauda T § Exemplos de unificação envolvendo listas: ?- [X | Y] = [a, b, c]. ⇒ X=a Y=[b, c] ?- [X | [Y | Z]] = [a, b, c, d]. ⇒ X=a; Y=b; Z=[c, d] ?- [X | Y ] = [a] ⇒ X= a; Y= [] ?- [X,Y | Z] = [a, b, c,d] ⇒ X= a; Y=b; Z= [c,d] 16 Listas: Exemplos § Exemplo 1: Verificar se elemento pertence a uma lista pertence(X, [ X | _ ] ). pertence(X, [ _ | L ] ) :- pertence(X, L). § Exemplo 2: Concatenação de duas listas concatena( [], L, L). concatena( [ X | L1 ], L2, [ X | L3 ]) :- concatena (L1, L2, L3). § Exemplo 3: Verificar se duas listas são iguais igual([],[]). igual([ X | L1], [X | L2] ) :- igual(L1, L2). § Exemplo 4: Remoção de elemento de uma lista remove (X, [X | L], L). remove (X, [ Y | L1 ], [ Y | L2 ] ) :- remove (X, L1, L2). 17 Expressões Aritméticas § Exemplo 1: Operador “is” densidade(X,Y) :- populacao(X,P), area(X,A), Y is P/A. § Exemplo 2: MDC (Algoritmo de Euclides) mdc(X,X,X). mdc(X,Y,Z):- X > Y, W is X-Y, mdc(W,Y,Z). mdc(X,Y,Z):- Y > X, W is Y-X, mdc(X,W,Z). § Exemplo 3: Fatorial fatorial(0, 1). fatorial(X, Y) :- X1 is X-1, fatorial(X1, Y1), Y is X*Y1. § Exemplo 4: Soma dos elementos de uma lista soma ([],0). soma ([X | L], S) :- soma (L, S1), S is S1+X. 18 Gramática da Língua Inglesa § A gramática abaixo gera um subconjunto de palavras da língua inglesa <sentence> ::= <noun phrase> <verb phrase> . <noun phrase> ::= <determiner> <noun> | <determiner> <adjective> <noun> <verb phrase> ::= <verb> | <verb> <noun phrase> <determiner> ::= a | the <noun> ::= boy | cat <adjective> ::= big | lazy <verb> ::= saw | ate 19 Parser em Prolog sentence(S,[]):- nounphrase(S,S1), verbphrase(S1,S2), dot(S2, []). nounphrase(NP,X):- determiner(NP,S1), noun(S1,X). nounphrase(NP,X):- determiner(NP,S1), adjective(S1,S2), noun(S2,X). verbphrase(VP,X):-verb(VP,S1), nounphrase(S1,X). dot(['.'|X], X). noun([boy|X],X). noun([cat|X],X). verb([ate|X],X). verb([saw|X],X). adjective([big|X],X). adjective([lazy|X],X). determiner([the|X],X). determiner([a|X],X). 20 Regras da gramática em Prolog § Usando o operador de definição de gramática, --> sentence --> nounphrase, verbphrase, ['.']. nounphrase --> determiner, noun. nounphrase --> determiner, adjective, noun. verbphrase --> verb, nounphrase. noun --> [boy]. noun --> [cat]. verb --> [ate]. verb --> [saw]. adjective -->[big]. adjective -->[lazy]. determiner --> [a]. determiner --> [the].
Compartilhar