FCT-UNESP 27/07/2017 Prof. Dr. Rogério E. Garcia 1 Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Linguagens de Programação Aula 09 Rogério Eduardo Garcia ([email protected]) 27/07/2017 Rogério Eduardo Garcia 2 Linguagens de Programação Paradigma Lógico – PROLOG
60
Embed
New LP Aula 09 [Modo de Compatibilidade] - Unespdocs.fct.unesp.br/docentes/dmec/rogerio/CLP/LP_Aula_09.pdf · 2017. 7. 27. · 3urorj irl ghvhqyroylgd hp sdud surfhvvdphqwr gh olqjxdjhpqdwxudo
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 1
Faculdade de Ciências e TecnologiaDepartamento de Matemática e Computação
Uma LP (Linguagem de Programação) é umalinguagem destinada a ser usada por umapessoa para expressar um processo atravésdo qual um computador pode resolver umproblema. Os quatro modelos (paradigmas)de LP correspondem aos pontos de vista dosquatro componentes citados. A eficiência naconstrução e execução de programas dependeda combinação dos quatro pontos de vista.
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 3
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
5
Paradigmas
Paradigma Imperativo
As linguagens imperativas são orientadas aações, onde a computação é vista como umaseqüência de instruções que manipulamvalores de variáveis (leitura e atribuição).
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
6
Paradigma Imperativo
Programas centrados no conceito de umestado (modelado por variáveis) e ações(comandos) que manipulam o estado.
Paradigma também denominado deprocedural, por incluir subrotinas ouprocedimentos como mecanismo deestruturação.
Primeiro paradigma a surgir e ainda muitoimportante.
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 4
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
7
Paradigma Imperativo
Modelo computacional
Entrada Programa Saída
Estado
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
8
Paradigma Imperativo
Exemplos de linguagens imperativas:
FORTRAN
BASIC
COBOL
Pascal
C
Python
ALGOL
Modula
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 5
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
9
Paradigmas
Paradigma Funcional
Sistemas são construídos através da definição,composição e definição de funções.
Foco no processo de resolução do problema.A visão funcional resulta num programa quedescreve as operações que devem serefetuadas para resolver o problema.
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
10
Paradigma Funcional
Trata a programação como uma transformação dedados por funções
Que função deve ser aplicada para transformar minhaentrada na saída desejada?
Ao invés dos passos sucessivos do paradigmaimperativo, a sintaxe da linguagem é apropriada paradefinição de funções compostas que denotamaplicações sucessivas de funções:
função-n(...função-2(função-1(dados))...)
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 6
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
11
Paradigma Funcional
Modelo computacional
Entrada Programa Saída
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
12
Paradigma Funcional: Características
Programas são funções que descrevem uma relaçãoexplícita e precisa entre E/S;
Estilo declarativo: não há o conceito de estado nemcomandos como atribuição;
Conceitos sofisticados como polimorfismo, funções dealta ordem e avaliação sob demanda
Aplicação: prototipação em geral e IA
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 7
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
13
Paradigma Funcional
Uma função tem três componentes básicos:– Domínio: conjunto de objetos aos quais a função se aplica)
– Contra-domínio: conjunto de objetos resultantes da aplicação dafunção, e
– Definição: especificação de como um objeto do contra-domínio édeterminado a partir do domínio.
Há um quarto componente opcional: o nome da função.
Função:
f: {domínio} {contra-domínio}
Programa:
p: {possíveis entradas} {possíveis saídas}
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
14
Paradigma Funcional
Exemplo 1: função double
Domínio: Z
Contra-Domíno: Z
Definição: x + x, onde x é elemento do domínio
Nome: double
Notação matemática: double(x) = x + x
double: integer integer
Note que o operador + é usado na definição, e + é uma função também.
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 8
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
15Paradigma Funcional – Exemplos em SCHEME
;;; Função para obtenção do dobro de x, com aplicação do valor 4
(lambda (x) (+ x x)) ==> um procedimento ((lambda (x) (+ x x)) 4) ==> 8
;;;Obtenção de x-y e aplicação com os valores 10 e 7
;;; procedimento Fatorial para obtenção do fatorial de um número inteiro não-
negativo
(define fact (lambda (n) (if (= n 0)
1 ;Caso básico - resulta no valor 1 (* n (fact (- n 1))))))
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
16
Paradigma Funcional
Exemplos de linguagens funcionais:
Scheme– Derivada de LISP
Common LISP– Buscando padronização de LISP
CLOS (Common LISP Object System)– Dialeto de LISP que incorpora elementos de linguagens
orientadas a objetos
ML– Linguagem funcional fortemente tipada
Miranda– Baseada em ML, mas é puramente funcional
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 9
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
17
Paradigma Funcional: Visão Crítica
Vantagens– Manipulação de
programas mais simples:
Prova de propriedades
Transformação(exemplo: otimização)
– Concorrência exploradade forma natural
Problemas– O mundo não é funcional!
– Implementaçõesineficientes
– Mecanismos primitivos deE/S e formatação
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
18
Paradigmas
Paradigma Lógico
O modelo Lógico está relacionado à perspectiva dapessoa: ele encara o problema de uma perspectivalógica. Um programa lógico é equivalente à descriçãodo problema expressa de maneira formal, similar àmaneira que o ser humano raciocinaria sobre ele.
Programação é baseada em fatos, que podem serrelações (associações) entre coisas, e regras, queproduzem fatos deduzidos a partir de outros.
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 10
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
19
Paradigma Lógico
Programação em linguagens declarativas (lógica) requer um estilomais descritivo.
O programador deve conhecer os relacionamentos entre asentidades e conceitos envolvidos para descrever os fatos(cláusulas).
Programas descrevem um conjunto de regras que disparamações quando suas premissas são satisfeitas.
Prolog foi desenvolvida em 1972 para processamento delinguagem natural, na França. O nome vem de PROgrammationen LOGique.
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
20
Paradigma Lógico
Modelo computacional
Entrada Programa Saída
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 11
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
21
Paradigma Lógico: Características
Programas são relações entre E/S
Estilo declarativo, como no paradigmafuncional
Na prática, inclui características imperativas,por questão de eficiência
Aplicações: sistemas especialistas (IA) ebanco de dados
27
/07
/20
17
Ro
gé
rio
Ed
ua
rdo
Ga
rcia
22
Paradigma Lógico
Exemplos em Prolog:obrigado_a_fazer(R,A):- robô(R),
Igual a lógica da 1a ordem exceto:– Constantes: começam com letras minúsculas, ou quota ´
– Variáveis:
começam com letras maiúsculas, _, ou números
na BC, todas universalmente quantificadas e de escopo local auma cláusula
nas consultas, todas existencialmente quantificadas
– Fatos da Lógica de Horn T C(...,xk,...)se escrevam c(...,Xk,...). em Prolog
– Regras definidas da Lógica de Horn:P1(...,x1
i,...) ... Pn(...,xnj,...) Cm(...,xm
l,...)se escrevam c(...,Xm
l,...) :- p1(...,X1i,...), ...,pn(...,Xn
j,...).
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 18
Exemplo de West...
West é criminoso ou não?– “A lei americana diz que é proibido vender armas a uma nação
hostil. Cuba possui alguns mísseis, e todos eles foramvendidos pelo Capitão West, que é americano”
Como resolver automaticamente este problema declassificação?
Segundo a IA (simbólica), é preciso:
– Identificar o conhecimento do domínio (modelo do problema)
– Representá-lo utilizando uma linguagem formal derepresentação
– Implementar um mecanismo de inferência para utilizar esseconhecimento
A) Todo americano que vende uma arma a uma nação hostil é criminosoB) Todo país em guerra com uma nação X é hostil a XC) Todo país inimigo político de uma nação X é hostil a XD) Todo míssil é um armaE) Toda bomba é um armaF) Cuba é uma naçãoG) USA é uma naçãoH) Cuba é inimigo político dos USAI) Irã é inimigo político dos USAco
nhec
imen
to p
révi
o
J) West é americanoK) Existe um mísseis em cubaL) Os mísseis de cuba foram vendidos por West co
nhec
imen
to
do p
robl
ema
novo
co
nhec
imen
to M) Cuba possui um míssel M1 - de KO) M1 é uma arma - de D e NP) Cuba é hostil aos USA - de F, G, H e CQ) M1 foi vendido a Cuba por West - de L, M e NR) West é crimonoso - de A, J, O, F, P e Q
Solucionando o caso do cap. West (linguagem natural)
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 19
A) x,y,z americano(x) Arma(y) Nação(z) Hostil(z) Vende(x,z,y) Criminoso(x)
B) x Guerra(x,USA) Hostil(x)C) x InimigoPolítico(x,USA) Hostil(x)D) x Míssil(x) Arma(x)E) x Bomba(x) Arma(x)F) Nação(Cuba)G) Nação(USA)H) InimigoPolítico(Cuba,USA)I) InimigoPolítico(Irã,USA)co
nhec
imen
to p
révi
o
J) americano(West)K) $ x Possui(Cuba,x) Míssil(x) L) x Possui(Cuba,x) Míssil(x) Vende(West, Cuba,x) co
nhec
imen
to
do p
robl
ema
novo
co
nhec
imen
to
M) Possui(Cuba,M1) - Eliminação: quantificador existencial eN) Míssil(M1) conjunção de KO) Arma(M1) - Modus Ponens a partir de D e NP) Hostil(Cuba) - Modus Ponens a partir de C e HQ) Vende(West,Cuba,M1) - Modus Ponens a partir de L, M e NR) Criminoso(West) - Modus Ponens a partir de A, J, O, F, P e Q
Solucionando o caso do cap. West (Lógica de primeira ordem)
West é criminoso?Encadeamento de regras para frente
missil(m1)americano(west)
criminoso(west)
arma(m1) hostil(nono)
criminoso(west)?
nacao(nono)
nacao(america)
inimigo(nono,america) possui(nono,m1)
vende(west,nono,m1)
West é criminoso?Encadeamento de regras para frente
missil(m1)americano(west)
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 46
criminoso(west)
arma(m1) hostil(nono)
criminoso(west)? yes
nacao(nono)
nacao(america)
inimigo(nono,america) possui(nono,m1)
vende(west,nono,m1)
West é criminoso?Encadeamento de regras para frente
missil(m1)americano(west)
Encadeamento de regras para tráse resolução
Encadeamento para trás de Prolog é um caso particular derefutação por resolução para Lógica de Horn
Com estratégia de resolução SLD:
– D: para cláusulas Definidas (fatos e regras definidas)
– L: Linear de entrada , i.e., a cada passo, resolve (1) uma dasclausulas iniciais (base de conhecimento e negação da consulta) com(2) cláusula derivada no último passo
– S: com Função de seleção escolhendo:
Escolhendo cláusulas iniciais na ordem de escritura de cima para baixo
Escolhendo os literais de cada cláusula na ordem de escritura daesquerda para direta
A resolução é correta e completa para refutação
Prolog então é uma máquina de inferência correta e completapara a Lógica de Horn?
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 47
West é criminoso? Prova Prolog como refutação com resolução SLD
(americano(P) arma(W)
nacao(N) hostil(N)
vende(P,N,W) criminoso(P)) //1
(T possui(nono,m1)) //2a
(T missil(m1)) //2b
(possui(nono,W) missil(W) vende(west,nono,W)) //3
(T americano(west)) //4
(T nacao(nono)) //5
(T inimigo(nono,america)) //6
(missil(W) arma(W)) //7
(inimigo(N,america) hostil(N)) //8
(T nacao(america)) //9
(criminoso(west) F) //0
1. Resolver 0 com 1 unificando P/west:
americano(west) arma(W) nacao(N)
hostil(N) vende(west,N,W) F //10
2. Resolver 10 com 4:
arma(W) nacao(N) hostil(N)
vende(west,N,W) F //11
3. Resolver 11 com 7:
missil(W) nacao(N) hostil(N)
vende(west,N,W) F //12
4. Resolver 12 com 2b unificando W/m1:
nacao(N) hostil(N) vende(west,N,m1) F //13
5. Resolver 13 com 5 unificando N/nono:
hostil(nono) vende(west,nono,m1) F //14
6. Resolver 14 com 8 unificando N/nono:
inimigo(nono,america) vende(west,nono,m1) F //15
7. Resolver 15 com 6: vende(west,nono,m1) F //16
8. Resolver 16 com 3 unificando W/m1:
possui(nono,m1) missil(m1) F //17
9. Resolver 17 com 2a: missil(m1) F //18
10. Resolver 18 com 2b: F
Prolog devolve a primeira resposta
g1(a).
g21(a).
g3(a).
g4(a).
g1(b).
g21(b).
g22(b).
g3(b).
g(X) :- g1(X), g2(X).
g(X) :- g3(X), g4(X).
g2(X) :- g21(X), g22(X).
$ prolog
?- consult(“g.pl”).
yes
?- g(U).
U = b
?- ;
U = a
?- ;
no
?- halt.
$
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 48
Forçar o backtracking para obter todas as respostas
g1(a).
g21(a).
g3(a).
g4(a).
g1(b).
g21(b).
g22(b).
g3(b).
g(X) :- g1(X), g2(X).
g(X) :- g3(X), g4(X).
g2(X) :- g21(X), g22(X).
g(U)? <- U = b.
g1(U)? -> U = a.
g2(a)? <- no.
– g21(a)? -> yes.
– g22(a)? -> no.
g1(U), U \ {a}? -> U = b.
g2(b)? <- yes.
– g21(b)? -> yes.
– g22(b)? -> yes.
;
g1(U), U \ {a,b} ? -> no.
Backtracking em cascatas
g1(a).
g21(a).
g3(a).
g4(a).
g1(b).
g21(b).
g22(b).
g3(b).
g(X) :- g1(X), g2(X).
g(X) :- g3(X), g4(X).
g2(X) :- g21(X), g22(X).
g(U), g \ {g1,g2}? <- U = a.
g3(U)? -> U = a.
g4(a)? -> yes.
;
g3(U), U \ {a}? -> U = b.
g4(b)? -> no.
g3(U), U \ {a,b}? -> no.
g(U), g \ {g1,g2 ; g3,g4}? -> no.
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 49
Prolog puro: sem atribuição explícita, nem predicado de igualdade
Em Prolog, = é o operador de unificação explícita:– é uma consulta lógica que retorno verdadeiro ou falso e potencialmente
instância variáveis
– não é um operador de atribuição como na programação imperativa
– não é um predicado de declaração de igualdade como na lógica dospredicados
?- banana = maca -> no.
?- prof(X,disc(Y,depto(dmc,fct)) = prof(rogerio,disc(lp,Z)).-> X = rogerio, Y = lp, Z = depto(dmc,fct).
Prolog para engenharia de software
Linguagem de especificação formal com semânticadeclarativa lógica
Linguagem de programação de propósito geral emduas camadas:1. Prolog puro: a semântica formal de cada linha do programa é
dada pela formula correspondente em lógica da 1a ordem
2. Predicados extra-lógicos: introduzidos por razões deconveniência
Funcionam com efeitos colaterais como na programaçãoimperativa
Não são bem integrados com o paradigma lógico de Prolog puro
Linguagem de scripting não tipado
FCT-UNESP 27/07/2017
Prof. Dr. Rogério E. Garcia 50
Aspectos de Prolog forada Lógica Clássica de Horn da 1a ordem
Acrescentados por necessidades práticas de programação
Semântica imperativa, funcional, de lógicas não clássicas ouclássicas de ordem superior
– Negação por falha: not
– Controle e poda da busca: ! (cut), repeat, ...
– Entrada/saída: read, write, ...
– Aritmética: is, +, -, *, /, =>, <=, ...
– Modificação dinâmica da base de conhecimento: assert, retract
– Meta-programação: var, =.., name, list
Maioria das extensões de Prolog, os substituem por predicadoslógicos
No entanto, não existe padrão para essas extensões
Prolog para engenharia de software
Permite integrar duas filosofias tradicionalmenteopostas de engenharia de software: