39
Cap´ ıtulo 3 – L´ogica de Primeira Ordem L´ogica para Programa¸ ao LEIC - Tagus Park 1 o Semestre, Ano Lectivo 2007/08 c Inˆ es Lynce and Lu´ ısa Coheur

Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Embed Size (px)

Citation preview

Page 1: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Capıtulo 3 – Logica de Primeira Ordem

Logica para ProgramacaoLEIC - Tagus Park

1o Semestre, Ano Lectivo 2007/08

c©Ines Lynce and Luısa Coheur

Page 2: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Bibliografia

• Baseados nos slides de Andrew Rice, Universidade deCambridge, 2007.

• Martins J.P., Prolog, Capıtulo 5.

• Ben-Ari M., Mathematical Logic for Computer Science,Springer-Verlag, 2003, Capıtulo 8.

Page 3: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Paradigmas de programacao

• Programacao funcional (e.g. Scheme)

• Programacao imperativa (e.g. C)

• Programacao em logica (e.g. Prolog)– Exemplo: funcao soma - recebe uma lista de inteiros, devolve

um inteiro que corresponde a soma dos elementos da lista◮ soma([],0).

% soma para lista vazia e 0◮ soma([Cabeca|Cauda],N) :-

soma(Cauda,M), N is M+Cabeca.

% a soma da lista com a cabeca Cabeca e a cauda Cauda e N% se a soma da lista Cauda e M e N=M+Cabeca

• Em programacao em logica

– Programa = logica + controlo

Page 4: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

PROLOG = PROgramacao em LOGica

• Introduzido em 1973 no ambito do processamento de lınguanatural

– Colmerauer, A., Kanoui, H., Roussel, P . and Pasero, R. “Unsysteme de communication hommemachine en francais”,Groupe de Recherche en Intelligence Artificielle, Universited’Aix-Marseille. 1973.

• SWI-Prolog

– http://www.swi-prolog.org/

– Open-source– Desenvolvido desde 1987– Disponıvel para plataformas Linux, Mac e Windows

Page 5: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Prolog: conceitos basicos

• Programa = factos + regras

• Factos correspondem a afirmacoes; consistem em letras depredicado (iniciados com letra minuscula) com 1 ou +argumentos

– Exemplos◮ numero(1234).◮ pessoa(ana).◮ idade(jose,22).◮ frequenta(rui,lp).

– Correspondem a clausulas de Horn que consistem num literalpositivo

– Terminam com ponto final (.)

Page 6: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Prolog: conceitos basicos (cont.)

• Regras permitem realizar inferencia

– Correspondem a clausulas de Horn com um literal positivo epelo menos um literal negativo

– Exemplo◮ avo(X,Z) :- ascendente directo(Y,X),

ascendente directo(Z,Y).

– Operador “:-” deve ser interpretado como “se” e “,” deve serinterpretada como “e”

◮ Regra anterior deve ser interpretada como “X e avo de Z se Yfor ascendente directo de X e Z for ascendente directo de Y”

• Executar um programa implica colocar questoes– Questoes correspondem a objectivos: clausulas de Horn que

tem somente literais negativos◮ ?- avo(pedro,nuno).

Page 7: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Exemplo basico de interaccao em Prolog

• Janela de interaccao

– Linux: comando pl

– Mac: comando swipl– Windows: comando plwin.exe

◮ Tipicamente e criado um shortcut no Desktop durante ainstalacao

◮ No caso de se pretender trabalhar na linha de comandos(MS-DOS) usar plcon.exe

– Aceita somente comandos e objectivos– Termina com o comando halt. (ou CTRL+D)

Page 8: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Exemplo basico de interaccao em Prolog (cont.)

• Programa (regras ou factos) + Objectivo

– Unificacao e fundamental

• Tipicamente programas sao escritos num ficheiro (.pl)

– ?- [<nome-programa>]. carrega o programa– Alternativa: [user].

• Objectivos tambem podem ser incluıdos no ficheiro

– Antecedidos por :-

• Objectivos com varias respostas

– <Enter> aceita uma resposta– ; pede a resposta seguinte

Page 9: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Exemplo basico de interaccao em Prolog

Page 10: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Exemplo basico de interaccao em Prolog (cont.)

Page 11: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Exemplo basico de interaccao em Prolog (cont.)

Page 12: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Estruturas de dados simples: constantes

• Constantes: atomos + numeros

• Atomos– Cadeias que podem incluir letras, dıgitos e (underscore) e

