Introdução a Programação em Lógica e Prolog

Slides:



Advertisements
Apresentações semelhantes
Introdução à Linguagem Prolog
Advertisements

Fundamentos de Prolog: uma breve introdução à programação em lógica Jacques Robin, DI-UFPE
gerador de código intermediário
Prolog: Predicados Built-in 1
Lógica Matemática e Computacional 7 – Introdução à Programação Lógica
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Inteligência Artificial Alex F. V. Machado. Tecnologia de Processamento da Informação que envolve processos de raciocínio, aprendizado e percepção. Winston.
Introdução à Programação Lógica
Banco de Dados Dedutivo
Cálculo Relacional Datalog não-recursivo
Prof. Heloise Manica Paris Teixeira
Jacques Robin, DI-UFPE Prolog: comparação com outras linguagens de programação e de representação do conhecimento Jacques Robin, DI-UFPE.
Programação em lógica e lógica
Life Leonardo Lemos (lal)Paulo Oliva (pbo)& Controle de Fluxo * de predicados: Como em Prolog: fail. conjunção (A,B). disjunção (A;B). Diferente de Prolog:
Departamento de Informática
Prolog: Predicados Built-in 2
Correção dos exercícios de engenharia do conhecimento em Prolog Jacques Robin, DI-UFPE
Correção dos exercícios de engenharia do conhecimento em Prolog
LIFE: predicados, funções e sorts built-in Jacques Robin Paulo Oliva Leonardo Lemos DI-UFPE.
LIFE: integração de predicados, funções e classes
LIFE: integração de predicados, funções e classes
LIFE Logic, Inheritance, Functions and Equations Ioram Schechtman Sette.
Programação Lógica: PROLOG
Programação para Engenharia I
Curso Sistemas de Informação Disciplina: Arquitetura de Software
7 Abstração Genérica Unidades genéricas e instanciação.
6. Backtracking e Controle
Conceitos Básicos.
Universidade do Vale do Rio dos Sinos
Introdução a Programação em Lógica e Prolog
Inteligência Artificial: A Linguagem Prolog (parte 2)
João Lucas de Oliveira Torres
Aula Prática - Prolog Sistemas Inteligentes /~if684
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Aula Prática - Prolog Sistemas Inteligentes /~if684
Conceitos básicos de orientação a objetos
CADEIA DE CARACTERES (Strings)
Linguagens lógicas 2013 – Luiz Mauricio Nascimento Silva
Engenharia do Conhecimento Ernesto Trajano Jacques Robin CIn-UFPE.
Introdução a Programação em Lógica e Prolog
Estudo dos Conceitos e Paradigmas de Programação
Implementação de Resolução
Sistemas Especialistas
Sistemas Inteligentes
Procedimentos Pré-definidos em prolog comunicação
Sistemas Baseados em Conhecimento
Paradigma funcional.
Analise Semântica aula-10-analise-semântica.pdf.
Sistemas Especialistas Podem ser definidos como programas de computador desenvolvidos para representar o conhecimento humano num dado domínio específico.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algoritmos e Estrutura de Dados I Jean Carlo Mendes
Linguagens de Programação
Semântica de uma fórmula da lógica da 1a ordem via modelo de Herbrand
Aula 1 – Profª Danielle Costa
Introdução a Programação em Lógica e Prolog
Programação de computadores Prof. Giovanni Castro.
Programação Funcional
Programação em Lógica Indutiva Jacques Robin DI-UFPE.
Introdução a Programação em Lógica e Prolog Jacques Robin CIn-UFPE Aula I/II.
Programação Lógica com Prolog
Faculdade Pernambucana - FAPE Setembro/2007
Semântica de Linguagens de Programação
Aula “teórico-prática”
Inteligência Artificial: A Linguagem Prolog (Parte 1)
Introdução a programação em lógica Jacques Robin, DI-UFPE
Sumário 1 SQL Embutida 2 Processamento de Consultas
Programação de Computadores - 1
Paradigmas das Linguagens de Programação - História
Sistemas de Produção Jacques Robin CIn-UFPE. Roteiro  Definição de um sistemas de produção  Regras de produção  Inferência com regras de produção 
SEMÂNTICA DENOTACIONAL Alexandre Mota
Transcrição da apresentação:

