Vous êtes sur la page 1sur 10

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA DO MARANHO CAMPUS SO LUS MONTE CASTELO DEPARTAMENTO ACADMICO DE INFORMTICA BACHARELADO EM SISTEMA

A DE INFORMAO DISCIPLINA: MATEMTICA DISCRETA PROFESSOR: RAIMUNDO OSVALDO VIEIRA

Atividade Avaliativa
Etapa: 01 Contedo: Programao Lgica

Fundamentao Terica
A Lgica de Predicados possui diversas aplicaes na Cincia da Computao, merecendo destaque, neste momento, a Programao Lgica.

1. Introduo
(Extrado de ABE, Jair Minoro et al. Introduo Lgica para a Cincia da Computao. So Paulo: Arte e Cincia, 2001) (Extrado de GERSTING, Judith L. Fundamentos Matemticos para a Cincia da Computao. Rio de Janeiro: LTC, 2003)

A lgica, desde Aristteles, sempre esteve ligada ao pensamento cientfico. Ela constitui a base para deduzir consequncias a partir de certas premissas; para estudar a validade ou a falsidade de sentenas dada a validade ou a falsidade de outras sentenas; para verificar a validade de argumentaes; e para estabelecer a consistncia de um conjunto de sentenas. J os computadores surgiram na histria h muito pouco tempo, ao compar-los com a lgica. Quase todos os computadores de hoje em dia so baseados no modelo (ou mquina) de von Neumann que surgiu na dcada de 40. Esta mquina uma concretizao da mquina (ideal) de Alain Turing. A mquina proposta por von Neumann constituda por um grande conjunto de clulas de memria e uma unidade de processamento com algumas clulas de memria locais chamadas registradores.

Figura 1: Esquema Bsico da Mquina de von Neumann

A unidade de processamento pode copiar dados armazenados nas clulas de memria para os registradores, realizar operaes com esses dados nos registradores e transferir os resultados de volta para as clulas de memria. Um programa para a mquina de von Neumann dever fornecer instrues que realizem as operaes descritas acima. O desenvolvimento de computadores baseados na mquina de Von Neumann encontrou muitas limitaes tecnolgicas e de engenharia que foram sendo resolvidas atravs dos anos. Porm, medida que os problemas relativos construo de computadores eram resolvidos, os

problemas relativos a como utiliz-los apareciam. Em outras palavras, os computadores eram capazes de realizar as instrues fornecidas pelo homem, porm o homem ainda no era plenamente apto a programar os computadores para resolver problemas prticos que surgiam. A nica linguagem disponvel na poca era a linguagem especfica de cada mquina atravs da qual o programador fornecia instrues ao estilo von Neumann. A construo de programas escritos em linguagem de mquina era complexa e tomava muito tempo. A partir da, linguagens mais fceis para a compreenso humana comearam a aparecer: Fortran, Algol e Pascal mas todas elas apresentavam caractersticas marcantes da mquina de von Neumann subjacente. Notamos que apesar dessas linguagens serem mais fceis para a compreenso do homem, elas ainda eram orientadas mquina, isto , o homem construa programas nessas linguagens pensando em termos de operaes do computador. As linguagens de programao com as quais voc provavelmente j tem familiaridade, tal como Pascal, so conhecidas como linguagens procedurais. A maior parte dos programas escritos em linguagens procedurais destinam-se a resolver o problema mo. O programador, portanto, diz ao computador como resolver o problema.

2. A proposta da Programao Lgica


(Extrado de ABE, Jair Minoro et al. Introduo Lgica para a Cincia da Computao. So Paulo: Arte e Cincia, 2001.) (Extrado de BARBOSA, Alexandre de Andrade et al. Introduo Programao em Lgica. Apostila. UFCG, 2006)

