UFRPE Licenciatura em Computao Disciplina Lgica e Programao
























![Prolog: Elementos Básicos • Estruturas de Lista – Lista vazia: [] – Não há Prolog: Elementos Básicos • Estruturas de Lista – Lista vazia: [] – Não há](https://slidetodoc.com/presentation_image_h2/497379f339af35d7082064699ccb760d/image-25.jpg)

![Prolog: Elementos Básicos • Estruturas de Lista – Uma definição de ‘append’ append([], Lista). Prolog: Elementos Básicos • Estruturas de Lista – Uma definição de ‘append’ append([], Lista).](https://slidetodoc.com/presentation_image_h2/497379f339af35d7082064699ccb760d/image-27.jpg)













- Slides: 40
UFRPE – Licenciatura em Computação Disciplina: Lógica e Programação Lógica Prof. : Paulemir G. Campos Prolog e Aplicações 5/24/2021 DEInfo - Prof. Paulemir Campos 1
Sumário • • Introdução Conceitos da Lógica Formal Prolog: Elementos Básicos Deficiências do Prolog Sintaxe dos Programas Prolog Algumas Aplicações Conclusão Bibliografia 5/24/2021 DEInfo - Prof. Paulemir Campos 2
Introdução • Conceito – Usa uma forma de lógica simbólica como linguagem – Resultados produzidos por inferência lógica • Linguagens de Programação Lógica – Todas baseadas na lógica simbólica • Programas Lógicos – Paradigma Declarativo – Não são baseados em procedimentos – Apenas as especificações dos resultados são declarados 5/24/2021 DEInfo - Prof. Paulemir Campos 3
Introdução • Sintaxe e semântica bem diferentes das linguagens procedurais (ou imperativas) e das funcionais • Algumas Linguagens Declarativas – Prolog (Programming Logic), LLP (Linear Logic Programming), P-Prolog (Parallel Prolog), Delta Prolog, Lambda Prolog, Prolog +CG (Prolog Café – integra Prolog + Gráfico Conceitual + POO + Java), Strawberry Prolog e Visual Prolog (Compilador) 5/24/2021 DEInfo - Prof. Paulemir Campos 4
Introdução • Será enfocado o Prolog – Linguagem lógica de uso generalizado • Origens – Início da década de 70 (século XX) – Projeto Fundamental do Prolog • Alain Colmerauer e Phillippe Roussel (Artificial Intelligence Group) da Universidade de Aix-Marseille em conjunto com Robert Kowalski (Departament of Artificial Intelligence) da Universidade de Edimburgo 5/24/2021 DEInfo - Prof. Paulemir Campos 5
Introdução • Origens – Primeiro Interpretador Prolog • Desenvolvido em Marseille (1972) – Principais Componentes • Método para especificar proposições de cálculo de predicado • E, uma implementação de uma forma restrita de resolução – Pouca atenção fora de Marseille e Edimburgo até 1981 5/24/2021 DEInfo - Prof. Paulemir Campos 6
Introdução • Origens – A partir de 1981 surgiu um repentino e forte interesse na Inteligência Artificial e na Programação Lógica pelos pesquisadores e governos dos Estados Unidos e de diversos países europeus – Motivo • Lançamento pelo governo japonês de um grande projeto de pesquisa (Fifts Generation Computing Systems - FGCS) para desenvolver máquinas inteligentes (Prolog como linguagem base) 5/24/2021 DEInfo - Prof. Paulemir Campos 7
Conceitos da Lógica Formal • Proposição – Instrução lógica que pode ou não ser verdadeira • Lógica Simbólica – É usada na lógica formal para expressar proposições e relações entre essas e ainda descrever como novas proposições podem ser inferidas de outras que se presumem verdadeiras 5/24/2021 DEInfo - Prof. Paulemir Campos 8
Conceitos da Lógica Formal • Tipo de Termos – Simples (átomo): constantes ou variáveis • Ex: homem, jake, ana, gosta, brasil, livro (constantes) Pessoa, PRATO, _nome (variáveis) – Compostos: functor + lista ordenada de parâmetros • Ex. : homem(jake) % Indica que jake é um homem gosta(bob, bife) /* Indica que bob gosta de bife */ gosta(QUEM, bife) % Questiona quem gosta de bife – Porém, proposições não têm nenhuma semântica intrínseca, sendo estes comentários acima apenas convenções naturais. 5/24/2021 DEInfo - Prof. Paulemir Campos 9
Conceitos da Lógica Formal • Tipo de Proposições – Atômicas • Consistem em termos compostos – Compostas • Têm duas ou mais proposições atômicas ligadas por conectivos lógicos ou operadores • Declaração de Proposições – Fato • A proposição é definida como verdadeira – Consulta • A verdade da proposição precisa ser determinada 5/24/2021 DEInfo - Prof. Paulemir Campos 10
Conceitos da Lógica Formal • Conectivos Lógicos Nome Símbolo negação ¬ conjunção disjunção equivalência implicação 5/24/2021 Exemplo Significado ¬a não a a b aeb a ou b a é equivalente a b a implica b b implica a DEInfo - Prof. Paulemir Campos 11
Conceitos da Lógica Formal • Forma Clausal – Padronização para escrita de proposições para evitar redundâncias – Sintaxe Geral B 1 B 2 . . . Bn A 1 A 2 . . . Am (Se todos os As forem verdadeiros Então pelo menos um B será verdadeiro) Onde: Os As e os Bs são termos; Disjunções ( ) sempre do lado esquerdo (conseqüente) Conjunções ( ) sempre do lado direito (antecedente) 5/24/2021 DEInfo - Prof. Paulemir Campos 12
Conceitos da Lógica Formal • Forma Clausal – Exemplos: gosta(bob, truta) gosta(bob, peixe) peixe(truta). Em Português: Se bob gosta de peixe e truta é um peixe Então bob gosta de truta. pai(luiz, al) pai(luiz, violeta) pai(al, bob) mae(violeta, bob) avo(luiz, bob). Em Português: Se al é pai de bob e violeta é mãe de bob e luiz é avô de bob Então luiz é pai de al ou luiz é pai de violeta. 5/24/2021 DEInfo - Prof. Paulemir Campos 13
Conceitos da Lógica Formal • Resolução – É uma regra de inferência que permite a computação das proposições inferidas a partir de proposições dadas Exemplo: P 1 T % T implica P 1 T Q 2 % Q 2 implica T É logicamente evidente que: Q 2 implica P 1 Ou seja, P 1 Q 2 (proposição inferida) 5/24/2021 DEInfo - Prof. Paulemir Campos 14
Conceitos da Lógica Formal • Cláusulas de Horn – É um tipo especial de proposição usada para resolução – Homenagem a Alfred Horn, quem estudou esse tipo de cláusula – Tipos • Única proposição atômica no lado esquerdo (cabeça) Ex. : gosta(bob, truta) gosta(bob, peixe) peixe(truta). • Ou, lado esquerdo vazio (sem-cabeça) Ex. : pai(bob, jake). % usadas geralmente para declarar fatos – A maioria das proposições podem ser escritas nesta forma 5/24/2021 DEInfo - Prof. Paulemir Campos 15
Prolog: Elementos Básicos • Instruções são construídas a partir de termos • Termos – Uma constante (átomo, string ou número inteiro) • Átomo: é uma cadeia de letras, de dígitos e de ‘_’ iniciado com letra minúscula • String: Cadeia de caracteres ASCII imprimíveis delimitados por aspas duplas – Uma variável (começa com letra maiúscula ou ‘_’ ) • Instanciada: Atribuição de valor durante a resolução • Não-Instanciada: Sem valor definido 5/24/2021 DEInfo - Prof. Paulemir Campos 16
Prolog: Elementos Básicos • Termos – Uma estrutura (proposições atômicas) • Ex. : functor(lista de parâmetros) • Functor: Qualquer átomo para identificar a estrutura • Lista de parâmetros: Qualquer lista de átomos, variáveis ou outras estruturas • Permite declarar fatos. Ex: pai(luiz, bob). • Permite declarar predicados (consulta ou pergunta) Ex: pai(Quem, bob). 5/24/2021 DEInfo - Prof. Paulemir Campos 17
Prolog: Elementos Básicos • Instruções Relativas a Fatos mulher(ana). % Cláusulas de Horn sem-cabeça homem(manuel). pai(manuel, pedro). mae(ana, pedro). • Instruções Relativas a Regras pais(X, Y, Z) : - pai(X, Z), % Cláusulas de Horn com cabeça mae(Y, Z). 5/24/2021 DEInfo - Prof. Paulemir Campos 18
Prolog: Elementos Básicos • Instruções Relativas a Metas ou Gol (Consultas) – Usando constante mulher(ana). % Resposta do sistema: yes ou no – Usando variável pais(manuel, ana, Filho). % Quem é(são) filho(s) de Manuel e Ana? pais(Pai, Mae, pedro). % Qual é o pai e a mãe de Pedro? 5/24/2021 DEInfo - Prof. Paulemir Campos 19
Prolog: Elementos Básicos • Base de Conhecimento do Prolog – Fatos e Regras – Busca são feitas do primeiro para o último • Processo de Inferência – Encadeamento Progressivo • Dos fatos e/ou regras => meta – Encadeamento Retrógrado • Da meta => fatos e/ou regras – O Prolog usa Encadeamento Retrógrado • Projetistas acreditavam ser mais adequado 5/24/2021 DEInfo - Prof. Paulemir Campos 20
Prolog: Elementos Básicos • Processo de Inferência – Busca Primeiramente pela Profundidade • Localiza todas as proposições de uma submeta antes de trabalhar nas outras (depth-first) – Busca Primeiramente pela Largura • Trabalha todas as submetas de uma determinada meta de maneira paralela (breadth-first) – O Prolog usa Busca por Profundidade • Projetistas procuraram poupar memória da máquina 5/24/2021 DEInfo - Prof. Paulemir Campos 21
Prolog: Elementos Básicos • Processo de Inferência – Mecanismo de Backtracing • Estrutura nativa do Prolog que permite retrocesso na meta para reconsideração de uma submeta provada anteriormente Ex. : homem(X), pais(X, pedro). % Qual o homem que é o pai de Pedro? • Pode exigir muito tempo e memória – Solução: Limitar este mecanismo (será visto mais adiante) 5/24/2021 DEInfo - Prof. Paulemir Campos 22
Prolog: Elementos Básicos • Aritmética Simples – Suporta variáveis de números inteiros e seus respectivos cálculos – Originalmente seus operadores eram functores Ex. : +(7, X). % Soma de 7 com a variável X. – Atualmente pode ser utilizado o operador ‘is’ ou o símbolo semelhante ao de atribuição ‘=’ Ex. : A is B / 17 + C. % ou A = B / 17 + C. A is A + 1. (ILEGAL!) 5/24/2021 DEInfo - Prof. Paulemir Campos 23
Prolog: Elementos Básicos • Estruturas de Lista – Tipo de estrutura de dados similar a registros variantes das linguagens imperativas – Semelhante às usadas pelo LISP – Sintaxe de Declaração identificador = tipo_da_lista* Ex. : minha_lista = symbol* % um lista de nomes – Elementos separados por vírgulas e a lista inteira é delimitada por colchetes Ex. : minha_lista([maca, ameixa, uvas, morango]). 5/24/2021 DEInfo - Prof. Paulemir Campos 24
Prolog: Elementos Básicos • Estruturas de Lista – Lista vazia: [] – Não há funções explícitas para construir e manipular as listas – Usa-se uma notação especial • [ HEAD | TAIL ] HEAD - É a cabeça da lista (CAR em LISP) TAIL - É a cauda da lista (CDR em LISP) • Similar a notação usada na Haskell 5/24/2021 DEInfo - Prof. Paulemir Campos 25
Prolog: Elementos Básicos • Estruturas de Lista – Assim, note que as instruções abaixo são equivalentes minha_lista([ [maca, ameixa, uvas, morango] | [] ]). minha_lista([ [maca, ameixa, uvas] | [morango] ]). minha_lista([ [maca, ameixa] | [uvas, morango] ]). minha_lista([ [maca] | [ameixa, uvas, morango] ]). 5/24/2021 DEInfo - Prof. Paulemir Campos 26
Prolog: Elementos Básicos • Estruturas de Lista – Uma definição de ‘append’ append([], Lista). % fim da recursão no LISP append([Cabeca | Lista 1], Lista 2, [Cabeca | Lista 3]) : append(Lista 1, Lista 2, Lista 3). % recursão no LISP – Em LISP teríamos ( CONS (CAR PRIMEIRO) (APPEND (CDR PRIMEIRO) SEGUNDO) ) – Tanto em Prolog quanto no LISP as lista só são construídas quando atingem a condição de parada 5/24/2021 DEInfo - Prof. Paulemir Campos 27
Prolog: Elementos Básicos • Estruturas de Lista – Instruções para verificar se um símbolo está numa lista membro(Elemento, [Elemento | _ ]). membro(Elemento, [ _ | Lista]) : membro(Elemento, Lista). % ‘_’ indica variável livre ou anônima 5/24/2021 DEInfo - Prof. Paulemir Campos 28
Deficiências do Prolog • Controle de Ordem de Resolução – Dependendo do problema, a intervenção do programador é muito importante para o programa ficar mais eficiente devido ao modo de inferência – A ordem como as cláusulas são escritas podem levar a laços infinitos Ex: f(X, Y) : - f(Z, Y), g(X, Z). /* Semelhante ao problema que um analisador descendente recursivo tem com regras gramaticais recursivas à esquerda */ 5/24/2021 DEInfo - Prof. Paulemir Campos 29
Deficiências do Prolog • Controle de Ordem de Resolução – Uso do comando cut, especificado por ‘!’ para limitar o backtracking, em prol da eficiência Ex 1. : a, b, !, c, d. /* Se a e b forem ‘true’ e c falhar, então a meta inteira falhará */ Ex 2. : membro(Elemento, [Elemento | _ ] ) : - !. membro(Elemento, [ _ | Lista]) : membro(Elemento, Lista). % ‘_’ indica variável livre ou anônima 5/24/2021 DEInfo - Prof. Paulemir Campos 30
Deficiências do Prolog • Pressuposição de Mundo Fechado – O Prolog é na verdade um sistema true / fail e não um sistema true / false • Pois, quando não consegue provar que uma meta é verdadeira ele pressupõe que a meta deve ser falsa. • O Problema da Negação – As cláusulas de Horn evitam conclusões negativas B A 1 A 2 . . . Am 5/24/2021 DEInfo - Prof. Paulemir Campos 31
Deficiências do Prolog • Limitações Intrínsecas – Ineficiente para resolução de problemas de características iterativas ou procedimentais – Cairia no problema de ter que especificar os detalhes de como resolver o problema (linguagens imperativas ou funcionais) e não simplesmente especificar a forma da resposta do problema (linguagens declarativas). 5/24/2021 DEInfo - Prof. Paulemir Campos 32
Sintaxe dos Programas Prolog • Principais Seções (Visual Prolog 5. 2) – Opções de compilação (No início do programa) – Constantes (constants) – Fatos (facts) – Domínios (domains) – Predicados (predicates) – Cláusulas (clauses) – Meta ou Consulta ou Gol (goal) • Neste caso, pode haver nenhuma ou apenas uma seção Meta. As demais podem ocorrem nenhuma ou mais vezes. 5/24/2021 DEInfo - Prof. Paulemir Campos 33
Sintaxe dos Programas Prolog • Estrutura de Programa Recomendada domains % declaração dos domínios meu. Inteiro = integer predicates % declaração dos predicados dobro(meu. Inteiro, real) clauses % declaração das claúsulas dobro(Num. Int, Num. Real) : - Num. Real = 2 * Num. Int. goal % declaração das metas ou consultas write(“Digite um numero inteiro: ”), readint(N), nl, dobro(N, N 2), write(“O seu dobro é: ”, N 2). 5/24/2021 DEInfo - Prof. Paulemir Campos 34
Sintaxe dos Programas Prolog • Principais Arquivos de Projeto – Aplicação Textmode ou Easywin • Arquivo de projeto (prj) • Arquivo fonte principal (pro) – Aplicações VPI (Visual Prolog Interface) • • 5/24/2021 Arquivo de projeto (vpr) Arquivo fonte principal (pro) Arquivo de predicados globais e diretivas (pre) Arquivo de constantes, include, domínios globais (inc) DEInfo - Prof. Paulemir Campos 35
Sintaxe dos Programas Prolog • Palavras Reservadas – and, clauses, constants, database, domains, elsedef, enddef, global, goal, ifdef, ifndef, include, or, predicates. • Principais Predicados Predefinidos – assert, consult, fail, findall, format, free, not, readint, retractall, save, writef. 5/24/2021 DEInfo - Prof. Paulemir Campos 36
Algumas Aplicações • Sistemas de Gerenciamento de Banco de Dados Relacionais – Principal vantagem: Capacidade Dedutiva • Sistemas Especialistas • Processamento de Linguagem Natural • Educação – Em particular crianças até 07 anos de idade – É mais fácil ensina-lás do que um programador experiente em linguagem imperativa 5/24/2021 DEInfo - Prof. Paulemir Campos 37
Algumas Aplicações • Demonstração prática das seguintes aplicações: – Problema da Torre de Hanói – Problema das Rainhas – Brecades (um sistema especialista simbólico) – Uso do Delphi 5. 0 com Visual Prolog 5. 2 5/24/2021 DEInfo - Prof. Paulemir Campos 38
Conclusão • Programas em Prolog são conjuntos de instruções basicamente escritos em forma de Cláusulas de Horn • Paradigma Declarativo • Baseado na Lógica Formal – Menos erros e menos manutenção • Programas Concisos – Tempo de desenvolvimento reduzido – Boa ferramenta para prototipação • Forma alternativa para solução de problemas 5/24/2021 DEInfo - Prof. Paulemir Campos 39
Bibliografia • Araribóia, G. Inteligência Artificial. Rio de Janeiro: LTC Editora, 1988. • Sebesta, R. W. Conceitos de Linguagens de Programação. Bookman, 1999. • Prolog Development Center. Language Tutorial – Visual Prolog Version 5. x. Copenhagen: PDC, 1997. • Site: www. visual-prolog. com 5/24/2021 DEInfo - Prof. Paulemir Campos 40