Introdução a Programação em Lógica e Prolog Jacques Robin CIn-UFPE Aula II/II

Igualdade x unificação: exemplos ?- geber = senior -> no. ?- prof(X,disc(Y,dept(di,ufpe))) = prof(geber,disc(ia,Z)). -> X = geber, Y = ia, Z = dept(di,ufpe). ?- prof(X,disc(Y,dept(di,ufpe))) == prof(geber,disc(ia,Z). -> no. ?- prof(X,disc(Y,dept(di,ufpe))) == prof(U,disc(V,dept(di,ufpe))). -> no. ?- prof(X,disc(Y,dept(di,ufpe))) == prof(X,disc(Y,dept(di,ufpe))). -> yes. prof(ia,di,ufpe,geber). musico(senior). ?- geber = senior, prof(ia,di,ufpe,X), musico(X). -> no. e não: X = geber = senior. prof(ia,di,ufpe,pessoa(geber,_)). musico(pessoa(_,senior)). pessoa(geber, senior). ?- prof(ia,di,ufpe,X), musico(X). -> X = pessoa(geber,senior).

Prolog: listas [ e ]: início e fim de lista , separação entre eltos |: separação entre 1o elto e resto da lista açúcar sintático para predicado .(Head,Tail) ex.: [a,[b,c],d] açúcar sintático para .(a,.(.(b,.(c,[])),.(d,[]))) ?- [a,b,X,p(Y,C)] = [Head|Tail] Head = a, Tail = [b,X,p(Y,C)] ?- [[p(X),[a]],q([b,c])] = [[H|T1]|T2] H = p(X), T1 = [[a]], T2 = [q([b,c])] member(X,[X|_]). member(X,[Y|Z]) :- member(X,Z). ?- member(b,[a,b,c]) -> yes. ?- member(X,[a,b,c]) -> X = a ; X = b ; X = c ; no.

Evitar backtracking inútil: ! (o cut) op built-in de pruning, logicalmente sempre verificado com efeito colateral de impedir backtracking: na sua esquerda na cláusula que ocorre em outras cláusulas com a mesma conclusão ex: A :- B, C, D. C :- M, N, !, P, Q. C :- R. impede backtracking P -> N permite backtracking N -> M, Q -> P, D -> (R xor Q), (P xor R) -> B R tentado: unicamente se M ou N falha nunca se P ou Q falha

Cut: exemplo f1(X,0) :- X < 3. f1(X,2) :- 3 =< X, X < 6. f1(1,Y), 2 < Y? <- no f1(1,Y)? -> X = 1, Y = 0 1 < 3? -> yes 2 < 0? -> no f1(1,Y)? -> X = 1, Y = 2 3 =< 1? -> no f1(1,Y)? -> X = 1, Y = 4 6 =< 1? -> no f2(X,0) :- X < 3, !. f2(X,2) :- 3 =< X, X < 6, !. f2(X,4) :- 6 <= X, !. f2(1,Y), 2 < Y? <- no f2(1,Y)? -> X = 1, Y = 0 1 < 3? -> yes 2 < 0? -> no

Cut: exemplo (cont.) f3(X,0) :- X < 3, !. f3(X,2) :- X < 6, !. ?- f3(1,Y). Y = 0 ?- ; no. ?- Esses cuts modificam até a semântica declarativa do programa f4(X,0) :- X < 3. f4(X,2) :- X < 6. f4(X,4). ?- f4(1,Y). Y = 0 ?- ; Y = 2. ?-

Hipótese do mundo fechado Ao invés de L1, Prolog não permite nem fatos, nem conclusões de regras negativos, cex: ~animal_lover(geber). ~kill(X,Y) :- animal_lover(X), animal(Y). Princípio de economia: declarar e deduzir apenas o que é verdadeiro, supor que tudo que não é mencionado nem deduzível é falso (hipótese do mundo fechado) Operador de negação por falha em premissas: not p(X) verificado sse p(X) falha =/= de ~p(X) verificado sse ~p(X) no BDE ou na conclusão de uma regra com premissas verificadas

Negação por Falha (NF) 1 Permite raciocínio não monótono, ex: ave(piupiu). papa_leguas(bipbip). ave(X) :- papa_leguas(X). voa1(X) :- ave(X), not papa_leguas(X). voa1(X)? -> X = piupiu ; no. Sem semântica declarativa em L1 Depende da ordem, ex: voa2(X) :- not papa_leguas(X), ave(X). voa2(X)? -> no.

Negação por Falha 2 NF pode ser implementado apenas com !, fail (nunca verificado) e true (sempre verificado), ex: voa3(X) :- papa_leguas(X), !, fail. voa3(X) :- ave(X). não(X) :- X, !, fail ; true. NF torna resolução de Prolog (Select Depth-1st Linearly w/ Negation as Failure (SDLNF)) inconsistente ex: edge(a,b). sink(X) :- not edge(X,Y). sink(a)? -> no. sink(b)? -> yes. sink(X)? -> no.

Prolog: aritmética 3 tipos de operadores built-in aritméticos: calculadores (n-ários infixos): +, -, *, /, mod comparadores (binários infixos): =:=, =\=, <, >, =<, > o atribuídor is: Variável is ExpressãoAritmética Expressão aritmética: fórmula atômica contendo apenas números e calculadores aritméticos todos os argumentos dos calculadores e comparadores devem ser instanciados com expressões aritméticas

Prolog: exemplos de aritmética 1 > ?- 1 + 1 < 1 + 2. yes > ?- 1 + 3 =:= 2 + 2. > ?- 1 + 3 = 2 + 2. no > ?- 1 + A = B + 2. A = 2 B = 1 > ?- 1 + A =:= B + 2. Error > ?- A = 4, B = 3, 1 + A =:= B + 2. A = 4 B = 3 > ?- C = 1 + 2. C = 1+2 > ?- C == 1 + 2. no > ?- C is 1 + 2. C = 3 > ?- C is D, D = 1 + 2. Error. > ?- D = 1 + 2, C is D. D=1+2 C=3 > ?- -1+2 = +(-(1),2). > ?- -1+2 =:= +(-(1),2). yes

Prolog: exemplos de aritmética 2 fac(0,1) :- !. fac(I,O) :- I1 is I - 1, fac(I1,O1), O is I * O1. ?- fac(1,X). X = 1 ?- fac(3,X). X = 6 ?- fac(5,X). X = 120 sum([],0). sum([H|T],N) :- sum(T,M), N is H + M. ?- sum([2,1,3,1],S). S = 7 ?- sum([2,10,1],S). S = 13

Prolog: exemplos de teste de tipos ?- var(X). X = _3 ?- var(2). no ?- var(a). ?- var(p(a,X)). ?- nonvar(2), nonvar(p(2,X,a)). X = _11 ?- X is 2 + 3, var(X). ?- var(X), X is 2 + 3. X = 5 ?- numberp(Term) :- integer(Term). numberp(Term) :- real(Term). structp(Term) :- nonvar(Term), not atomic(Term). listp(Term) :- nonvar(Term), listp1(term). listp1([]). listp1([H|T]) :- listp1(T). factp(Term) :- strucp(Term), not listp(Term).

Prolog: conversão de tipos name(Átomo,Caracteres): conversão bi-direcional entre átomo e cadeia de caracteres que constitui o seu nome list(CódigosAscii,Caracteres): conversão bi-direcional entre um lista de inteiros vistos como códigos ascii e cadeia de caracteres correspondente Fato =.. Lista: conversão bi-direcional entre fato e lista, funtor sendo cabeça e argumentos sendo resto ?- name(A,"blabla"). A = blabla ?- name(blabla,S). S = "blabla" ?- list(X,"bla"). X = [98,108,97] ?- list([98,108,97],Y). Y = "bla” ?- p(a,X,c) =.. Y. X = _5, Y = [p,a,_5,c] ?- Y =.. [p,a,X,c]. Y = p(a,_20,c), X = _20

Prolog: entrada/saída 1 Ler/escrever estrutura de dados dificilmente pode ser visto como resultando de uma dedução: E/S não se integra naturalmente no paradigma de PL requer predicados extra-lógicos sem semântica declarativa em L1 Predicados built-in de Prolog para E/S: sempre verificados cumprem sua tarefa por efeitos colaterais não podem ser re-satisfeitos por backtracking

Prolog: entrada/saída 2 Ler e escrever termos: read, write, display. Ler e escrever caracteres: get, get0, put. Formatar a saída legívelmente: nl, tab. Ligar um canal de E/S com a tela ou com arquivos: tell, telling, told, see, seeing, seen . Carregar arquivo fonte no ambiente do interpretador: consult, reconsult ex.: ?- read(X), Z is X + 1, write(Z). 2. 3 X = 2, Z = 3; no ?

Prolog: failure-driven loop Loop gerada por backtracking forçado com fail e repeat. repeat sempre verificado e re-verificado no backtracking (true sempre verificado mas falha no backtracking) consult(File) :- see(File), consult-loop, seen. consult-loop :- repeat, read(Clause), process(Clause), !. process(X) :- end_of_file(X), !. process(Clause) :- assert(Clause), fail.

Prolog x sistemas de produção: controle Raciocino dirigido pelo objetivo (e não pelos dados) Regras encadeada para trás (e não para frente) Busca em de cima para baixo e em profundidade na árvore de prova (e não de baixo para cima e em largura) Sempre dispara 1a regra aplicável encontrada (ie, sem resolução de conflitos) Backtracking quando 1a regra leva a uma falha

Prolog x sistemas de produção: poder expressivo Fatos universais (e não apenas instanciados): ex: ancestral(X,adão). Unificação (e não apenas matching): bidirecional variáveis lógicas podem ser instanciadas com termos compostos (e não apenas atómicos) ex: ?- prof(X,disc(ia,dept(di,ufpe))) = prof(pessoa(geber,Y),disc(ia,Z)) -> X = pessoa(geber,Y), Z = dept(di,ufpe).

Prolog x programação imperativa 1 Interativo: compilação transparente integrada na interpretação rodar programa = consultar um BD Gerenciamento automático da memória Mecanismo único de manipulação de dados -- unificação de termos lógicos -- implementando: atribuição de valor passagem de parâmetros alocação de estruturas leitura e escritura em campos de estruturas

Prolog x programação imperativa 2 Estrutura de dados única: termo Prolog variáveis lógicas sem tipo estático Controle implícito built-in na estrategia de resolução, ex: Em programação imperativa procedure c(E) const e0:tipoE0; var E:tipoE, S0:tipoS0, l1:tipo-I1, S1:tipoS1; do if E = e0 then do S0 := call p0(e0); return S0; end; else do I1 := call p1(E); S1 := call p2(E,l1); return S1; end; end; Em Prolog c(e0,S0) :- p0(e0,S0). c(E,S1) :- p1(E,I1), p2(E,I1,S1).

Prolog x programação funcional 1 Matematicamente, predicado = relação: não-determinismo: respostas múltiplas (disponíveis por backtracking), unificação e busca built-in, livra o programador da implementação do controle; bi-direcionalidade: cada argumento pode ser entrada ou saída, dependendo do contexto de chamada, única definição para usos diferentes: verificador, instanciador, resolvedor de restrições, enumerador. integração imediata com BD relacional

Prolog x programação funcional 2 Append em Haskell: append [] L = L append H:T L = H : append T L ?- append([a,b],[c,d]) [a,b,c,d] Append em Prolog: append([],L,L). append([H|T1],L,[H|T2]) :- append(T1,L,T2). ?- append([a,b],[c,d],R). R = [a,b,c,d]. Append relacional codifica 8 funções

Vários usos do mesmo predicado verificador: ?- append([a,b],[c],[a,b,c]). -> yes. ?- append([a,b],[c],[a]). -> no. instanciador: ?- append([a,b],[c],R). -> R = [a,b,c]. ?- append(H,[c],[a,b,c]). -> H = [a,b]. resolvedor de restrições: ?- append(X,Y,[a,b,c]). -> X = [], Y = [a,b,c] ; -> X = [a], Y = [b,c] ... enumerador: ?- append(X,Y,Z). -> X = [], Y =[], Z = [] ; -> X = [_], Y = [], Z = [_] ...

Prolog x programação OO Funcionalidades built-in: + unificação e busca - tipos, herânça e encapsulação Ontologicalmente: Entidade Atómica (EA): em OO, valor de tipo built-in em Prolog, átomo (argumento ou predicado) Entidade Composta (EC): em OO, objeto em Prolog, fato Relação simples entre EC e EA: em OO, atributo de tipo built-in em Prolog, posição em um predicado Relação simples entre ECs: em OO, atributo de tipo objeto em Prolog, predicado Relação complexa entre entidades: em OO, método em Prolog, conjunto de regras

Prolog x programação OO: exemplo Em OO: pt[subclass_of planobj; attrs[X inst_of int, Y inst_of int]; mets[right(Pt inst_of pt) {return self.X >= Pt.X}]] pt1[inst_of pt; attrs[X = 0, Y = 0]] pt2[inst_of pt; attrs[X = 1, Y =1]] ?- pt1.right(pt2) -> no. Em Prolog: pt(0,0). pt(1,1). planobj(pt(_,_)). right(pt(X1,_),pt(X2,_)) :- X1 >= X2. ?- right(pt(0,0),pt(1,1)). -> no.

Programação em Lógica: Disciplina Eletiva de Graduação e Pós-Graduação Prolog aprofundado Programação por resolução de restrições a base lógica (Constraint Logic Programming) extensão de Prolog com resoluções de inequações e equações restrições quantitativas (N, Z, R, C) ou qualitativas (tipos, ontologias) Escalonamento, raciocínio espacial, otimização, automação industrial, CAD/CAM, música computacional Programação em lógica funcional Programação em lógica orientada a objetos Programação multiparadigma a base lógica: lógica + restrições + funcional + OO todo a IA e mais !

Programação em Lógica: Disciplina Eletiva de Graduação e Pós-Graduação Programação em lógica para engenharia de software especificação formal  prototipágem rápido aceleração do modelo de desenvolvimento em espiral Programação em lógica probabilista e bayesiana raciocínio com incerteza Programação em lógica indutiva aprendizagem de máquina, agentes adaptativos, mineração de dados, descoberta de conhecimento em BD, programação automática, bio-informática Programação em lógica multiagentes sistemas inteligentes distribuídos comercio eletrônico jogos, competição de futebol de robôs

Programação em Lógica: Disciplina Eletiva de Graduação e Pós-Graduação Bancos de dados dedutivos: descoberta de conhecimento em BD, sistemas especialistas de grande porte, servidores de conhecimento ontológico Bancos de dados dedutivos orientada a objetos Bancos de dados dedutivos temporais Bancos de dados de restrições: GIS, BD espaciais, BD espaço-temporais, integração de dados e interoperablidade Bancos de dados de restrições orientada a objetos toda a IA de grande escala e mais ! Bancos de dados probabilistas: BD de sensores, data warehousing, integração de dados com fontes não confiáveis ou mutualmente inconsistentes,

Programação em Lógica: Disciplina Eletiva de Graduação e Pós-Graduação Gramáticas lógicas: Parser e gerador de linguagem built-in em Prolog Basta desenvolver gramática (i.e., como com lex e yacc) Mineração da web, extração de informação na Internet, compilação tradução automática, geração automática de resumos, chatterbots APIs Prolog/Java e Prolog/XML sistemas de informação inteligentes distribuídos e heterogêneos a infra-estrutura web integração de dados, interoperabilidade entre sistemas, mediadores, data warehousing comercio eletrônico agentes inteligentes de recuperação, classificação, extração e notificação de informação na web, na Internet, em Intranet inteligência na computação pervasiva toda a IA embutida e mais !

Programação em Lógica: Disciplina Eletiva de Graduação e Pós-Graduação Aplicação fio condutor para ilustração dos conceitos

Programação em Lógica: Disciplina Eletiva de Graduação e Pós-Graduação

Exercícios A terrível novela O banco de dados acadêmico em lógica da 1a ordem em Prolog O banco de dados acadêmico A curiosidade matou o gato? em Prolog Coloração de mapa em Prolog

A terrível novela: requisitos em inglês 1. A soap opera is a TV show whose characters include a husband, a wife and a mailman such that: 2. the wife and the mailman blackmail each other 3. everybody is either alcoholic, drug addict or gay 4. Dick is gay, Jane is alcoholic and Harry is a drug addict 5. the wife is always an alcoholic and the long-lost sister of her husband 6. the husband is always called Dick and the lover of the mailman 7. the long-lost sister of any gay is called either Jane or Cleopatra 8. Harry is the lover of every gay 9. Jane blackmails every drug addicted lover of Dick 10. soap operas are invariably terrible! 0. Who are the characters of a terrible TV show?

O BD acadêmico: requisitos em inglês 1. Bob is 40 and the manager of the CS department. 2. His assistants are John and Sally. 3. Mary’s highest degree is an MS and she works at the CS department. 4. She co-authored with her boss and her friends, John and Sally, a paper published in the Journal of the ACM. 5. Phil is a faculty, who published a paper on F-Logic at a Conference of the ACM, jointly with Mary and Bob. 6. Every faculty is a midaged person who writes article, makes in the average $50,000 a year and owns a degree of some kind, typically a PhD. 7. One is considered midage if one is between 30 and 50 years old. 8. A faculty’s boss is both a faculty and a manager. 9. Friends and children of a person are also persons. 10. Every department has a manager who is an employee and assistants who are both employees and students 11. A boss is an employee who is the manager of another employee of the same department. 12. A joint work is a paper that is written by two faculties 13. There are three types of papers: technical reports, journal papers and conference papers 0a: Who are the midaged employees of the CS department and who are their boss? 0b: Who published jointly with Mary in the Journal of the ACM? 0c: Where did Mary published joint work with Phil?

A curiosidade matou o gato? Requisitos em inglês 1. Jack owns a dog. 2. Every dog owner is an animal lover. 3. No animal lover kills an animal. 4. Either Jack or curiosity killed Tuna 5. Tuna is a cat 0. Did curiosity kill the cat? Em L1 1. $x Dog(x) Ù Owns(Jack,x) 2. "x ($y Dog(y) Ù Owns(x,y)) Þ AnimalLover(x) 3. "x AnimalLover(x) Þ "y Animal(y) Þ ØKills(x,y) 4. Kills(Jack, Tuna) Ú Kills(Curiosity, Tuna) 5. Cat(Tuna) 6. "x Cat(x) Þ Animal(x) 0. Kills(Curiosity,Tuna)

Coloração de mapa B A B A C C D D E F E F Colorir mapa tal que: países adjacentes de cores diferentes Instância de problema de resolução de restrições B A B A C C D D E F E F