Seria muito interessante se, ao invs de termos linguagens orientadas mquina, tivssemos linguagens orientadas ao homem, ou seja, linguagens que no fossem meras abstraes do modelo de von Neumann mas que fossem derivadas de um modelo abstrato que no tivesse relao direta ou dependncia com nenhuma mquina. Deste modo, algumas linguagens de programao, ao invs de procedurais, so linguagens declarativas ou linguagens descritivas. Uma linguagem declarativa baseia-se na lgica de predicados. Um programa escrito em uma linguagem declarativa contm apenas proposies que so declaradas como hipteses. A execuo de um programa declarativo permite ao usurio colocar perguntas, procurando informaes sobre concluses possveis dedutveis das hipteses.

O PROGRAMA CONTM APENAS AS HIPTESES E NO ALGUMA INSTRUO EXPLCITA SOBRE QUE PASSOS FAZER E EM QUE ORDEM.
A partir do incio da dcada de 70, trabalhos de Robert Kowalski propunham a utilizao da lgica diretamente como uma linguagem de programao. A essa nova rea da cincia que nascia, deu-se o nome de programao em lgica. Os programas construdos utilizando a lgica diretamente como linguagem de programao receberam o nome de programas lgicos. Em termos gerais, a proposta da programao em lgica a seguinte: um programa lgico constitudo por um conjunto de axiomas e por um conjunto de regras de inferncia. De posse desse programa podemos fazer perguntas a ele. Essas perguntas na verdade so frmulas as quais desejamos saber se podem ser deduzidas (ou no) a partir dos axiomas e regras de inferncia contidos no programa lgico.

Figura 2: Funcionamento de um Programa Lgico

Em outras palavras, as perguntas nada mais so do que frmulas as quais desejamos saber se so teoremas na teoria formal fornecida pelo programa lgico. Essa teoria formal seria constituda pelos axiomas e regras de inferncia do programa lgico. Dizemos que as perguntas, que na verdade so frmulas, as quais submetemos ao programa lgico constituem a entrada do programa lgico. Dada uma entrada, dizemos que o processo de tentarmos demonstrar essa entrada a partir dos axiomas e regras de inferncia do programa lgico a execuo do programa lgico.

3. Clusulas de Horn
(Extrado de ABE, Jair Minoro et al. Introduo Lgica para a Cincia da Computao. So Paulo: Arte e Cincia, 2001.)

A linguagem que utilizamos para trabalhar com a programao em lgica um subconjunto da linguagem do clculo de predicados e recebe o nome de linguagem das clusulas de Horn. Portanto, trabalharemos com o clculo de predicados restrito linguagem das clusulas de Horn. 3.1. Consideraes Preliminares Dizemos que uma frmula no clculo de predicados atmica quando ela do tipo

p(t1, t2, ... , tn)


na qual:

p um predicado; t1, t2, ... , tn so termos.


Como exemplo de frmulas atmicas, podemos escrever: p(x), q(x, y), me(x, y). Dizemos que as frmulas atmicas so literais positivas. A negao de uma frmula atmica uma literal negativa. Em programao lgica, podemos escrever uma implicao do tipo p q de maneira inversa, ou seja, q p. O motivo disso simplesmente destacar a concluso da implicao. Ainda com respeito s implicaes, diremos que q a cabea e p o corpo da implicao. Veja o seguinte exemplo: xyz((namorados(x, y) namorados(y, z)) triangulo(x, y, z)) Escrito de maneira inversa: xyz(triangulo(x, y, z) (namorados(x, y) namorados(y, z))) Cabea: triangulo(x, y, z) Corpo: namorados(x, y) namorados(y, z) Os predicados acima se referem a pessoas e so definidos da seguinte maneira: namorados(x, y) = x e y namoram triangulo(x, y, z) = x, y e z formam um tringulo amoroso Utilizaremos, basicamente, duas regras de inferncia que vimos no clculo de predicados. So elas a regra de modus ponens e a regra de particularizao. Alm disso, em alguns

