Paradigmas de Linguagens de Programação Faculdade Nova Roma Cursos de Ciências da Computação (6 Período) Prof. Adriano Avelar - Site: www.adrianoavelar.com Email: edson.avelar@yahoo.com.br
PROGRAMAÇÃO LÓGICA
Paradigma Lógico Modelo Declarativo Declara os objetivos da computação, ao invés do algoritmo detalhado por meio dos quais o objetivo deve ser alcançado. Os objetivos são expressos como coleções de regras. (Programação baseada em regras) Não-deterministicos e baseados backtracking Várias soluções para um problema. Soluções baseados em refinamentos de busca.
Aplicações Inteligência Artificial Representação do conhecimento Sistemas especialistas Provadores de teoremas Aprendizagem de máquina Processamento de linguagem natural Sistemas multi-agentes Robótica Sistemas Distribuídos e Internet Comércio eletrónico Recuperação, filtragem e extração de informação Engenharia de Software Prototipagem rápida de software complexos Especificações formais executáveis Programação por resolução de restrições Programação multi-paradigma de alto-nível Banco de Dados BD dedutivos e DOO Mineração de Dados e Descoberta de Conhecimento Integração de Dados e Interoperabilidade
Paradigma Lógico A PL Implementa os conceitos da lógica matemática Lógica Matemática Lógica Proposicional Lógica de Predicados
Revisando... LÓGICA PROPOSICIONAL
Lógica Proposicional Em lógica matemática, o principal objetivo será a investigação da validade de ARGUMENTOS: conjunto de enunciados dos quais um é a CONCLUSÃO e os demais PREMISSAS ou PROPOSIÇÔES Argumento Dedutivo: é valido quando suas premissas, se verdadeiras, a conclusão também é verdadeira. Premissa 1: Todo homem é mortal Premissa 2 : João é homem Conclusão: João é mortal
Lógica Proposicional Argumento Indutivo: a verdade das premissas não basta para assegurar a verdade da conclusão Premissa 1: Maria é casada com João Premissa 2: Pedro é filho de Maria Premissa 3: Roberto também é filho de Maria Conclusão: Pedro e Roberto são filhos de João
Lógica Proposicional Proposição (premissa) : sentenças declarativas afirmativas da qual tenha sentido afirmar que seja V ou F (não ambos). Ex. A lua é quadrada A neve é branca O universo é infinito?
Cálculo Proposicional A proposição é o elemento básico a partir do qual os argumentos são construídos, sendo também o principal objeto de estudo na lógica proposicional. Usar a lógica matemática para resolver problemas do mundo real Também chamado de: Cálculo Sentencial ou Cálculo das sentenças
Simbologia Variáveis proposicionais: letras latinas minúsculas p,q,r,s... Para indicar as proposições (fórmulas atômicas) Exemplo: A lua é quadrada: p A neve é branca: q
Conectivos Lógicos As fórmulas atômicas podem ser combinadas entre si. Usa-se os conectivos lógicos para representar tais combinações. : e : ou : se... então : se e somente se ~ ou : não Exemplos: A lua é quadrada: p A neve é branca: q A lua é quadrada e a neve é branca: p q
Símbolos Auxiliares (): Parênteses que servem para denotar o alcance dos conectivos Exemplo: Se a lua é quadrada e a neve é branca então a lua não é quadrada: (p q) ~ p Os parênteses são usados segundo a ordem dos conectivos: ~,,,, Ex.: p q ~r p ~q (((p q ) (~r)) (p (~q)))
Tabela Verdade Mapeia todos os valores lógicos de uma relação. Qual a probabilidade de eu ir jogar bola hoje? p: não está chovendo q: a bola não está murcha p q p q V V V V F F F V F F F F
LÓGICA DE PREDICADOS
Lógica de predicados Há vários argumentos que não podem ser adequadamente formalizados e validados em lógica proposicional Exemplo Ricardo foi para a festa Algumas pessoas da festa ficaram bêbadas Logo, Ricardo ficou bêbado intuitivamente, podemos ver que este argumento é válido sua formalização em lógica proposicional resulta em {p, q} r porém, não há como mostrar que {p, q} r é válido a validade deste argumento depende do significado da palavra Algumas para tratar este tipo de argumento precisamos da lógica de predicados
Lógica de predicados A linguagem formal da lógica de predicados é mais expressiva que aquela da lógica proposicional. Esta maior expressividade decorre do fato de as fórmulas da lógica de predicados serem compostas pelos seguintes elementos básicos: objetos predicados conectivos variáveis quantificadores:
Objetos Objeto É qualquer coisa a respeito da qual precisamos dizer algo Na lógica de predicados, a noção de objeto é usada num sentido bastante amplo. Objetos podem ser: concretos: a bíblia, a lua,... abstratos: o conjunto vazio, a paz,... fictícios: unicórnio, Saci-Pererê,... atômicos ou compostos: um teclado é composto de teclas Nomes de objetos devem iniciar com letra minúscula!
Predicados Predicados Denota uma relação entre objetos num determinado contexto sobre(a,b): o bloco A está sobre o bloco B cor(b,azul): o bloco B tem cor azul maior(c,a): o bloco C é maior que o bloco A distante(c,a): o bloco C está distante de A??? Nomes de predicados também devem iniciar com letra minúscula! M
Conectivos Conectivos Forma proposições compostas a partir de proposições atômicas sobre(a,b) sobre(b,m) : A está sobre B e B está sobre a mesa cor(b,vermelho): a cor de B não é vermelho maior(b,c) maior(c,b): o bloco B é maior que C ou C é maior que B cor(a,verde) cor(c,vermelho) : A não é verde e C não é vermelho??? M
Variáveis Variáveis Permite estabelecer fatos sobre objetos, sem nomeá-los explicitamente bloco(x): X é um bloco mesa(y): Y é uma mesa sobre(x,y): X está sobre Y Note que proposições atômicas são sentenças que podem ter valor verdadeiro ou falso; mas não podemos dizer se bloco(x) é verdadeiro ou falso até que a variável X tenha sido substituída, instanciada ou quantificada. Nomes de variáveis devem iniciar com letra maiúscula!
Quantificadores Quantificadores Permite estabelecer fatos sobre objetos, sem enumerá-los explicitamente Há dois quantificadores: Universal: X[bloco(X)] estabelece que todo objeto X é um bloco Lê-se: Para todo X, X é um bloco Existencial: Y[mesa(Y)] estabelece que algum objeto Y é uma mesa Lê-se: Existe um Y, tal-que Y é uma mesa Estes quantificadores podem ser combinados numa mesma fórmula Todo bloco está sobre alguma coisa que é um bloco ou uma mesa X[bloco(X) Y[sobre(X,Y) (bloco(y) mesa(y))]]
Representação do conhecimento Para facilitar a formalização de sentenças na lógica de predicados, destacamos quatro tipos de sentenças de especial interesse, denominadas enunciados categóricos: Universal afirmativo: Todos os homens são mortais Universal negativo: Nenhum homem é extraterrestre. Particular afirmativo: Alguns homens são cultos. Particular negativo: Alguns homens não são cultos.
Representação do conhecimento Universal afirmativo É da forma X[p(X) q(x)]] Estabelece que p é um subconjunto de q
Representação do conhecimento Universal negativo É da forma X[p(X) q(x)]] estabelece que os conjuntos p e q são disjuntos
Representação do conhecimento Particular afirmativo É da forma X[p(X) q(x)] Estabelece que os conjuntos p e q têm intersecção não-vazia
Representação do conhecimento Particular negativo É da forma X[p(X) q(x)] estabelece que existem elementos em p que não estão em q
Exercício 1. Formalize as sentenças a seguir usando lógica de predicados Toda cobra é venenosa. Nenhuma bruxa é bela. Algumas plantas são carnívoras. Há aves que não voam. Tudo que sobe, desce. Existem políticos que não são honestos. Não existe bêbado feliz. Pedras preciosas são caras. Ninguém gosta de impostos. Vegetarianos não gostam de açougueiros. Toda mãe ama seus filhos.
Representação do conhecimento Há sentenças que podem ser escritas em mais de uma forma. Exemplo: Sentenças Nem tudo que brilha é ouro. Existe algo que brilha e não é ouro. Fórmulas X[b(X) o(x)] X[b(X) o(x)] Equivalência X[b(X) o(x)] X[ b(x) o(x)] X [ b(x) o(x)] X [ b(x) o(x)]
Exercício 2. Formalize e Verifique se os pares de sentenças são equivalentes Nem toda estrada é perigosa. Algumas estradas não são perigosas. Nem todo bêbado é fumante. Alguns bêbados são fumantes. Nem todo ator americano é famoso. Alguns atores americanos não são famosos.
Cláusula de HORN A lógica proposicional e predicativa fornece os fundamentos formais para a programação lógica. A cláusula de horn é uma variante particular da lógica predicativa que está por trás da sintaxe do Prolog. Clausula horn possui cabeça e corpo. h p1,p2,p3,..., pn molhado( X ) descoberto( X ), chovendo( C )
PROgraming in LOGic PROLOG
Introdução Linguagem de programação declarativa para processamento simbólico que implementa o paradigma lógico. Essencialmente, a programação em Prolog consiste em: Identificar os objetos em um contexto de discurso Identificar relações (ou predicados) de interesse entre estes objetos Declarar fatos e regras a respeito destas relações Consultar o sistema acerca das relações declaradas
Elementos básicos Os elementos básicos da linguagem Prolog são herdados da lógica de predicados. Esses elementos são: fatos regras consultas.
Fatos Fatos servem para estabelecer um relacionamento existente entre objetos de um determinado contexto. Por exemplo, num contexto bíblico, átomos predicado pai(adão,cain). é um fato que estabelece que Adão é pai de Cain, ou seja, que a relação pai existe entre os objetos denominados adão e cain.
Programa 1.1 Programa 1.1: Uma árvore genealógica. pai(adão,cain). pai(adão,abel). pai(adão,seth). pai(seth,enos). KB1 - Base de Dados (FATOS e REGRAS)
Consultas Para recuperar informações de um programa lógico, usamos consultas. Uma consulta pergunta se uma determinado relacionamento existe entre objetos. Por exemplo, a consulta?- pai(adão,cain). pergunta se a relação pai vale para os objetos adão e cain ou, em outras palavras, pergunta se Adão é pai de Cain.
Consultas Sintaticamente, fatos e consultas são muito similares. A diferença é que fatos são agrupados no arquivo que constitui o programa, enquanto consultas são sentenças digitadas no prompt (?-) do interpretador Prolog.
Consultas Consultas à KB1 Adão é pai de enos?- pai(adão,enos). Quem é pai de Cain??- pai(x,cain). Quem é pai de Abel e Seth? pai(x,seth), pai(x,abel) Uma consulta com variáveis pode ter mais de uma resposta.?- pai(adão,x). Enter para satisfeito com a resposta. ou lógico ( ; ) para obter outra resposta.
Exemplo 2 Programa 1.2: Gosto. gosta(pedro, maria). gosta(maria, pedro). %Pedro gosta de Maria %Maria gosta de Pedro KB2 - Base de Dados (FATOS e REGRAS)
Consulta Será que maria gosta de pedro e pedro gosta de maria??- gosta(pedro, maria), gosta(maria, pedro). Há algo de que ambos Maria e Pedro gostam??- gosta(maria, X), gosta(pedro, X).
Regras Uma regra é uma armação geral sobre objetos e seus relacionamentos. Por exemplo, suponha que queremos representar a seguinte dependência entre fatos: Pedro gosta de todo mundo que gosta de vinho. o que pode ser reescrito como: Pedro gosta de X se X gosta de vinho.
Regras Em Prolog, regras consistem de uma cabeça e um corpo. A cabeça e o corpo são conectados pelo símbolo :- formado por dois pontos e hífen. O :- procuncia-se se. A dependência acima seria escrito como: gosta(pedro, X) :- gosta(x, vinho).
Regras A cabeça de uma regra descreve o que está sendo definido. O corpo, no caso gosta(x, vinho), é uma conjunção de metas que devem ser satisfeitas para que a cabeça seja considerada verdadeira. Por exemplo, podemos tornar Pedro mais exigente sobre o que ele gosta adicionando mais metas ao corpo da regra: gosta(pedro, X) :- gosta(x, vinho), gosta(x, chocolate). Supondo que Pedro gosta de mulheres que gostam de vinho. gosta(pedro, X) :- mulher(x), gosta(x, vinho).
West é criminoso? Requisitos 1. É crime para um americano vender armas para uma nação hostil 2. O Brasil possui mísseis 3. O Brasil adquiriu todos seus mísseis do West. 4. West é um americano. 5. Brasil é uma nação 6. Brasil é inimigo dos EUA. 7. EUA é uma nação Em lógica da 1a ordem 1. P,W,N [ americano(p) arma(w) nação(n) hostil(n) vendeu(p,n,w) criminoso(p) ] 2. W [ possui(brasil,w) míssil(w) ] 3. W [possui(brasil,w) míssil(w) vendeu(west,brasil,w) ] {*} W [ míssil (W) arma(w) ] {*} N [ inimigo(n,eua) hostil(n) ] 4. americano(west) 5. nação(brasil) 6. inimigo(brasil,eua) 7. nação(eua)
West é criminoso? Em lógica da 1a ordem 1. P,W,N [ americano(p) arma(w) nação(n) hostil(n) vendeu(p,n,w) criminoso(p) ] 2. W [ possui(brasil,w) míssil(w) ] 3. W [possui(brasil,w) míssil(w) vendeu(west,brasil,w) ] {*} W [ míssil (W) arma(w) ] {*} X [ inimigo(n,eua) hostil(n) ] 4. americano(west) 5. nação(brasil) 6. inimigo(brasil,eua) 7. nação(eua) Em Lógica de Horn: americano(p) arma(w) nação(n) hostil(n) vendeu(p,n,w) criminoso(p) possui(brasil,m1) míssil(m1) possui(brasil,w) míssil(w) vendeu(west,brasil,w) míssil(w) arma(w) inimigo(n,eua) hostil(n) americano(west) nação(brasil) inimigo(brasil, eua) nação(eua)
West é criminoso? Em Lógica de Horn: americano(p) arma(w) nação(n) hostil(n) vendeu(p,n,w) criminoso(p) possui(brasil,m1) míssil(m1) possui(brasil,w) míssil(w) vendeu(west,brasil,w) míssil(w) arma(w) inimigo(n,eua) hostil(n) americano(west) nação(brasil) inimigo(brasil, eua) nação(eua) Em Prolog: criminoso(p) :- americano(p), arma(w), nação(n), hostil(n), vendeu(p,n,w). possui(brasil,m1). míssil(m1). vendeu(west,brasil,w) :- possui(brasil,w), míssil(w). arma(w) :- míssil(w). hostil(n) :- inimigo(n,eua). americano(west). nação(brasil). inimigo(brasil,eua). nação(eua).
West é criminoso? --- Busca Em Prolog: criminoso(p) :- americano(p), arma(w), nação(n), hostil(n), vendeu(p,n,w). possui(brasil,m1). míssil(m1). vendeu(west,brasil,w) :- possui(brasil,w), míssil(w). arma(w) :- míssil(w). hostil(n) :- inimigo(n,eua). americano(west). nação(brasil). inimigo(brasil,eua). nação(eua). Busca: criminoso(west)? true. american(west)? true. arma(w)? W = m1. míssil(w)? W = m1. nação(n)? N = brasil hostil(brasil)? true. inimigo(brasil,eua)? true. vendeu(west,brasil,m1)? true. possui(brasil,m1)? míssil(m1)? true. true.
Exercício 3. Dados os requisitos abaixo, construa as declarações de primeira ordem, cláusulas de Horn e implemente um programa em prolog para responder a pergunta. A curiosidade matou o gato? Jack possui um cachorro. Todo dono de cachorro gosta muito de animais. Nenhum amante de animal mata um animal. Nem Jack ou a curiosidade mataram Tuna. Tuna é um gato.