que tem de ser iniciadas por letra minuscula◮ ana, nuno, ana silva, x 25

– Cadeias de caracteres especiais◮ < −−−− >, . . . , . : .

◮ Atencao: nao podem coincidir com cadeias que tem umsignificado pre-definido (e.g. : −)

– Cadeias de caracteres limitadas por plicas◮ ’ana’, ’Ana Silva’

• Numeros– Inteiros e reais

◮ 1, -97, 3.1415, -0.0035

Page 13: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Estruturas de dados simples: variaveis

• Cadeias que podem incluir letras, dıgitos e e que tem de seriniciadas por letra Maiuscula ou

– X, Resultado, Lista participantes, x23

• Variavel representa uma variavel sem nome

– Variaveis singleton: aparecem somente uma vez numaclausula; podem sempre ser substituıdas por

• Domınio de uma variavel corresponde a uma unica clausula

Page 14: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Literais

• Correspondem a aplicacao de um predicado ao numeroapropriado de termos;

• Permitem criar objectos que agrupam um conjunto deobjectos:

– tipo-de-objecto(componente-1, componente-2, . . .)– Exemplo

◮ data(Dia,Mes,Ano).◮ data(14,novembro,2007).◮ data(25,dezembro,2000).◮ dataDeNascimento(pessoa,(13,junho,1888)).

Page 15: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Regras

• regra(X,Y) :- parte1(X),parte2(X,Y).

– regra(X,Y) corresponde a cabeca– parte1(X),parte2(X,Y) corresponde ao corpo

• Significado: regra(X,Y) e verdadeira se parte1(X) everdadeira e parte2(X,Y) e verdadeira

Page 16: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Variaveis internas sao comuns

• regra2(X) :- algo(X,Z),casocontrario(Z).

• Significado: regra2(X) e verdadeira se existe Z tal quealgo(X,Z) e verdadeiro e casocontrario(Z) e verdadeiro

Page 17: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Overloading de predicados em Prolog

• O mesmo predicado pode ser definido com um numero deargumentos diferente e com significados diferentes:

• A clausulapredicado xpto.

corresponde a predicado xpto/0

• A clausulapredicado xpto(A).

corresponde a predicado xpto/1

Page 18: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Funcoes aritmeticas

• +

• −

• ∗

• \

• etc.

Page 19: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Operadores relacionais numericos em Prolog

• >

• <

• >=

• =<

• =:= (predicado da igualdade aritmetica)

• =\= (negacao do predicado da igualdade aritmetica)

Page 20: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Exemplo

• ?- 3 =:= +(2, 3).

No

?- 3 =:= +(2, 1).

yes

Page 21: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Operadores relacionais

• = (predicado da unificacao – tem sucesso se os dois termossao unificaveis)

• \= (negacao do predicado de unificacao)

• == (predicado de identidade – tem sucesso se os dois termossao identicos)

• \== (negacao do predicado de identidade)

Page 22: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Exemplo

• ?- f(a, 6) = f(X, Y).

X = a,

Y = 6

?- f(a, 6) = f(b, Y).

No

?- f(a, 6) == f(X, Y).

No

?- f(a, 6) == f(a, 6).

yes

Page 23: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

O operador de atribuicao

• is (avalia numericamente a expressao do lado direito e unificacom expressao do lado esquerdo)

• ... voltaremos a falar deste operador la para a frente...

Page 24: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Exemplo

• ?- Y = 6 + 3.

Y = 6+3

?- Y is 6 + 3.

Y = 9

Page 25: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Exemplo

• ?- X is 3+4.

X = 7

?- (6>5, 3 =:= 4, X is 3; X is 8).

X = 8

?- (6>5, 3 =\= 4, X is 3; X is 8).

X = 3

Page 26: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Listas

• Representadas por uma sequencia de elementos limitados porparentesis rectos [el1, . . . , eln]

• [] representa a lista vazia

• Sımbolo | permite referencia a cauda da lista– Lista [tenis,judo,natacao] unifica com

◮ [Cabeca|Cauda]◮ [tenis|Cauda]◮ [El1,El2|Cauda]◮ [tenis,judo|Cauda]◮ [tenis,judo,natacao|[]]◮ ...

Page 27: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Regras e listas: outro exemplo

• ultimo([X],X).

• ultimo([ |Cauda],X) :- ultimo(Cauda,X).

Page 28: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Regras, listas e expressoes aritmeticas: exemplo

• soma([],0).