momentos, utilizaremos a contrapositiva de uma implicao conforme vista no clculo proposicional e de predicados. 3.2. Clusula Uma clusula uma frmula (do clculo de predicados) do seguinte tipo: x1x2,..., xk(L1 L2 ... Lm) (1)

na qual Li uma literal positiva ou negativa e x1 , ..., xk so as variveis que ocorrem em L1 L2 ... Lm. Por exemplo: xz (maior(x,z) menor(x,z) igual(x,z) ) . Porm, para escrevermos Diremos que a clusula, tal como escrita em (1), est no os programas lgicos, conveniente escrever (1), na notao clausal. Escrever uma clusula na notao clausal reescrev-la utilizando-se o conectivo de implicao (). Para entendermos melhor, vamos reescrever a clusula (1) na notao clausal, explicitando cada passo: Passo 1: Separao das literais positivas e negativas, fazendo uso da lei associativa e da comutativa. Deve-se escrever primeiro as literais negativas e, em seguida, as positivas. x1 ,..., xk((B1 ... Bs) (A1 ... Ar)) Passo 2: Aplicao das Leis de De Morgan. x1 ,..., xk((B1 ... Bs) (A1 ... Ar)) Passo 3: Formato de implicao pela equivalncia implicao material. x1 ,..., xk((B1 ... Bs) (A1 ... Ar)) Passo 4: Notao Clausal, escrevendo de maneira inversa. x1 ,..., xk((A1 ... Ar) (B1 ... Bs)) Observaes 1) Todas as variveis que ocorrem nas literais componentes de (5) esto quantificadas universalmente. Ento, se no escrevermos x1 ,..., xk no tem problema pois j saberemos que todas as variveis que ocorrem em (5) j esto quantificadas universalmente. 2) O corpo de (5) composta de uma conjuno de literais: ento ao invs de escrevermos o conectivo poderemos escrever uma vrgula (,) e no haver perigo de confuso. 3) A cabea de (5) composta de uma disjuno de literais: ento ao invs de escrevermos o conectivo poderemos escrever uma vrgula (,) e no haver perigo de confuso. Com isso em mente, podemos escrever (5) da seguinte maneira: A1, ..., Ar B1, ..., Bs E dizemos que (6) est escrita na notao clausal. (6) (5) (4) (3) (2)

Dizemos que uma clusula tem corpo vazio se no possui literais negativas no formato original de disjuno. Dizemos que uma clusula tem cabea vazia se no possui literais positivas no formato original de disjuno. Exemplo: Escrever a clusula xyz(pai(y, z) irmo(y, z) tio(z, x)) em notao clausal. As literais j esto devidamente separadas. Deve-se, portanto, aplicar a lei de De Morgan: xyz((pai(y, z) irmo(y, z)) tio(z, x)) Escrevendo no formato de implicao, temos: xyz((pai(y, z) irmo(y, z)) tio(z, x)) Notao Clausal: tio(z, x) pai(y, z) , irmo(y, z) 3.3. Clusula de Horn

Uma clusula de Horn uma wff composta por predicados ou negaes de predicados (com variveis ou constantes como argumentos) unidos por disjunes, onde no mximo um predicado no negado. Exemplos: 1) A wff predicativa P(x, y) um exemplo de clusula de Horn porque contm um nico predicado no negado. 2) A wff P(x, y) A(x) Pr(x) um exemplo de clusula de Horn porque consiste em trs predicados unidos por disjunes onde apenas Pr(x) no est negado. Esta wff, no formato clausal, pode ser escrita como: (P(x, y) A(x)) Pr(x) (P(x, y) A(x)) Pr(x) Pr(x) P(x, y), A(x) Este tipo de clusula a chave da programao em linguagem PROLOG, como veremos a seguir.

