2013 – Luiz Mauricio Nascimento Silva Graduando em Ciência da Computação UESC – Universidade Estadual de Santa Cruz Introdução a L.P lógica Programação lógica é um tipo de programação a qual utiliza uso de lógica matemática em sua essência. As linguagens de programação lógicas ou linguagens declarativas, são bem diferentes das outras tanto a sua semântica qual a sua sintaxe. Por exemplo na programação imperativa, nós descrevemos um procedimento para que assim sair um resultado a partir dele, na lógica, nós descrevemos o resultado para assim obte-lô. Introdução a L.P lógica Programar em uma LP lógica consiste em: Declarar fatos primitivos sobre um domínio; Definir regras que expressam relações entre os fatos de um domínio; Fazer perguntas sobre um domínio. O processo de dedução através do qual encontram-se respostas às perguntas é executado automaticamente pelo sistema exemplo 1.Galinhas botam ovos. 2.Mamíferos não botam ovos. 3.Vacas são mamíferos. 4.Vacas botão ovos? Não 5.Quem bota ovos? Galinhas Lógica Formal A lógica formal foi desenvolvida para fornecer um método para descrever proposições, e verificar quanto a sua validade. Uma proposição pode ser imaginada como uma declaração lógica que pode ou não ser verdadeira . A lógica simbólica pode ser usada para as três necessidades básicas da lógica formal: 1 - expressar proposições. 2 - expressar as relações entre elas. 3 - descrever como novas proposições podem ser inferidas de outras que se presumem verdadeiras. Operadores lógicos Variáveis Variáveis podem aparecer em proposições, mas somente quando introduzidas por símbolos especiais, os quantificadores; Universal: ∀ X P Sendo X uma variável e P uma proposição; Para todo X, P e verdadeiro; Existencial: ∃ X P Sendo X uma variável e P uma proposição; Existe um valor de X tal que P seja verdadeiro; Ponto (.), simplesmente separa a variável da proposição; Variáveis ∀ X . ( mulher( X ) → humano( X )) Significa que para qualquer valor de X, se X for uma mulher, X é humano; ∃ X . ( mãe( mary, X ) → homem( X )) Significa que existe um valor de X tal que mary e mãe de X e X e um homem (mary tem um filho); Cláusulas Existem 2 tipos de clausulas. Fatos e regras: Fatos: declaração de uma verdade incondicional. Ex: José gosta de Maria gosta(José, Maria) gosta(Maria, José) Nas expressões acima gostar é o predicado do fato, representando uma relação entre os argumentos Cláusulas Regra: condição que deve ser satisfeita para que um declaração seja considerada verdadeira. A declaração de regras (axiomas) em LPs lógicas segue um padrão conhecido como cláusulas de Horn: H←A1,A2,..., An , se todos os Ai são verdadeiros, então H é verdadeiro. cláusulas Na expressão acima, H é denominado a cabeça da cláusula e A1,A2,..., An é o seu corpo. Através de regras pode-se estabelecer relações entre fatos. Ex: pai(pedro, ana):- mãe(maria,ana), casada(maria, pedro). Pedro é pai de Ana, se Maria for mãe de Ana e Maria for casada com Pedro. Banco de Dados O conjunto de fatos e relações contidos em um programa lógico é denominado banco de dados, e representa o conhecimento sobre um ou mais domínios. O objetivo de um programa lógico é inferir e validar novos fatos ou relações a partir do banco de dados. Historia do prolog O nome Prolog para a linguagem concreta foi escolhido por Philippe Rousseal como uma abreviação de “Programmation Logique”. Foi criada em meados de 1972 por Alain Colmerauer e Philippe Rousseal, baseados no conceito de Robert Kowalski da interpretação procedimental das cláusulas de Horn. Ainda hoje é a mais popular e principal LP lógica. Prolog Programar em Prolog consiste em: Declarar alguns fatos sobre objetos e suas relações. Definir algumas regras sobre objetos e suas relações. Fazer consultas sobre objetos e suas relações Prolog Fatos em Prolog são representados através de átomos ou estruturas. Átomos são strings que começam sempre com letra minúscula: Ex: caro. diamante. maria. Estruturas em Prolog Estruturas são átomos seguidos de uma lista de argumentos entre parênteses: pred (arg1, arg2, ..., argN). onde: arg1, arg2, ...,argN – são os argumentos N - número de argumentos (.) - final sintático de qualquer cláusula Prolog Estruturas em Prolog Os argumentos de uma estrutura podem ser átomos, estruturas, variáveis e números. Exemplos: limpo(sapato). casado(X, Y). arvore_bin(valor1, arvore_bin(valor2, valor3)). valor(30). Variáveis Em LPs imperativas variáveis são instanciadas através de operações explícitas de atribuição. Em LPs lógicas variáveis geralmente são instanciadas implicitamente pelo sistema durante o processo de resolução. São usadas basicamente para extrair informações do banco de dados, e para expressar relações entre fatos. Variáveis em Prolog são representadas por strings que começam com uma letra maiúscula. Variáveis EX: pai(joao,joaquim). pai(joaquim,manuel). avo(X,Y):- pai(X,Z),pai(Z,Y). ?-avo(joao,Z). Z=manuel Unificação Para tentar provar um fato Prolog precisa estabelecer a equivalência entre fatos. Dois fatos equivalentes são ditos unificáveis. Dois átomos são unificáveis apenas se são idênticos. Duas estruturas são unificáveis se o seu predicado é idêntico, e se seus argumentos são unificáveis . Unificação Uma variável é unificável a qualquer coisa. O símbolo = em prolog representa unificação Ex: fruta(manga). ?-fruta(X). X = manga; X foi unificada com “manga” Regras em prolog Uma regra é a descrição de um predicado através de uma implicação Ex: “um animal é presa se é comido por outro animal”. come(Y,X) ^ animal(X) -> presa(X) em Prolog: presa(X) :- come(Y,X), animal(X) Conjunções Conjunções permitem a especificação de questões com múltiplas condições que devem ser satisfeitas simultaneamente. Conjunções são representadas por uma vírgula ( , ). Exemplo: comida(carne). gostoso(carne). ?- localizacao(X,cozinha):- comida(X), gostoso(X). Existe alguma comida gostosa na cozinha? X= carne. Disjunção Disjunções permitem a especificação de questões com múltiplas condições na qual ao menos uma delas deve ser satisfeita. Disjunções são representadas por um ponto-e-vírgula ( ; ) Ex: inverno(X):- nevando(X); gelado(X). É inverno se está nevando ou está gelado.