• soma([Cabeca|Cauda],N) :-

soma(Cauda,M), N is M+Cabeca.

Page 29: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Regras, listas e expressoes aritmeticas: execucao

Page 30: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Regras, listas e expressoes aritmeticas: execucao (cont.)

Page 31: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Comprimento de uma lista (O(N))

• Requisitos de memoria: O(N) para lista de comprimento N

comp1([],0).

comp1([ |Cauda],N) :- comp1(Cauda,M), N is M+1.

?- comp1([1,2],X).

comp1([1|[2]],X) :- comp1([2],M), X is M+1.

comp1([2|[]],M) :- comp1([],M1), M is M1+1.

comp1([],0). → M1 = 0

M is M1+1 → M = 1

X is M+1 → X = 2

comp1([1,2],2)

Page 32: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Comprimento de uma lista (O(1))

• Requisitos de memoria: O(1)

comp2(Lista,Res) :- comp2(Lista,0,Res).

comp2([],Acum,Acum).

comp2([ |Cauda],Acum,Res) :-

Acum1 is Acum+1, comp2(Cauda,Acum1,Res).

?- comp2([1,2],X).

comp2([1,2],X) :- comp2([1,2],0,X).

comp2([1|[2]],0,X) :-

Acum1 is 0+1, comp2([2],Acum1,X).

comp2([2|[]],1,X) :-

Acum1 is 1+1, comp2([],Acum1,X).

comp2([],2,2). → X=2

comp2([1,2],2)

Page 33: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Comprimento de uma lista: execucao

Page 34: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Vamos la ver isto a mao...

Page 35: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Predicados amigos

• Existem tres predicados pre-definidos que permitem guardartodos os objectos resultantes de uma resposta correcta

1. bagof guarda coleccoes de instanciacoes possıveis2. setof guarda coleccoes ordenadas e sem repeticoes de

instanciacoes possıveis3. findall igual a bagof mas quantifica existencialmente

variaveis

• Sintaxe:bagof|setof|findall(<Objecto>,<Objectivo>,<Res>)

Page 36: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Guardar solucoes: exemplo

p(3,5,2).

p(1,3,5).

p(2,4,2).

p(2,4,1).

p(4,3,1).

?- bagof(Z,p(X,Y,Z),Saco).

X = 1 Y = 3 Saco = [5] ;

X = 2 Y = 4 Saco = [2,1] ;

X = 3 Y = 5 Saco = [2] ;

X = 4 Y = 3 Saco = [1]

?- setof(Z,p(X,Y,Z),Conjunto).

X = 1 Y = 3 Conjunto = [5] ;

X = 2 Y = 4 Conjunto = [1,2] ;

X = 3 Y = 5 Conjunto = [2] ;

X = 4 Y = 3 Conjunto = [1]

?- findall(Z,p(X,Y,Z),Saco).

Saco = [2, 5, 2, 1, 1]

Page 37: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Guardar solucoes: exemplo (cont.)

• Objectivo bagof(Z,X^Y^p(X,Y,Z),Saco) corresponde ao”Saco de Z’s tal que existe um X e existe um Y para os quaisse verifica p(X,Y,Z)”

– Corresponde a quantificacao existencial de variaveis

?- bagof(Z,X^Y^p(X,Y,Z),Saco).

Saco = [2, 5, 2, 1, 1]

?- setof(Z,X^Y^p(X,Y,Z),Conjunto).

Conjunto = [1, 2, 5]

Page 38: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Guardar solucoes: exemplo (cont.)

• Por analogia...

?- bagof(Z,X^p(X,Y,Z),Saco).

Y = 3, Saco = [5, 1] ;

Y = 4, Saco = [2, 1] ;

Y = 5, Saco = [2]

?- setof(Z,X^p(X,Y,Z),Conjunto).

Y = 3, Conjunto = [1, 5] ;

Y = 4, Conjunto = [1, 2] ;

Y = 5, Conjunto = [2]

Page 39: Cap´ıtulo 3 – L´ogica de Primeira Ordem · • Baseados nos slides de Andrew Rice, ... – Aceita somente comandos e objectivos ... • Representadas por uma sequˆencia de elementos

Guardar solucoes: exemplo (cont.)

• findall devolve a lista vazia [] se o objectivo nao e satisfeito,enquanto que bagof falha

?- bagof(Z,(p(X,Y,Z),Z>5),Saco).

No

?- findall(Z,(p(X,Y,Z),Z>5),Saco).

Saco = []