4. A Linguagem PROLOG
(Extrado de ABE, Jair Minoro et al. Introduo Lgica para a Cincia da Computao. So Paulo: Arte e Cincia, 2001.) (Extrado de BARBOSA, Alexandre de Andrade et al. Introduo Programao em Lgica. Apostila. UFCG, 2006) (Extrado de GERSTING, Judith L. Fundamentos Matemticos para a Cincia da Computao. Rio de Janeiro: LTC, 2003)

A linguagem Prolog a representante mais famosa da Programao em Lgica. Prolog foi criada em 1972 por Colmerauer e Roussel, um programa Prolog no possui cdigo para manipular a memria ou realizar desvios condicionais. Pode-se afirmar, portanto, que a linguagem mais adequada para solucionar uma determinada categoria de problemas. Esta categoria diz respeito aos problemas onde necessrio representar algum tipo de conhecimento, por exemplo, em aplicaes que realizem computao simblica, na compreenso de linguagem natural ou em sistemas especialistas. Um programa Prolog constitui-se de uma coleo de fatos (base de dados) e regras (relaes lgicas), esses itens descrevem o domnio de um determinado problema. Esta descrio do problema avaliada por um interpretador, o qual utilizando um motor de inferncia realiza

dedues em busca de concluses vlidas para consultas realizadas pelos usurios. Assim, podese afirmar que a computao destes programas equivalente a prova de um teorema em lgica. Os fatos de Prolog permitem a definio de predicados por meio da declarao de quais itens pertencentes ao universo (ou domnio) satisfazem os predicados. Por exemplo, pode-se definir o predicado homem(x) e utiliz-lo para definir quais elementos do universo possuem tal predicado, no caso x homem. As regras Prolog so descries de predicados por meio de condicionais. Por exemplo, pode-se definir o predicado tio(x, y) :- pai(z, y), irmo(x, z), significando que x tio de y se z pai de y e x irmo de z. O usurio interage com o programa atravs de consultas (queries). As computaes em Prolog utilizam os conceitos de clusulas de Horn, resoluo e encadeamento para trs (backtracking), com estes possvel realizar a computao de maneira equivalente a uma deduo em Lgica de 1a ordem. Tanto fatos quanto regras so representados atravs de clusulas de Horn, ou seja, so frmulas que contm predicados ou negao de predicados conectados por disjunes, onde ao menos um predicado no uma negao. Quantificadores no so representados explicitamente, porm, a linguagem trata uma regra como se ela estivesse universalmente quantificada. Utilizando a regra de inferncia da particularizao universal repetidas vezes, possvel retirar os quantificadores e fazer com que uma varivel assuma qualquer valor do domnio de representao. A regra de inferncia usada pelo Prolog chamada resoluo. Duas clusulas de Horn em uma base de dados Prolog so resolvidas em uma nova clusula de Horn se uma delas contiver um predicado no-negado que corresponda a um predicado negado na outra clusula. A nova clusula elimina o termo de correspondncia e fica, ento, disponvel para uso em respostas s perguntas. Por exemplo A(a) A(a) B(b) resolvida para B(b). Isto mostra que Prolog considera A(a) (A(a) B(b)) B(b) Como um teorema, o que uma simples aplicao do modus ponens. Portanto, a regra de inferncia do Prolog inclui o modus ponens como um caso especial.

5. Usando o SWI-PROLOG
(Extrado de BARBOSA, Alexandre de Andrade et al. Introduo Programao em Lgica. Apostila. UFCG, 2006)

Aps realizar o download e a instalao do SWI-Prolog e do SWI-Prolog-Editor, inicie o editor, ser apresentada a tela deste, a qual deve ser similar a exibida na Figura 3. Pode-se observar que a tela se divide em duas janelas editveis, identificadas na imagem com os nmeros 1 e 2. A rea 1 corresponde a janela de edio do programa, a rea 2 a janela de interao do usurio com o interpretador. Para que se possa realizar qualquer interao com o programa que est sendo editado necessrio, aps salvar o arquivo, clicar sobre boto de consulta, identificado com o nmero 3. Caso o arquivo seja alterado e o boto no seja acionado o interpretador ir trabalhar com a ltima verso do programa que foi consultada. O nmero 4 identifica o prompt de comandos, a partir deste que podem ser enviados os comandos para o interpretador. Todo comando enviado para o interpretador deve obrigatoriamente ser finalizado pelo caractere ponto (.). Por exemplo, o comando ?- write(Teste) no resultar em uma impresso, enquanto o comando ?- write(Teste). resultar na impresso da string 'Teste'. O smbolo ?- ser usado nos exemplos e exerccios apresentados para representar o prompt de comandos, ele no deve ser digitado.

Figura 3: Tela Inicial do SWI-Prolog Editor

Atividade Prtica
1. Trabalhando com Fatos, Regras e Consultas
(Extrado de BARBOSA, Alexandre de Andrade et al. Introduo Programao em Lgica. Apostila. UFCG, 2006)

Consideremos a seguinte rvore genealgica:

A figura exibe a rvore genealgica de uma famlia, nesta possvel observar que existem diversos tipos de relao, por exemplo, bob pai de pat, pam av de ann, ann irm de pat, jim filho de pat, entre outras. Para se representar estas relaes em Prolog, inicialmente pode-se criar a relao genitor(x, y), significando que x genitor de y. Ento, podemos inserir na janela de edio do programa os seguintes fatos: genitor(pam, bob). genitor(tom, bob). genitor(tom, liz). genitor(bob, ann). genitor(bob, pat ). genitor(pat , jim ). Estas clusulas descrevem toda a informao sobre a relao genitor existente na rvore apresentada (domnio). Aps a definio desta relao podem ser realizadas consultas no sistema, para isso basta clicar no boto de consulta, e digitar perguntas no prompt de comandos. OBSERVAO 1: qualquer termo iniciado com letra maiscula representa uma varivel. No h necessidade de declarao. OBSERVAO 2: para o SWI-Prolog a vrgula representa uma conjuno, enquanto um ponto e vrgula (;) representa uma disjuno. Outro conectivo importante a negao. Para exemplificar a utilizao deste conectivo sero definidos os predicados homem(x) e mulher(x), significando que x homem e x mulher, respectivamente. mulher(pam). homem(tom). homem(bob). mulher(liz). mulher(pat). mulher(ann). homem(jim). Aps definidos os fatos, podemos indagar, por exemplo, quem a me de bob, ou seja, deseja-se saber quem o genitor de bob que mulher. Para isso, pode-se digitar no prompt de comandos a seguinte pergunta: ?- genitor(X, bob), mulher (X). X = pam; No A mesma consulta poderia ser realizada atravs da seguinte pergunta: ?- genitor(X, bob ), not(homem(X)). X = pam; No Muitas outras consultas podem ser realizadas sobre uma base de fatos, porm, muito mais interessante utilizar regras, pois o poder de expresso obtido muito maior. Para exemplificar o uso de regras ser definida a relao prole(y,x), significando que y prole de x. Esta relao a relao inversa de genitor(x,y), assim, pode-se afirmar que y prole de x se x genitor de y. Para isso, pode-se criar a seguinte regra na janela de edio do programa:

prole(Y, X) :-

genitor(X, Y) .

O smbolo :- pode ser lido como se. A parte da regra a esquerda do smbolo :- denominada de concluso (ou cabea), j a parte a direita deste chamada de condio (ou corpo). Assim, para responder a consulta o interpretador Prolog precisa satisfazer parte condicional da regra, uma vez que no existem fatos relacionados a prole, para ento obter uma concluso. Para isso, so utilizadas substituies, at que se satisfaa a parte condicional ou no existam mais possibilidades de substituio. PROBLEMA PROPOSTO: defina as relaes mae(x, y), avos(x, y), irma(x, y). Uma diferena bsica entre uma regra e um fato que um fato sempre uma informao verdadeira, j uma regra precisa ser avaliada para que se possa determinar se esta verdadeira ou no. Regras podem depender diretamente de um fato, como no exemplo anterior ou de outras regras (inclusive dela mesma). Regras definidas em termos de si mesma so chamadas de regras recursivas ou recorrentes. A recurso um dos elementos mais importantes da linguagem Prolog, este conceito permite a resoluo de problemas significativamente complexos de maneira relativamente simples. A construo de uma regra recursiva ser apresentada atravs da definio da relao descendente(z, x), significando que z um descendente de x, tal como ilustrado na figura.

possvel definir esta relao utilizando a relao genitor, assim, uma descendncia direta, ou seja, quando x genitor de z, seria representada com a seguinte regra: descendente (Z, X) :- genitor (X, Z). Para outros casos de descendncia, que no uma descendncia direta, poderiam ser utilizadas seguintes regras: descendente (Z, X) :- genitor(X, Y) , genitor (Y, Z). descendente (Z, X) :- genitor(X, Y) , genitor (Y, W) , genitor(W, Z). Porm, esta soluo seria limitada e trabalhosa. Usando recurso possvel obter uma soluo bem mais simples e completa para a relao de descendncia. Para isso, necessrio definir a seguinte afirmao z um descendente de x se existe um y, tal que, x seja genitor de y e z seja um descendente de y, a seguinte regra descreve isso:

descendente (Z, X) :- genitor(X, Y) , descendente (Z, Y). Assim, utilizando as duas regras, pode-se descrever a relao de descendncia de maneira correta. As duas regras so necessrias, pois o uso somente da primeira regra s seria suficiente para casos de descendncia direta (equivalente relao genitor), enquanto o uso exclusivo da segunda regra levaria a uma busca infinita de descendncia.

Atividade Avaliativa
1. Quais as respostas para as seguintes consultas? a) genitor(X, jim). b) genitor(pam, X), genitor(X, pat).

2. Formule consultas para descobrir: a) Quem so os pais de Pat. b) Liz possui filhos? c) Quem o irmo de Bob? 3. Formule Regras para as seguintes relaes: a) tio (a) b) ascendente c) primo (a). Insira novos fatos para realizar consultas sobre esta relao. 4. Considere as seguintes hipteses

Todos os animais tm pele. Peixe um tipo de animal, pssaros so outro tipo e mamferos so um terceiro tipo. Normalmente, os peixes tm nadadeiras e podem nadar, enquanto os pssaros tm asas e podem voar. Se por um lado os pssaros e os peixes pem ovos, os mamferos no pem. Embora tubares sejam peixes, eles no pem ovos, seus filhotes nascem j formados. Salmo outro tipo de peixe, e considerado uma delcia. O canrio um pssaro amarelo. Uma avestruz um tipo de pssaro grande que no voa, apenas anda. Os mamferos normalmente andam para se mover, como, por exemplo, uma vaca. As vacas do leite, mas tambm servem elas mesmas de comida (carne). Contudo, nem todos os mamferos andam para se mover. Por exemplo, o morcego voa.
Considere ainda que existem os seguinte animais: 1. 2. 3. 4. 5. 6. 7. Piupiu, que um canrio. Nemo, que um peixe. Tutu, que um tubaro. Mimosa, que uma vaca. Vamp, que um morcego. Xica, que uma avestruz. Alfred, que um salmo.

Defina fatos e regras Prolog que representam as premissas acima, e formule consultas Prolog para responder s seguintes perguntas: a) O Piupiu voa? b) Qual a cor do Piupiu? c) A Xica voa? d) A Xica tem asas? e) Quais os nomes dos animais que pem ovos? f) Quais os nomes dos animais que so comestveis? g) Quais os nomes dos animais que se movem nadando, mas no pem ovos?

Vous aimerez peut-être aussi