Prolog Livro

Embed Size (px)

Citation preview

INTRODUO PROGRAMAOPROLOGLuiz A. M. PalazzoEditora da Universidade Catlica de Pelotas / UCPELRua Flix da Cunha, 412 - Fone (0532)22-1555 - Fax (0532)25-3105Pelotas - RS - BrasilEDUCATEditora da Universidade Catlica de PelotasPelotas, 1997 1997 LUIZ A. M. PALAZZOSUMRIO1. LGICA E PROGRAMAO DE COMPUTADORES 11.1 AS RAZES 11.2 PROGRAMAO EM LGICA 21.3 APLICAES 41.4 A QUINTA GERAO 61.5 PORQUE ESTUDAR PROLOG 8RESUMO 92. A LINGUAGEM PROLOG 112.1 FATOS 112.2 REGRAS 142.3 CONSTRUES RECURSIVAS 172.4 CONSULTAS 192.5 O SIGNIFICADO DOS PROGRAMAS PROLOG 21RESUMO 22EXERCCIOS 223. SINTAXE E SEMNTICA 243.1 OBJETOS 243.2 UNIFICAO 273.3 SEMNTICA DECLARATIVA E SEMNTICA PROCEDIMENTAL 283.4 SEMNTICA OPERACIONAL 30RESUMO 30EXERCCIOS 314. OPERADORES E ARITMTICA 334.1 OPERADORES 334.2 ARITMTICA 36RESUMO 38EXERCCIOS 395. PROCESSAMENTO DE LISTAS 415.1 REPRESENTAO DE LISTAS 415.2 OPERAES SOBRE LISTAS 425.3 OUTROS EXEMPLOS 48RESUMO 49EXERCCIOS 506. CONTROLE 516.1 BACKTRACKING 516.2 O OPERADOR "CUT" 526.3 APLICAES DO CUT 566.4 NEGAO POR FALHA 576.5 CUIDADOS COM O CUT E A NEGAO 58RESUMO 60EXERCCIOS 607. ESTRUTURAS DE DADOS 627.1 RECUPERAO DE INFORMAES 627.2 ABSTRAO DE DADOS 647.3 UM AUTMATO FINITO NO-DETERMINSTICO 657.4 PLANEJAMENTO DE ROTEIROS AREOS 67RESUMO 69EXERCCIOS 698. ENTRADA E SADA 718.1 ARQUIVOS DE DADOS 718.2 PROCESSAMENTO DE ARQUIVOS DE TERMOS 738.3 PROCESSAMENTO DE CARACTERES 778.4 CONVERSO DE TERMOS 788.5 LEITURA DE PROGRAMAS 79RESUMO 80EXERCCIOS 809. PREDICADOS EXTRALGICOS 829.1 TIPOS DE TERMOS 829.2 CONSTRUO E DECOMPOSIO DE TERMOS 849.3 EQUIVALNCIAS E DESIGUALDADES 859.4 PROGRAMAS OU BASES DE DADOS? 869.5 RECURSOS PARA O CONTROLE DE PROGRAMAS 899.6 BAGOF, SETOF E FINDALL 89RESUMO 91EXERCCIOS 9110. LGICA E BASES DE DADOS 9310.1 BASES DE DADOS RELACIONAIS 9310.2 RECUPERAO DE INFORMAES 9510.3 ATUALIZAO DA BASE DE DADOS 9610.4 MODELAGEM DE DADOS 9710.5 ALM DO MODELO RELACIONAL 9910.6 REDES SEMNTICAS 99RESUMO 103EXERCCIOS 10311. PROGRAMAO SIMBLICA 10511.1 DIFERENCIAO SIMBLICA 10511.2 MANIPULAO DE FRMULAS 10511.3 OS OPERADORES REVISITADOS 10511.4 AVALIAO DE FRMULAS 10611.5 SIMPLIFICAO ALGBRICA 10711.6 INTEGRAO 109RESUMO 109EXERCCIOS 11012. METODOLOGIA DA PROGRAMAO EM LGICA 11112.1 PRINCPIOS GERAIS DA BOA PROGRAMAO 11112.2 COMO PENSAR EM PROLOG 11212.3 ESTILO DE PROGRAMAO 11412.4 DEPURAO DE PROGRAMAS 11612.5 EFICINCIA 11712.6 PROGRAMAO ITERATIVA 122RESUMO 123EXERCCIOS 12413. OPERAES SOBRE ESTRUTURAS DE DADOS 12513.1 CLASSIFICAO EM LISTAS 12513.2 REPRESENTAO DE CONJUNTOS 12713.3 DICIONRIOS BINRIOS 12913.4 INSERO E REMOO DE ITENS EM DICIONRIOS BINRIOS 13013.5 APRESENTAO DE RVORES 13313.6 GRAFOS 133RESUMO 138EXERCCIOS 13914. ESTRATGIAS PARA A SOLUO DE PROBLEMAS 14014.1 CONCEITOS BSICOS 14014.2 PESQUISA EM PROFUNDIDADE 14314.3 PESQUISA EM AMPLITUDE 14614.4 PESQUISA EM GRAFOS, OTIMIZAO E COMPLEXIDADE 150RESUMO 151EXERCCIOS 15115. PESQUISA HEURSTICA 15315.1 BEST-FIRST SEARCH 15315.2 UMA APLICAO DA PESQUISA HEURSTICA 158RESUMO 160EXERCCIOS 16116. REDUO DE PROBLEMAS E GRAFOS E/OU 16216.1 REPRESENTAO DE PROBLEMAS 16216.2 EXEMPLOS DE REPRESENTAO DE PROBLEMAS EM GRAFOS E/OU 16516.3 PROCEDIMENTOS BSICOS DE PESQUISA EM GRAFOS E/OU 16716.4 PESQUISA HEURSTICA EM GRAFOS E/OU 170RESUMO 178EXERCCIOS 178APNDICE A 179A.2 SEMNTICA MODELO-TEORTICA 182A.3 SEMNTICA PROVA-TEORTICA 189BIBLIOGRAFIA 191Tanto pelo privilgio da amizade de vrios anos, como pela condio de colega profissionaldo prof. Luiz Antonio Palazzo, j h muito acompanho sua contribuio cultura em Cinciada Computao na regio em que trabalhamos (zona sul do Rio Grande do Sul). Com gradu-ao e ps-graduao pela UFRGS, vem marcando sua atuao desde a poca de estudante,tanto no meio acadmico como na comunidade em geral, por uma postura de vanguarda nabusca de tecnologias para um uso racional e eficiente da computao. Sem dvida, este livropermitir que um nmero maior de pessoas se beneficiem de sua larga experincia no ofciode ensinar.AestruturadolivromesclaocontextohistricodaIntelignciaArtificial(IA)comoestudodo Prolog, uma das mais difundidas linguagens paraProgramaoemLgica.Ocontedo,por sua vez, tem como ponto alto contemplar uma rigorosa conceituao formal, cujo empre-go caracterizado por exemplos claros e significativos.O emprego das linguagens para Programao em Lgica ganhou significativo impulso com oprojeto Japons de Sistemas Computacionais de Quinta Gerao (1982-1992), o qual investi-goualternativasdehardwareesoftwareparaatenderodesenvolvimentodeaplicaesquecontemplavammetasambiciosas,taiscomoreconhecimentodeimagens,processamentodalinguagem natural, processamento de conhecimento, etc.AslinguagensparaProgramaoemLgica,aexemplodoProlog,outroraempregadasprincipalmente na prototipao, j podem ser utilizadas para resolver, com bom desempenho,complexos problemas reais de IA. Isto se tornou possvel pela disponibilidade de processado-res poderosos a custos reduzidos, bem como pela disseminao do uso de arquiteturas para-lelas.Neste trabalho so ressaltadas, com muita propriedade, as vantagens doempregodalgicaclausalparaprogramaodecomputadores,resgatandoa"elegncia"daslinguagensparaProgramao em Lgica, nas quais o programador tem como principal preocupao a espe-cificao em Prolog do problema a ser resolvido, ficando a cargo do sistema computacionala gerncia dos mecanismos de busca das possveis solues.Esta obra moderna, das poucas em portugus no seu estilo, vem preencher uma lacuna edito-rial, trazendo a estudantes e profissionais da cincia da computao uma abordagem ampla,porm no menos crtica e objetiva, das perspectivas do uso da Programao em Lgica.Adenauer Corra YaminPelotas, RS11. LGICA E PROGRAMAO DE COMPUTADORESA lgica a cincia do pensamento correto1. Esta declarao no implica contudo em afirmar que elasejaacinciadaverdade.Mesmoquetudooquesepermitaafirmardentrodalgicasejasuposta-mente verdadeiro em determinado contexto, as mesmas afirmaes podem resultar falsas se aplicadasao mundo real. Os filsofos da lgica afirmam que, "para entender o que realmente acontece no mun-do,precisamosentenderoquenoacontece",isto,aspropriedadesinvariantesdasentidadesouobjetosqueocompem.Comessaidiaemmente,podemosconsiderarlgicososconjuntosdede-claraesquepossuemapropriedadedeserverdadeirosoufalsosindependentementedotempooulugar que ocupam no universo considerado. Este insigth inicialcostumaserdegrandevaliaparaen-tendercomoalgicapodeserempregadanaprogramaodecomputadorescomgrandevantagemsobre as linguagens convencionais. O clculo proposicional, que o subconjunto da lgica matemti-ca mais diretamente envolvido nesse processo, formaliza a estrutura lgica mais elementar do discursodefinindo precisamente o significado dos conetivos e,ou,no,se...entoeoutros.Nopresentecap-tulo esboa-se a forma como evoluiu a idia de empregar a lgica como linguagem de programao decomputadores, comenta-se os principais usos e aplicaes das linguagens baseadas na lgica, relata-seos resultados mais significativos obtidos ao longo dos dez anos do controvertido projeto japons parao desenvolvimento dos denominados "Computadores de Quinta Gerao" e, por fim, se tenta anteciparas perspectivas mais promissoras da pesquisa neste ramo do conhecimento cientfico.1.1 AS RAZESOusodalgicanarepresentaodosprocessosderaciocnioremontaaosestudosdeBoole(1815-1864) e de De Morgan (1806-1871), sobre o que veio a ser mais tarde chamado "lgebra de Boole".Como o prprio nome indica, esses trabalhos estavam mais prximos de outras teorias matemticas doquepropriamentedalgica.Deve-seaomatemticoalemoGttlobFregenoseu"Begriffsschrift"(1879) a primeira verso do que hoje denominamos clculo de predicados, proposto por ele como umaferramentaparaformalizarprincpioslgicos.EssesistemaofereciaumanotaoricaeconsistentequeFregepretendiaadequadaparaarepresentaodetodososconceitosmatemticoseparaafor-malizao exata do raciocnio dedutivo sobre tais conceitos, o que, afinal, acabou acontecendo.No final do sculo passado a matemtica havia atingido um estgio de desenvolvimento mais do quepropcioexploraodonovoinstrumentopropostoporFrege.Osmatemticosestavamabertosanovas reas depesquisaquedemandavamprofundoentendimentolgicoassimcomoprocedimentossistemticosdeprovadeteoremasmaispoderososeeficientesdoqueosatentoempregados.Al-gunsdostrabalhosmaissignificativosdesteperodoforamareconstruoaxiomticadageometriaabstrata por David Hilbert, a aritimtica proposta por Giuseppe Peano e a explorao intuitiva da teo-riageraldosconjuntos,porGeorgCantor,quetambmproduziuailuminadateoriadosnmerostransfinitos.OrelacionamentoentrelgicaematemticafoiprofundamenteinvestigadoporAlfredNorth Whitehead e Bertrand Russel, que em "Principia Mathematica" (1910) demonstraram ser a l-gica um instrumento adequado para a representao formal de grande parte da matemtica.Umpassomuitoimportantefoidadoem1930,emestudossimultneos,pormindependentes,reali-zados pelo alemo Kurt Gdel e o francs Jacques Herbrand. Ambos, em suas dissertaes de douto-rado, demonstraram que o mecanismo de prova do clculo de predicados poderia oferecer uma provaformaldetodaproposiologicamenteverdadeira.Oresultadodemaiorimpactofoientretantopro-duzido por Gdel, em 1931, com a descoberta do "teorema da incompleteza dos sistemas de formali-zaodaaritmtica".Aprovadesteteoremasebaseavanosdenominadosparadoxosdeauto-referncia (declaraes do tipo: "Esta sentena falsa", que no podem ser provadas nem verdadeiras

1 Na realidade, de uma certa classe de pensamento correto.2nemfalsas).Em1934,AlfredTarskiproduziuaprimeirateoriasemnticarigorosamenteformaldoclculodepredicados,introduzindoconceitosprecisospara"satisfatibilidade","verdade"(emumadadainterpretao),"conseqncialgica"eoutrasnoesrelacionadas.Aindanadcadade30,di-versosoutrosestudos-entreosquaisosdeAlanTuring,AlonzoChurcheoutros-aproximarammuito o clculo de predicados da forma com que hoje conhecido e estudado.No incio da Segunda Guerra Mundial, em 1939, toda a fundamentao terica bsica da lgica com-putacional estava pronta. Faltava apenas um meio prtico para realizar o imenso volume de computa-es necessrias aos procedimentos de prova. Apenas exemplos muito simples podiam ser resolvidosmanualmente. O estado de guerra deslocou a maior parte dosrecursosdestinadospesquisaterica,nosEUA,EuropaeJapoparaastcnicasdeassassinatoemmassa.Foisomenteapartirdametadedos anos 50 que o desenvolvimento da ento novssima tecnologia dos computadores conseguiuofe-recer aos pesquisadores o potencial computacional necessrio para a realizao de experincias maissignificativas com o clculo de predicados.Em1958,umaformasimplificadadoclculodepredicadosdenominadaformaclausalcomeouadespertarointeressedosestudiososdoassunto.Talformaempregavaumtipoparticularmuitosim-ples de sentena lgica denominada clusula. Uma clusula uma (possivelmente vazia) disjuno deliterais. Tambm por essa poca, Dag Prawitz (1960) props um novo tipo deoperaosobreosob-jetosdoclculodepredicados,quemaistardeveioaserconhecidaporunificao.Aunificaoserevelou fundamental para o desenvolvimento de sistemas simblicos e de programao em lgica.A programao em lgica em sistemas computacionais, entretanto, somente se tornou realmente pos-svel a partir da pesquisa sobre prova automtica de teoremas, particularmente no desenvolvimento doPrincpio da Resoluo por J. A. Robinson (1965). Um dos primeiros trabalhos relacionando o Prin-cpio da Resoluo com a programao de computadores deve-se a Cordell C. Green (1969) que mos-trou como o mecanismo para a extrao de respostas em sistemas de resoluo poderia ser empregadopara sintetizar programas convencionais.A expresso "programao em lgica" (logic programming, originalmenteemingls)devidoaRo-bertKowalski(1974)edesignaousodalgicacomolinguagemdeprogramaodecomputadores.Kowalskiidentificou,emumparticularprocedimentodeprovadeteoremas,umprocedimentocom-putacional,permitindoumainterpretaoprocedimentaldalgicaeestabelecendoascondiesquenos permitem entend-la como uma linguagem de programao de uso geral.Estefoiumavanoes-sencial, necessrio para adaptar os conceitos relacionados com a prova de teoremas s tcnicas com-putacionaisjdominadaspelosprogramadores.Aperfeioamentosrealizadosnastcnicasdeimple-mentaotambmforamdegrandeimportnciaparaoempregodalgicacomolinguagemdepro-gramao.Oprimeirointerpretadorexperimentalfoidesenvolvidoporumgrupodepesquisadoresliderados por Alain Colmerauer na Universidade de Aix-Marseille (1972) com o nome de Prolog, umacrnimo para "Programmation en Logique". Seguindo-se a este primeiro passo, implementaes mais"praticas"foramdesenvolvidasporBattanieMeloni(1973),Bruynooghe(1976)e,principalmente,DavidH.D.Warren,LusMonizPereiraeoutrospesquisadoresdaUniversidadedeEdimburgo(U.K.)que,em1977,formalmentedefiniramosistemahojedenominado"PrologdeEdimburgo",usado como referncia para a maioria das atuais implementaes da linguagem Prolog. Deve-se tam-bmaWarrenaespecificaodaWAM(WarrenAbstractMachine),ummodeloformalempregadoat hoje na pesquisa de arquiteturas computacionais orientadas programao em lgica.1.2 PROGRAMAO EM LGICAUmadasprincipaisidiasdaprogramaoemlgicadequeumalgoritmoconstitudopordoiselementos disjuntos: a lgica e o controle. O componente lgico corresponde definio do que deveser solucionado, enquanto que o componente de controle estabelece como a soluo pode ser obtida.O programador precisa somente descrever o componente lgico de um algoritmo, deixando o controle3da execuo para ser exercido pelo sistema de programao em lgica utilizado. Em outras palavras, atarefa do programador passa a ser simplesmente a especificao do problema que deve ser soluciona-do,razopelaqualaslinguagenslgicaspodemservistassimultaneamentecomolinguagensparaespecificao formal e linguagens para a programao de computadores.Um programa em lgica ento a representao de determinado problema ou situao expressa atra-vs de um conjunto finito de um tipo especial de sentenas lgicas denominadas clusulas. Ao contr-rio de programas em Pascal ou C, um programa em lgica no a descrio de um procedimento parase obter a soluo de um problema. Na realidade o sistema utilizado no processamento de programasem lgica inteiramente responsvel pelo procedimento a ser adotado na sua execuo. Um programaemlgicapodetambmservistoalternativamentecomoumabasededados,excetoqueasbasesdedados convencionais descrevem apenas fatos tais como "Oscar um avestruz", enquanto que as sen-tenas de um programa em lgica possuem um alcance mais genrico, permitindo a representao deregras como em "Todo avestruz um pssaro", o que no possui correspondncia em bases de dadosconvencionais. Na figura abaixo se procura explicitar as principais diferenas entre programao con-vencional e programao em lgica.PROGRAMAS CONVENCIONAIS PROGRAMAS EM LGICAProcessamento Numrico Processamento SimblicoSolues Algortmicas Solues HeursticasEstruturas de Controle e Conhecimento Integradas Estruturas de Controle e Conhecimento SeparadasDifcil Modificao Fcil ModificaoSomente Respostas Totalmente Corretas Incluem Respostas Parcialmente CorretasSomente a Melhor Soluo Possvel Incluem Todas as Solues PossveisFigura 1.1 Programas Convencionais x Programas em LgicaO paradigma fundamental da programao em lgica o da programao declarativa, em oposio programao procedimental tpica das linguagens convencionais. A programao declarativa englobatambm a programao funcional, cujo exemplo mais conhecido a linguagem Lisp. Lembrando en-tretanto que Lisp data de 1960, a programao funcional um estilo conhecido h bastante tempo, aocontrrio da programao em lgica, que s ganhou mpeto a partir dos anos 80, quando foi escolhidacomo a linguagem bsica do projeto japons para o desenvolvimento dos denominados computadoresde quinta gerao. O ponto focal da programao em lgica consiste em identificaranoodecom-putao com a noo de deduo. Mais precisamente, os sistemas de programao em lgica reduzema execuo de programas pesquisa da refutao das sentenas do programa em conjunto com a ne-gaodasentenaqueexpressaaconsulta,seguindoaregra:"umarefutaoadeduodeumacontradio".Pode-seentoexpressarconhecimento(programase/oudados)emPrologpormeiodeclusulasdedoistipos:fatoseregras2.Umfatodenotaumaverdadeincondicional,enquantoqueasregrasdefi-nem as condies que devem ser satisfeitas para que uma certa declarao seja considerada verdadei-ra. Como fatos e regras podem ser utilizados conjuntamente, nenhum componente dedutivo adicionalprecisa ser utilizado. Alm disso, como regras recursivas e no-determinismo so permitidos, os pro-gramadores podem obterdescriesmuitoclaras,concisaseno-redundantesdainformaoquede-sejam representar. Como no h distino entre argumentos de entrada e de sada, qualquer combina-o de argumentos pode ser empregada.Ostermos"programaoemlgica"e"programaoProlog"tendemaserempregadosindistinta-mente.Deve-se,entretanto,destacarquealinguagemPrologapenasumaparticularabordagemdaprogramao em lgica. As caractersticas mais marcantes dos sistemas de programao em lgica emgeral - e da linguagem Prolog em particular - so as seguintes:

2 Ver o Apndice A para uma abordagem mais formal.4 EspecificaessoProgramas:Alinguagemdeespecificaoentendidapelamquinae,porsis,umalinguagemdeprogramao.Naturalmente,orefinamentodeespecificaesmais efetivo do que o refinamento de programas. Um nmero ilimitado de clusulas diferentespodeserusadoepredicados(procedimentos)comqualquernmerodeargumentossoposs-veis. No h distino entre o programa e os dados. As clusulas podem ser usadas com grandevantagem sobre as construes convencionais para a representao de tipos abstratos de dados.Aadequaodalgicaparaarepresentaosimultneadeprogramasesuasespecificaesatorna um instrumento especialmente til para o desenvolvimento de ambientes e prottipos. Capacidade Dedutiva: O conceito de computao confunde-se com o de (passo de) inferncia.A execuo de um programa a prova do teorema representado pelaconsultaformulada,combase nos axiomas representados pelas clusulas (fatos e regras) do programa. No-determinismo: Os procedimentos podem apresentar mltiplas respostas, da mesma formaque podem solucionar mltiplas e aleatoriamente variveis condies de entrada. Atravs de ummecanismoespecial,denominado"backtracking",umaseqnciaderesultadosalternativospode ser obtida. Reversibilidade das Relaes: (Ou "computao bidirecional").Osargumentosdeumproce-dimento podem alternativamente, em diferentes chamadas representar ora parmetros de entra-da, ora de sada. Os procedimentos podem assim ser projetados para atender a mltiplos prop-sitos. A execuo pode ocorrer em qualquer sentido, dependendo do contexto.Porexemplo,omesmo procedimento para inserir um elemento no topo de uma pilha qualquer pode ser usado,em sentido contrrio, para remover o elemento que se encontrar no topo desta pilha. Trplice Interpretao dos Programas em Lgica: Um programa em lgica pode ser seman-ticamente interpretado de trs modos distintos: (1) por meio da semntica declarativa, inerente lgica, (2) por meio da semntica procedimental, onde as clusulas dos programas so vistascomo entrada para um mtodo de prova e, (3) por meio da semntica operacional, onde as clu-sulas so vistas como comandos para um procedimento particular de prova por refutao. Essastrsinterpretaessointercambiveissegundoaparticularabordagemquesemostrarmaisvantajosa ao problema que se tenta solucionar. Recurso:Arecurso,emProlog,aformanaturaldevererepresentardadoseprogramas.Entretanto, na sintaxe da linguagem no h laos do tipo "for" ou "while" (apesar de poderemserfacilmenteprogramados),simplesmenteporqueelessoabsolutamentedesnecessrios.Tambm so dispensados comandos de atribuio e, evidentemente, o "goto". Uma estrutura dedados contendo variveis livres pode ser retornada como a sada de um procedimento. Essas va-riveislivrespodemserposteriormenteinstanciadasporoutrosprocedimentosproduzindooefeito de atribuies implcitas a estruturas de dados. Onde for necessrio, variveis livres soautomaticamenteagrupadaspormeioderefernciastransparentesaoprogramador.Assim,asvariveis lgicas um potencial de representao significativamente maior do que oferecido poroperaes de atribuio e referncia nas linguagens convencionais.Apremissabsicadaprogramaoemlgicaportantoque"computaoinfernciacontrolada".Tal viso da computao tem se mostrado extremamente produtiva, na medida em que conduz idiade que computadores podem ser projetados com a arquitetura de mquinas de inferncia. Grande parteda pesquisa sobre computao paralela, conduzida hoje nos EUA, Europa e Japo, emprega a progra-mao em lgica como instrumento bsico para a especificao de novas arquiteturas de hardware e odesenvolvimento de mquinas abstratas no-convencionais.1.3 APLICAESUmdosprimeirosusosdaprogramaoemlgicafoiarepresentaoeanlisedesubconjuntosdalinguagem natural. Esta foi inclusive a aplicao que motivou Alain Colmerauer a desenvolver a pri-5meira implementao da linguagem Prolog. Logo em seguida, outros pesquisadores da rea da inteli-gncia artificial propuseram diversas novas aplicaes para o novo instrumento. Alguns dos primeirostrabalhoscomPrologenvolviamaformulaodeplanoseaescritadecompiladores,porPereiraeWarren (1977), prova de teoremas em geometria por R. Welhan (1976) e a soluodeproblemasdemecnica, por Bundy et al. (1979). As aplicaes relatadas desde ento, multiplicaram-se velozmente.Concentraremos aqui a ateno em um conjunto das principais reas investigadas com o concurso daprogramao em lgica. SistemasBaseadosemConhecimento(SBCs):Ouknowledge-basedsystems,sosistemasque aplicam mecanismos automatizadosderaciocnioparaarepresentaoeinfernciadeco-nhecimento. Tais sistemas costumam ser identificados como simplesmente "de inteligncia arti-ficial aplicada" e representam uma abrangente classe de aplicaes da qual todas as demais se-riamaproximadamentesubclasses.AtecnologiadosSBCsfoiidentificadanaInglaterrapeloRelatrioAlvey(1982)comoumadasquatrotecnologiasnecessriascompletaexploraodos computadores de quinta gerao. As outras seriam: interface homem-mquina (MMI), inte-grao de circuitos em ultra-grande escala (ULSI) e engenharia de software (SE). O relaciona-mento entre SBCs e a nova gerao de computadores , na verdade, altamente simbitica, cadauma dessas reas necessria para a realizao do completo potencial da outra. SistemasdeBasesdeDados(BDs):UmaparticularmentebemdefinidaaplicaodosSBCssobasesdedados.BDsconvencionaistradicionalmentemanipulamdadoscomocoleesderelaes armazenadas de modo extensional sob a forma de tabelas. O modelo relacional serviude base implementao de diversos sistemas fundamentados na lgebra relacional, que ofere-ce operadores tais como juno e projeo. O processador de consultas de uma BD convencio-nalderiva,apartirdeumaconsultafornecidacomoentrada,algumaconjunoespecficadetais operaes algbricas que um programa gerenciador ento aplica s tabelas visando a recu-perao de conjuntos de dados (n-tuplas) apropriados, se existirem. O potencial da programaoem lgica para a representao e consulta BDs foi simultaneamente investigado, em 1978, porvan Emden, Kowalski e Trnlund. As trs pesquisas estabeleceram que a recuperao de dados- um problema bsico em BDs convencionais - intrnseca ao mecanismo de inferncia dos in-terpretadores lgicos. Desde ento diversos sistemas tem sido propostos para a representao deBDs por meio de programas em lgica. SistemasEspecialistas(SEs):UmsistemaespecialistaumaformadeSBCespecialmenteprojetado para emular a especializao humana em algum domnio especfico. Tipicamente umSE irpossuirumabasedeconhecimento(BC)formadadefatos,regraseheursticassobreodomnio, juntamente com a capacidade de entabular comunicao interativa com seus usurios,de modo muito prximo ao que um especialista humano faria. Alm disso os SEs devem ser ca-pazes de oferecer sugestes e conselhos aos usurios e, tambm, melhoraroprpriodesempe-nho a partir da experincia, isto , adquirir novos conhecimentos e heursticas com essa intera-o.Diversossistemasespecialistasforamconstrudoscombasenaprogramaoemlgica,como por exemplo o sistema ORBI, para a anlise de recursos ambientais desenvolvido por Pe-reira et al. na Universidade Nova de Lisboa. Processamento da Linguagem Natural (PLN): O PLN da maior importncia para o desen-volvimentodeferramentasparaacomunicaohomem-mquinaemgeraleparaaconstruodeinterfacesdeSBCsemparticular.AimplementaodesistemasdePLNemcomputadoresrequer no somente a formalizao sinttica, como tambm - o grande problema - a formaliza-o semntica, isto , o correto significado das palavras, sentenas, frases, expresses, etc. quepovoam a comunicao natural humana. O uso da lgica das clusulas de Horn3 para este pro-psito foi inicialmente investigado por Colmerauer, o prprio criador do Prolog (1973), e poste-riormente por Kowalski (1974). Ambos mostraram (1) que as clusulas de Horneramadequa-dasrepresentaodequalquergramticalivre-de-contexto(GLC),(2)permitiamqueques-

3 Assim denominadas em homenagem a Alfred Horn, que primeiro lhes estudouas propriedades, em 1951.6tes sobre a estrutura de sentenas em linguagem natural fossem formuladas como objetivos aosistema, e (3) que diferentes procedimentos de prova aplicados a representaes lgicas da lin-guagem natural correspondiam a diferentes estratgias de anlise. Educao: A programao em lgica poder vir a oferecer no futuro uma contribuio bastantesignificativaaousoeducacionaldecomputadores.Estapropostafoitestadaem1978quandoKowalskiintroduziuaprogramaoemlgicanaParkHouseMiddleSchoolemWimbledon,na Inglaterra, usando acesso on-line aoscomputadoresdoImperialCollege.Osucessodoem-preendimentoconduziuaumprojetomaisabrangentedenominado"LgicacomoLinguagemdeProgramaoparaCrianas",inauguradoem1980naInglaterracomrecursosdoConselhode Pesquisa Cientfica daquele pas. Os resultados obtidos desde ento tem mostrado que a pro-gramao em lgica no somente assimilada mais facilmente do que as linguagens convenci-onais,comotambmpodeserintroduzidaatmesmoacrianasnafaixados10a12anos,asquais ainda sebeneficiamdodesenvolvimentodopensamentolgico-formalqueousodelin-guagens como o Prolog induz. Arquiteturas No-Convencionais: Esta rea vem se tornando cada vez mais um campo extre-mamentefrtilparaousodaprogramaoemlgicaespecialmentenaespecificaoeimple-mentao demquinasabstratasdeprocessamentoparalelo.Oparalelismopodesermodeladopela programao em lgica em variados graus de atividade se implementado em conjunto comomecanismodeunificao.DuasimplementaesiniciaisnessesentidoforamoParlog,des-envolvido em 1984 por Clark e Gregory, e o Concurrent Prolog (CP), por Shapiro em 1983. OprojetodaQuintaGerao,introduzidonaprximaseo,foifortementeorientadoaousodaprogramao em lgica em sistemas de processamento paralelo.Muitas outras aplicaes poderiam ainda ser citadas, principalmente na rea da inteligncia artificial,que tem no Prolog e no Lisp as suas duas linguagens mais importantes. Novas tecnologias de hardwa-reesoftwaretaiscomosistemasmassivamenteparalelos,redesdecomputadores,assistentesinteli-gentes, bases de dados semnticas, etc., tornam o uso do Prolog (e de outras linguagens baseadas emlgica) cada vez mais atraentes1.4 A QUINTA GERAOEm 1979 o governo japons iniciou estudos para um novo, ambicioso e nico projeto na rea da com-putao normalmente denominado Sistemas Computacionais de Quinta Gerao cujo objetivo princi-paleraodesenvolvimento,noespaodeumadcada,dehardwareesoftwaredealtodesempenho,caracterizando uma nova gerao de computadores. O projeto iniciou em 1982 e foi oficialmente en-cerrado em maio de 1992. Muito foi dito e escrito sobre o projeto, que produziu inmeros resultados ediversos subprodutos ao longo desses dez anos. Um de seus principais mritos, entretanto, parece tersido chamar a ateno da comunidade cientfica mundial para as potencialidades da lgica como lin-guagemdeprogramaodecomputadores.SistemasdeprocessamentolgicoparaleloderivadosdoPrologforamdesenvolvidosparaservircomolinguagens-ncleo(kernellanguages)dosnovosequi-pamentos que seriam produzidos a partir dos resultados do projeto. Considerado um sucesso por seusdirigentes,oprojetofoientretantocriticadopornohaverconseguidocolocarastecnologiasdesen-volvidas disposio do grande pblico. Em outras palavras: ainda no dispomos hoje (1994) de mi-crocomputadores pessoais de quinta gerao - denominados mquinas PSI (Personal Sequential Infe-rence machines) - comercialmente viveis para o grande pblico. Os resultados tericos obtidos e osprottipos construdos foram entretanto de grande valia para que num futuro prximo isso venha a serpossvel.Nestasnovasmquinasopapeldalinguagemassemblyserdesempenhadoporumdialetodo Prolog orientado ao processamento paralelo.Um relatrio sobre o projeto, organizado por Ehud Shapiro e David Warren em 1993, reuniu as opini-esdediversospesquisadoresdeleparticipantes,entreosquaisKazuhiroFuchi,seulder,RobertKowalski,KoichiFurukawa,KazunoriUedaeoutros.Todososdepoimentosforamunnimesem7declararqueosobjetivosdoprojetoforamplenamenteatingidos.NaFigura1.2mostradaumaadaptaoemportugusdodiagrama"deintenes"apresentadoporFuchi,noFifthGenerationComputer Systems Congress de 1981 (FGCS'81), o congresso que deuaconheceraomundoumdosmais ambiciosos projetos da histria da computao.ANO 1 ANO 5 ANO 10 Network --- tica --- Personal Inference Machine(Reduo a chips)Mquina Prolog +(Novo Software)LISPAPLSmalltalkPS, etc.Programao:em lgica efuncional(comparveis s mquinasde grande porte de 1981) Ambientes de Programao Inteligentes Ambientes de Projeto Orientados Prototipagem Mquinas Altamente Configurveis (Chips e Mdulos) Supermquinas (Realmente Inteligentes)Nova Linguagem5G Core Language(INFERENCE MACHINE)Data Flow MachineDatabase MachineParalelismoAssociatividade SOFTWARE -----------> Engenharia de Conhecimento(Acumulao)--------------------------------------------------------->Engenharia de Software(Teorias Bsicas)Pesquisa em Inteligncia ArtificialSoluo de Problemas: Bases de Conhecimento: Simbolismo em Alto Nvel:PlanejamentoProgramaoProva de TeoremasJogosEntendimento daLinguagem NaturalConsultasFigura 1.2 Diagrama Conceitual do Projeto do Computador de Quinta GeraoSegundoorelatriodeShapiroeWarren,umdosprimeirospassosdoprojetoconsistiuemdefinirumalinguagemdeprogramaoemlgicaqueaomesmotempofosseadequadaaoparalelismodohardware e aos requisitos sofisticados especificados para o software. Baseada no Parlog e no Cuncur-rent Prolog, uma equipe de pesquisadores liderada por Kazunori Ueda desenvolveu a linguagem GHC(Guarded Horn Clauses), que deu origem KL0 (Kernel Language Zero). Um refinamento dessa ver-so beta4, realizado pela equipe de Takashi Chikayama produziu, em 1987, a linguagem KL1. Todosossub-projetosdoFGCSforamrevistosparatrabalharcomessalinguagem.Em1988osprimeirosprottiposdocomputadordequintageraoforamconstrudos,recebendoonomegenricodePa-rallelInferenceMachines(PIMs).Taiscomputadorespossuiamarquiteturamassivamenteparalelaetinham velocidade de processamento calculada em MLIPS (milhes de inferncias lgicas por segun-do). Uma dessas mquinas, denominada Multi-PSI foi apresentada com grande sucesso no FGCS'88.

4 Uma verso distribuida a grupos selecionados de usurios para teste edepurao.8A linguagem KL1 foi empregada para escrever o sistema operacional PIMOS (Parallel Inference Ma-chineOperatingSystem),em1988.importanteressaltaraquiquealinguagemKL1umalingua-gem de muito alto nvel5 e, ao mesmo tempo, uma linguagem de mquina, isto , adequada progra-maoanvelderegistradores,posiesdememriaeportaslgicas.AsversesmaisrecentesdoPIMOSprovamdefinitivamentequeKL1(agorajKL2)umalinguagemmuitomaisadequadadoque as linguagens convencionais para a construo de software bsico em mquinas paralelas. Outraslinguagens de programao foram - e ainda vem sendo - pesquisadas. Por exemplo, uma linguagem deprogramao em lgica com restries denominada GDCC foi projetada em um nvel ainda mais altoque a KL1. Uma outra linguagem, denominada "Quixote" foi produzida para lidar com bases de dadosdedutivas e orientadas a objetos. Para o gerenciamento de sistemas paralelos distribudos foi especifi-cada a linguagem Kappa-P. Todas essas linguagens, com as quais - ou com seus dialetos - todos cer-tamente estaremos em contato num futuro prximo, esto baseadas nos conceitos e resultados da pes-quisa em programao em lgica.Tecnicamente considera-se que o projeto atingiu a primeira parte de seus objetivos: diversos compu-tadores paralelos foram construdos. Tais computadores so denominados coletivamente de mquinasdeinfernciaparalela(PIMs),incorporamalinguagemKL1eosistemaoperacionalPIMOS.AlmdissoasmquinasPIMmaisrecentementeconstrudaslograramatingirumpicodedesempenhodaordemde1gigalips(1bilhodeinfernciaslgicasporsegundo),oqueeraumdosobjetvoscon-cretos do projeto considerados mais difceis de atingir.A segunda parte do projeto, entretanto, a construo de mquinas orientadasbasesdedados(data-base machines) foi menos claramente abordada. Tal objetivo foi reformulado a partir do sucesso obti-docomaconstruodelinguagensdeprogramaoemlgicaconcorrenteparaaconstruodeim-plementaes baseadas em KL1 na mesma plataforma de hardware das mquinas PIM.De um modo geral, entretanto, considera-se que o projeto demonstrou ser a tecnologia PIM bem suce-dida em novas aplicaes envolvendo paralelismo em diversas reas, especialmente computao no-numrica e inteligncia artificial. Em suma, segundo o relatrio Shapiro-Warren:"(...) uma ponte foi construda entre a computao paralela e as aplicaes envolvendo inte-lignciaartificial.Entretanto,asduasextremidadesfinaisdaponteaindaseencontramporconcluir e a ponte em si mais frgil do que poderia ter sido. sem dvida ainda muito cedopara se esperar que a ponte seja inaugurada recebendo uma grande aclamao."1.5 PORQUE ESTUDAR PROLOGNormalmente h um gap de 10 a 20 anos entre o estgio bsico de uma pesquisa tecnolgica e o mo-mentoemqueestacolocadadisposiodasociedadeconsumidora.Nareadeinformticaesseintervalo costumasermenor,entretanto,estamosassistindoaumacompletatransformao:dopara-digmadaquartagerao,oraemfasedeesgotamento6paraarquiteturasinovadoras,contemplandosistemasdeprocessamentoparalelo,aconcorrnciadeprocessoselayersbaseadosemlgica.Agrande exploso da informtica atualmente persegue conceitos tais como interoperabilidade, conecti-vidade,orientaoaobjetos,sistemasmultimdia,agentesinteligentescooperativos,hiperdocumen-tos,realidadevirtual,intelignciademquinaeoutros,cujaevoluoirdeterminarnosprximosanos uma mudana to radical quanto foi a das carruagens para os veculos automotores - mais ainda,segundo alguns autores, - terminando por transformar completamente a prpria estrutura social.A programao Prolog uma excelente porta de entrada para a informtica do futuro, tendo em vista

5 Quanto mais alto o nvel de uma linguagem, mais prxima da linguagem natural ela se encontra.6 As atuais tecnologias de integrao de circuitos (VLSI/ULSI) tendem a atingir os limites fsicos alm dos quais se tornameconomicamente inviveis.9que, entre outras vantagens:(1) deaprendizadomuitomaisfcilenaturaldoqueaslinguagensprocedimentaisconvencio-nais,podendoinclusiveserministradaaestudantesentreofinaldoprimeiroeoinciodose-gundo grau com grande aproveitamento;(2) Implementacomprecisotodososnovosmodelossurgidosnosltimosanos,inclusiveredesneurais,algoritmosgenticos,sociedadesdeagentesinteligentes,sistemasconcorrentesepa-ralelos;(3) Permite a implementao de extenses, inclusive em nvel meta, e a definio precisa de siste-mas reflexivos (essenciais, por exemplo, robtica);(4) Liberaoprogramadordosproblemasassociadosaocontroledesuasrotinas,permitindo-lheconcentrar-se nos aspectos lgicos da situao a representar.Temsidoobservadaatendnciadesubstituiopaulatinanomercadodetrabalhodosserviosdeprogramao pelos de especificao. Isso ocorre por vrias razes, dentre elasporqueasespecifica-es podem ser formalmente provadas corretas, o que no ocorre com facilidade nos programas con-vencionais. Essa transio - da arte de programar cincia de especificar - vem estimulando o apare-cimentodelinguagenscomooProlog,quepodeservistocomosendosimultaneamenteumalingua-gem de programao e de especificao (ou, como querem alguns, como uma linguagem de especifi-caes diretamente executveis em computadores).Vemtambmocorrendoaceleradamenteapopularizaodeambienteseinterfacescadavezmaisprximos do usurio final e oferecendo recursos muito poderosos para a personalizao de programasdeacordocomasprefernciasindividuais.Issopermitesuporque,numfuturoprximo,qualquerpessoa, mesmo sem formao especfica em programao, poder interagir facilmente com computa-dores,emnveismuitoelevados7,dispensandoemgrandeparteaprogramao,talcomohojeco-nhecida. Por outro lado, a construo de tais ambientes ira depender de profissionais bem mais prepa-rados do que um programador em Pascal, por exemplo. Devero, tais profissionais, possuir um curr-culo muito mais rico, abrangendo a teoria da computao, lgica matemtica, lgebra relacional, filo-sofia, arquiteturas concorrentes e paralelas, etc. Sero necessrios entretanto em nmero muito maiordo que se imaginava no incio dos anos 80, quando essa tendncia ainda no se apresentava perfeita-mente delineada, uma vez que praticamente todo software colocado no mercado dever ser produzidoa partir de suas especificaes formais.Um ltimo motivo - no menos importante que os demais j apresentados - deve ainda ser considera-do: A expressividade herdada da lgica torna a linguagemProloguminstrumentoespecialmentepo-deroso,adequadoparaadescriodomundorealcomtodososseuscontornos,nuancesesutilezas.Nos poucos casos em que a representao se torna mais difcil - na representao temporal, por exem-plo - a flexibilidade do Prolog em aceitar o desenvolvimento de extenses semanticamente precisas eincorpor-las ao seu mecanismo de produo de inferncias, remove qualquer impedimento para o seuemprego em virtualmente qualquer rea do conhecimento.RESUMO A programao em lgica, tal como a conhecemos hoje, tem suas razes no clculo de predica-dos,propostoporFregeem1879.Diversosestudosposterioresforamdegrandeimportnciaparasuaevoluo,comdestaqueparaasinvestigaesdeHerbrand,Gdel,Tarski,Prawitz,Robinson e Green; A primeira implementao da linguagem Prolog foi realizada por Alain Colmerauer e sua equi-

7 Ao nvel da linguagem coloquial falada ou escrita, por exemplo.10pe, na Universidade de Aix-Marseille em 1972. A formalizao semntica da programao comclusulasdeHorndevidaaKowalski(1974)eaespecificaodoprimeiro"standard"-oProlog de Edimburgo - foi realizada por Warren e Pereira em 1977; As principais caractersticas que diferenciam os programas em lgica dos programas convenci-onais so as seguintes:(1) Processamento simblico,(2) Solues heursticas,(3) Estruturas de controle e conhecimento separadas,(4) Fcil modificao,(5) Incluem respostas parcialmente corretas, e(6) Incluem todas as solues possveis; Alm disso, os sistemas de programao em lgica em geral e a linguagem Prolog em particularpossuem as seguintes propriedades:(1)Funcionam simultaneamente como linguagem de programao e de especificao,(2) Possuem capacidade dedutiva,(3) Operam de forma no-determinstica,(4) Permitem a representao de relaes reversveis,(5) Permitem interpretao declarativa, procedimental e operacional, e(6) So naturalmente recursivos; As principais aplicao da programao em lgica so:(1) Sistemas Baseados em Conhecimento SBCs),(2) Sistemas de Bases de Dados (BDs),(3) Sistemas Especialistas (SEs),(4) Processamento da Linguagem Natural (PLN),(5) Educao, e(6) Modelagem de Arquiteturas No-Convencionais; O projeto japons para o desenvolvimento de Sistemas Computacionais de Quinta Gerao ini-ciou em 1982 e foi oficialmente concludo em maio de 1992. Apesar de ficarem aqum do espe-rado,osresultadosproduzidospermitemclaramenteanteveropapelpreponderantequeapro-gramao em lgica dever representar nos futuros sistemas computacionais; A crescente necessidade de garantir a qualidade do software substituindo programas por especi-ficaesformaisdiretamenteexecutveis,aliadaevoluodascaractersticasdohardware,que passam a explorar cada vez mais os conceitos de concorrncia e paralelismo, tornam a lin-guagem Prolog uma excelente porta de entrada para a informtica do futuro.112. A LINGUAGEM PROLOGAprincipalutilizaodalinguagemPrologresidenodomniodaprogramaosimblica,no-numrica, sendo especialmente adequada soluo de problemas, envolvendo objetos e relaes entreobjetos. O advento da linguagem Prolog reforou a tese de que a lgica um formalismo convenientepararepresentareprocessarconhecimento.Seuusoevitaqueoprogramadordescrevaosprocedi-mentosnecessriosparaasoluodeumproblema,permitindoqueeleexpressedeclarativamenteapenas a sua estrutura lgica, atravs de fatos, regras e consultas. Algumas das principais caractersti-cas da linguagem Prolog so: uma linguagem orientada ao processamento simblico; Representa uma implementao da lgica como linguagem de programao; Apresenta uma semntica declarativa inerente lgica; Permiteadefiniodeprogramasreversveis,isto,programasquenodistinguementreosargumentos de entrada e os de sada; Permite a obteno de respostas alternativas; Suporta cdigo recursivo e iterativo para a descrio de processos e problemas, dispensando osmecanismos tradicionais de controle, tais como while, repeat, etc; Permite associar o processo de especificao ao processo de codificao de programas; Representa programas e dados atravs do mesmo formalismo; Incorpora facilidades computacionais extralgicas e metalgicas.No presente captulo introduz-se informalmente os conceitos essenciais da linguagem Prolog, visandoconduzir rapidamente o leitor ao domnio da sintaxe e a um entendimento intuitivo da semntica asso-ciada aos programas.2.1 FATOSConsidere a rvore genealgica mostrada na Figura 2.1. possvel definir, entre os objetos (indivdu-os) mostrados, uma relao denominada progenitor que associa um indivduo a um dos seus progeni-tores. Por exemplo, o fato de que Joo um dos progenitores de Jos pode ser denotado por:progenitor(joo, jos).onde progenitor o nome da relao e joo e jos so os seus argumentos. Por razes que se tornaroclarasmaistarde,escreve-seaquinomesdepessoas(comoJoo)iniciandocomletraminscula.Arelao progenitor completa, como representada na figura acima pode ser definida pelo seguinte pro-grama Prolog:progenitor(maria, jos).progenitor(joo, jos).progenitor(joo, ana).progenitor(jos, jlia).progenitor(jos, ris).progenitor(ris, jorge).O programa acima compe-se de seis clusulas, cada uma das quais denota um fato acerca da relaoprogenitor. Se o programa for submetido a um sistema Prolog, este ser capaz de responder algumasquestes sobre a relao ali representada. Por exemplo: "Jos o progenitor de ris?". Uma consultacomoessadeveserformuladaaosistemaprecedidaporum"?-".Estacombinaodesinaisdenotaque se est formulando uma pergunta. Como h um fato no programa declarando explicitamente que12Jos o progenitor de ris, o sistema responde "sim".?-progenitor(jos, ris).simMaria JooJos AnaJlia risJorgeFigura 2.1 Uma rvore genealgicaUma outra questo poderia ser: "Ana um dos progenitores de Jorge?". Nesse caso o sistema respon-de "no", porque no h nenhuma clusula no programa que permita deduzir tal fato.?-progenitor(ana, jorge).noAquesto"LusprogenitordeMaria?"tambmobteriaaresposta"no",porqueoprogramanemsequer conhece algum com o nome Lus.?-progenitor(lus, maria).noPerguntasmaisinteressantespodemtambmserformuladas,porexemplo:"Quemprogenitorderis?".Parafazerissointroduz-seumavarivel,porexemplo"X"naposiodoargumentocorres-pondente ao progenitor de ris. Desta feita o sistema no se limitar a responder "sim" ou "no", masir procurar (e informar caso for encontrado) um valor de X que torne a assertiva "X progenitor deris" verdadeira.?-progenitor(X, ris).X=josDamesmaformaaquesto"QuemsoosfilhosdeJos?"podeserformuladacomaintroduodeuma varivel na posio do argumento correspondente ao filhos de Jos. Note que, neste caso, mais deumarespostaverdadeirapodeserencontrada.Osistemairforneceraprimeiraqueencontrareaguardar manifestao por parte do usurio. Se este desejar outras solues deve digitar um ponto-e-vrgula (;), do contrrio digita um ponto (.), o que informa ao sistema que a soluo fornecida sufi-ciente.?-progenitor(jos, X).X=jlia;X=ris;noAqui altimarespostaobtidafoi"no"significandoquetodasassoluesvlidasjforamforneci-das.Umaquestomaisgeralparaoprogramaseria:"Quemprogenitordequem?"ou,comoutraformulao: "Encontre X e Y tal que X progenitor deY".Osistema,emresposta,irfornecer(en-quantosedesejar,digitando";")todososparesprogenitor-filhoatqueestesseesgotem(quandoento responde "no") ou at que se resolva encerrar a apresentao de novas solues (digitando ".").No exemplo a seguir iremos nos satisfazer com as trs primeiras solues encontradas.?-progenitor(X, Y).13X=maria Y=jos;X=joo Y=jos;X=joo Y=ana.Pode-seformularquestesaindamaiscomplicadasaoprograma,como"QuemsoosavsdeJor-ge?". Como nosso programa no possui diretamente a relao av, esta consultaprecisaserdivididaem duas etapas, como pode ser visto na Figura 2.2. A saber:(1) Quem progenitor de Jorge? (Por exemplo, Y) e(2) Quem progenitor de Y? (Por exemplo, X)EstaconsultaemPrologescritacomoumaseqnciadeduasconsultassimples,cujaleiturapodeser: "Encontre X e Y tais que X progenitor de Y e Y progenitor de Jorge".?-progenitor(X, Y), progenitor(Y, jorge).X=jos Y=risXYJorgeprogenitorprogenitoravFigura 2.2 A relao av em funo de progenitorObservequesemudarmosaordemdasconsultasnacomposio,osignificadolgicopermaneceomesmo, apesar do resultado ser informado na ordem inversa:?-progenitor(Y, jorge), progenitor(X, Y).Y=ris X=josDe modo similar podemos perguntar: "Quem neto de Joo?":?-progenitor(joo, X), progenitor(X, Y).X=jos Y=jlia;X=jos Y=ris.Aindaumaoutraperguntapoderiaser:"JoseAnapossuemalgumprogenitoremcomum?".Nova-mentenecessriodecomporaquestoemduasetapas,formulando-aalternativamentecomo:"En-contre um X tal que X seja simultaneamente progenitor de Jos e Ana".?-progenitor(X, jos), progenitor(X, ana).X=jooPor meio dos exemplos apresentados at aqui acredita-se ter sido possvel ilustrar os seguintes pontos: UmarelaocomoprogenitorpodeserfacilmentedefinidaemPrologestabelecendo-seastu-plas de objetos que satisfazem a relao; OusuriopodefacilmenteconsultarosistemaPrologsobreasrelaesdefinidasemseupro-grama; Um programa Prolog constitudo de clusulas, cada uma das quais encerrada por um ponto(.); Os argumentos das relaes podem ser objetos concretos (como jlia e ris) ou objetos genri-cos (como X e Y). Objetos concretos em um programa so denominados tomos, enquanto queos objetos genricos so denominados variveis;14 Consultasaosistemasoconstitudasporumoumaisobjetivos,cujaseqnciadenotaasuaconjuno; Uma resposta aumaconsultapodeserpositivaounegativa,dependendoseoobjetivocorres-pondentefoialcanadoouno.Noprimeirocasodizemosqueaconsultafoibem-sucedidae,no segundo, que a consulta falhou; Sevriasrespostassatisfizeremaumaconsulta,entoosistemaPrologirfornecertantasquantas forem desejadas pelo usurio.2.2 REGRASOprogramadarvoregenealgicapodeserfacilmenteampliadodemuitasmaneirasinteressantes.Inicialmentevamosadicionarinformaosobreosexodaspessoasalirepresentadas.Issopodeserfeito simplesmente acrescentando os seguintes fatos ao programa:masculino(joo).masculino(jos).masculino(jorge).feminino(maria).feminino(jlia).feminino(ana).feminino(ris).Asrelaesintroduzidasnoprogramasomasculinoefeminino.Taisrelaessounrias,isto,possuem um nico argumento. Uma relao binria, como progenitor, definida entre pares de obje-tos,enquantoqueasrelaesunriaspodemserusadasparadeclararpropriedadessimplesdessesobjetos. A primeira clusula unria da relao masculino pode ser lida como: "Joo do sexo mascu-lino". Poderia ser conveniente declarar a mesma informao presente nas relaes unrias masculino efeminino em uma nica relao binria sexo:sexo(joo, masculino).sexo(maria, feminino).sexo(jos, masculino). ... etc.A prxima extenso ao programa ser a introduo da relao filho como o inverso da relao proge-nitor. Pode-se definir a relao filho de modo semelhante utilizada para definir a relao progenitor,isto fornecendo uma lista de fatos, cada um dos quais fazendo referncia a um par de pessoas tal queuma seja filho da outra. Por exemplo:filho(jos, joo).Entretanto podemos definir arelao"filho"deumamaneiramuitomaiselegante,fazendoousodofato de que ela o inverso da relao progenitor e esta j est definida. Tal alternativa pode ser base-ada na seguinte declarao lgica:Para todo X e YY filho de X seX progenitor de Y.Essa formulao jseencontrabastanteprximadoformalismoadotadoemProlog.Aclusulacor-respondente, com a mesma leitura acima, :filho(Y, X) :- progenitor(X, Y).que tambm pode ser lida como: "Para todo X e Y, se X progenitor de Y, ento Y filho de X".Clusulas Prolog desse tipo so denominadas regras. H uma diferena importante entre regras e fa-tos. Um fato sempre verdadeiro, enquanto regras especificam algo que "pode ser verdadeiro se al-gumas condies forem satisfeitas". As regras tem: Uma parte de concluso (o lado esquerdo da clusula), e15 Uma parte de condio (o lado direito da clusula).O smbolo ":-" significa "se" e separa a clusula em concluso, ou cabea da clusula, e condio oucorpo da clusula, como mostrado no esquema abaixo. Se a condio expressa pelo corpo da clu-sula - progenitor (X, Y) - verdadeira ento, segue como conseqncia lgica que a cabea - filho(Y,X) - tambm o . Por outro lado, se no for possvel demonstrar que o corpo da clusula verdadeiro,o mesmo ir se aplicar cabea.filho(Y, X) :- progenitor(X, Y)A maioria dos sistemas Prolog, na ausncia de caracteres ASCII adequados, emprega o smbolo com-posto":-"paradenotaraimplicao"".Aqui,porumaquestodeclareza,adotaremosesteltimosmbolo, que o normalmente empregado na programao em lgica com clusulas definidas.AutilizaodasregraspelosistemaPrologilustradapeloseguinteexemplo:vamosperguntaraoprograma se Jos filho de Maria:?-filho(jos, maria).No h nenhum fato a esse respeito no programa, portanto a nica forma de considerar esta questo aplicando a regra correspondente. A regra genrica, no sentido de ser aplicvel a quaisquer objetosX e Y. Logo pode ser aplicada a objetos particulares, como jos e maria. Para aplicar a regra, Y sersubstitudo por jos e X por maria. Dizemos que as variveis X e Y se tornaram instanciadas para:X=maria e Y=josA parte de condio se transformou ento no objetivo progenitor(maria, jos). Em seguida o sistemapassa a tentar verificar se essa condio verdadeira. Assim o objetivo inicial, filho(jos, maria), foisubstitudopelosub-objetivoprogenitor(maria,jos).Essenovoobjetivoapresenta-secomotrivial,uma vez que h um fato no programa estabelecendo exatamente que Maria um dos progenitores deJos. Isso significa que a parte de condio da regra verdadeira, portanto a parte de concluso tam-bm verdadeira e o sistema responde "sim".Vamos agora adicionar mais algumas relaes aonossoprograma.Aespecificao,porexemplo,darelao me entre dois objetos do nosso domnio pode ser escrita baseada na seguinte declarao lgi-ca:Para todo X e YX me de Y seX progenitor de Y eX feminino.que, traduzida para Prolog, conduz seguinte regra:me(X, Y) :- progenitor(X, Y), feminino(X).ondeavrgulaentreasduascondiesindicaasuaconjuno,significandoque,parasatisfazerocorpo da regra, ambas as condies devem ser verdadeiras. A relao av, apresentada anteriormentena Figura 2.2, pode agora ser definida em Prolog por:av(X, Z) :- progenitor(X, Y), progenitor(Y, Z).Neste ponto interessante comentar alguma coisa sobre o layout dos programas Prolog. Estes podemserescritosquasequecomtotalliberdade,demodoquepodemosinserirespaosemudardelinhaonde e quando melhor nos aprouver. Em geral, porm, desejamos produzir programas de boa aparn-cia, elegantes e sobretudo fceis de ser lidos. Com essa finalidade, normalmente se prefere escrever acabea da clusula e os objetivos da condio cada um em uma nova linha. Para destacar a concluso,identamos os objetivos. A clusula av, por exemplo, seria escrita:av(X, Z) :-progenitor(X, Y),progenitor(Y, Z).16Adicionaremos ainda uma ltima relao ao nosso programa para exemplificar mais uma particulari-dadedalinguagemProlog.Umaclusulaparaarelaoirmseembasarianaseguintedeclaraolgica:Para todo X e YX irm de Y seX e Y possuem um progenitor comum eX do sexo feminino.Ou, sob a forma de regra Prolog:irm(X, Y) :-progenitor(Z, X),progenitor(Z, Y),feminino(X).Deve-se atentar para a forma sob a qual o requisito "X e Y possuem um progenitor comum" foi expres-sa. A seguinte formulao lgica foi adotada: "Algum Z deve ser progenitor de X e esse mesmo Z devetambm ser progenitor de Y". Uma forma alternativa, porm menos elegante, de representar a mesmacondio seria: "Z1 progenitor de X e Z2 progenitor de Y e Z1 igualaZ2".Seconsultarmososistema com "Jlia irm de ris?" , obteremos, como esperado, um "sim" como resposta. Podera-mos ento concluir que a relao irm,conformeanteriormentedefinida,funcionacorretamente,en-tretanto, h uma falha muito sutil que se revela quando perguntamos: "Quem irm de ris?". O sis-tema ir nos fornecer duas respostas:?-irm(X, ris).X=jlia;X=risdando a entender que ris irm de si prpria. Isso no certamente o que se tinha em mente na defi-nio de irm, entretanto, de acordo com a regra formulada, a resposta obtida pelo sistema perfeita-mente lgica. Nossa regra sobre irms no menciona que X e Y no devem ser os mesmos para que XsejairmdeY.Comoissonofoirequerido,osistema,comtodarazo,assumequeXeYpodemdenotaramesmapessoaeiracharquetodapessoadosexofemininoquepossuiumprogenitorirm de si prpria.ParacorrigirestadistoronecessrioacrescentaracondiodequeXeYdevemserdiferentes.Isso pode ser feito de diversas maneiras, conforme se ver mais adiante. Por enquanto vamos assumirque uma relao diferente(X, Y) seja reconhecida pelo sistema como verdadeira se e somente se X e Yno forem iguais. A regra para a relao irm fica ento definida por:irm(X, Y) :-progenitor(Z, X),progenitor(Z,Y),feminino(X),diferente(X, Y).Os pontos mais importantes vistos na presente seo foram: Programas Prolog podem ser ampliados pela simples adio de novas clusulas; As clusulas Prolog podem ser de trs tipos distintos: fatos, regras e consultas; Os fatos declaram coisas que so incondicionalmente verdadeiras; Asregrasdeclaramcoisasquepodemserounoverdadeiras,dependendodasatisfaodascondies dadas; Por meio de consultas podemos interrogar o programa acerca de que coisas so verdadeiras; As clusulas Prolog so constitudas por uma cabea e um corpo. O corpo uma lista de objeti-vos separados por vrgulas que devem ser interpretadas como conjunes; Fatos so clusulasquespossuemcabea,enquantoqueasconsultasspossuemcorpoeasregras possuem cabea e corpo;17 Aolongodeumacomputao,umavarivelpodesersubstitudaporoutroobjeto.Dizemosento que a varivel est instanciada; As variveis so assumidas como universalmente quantificadas nas regras e nos fatos e existen-cialmente quantificadas nas consultas2.3 CONSTRUES RECURSIVASIremos adicionar agora ao programa a relao antepassado, que ser definida a partir da relao pro-genitor. A definio necessita ser expressa por meio de duas regras, aprimeiradasquaisdefinirosantepassadosdiretos(imediatos)easegundaosantepassadosindiretos.DizemosqueumcertoXantepassadoindiretodealgumZsehumacadeiadeprogenituraentreXeZcomoilustradonaFigura 2.3. Na rvore genealgica da Figura 2.1, Joo antepassado direto de Ana e antepassado indi-reto de Jlia.A primeira regra, que define os antepassados diretos, bastante simples e pode ser formulada da se-guinte maneira:Para todo X e ZX antepassado de Z seX progenitor de Z.Maria JooJlia risJorgeprogenitor progenitorprogenitor (a)(b)antepassado diretoantepassado indiretoFigura 2.3 Exemplos da relao antepassadoou, traduzindo para Prolog:antepassado(X, Z) :-progenitor(X, Z).Por outro lado, a segunda regra mais complicada, porque a cadeia de progenitores poderia se esten-derindefinidamente.Umaprimeiratentativaseriaescreverumaclusulaparacadaposiopossvelna cadeia. Isso conduziria a um conjunto de clusulas do tipo:antepassado(X, Z) :-progenitor(X, Y),progenitor(Y, Z).antepassado(X, Z) :-progenitor(X, Y1),progenitor(Y1, Y2),progenitor(Y2, Z).antepassado(X, Z) :-progenitor(X, Y1),progenitor(Y1, Y2),progenitor(Y2, Y3),progenitor(Y3, Z). ... etc.Issoconduziriaaumprogramamuitograndeeque,dequalquermodo,somentefuncionariaatumdeterminadolimite,isto,somenteforneceriaantepassadosatumacertaprofundidadenarvore18genealgica de uma famlia, porque a cadeiadepessoasentreoantepassadoeseudescendenteserialimitadapelotamanhodamaiorclusuladefinindoessarelao.Hentretantoumaformulaoele-ganteecorretaparaarelaoantepassadoquenoapresentaqualquerlimitao.Aidiabsicadefinir a relao em termos de si prpria, empregando um estilo de programao em lgica denomina-do recursivo:Para todo X e ZX antepassado de Z seexiste um Y tal queX progenitor de Y eY antepassado de Z.A clusula Prolog correspondente :antepassado(X, Z) :-progenitor(X, Y),antepassado(Y, Z).Assimpossvelconstruirumprogramacompletoparaarelaoantepassadocompostodeduasre-gras: uma para os antepassados diretos e outra para os indiretos. Reescrevendo as duas juntas tem-se:antepassado(X, Z) :-progenitor(X, Z).antepassado(X, Z) :-progenitor(X, Y),antepassado(Y, Z).Tal definio pode causar certa surpresa, tendo em vista a seguinte pergunta: Como possvel ao de-finiralgumacoisaempregaressamesmacoisaseelaaindanoestcompletamentedefinida?Taisdefinies so denominadas recursivas e do ponto de vista da lgica so perfeitamente corretas e inte-ligveis, o que deve ficar claro, pela observao da Figura2.4.PoroutroladoosistemaPrologdevemuitodoseupotencialdeexpressividadecapacidadeintrnsecaquepossuideutilizarfacilmentedefinies recursivas. O uso de recurso , em realidade, uma das principais caractersticas herdadasda lgica pela linguagem Prolog.ZXYantepassadoantepassadoprogenitorFigura 2.4 Formulao recursiva da relao antepassadoHaindaumaquestoimportanteaserrespondida:ComorealmenteosistemaPrologutilizaopro-grama para encontrar as informaes procuradas? Uma explicao informal ser fornecida na prximaseo,antespormvamosreunirtodasaspartesdoprogramaquefoisendogradualmenteampliadopela adio de novos fatos e regras. A forma final do programa mostrada na Figura 2.5. O programaali apresentado define diversas relaes: progenitor, masculino, feminino, antepassado, etc. A relaoantepassado, por exemplo, definida por meio de duas clusulas. Dizemos que cada uma delas so-brearelaoantepassado.Algumasvezespodeserconvenienteconsideraroconjuntocompletodeclusulas sobre a mesma relao. Tal conjunto de clusulas denominado um predicado.19NaFigura2.5,asduasregrassobrearelaoantepassadoforamdistinguidascomosnomes[pr1]e[pr2]queforamadicionadoscomocomentriosaoprograma.Taisnomesseroempregadosadiantecomo referncia a essas regras. Os comentrios que aparecem em um programa so normalmente ig-norados pelo sistema Prolog, servindo apenas para melhorar a legibilidade do programa impresso. Oscomentrios se distinguem do resto do programa por se encontrarem includos entre os delimitadoresespeciais "/*" e "*/". Um outro mtodo, mais conveniente paracomentrioscurtos,utilizaocaracterde percentual "%": todo o texto informado entre o "%" e o final da linha interpretado como comen-trio. Por exemplo:/* Isto um comentrio. */% E isto tambm.progenitor(maria, jos).% Maria progenitor de Jos.progenitor(joo, jos).progenitor(joo, ana).progenitor(jos, jlia).progenitor(jos, ris).progenitor(ris, jorge).masculino(joo).% Joo do sexo masculino.masculino(jos).masculino(jorge).feminino(maria).% Maria do sexo feminino.feminino(ana).feminino(jlia).feminino(ris).filho(Y, X) :-% Y filho de X seprogenitor(X,Y).% X progenitor de Y.me(X,Y) :- % X me de Y seprogenitor(X, Y), % X progenitor de Y efeminino(X).% X do sexo feminino.av(X, Z) :-% X av de Z seprogenitor(X, Y), % X progenitor de Y eprogenitor(Y, Z). % Y progenitor de Z.irm(X, Y) :- % X irm de Y seprogenitor(Z, X), % X tem um progenitor, Z queprogenitor(Z, Y), % tambm progenitor de Y efeminino(X),% X do sexo feminino ediferente(X, Y).% X e Y so diferentes.antepassado(X, Z) :-% X antepassado de Z seprogenitor(X, Z). % X progenitor de Z. [pr1]antepassado(X, Z) :-% X antepassado de Z seprogenitor(X, Y), % X progenitor de Y eantepassado(Y, Z).% Y antepassado de Z. [pr2]Figura 2.5 Um programa Prolog2.4 CONSULTASUmaconsultaemPrologsempreumaseqnciacompostaporumoumaisobjetivos.Paraobteraresposta, o sistema Prolog tenta satisfazer todos os objetivos que compem a consulta, interpretando-os como uma conjuno. Satisfazer um objetivo significa demonstrar que esse objetivo verdadeiro,assumindoqueasrelaesqueoimplicamsoverdadeirasnocontextodoprograma.Seaquestotambmcontmvariveis,osistemaPrologdeverencontraraindaosobjetosparticularesque,atri-budos s variveis, satisfazem a todos os sub-objetivos propostos na consulta. A particular instancia-o das variveis com os objetos que tornam o objetivo verdadeiro ento apresentada ao usurio. Seno for possvel encontrar, no contexto do programa, nenhuma instanciao comum de suas variveisque permita derivar algum dos sub-objetivos propostos ento a resposta ser "no".Uma viso apropriada da interpretao de um programa Prolog em termos matemticos a seguinte:O sistema Prolog aceita os fatos e regras como um conjunto de axiomas e a consulta do usurio comoumteoremaaserprovado.Atarefadosistemademonstrarqueoteoremapodeserprovadocombasenosaxiomasrepresentadospeloconjuntodasclusulasqueconstituemoprograma.Essaviso20ser ilustrada com um exemplo clssico da lgica de Aristteles. Sejam os axiomas:Todos os homens so falveis.Scrates um homem.Um teorema que deriva logicamente desses dois axiomas :Scrates falvelO primeiro axioma pode ser reescrito como: "Para todo X, se X um homem ento X falvel". Nessamesma linha o exemplo pode ser escrito em Prolog como se segue:falvel(X) :-homem(X).homem(scrates).?-falvel(X).X=scratesUm exemplo mais complexo, extrado do programa apresentada na Figura 2.5 :?-antepassado(joo, ris).Sabe-se que progenitor(jos, ris) um fato. Usando esse fato e a regra [pr1], podemos concluir ante-passado(jos,ris).Esteumfatoderivado.Nopodeserencontradoexplcitonoprograma,maspode ser derivado a partir dos fatos e regras ali presentes. Um passo de inferncia como esse pode serescrito em uma forma mais complexa como:progenitor(jos, ris)antepassado(jos, ris)quepodeserlidoassim:"deprogenitor(jos,ris)segue,pelaregra[pr1]queantepassado(jos,ris)". Alm disso sabemos que progenitor(joo, jos) fato. Usando este fato e o fato derivado, ante-passado(jos,ris),podemosconcluir,pelaregra[pr2],queoobjetivoproposto,antepassado(joo,ris) verdadeiro. O processo completo, formado por dois passos de inferncia, pode ser escrito:progenitor(jos, ris)antepassado(jos, ris)eprogenitor(joo, jos) e antepassado(jos, ris)antepassado(joo, ris)Mostrou-se assim o que pode ser uma seqncia de passos de inferncia usada para satisfazer um ob-jetivo.Talseqnciadenomina-seseqnciadeprova.Aextraodeumaseqnciadeprovadocontexto formado por um programa e uma consulta obtida pelo sistema na ordem inversa da empre-gada acima. Ao invs de iniciar a inferncia a partir dos fatos, o Prolog comea com os objetivos e ,usando as regras, substitui os objetivos correntes por novos objetivos at que estes se tornem fatos.Dada por exemplo a questo: "Joo antepassadoderis?",osistematentaencontrarumaclusulano programa a partir da qual o oibjetivo seja conseqncia imediata. Obviamente, as nicas clusulasrelevantes para essa finalidade so [pr1] e [pr2], que so sobre a relao antepassado, porque so asnicas cujas cabeas podem ser unificadas com o objetivo formulado. Tais clusulas representam doiscaminhosalternativosqueosistemapodeseguir.InicialmenteoPrologirtentaraqueapareceemprimeiro lugar no programa:antepassado(X, Z) :- progenitor(X, Z).umavezqueoobjetivoantepassado(joo,ris),asvariveisnaregradevemserinstanciadasporX=joo e Y=ris. O objetivo inicial, antepassado(joo, ris) ento substitudo por um novo objetivo:progenitor(joo, ris)Noh,entretanto,nenhumaclusulanoprogramacujacabeapossaserunificadacomprogeni-tor(joo,ris),logoesteobjetivofalha.EntooPrologretornaaoobjetivooriginal(backtracking)paratentarumcaminhoalternativoquepermitaderivaroobjetivoantepassado(joo,ris).Aregra[pr2] ento tentada:antepassado(X, Z) :-progenitor(X, Y),21antepassado(Y, Z).Como anteriormente, as variveis X e Z so instanciadas para joo e ris, respectivamente. A varivelY,entretanto,noestinstanciadaainda.Oobjetivooriginal,antepassado(joo,ris)entosubsti-tudo por dois novos objetivos derivados por meio da regra [pr2]:progenitor(joo, Y), antepassado(Y, ris).Encontrando-se agora face a dois objetivos, o sistema tenta satisfaz-los na ordememqueestofor-mulados. O primeiro deles fcil: progenitor(joo, Y) pode ser unificado com dois fatos do programa:progenitor(joo, jos) e progenitor(joo, ana). Mais uma vez, o caminho a ser tentado deve correspon-derordememqueosfatosestoescritosnoprograma.AvarivelYentoinstanciadacomjosnos dois objetivos acima, ficando o primeiro deles imediatamente satisfeito. O objetivo remanescente ento:antepassado(jos, ris).Para satisfazer tal objetivo, a regra [pr1] mais uma vez empregada. Essa segunda aplicao de [pr1],entretanto, nada tem a ver com a sua utilizao anterior, isto , o sistema Prolog usa um novo conjuntode variveis na regra cada vez que esta aplicada. Para indicar isso iremos renomear as variveis em[pr1] nessa nova aplicao, da seguinte maneira:antepassado(X', Z') :-progenitor(X', Z').Acabeadaregradeveentoserunificadacomoonossoobjetivocorrente,queantepassado(jos,ris). A instanciao de X'e Y' fica: X'=jos e Y'=ris e o objetivo corrente substitudo por:progenitor(jos, ris)Esseobjetivoimediatamentesatisfeito,porqueaparecenoprogramacomoumfato.Osistemaen-controu ento um caminho que lhe permite provar, no contexto oferecido pelo programa dado, o obje-tivo originalmente formulado, e portanto responde "sim".2.5 O SIGNIFICADO DOS PROGRAMAS PROLOGAssume-se que um programa Prolog possua trs interpretaes semnticas bsicas. A saber: interpre-tao declarativa, interpretao procedimental, e interpretao operacional.Nainterpretaodeclarativaentende-sequeasclusulasquedefinemoprogramadescrevemumateoria de primeira ordem. Na interpretao procedimentas, as clusulas so vistas como entrada paraum mtodo de prova. Finalmente, na interpretao operacional as clusulas so vistas como comandospara um procedimento particular de prova por refutao.TaisalternativassemnticassovaliosasemtermosdeentendimentoecodificaodeprogramasProlog. A interpretao declarativa permite que o programador modele um dado problema atravs deassertivasacercadosobjetosdouniversodediscurso,simplificandoatarefadeprogramaoPrologem relao a outras linguagens tipicamente procedimentais como Pascal ou C. A interpretao proce-dimental permite que o programador identifique e descreva o problema pela reduo do mesmo a sub-problemas, atravs da definio de uma srie de chamadas a procedimentos. Por fim, a interpretaooperacional reintroduz a idia de controle da execuo (que irrelevante do ponto de vista da semn-tica declarativa), atravs da ordenao das clusulas e dos objetivos dentro das clusulas em um pro-gramaProlog.Essatimainterpretaosemelhantesemnticaoperacionaldemuitaslinguagensconvencionaisdeprogramao,edeveserconsiderada,principalmenteemgrandesprogramas,porquestesdeeficincia.interessantenotarqueoprogramadorpodecomutardeumainterpretaoparaoutra,produzindoumefeitosinrgicoquefacilitaconsideravelmenteacodificaodosprogra-mas Prolog.22EssahabilidadeespecficadoProlog,detrabalharemdetalhesprocedimentaisdeaosobreoseuprpriodomniodedefinio,isto,acapacidadedesermeta-programado,umadasprincipaisvantagensdalinguagem.Elaencorajaoprogramadoraconsiderarasemnticadeclarativadeseusprogramasdemodorelativamenteindependentedosseussignificadosprocedimentaleoperacional.Uma vez que os resultados do programa so considerados, em princpio, pelo seu significado declara-tivo, isto deveria ser, por decorrncia, suficiente para a codificao de programas Prolog. Isso possuigrandeimportnciapratica,poisosaspectosdeclarativosdoprogramasoemgeralmaisfceisdeentender do que os detalhes operacionais. Para tirar vantagem dessa caracterstica o programador devese concentrar principalmente no significado declarativo e , sempre que possvel, evitar os detalhes deexecuo.Aabordagemdeclarativa,narealidade,tornaaprogramaoemPrologmaisfcildoquenaslinguagensconvencionais.Infelizmente,entretanto,essainterpretaonemsempresuficiente.Como dever ficar claro mais adiante, em problemas de maior complexidade os aspectos operacionaisno podem ser ignorados. Apesar de tudo, a atribuio de significado declarativo aos programas Pro-log deve ser estimulada, na extenso limitada por suas restries de ordem prtica.RESUMO AprogramaoemPrologconsisteemestabelecerrelaesentreobjetoseemformularcon-sultas sobre tais relaes. UmprogramaPrologformadoporclusulas.Htrstiposdeclusulas:fatosouassertivas,regras ou procedimentos e consultas; Uma relao pode ser especificada por meio de fatos, que estabelecem as tuplas de objetos quesatisfazem a relao, por meio de regras, que estabelecem condies para a satisfao das rela-es, ou por meio de combinaes de fatos e regras descrevendo a relao; Denomina-se predicado ao conjunto de fatos e regras empregados para descrever uma determi-nada relao; Interrogar um programa acerca de suas relaes por meio de uma consulta corresponde acon-sultarumabasedeconhecimento.ArespostadosistemaPrologconsisteemumconjuntodeobjetos que satisfazem as condies originalmente estabelecidas pela consulta; Em Prolog, estabelecer se um objeto satisfaz a uma consulta freqentemente um problema decerta complexidade, que envolve inferncia lgica e a explorao de caminhos alternativos emuma rvore de busca ou de pesquisa, com a possvel utilizao de mecanismos especiais de re-torno (backtracking). Tudo isso feito automaticamente pelo sistema, de forma transparente aousurio; Trs tipos de semntica so atribudas aos programas Prolog: declarativa, procedimental e ope-racional.Oprogramadordeveempreg-lasconformeoproblemaaserresolvido,tirandopro-veito da situao apresentada.EXERCCIOS2.1 Amplie o programa apresentado na Figura 2.5 para representar as relaes tio, prima, cunhado esogra.2.2 Programe a relao descendente(X, Y), onde X descendente de Y.2.3 Escreva um programa Prolog para representar o seguinte:Joo nasceu em Pelotas e Jean nasceu em Paris.Pelotas fica no Rio Grande do Sul.Paris fica na Frana.S gacho quem nasceu no Rio Grande do Sul.232.4 Escreva um programa Prolog para representar o seguinte:Os corpos celeste dignos de nota so as estrelas, os planetas e os cometas.Vnus um corpo celeste, mas no uma estrela.Os cometas possuem cauda quando esto perto do sol.Vnus est perto do sol, mas no possui cauda.2.5 Assuma que os arcos em um grafo expressem custos, como no exemplo abaixo:ABCDEF35424522e sejam descritos atravs de assertivas da formaarco(R, S, T)significando que h um arco de custo T entre os nodos R e S. Por exemplo, arco(A, B, 3) descre-ve um arco de custo 3 entre os nodos A e B. Assuma tambm que o relacionamento mais(X, Y,Z) vale quando X+Y=Z. Defina o relacionamento custo(U, V, L) de forma a expressar que existeum caminho de custo L entre os nodos U e V.243. SINTAXE E SEMNTICAPrologumnomecomumparaumafamliadesistemasqueimplementamalgicadepredicadoscomo linguagem de programao. Algumas destas implementaes, como o Prolog de Edimburgo e oIC-Prolog,sobastanteconhecidasnosmeiosacadmicos.Outras,comoomicroProlog,oQuintus-Prolog e o Arity Prolog ganharam popularidade em diferentes segmentos. No presente texto se adota,visandomaiorclareza,umasintaxegenrica,capazdeserfacilmenteadaptadaaqualquerambienteProlog.ObjetoSimplesConstanteEstruturatomoVarivelNmeroFigura 3.1 Classificao dos Objetos Prolog3.1 OBJETOSNaFigura3.1apresenta-seumaclassificaodosobjetosemProlog.Osistemareconheceotipodeumobjetonoprogramapormeiodesuaformasinttica.IssopossvelporqueasintaxedoPrologespecifica formas diferentes para cada tipo de objeto. Na sintaxe aqui adotada, comum maioria dasimplementaes, variveis sempre iro iniciar com letras maisculas, enquanto que as constantes no-numricas, ou tomos, iniciam com letras minsculas. Nenhuma informao adicional, tal como tiposde dados precisa ser fornecida para que o sistema reconhea a informao com a qual est lidando.3.1.1 TOMOS E NMEROSNo captulo anterior viu-se informalmente alguns exemplos simples de tomos e variveis. Em geral,entretanto,estespodemassumirformasmaiscomplexas.Oalfabetobsicoadotadoaquiparaalin-guagem Prolog consiste dos seguintes smbolos: Pontuao: ( ) . ' " Conetivos: ,(conjuno); (disjuno):- (implicao) Letras: a, b, c, ..., z, A, B, C, ..., Z Dgitos: 0, 1, 2, ..., 9 Especiais: + - * / < > = : _ ... etc.25Os tomos podem ser construdos de trs maneiras distintas:a. Como cadeias de letras e/ou dgitos, podendo conter o caracter especial sublinhado (_), inician-do obrigatoriamente com letra minscula. Por exemplo: socratesx_y nilmostraMenu x47a_b_1_2b. Como cadeias de caracteres especiais. Por exemplo:::==/= ======>...++++c. Como cadeias de caracteres quaisquer, podendo inclusive incluir espaos em branco, desde quedelimitados por apstrofos ('). Por exemplo:'D. Pedro I''representao de conhecimento''13 de outubro de 1993''Robert Kowalski'Um certo cuidado necessrio na formao de tomos do tipo (b.) porque algumas cadeias de caracte-res especiais podem possuir um significado pr definido para o sistema Prolog subjacente, como cos-tuma acontecer, por exemplo, com as cadeias '==' e '=\=' .OsnmerosusadosemPrologcompreendemosnmerosinteiroseosnmerosreais.Asintaxedosnmeros inteiros bastante simples, como pode ser visto nos exemplos abaixo:1 1812 0 -273Nemtodososnmerosinteirospodemserrepresentadosemumcomputador,portantooescopodevariao dos nmeros inteiros est limitado a um intervalo entre algum menor e algum maior nmero,dependendodaimplementao.Normalmenteavariaopermitidanasimplementaescorrentessuficiente para atender todas as necessidades do usurio.Otratamentodosnmerosreaistambmvariadeimplementaoparaimplementao.Seradotadaaqui a sintaxe natural e consagrada, que faz uso do ponto decimal explcito.3.14159 0.000023 -273.16Os nmeros reais no so, na verdade, muito utilizados em programas Prolog tpicos. A razo disso que o Prolog uma linguagem orientada ao processamento simblico, no-numrico, em oposio slinguagens "devoradoras de nmeros", como por exemplo o Fortran. Na computao simblica, nme-rosinteirossofrequentementeempregados,porexemplo,paracontarositensemumalista,masanecessidade de nmeros reais bastante pequena, virtualmente inexistente.3.1.2 VARIVEISVariveis Prolog so cadeias de letras, dgitos e do caracter sublinhado (_), devendo iniciar com esteoucomumaletramaiscula.Ocaracter"_",sozinho,representaumavarivelannima,isto,seminteresse para um determinado procedimento. Exemplos de variveis so:XResultadoObjeto2Lista_de_Associados_var35_194_ (varivel annima)O escopo lxico de nomes de variveis apenas uma clusula. Isso quer dizer que, por exemplo, se onome X25 ocorre em duas clusulas diferentes, ento ele est representando duas variveis diferentes.Poroutrolado,todaocorrnciadeX25dentrodamesmaclusulaquersignificaramesmavarivel.26Essasituaodiferenteparaasconstantes:omesmotomosempresignificaomesmoobjetoaolongo de todo o programa.3.1.3 ESTRUTURASObjetosestruturados,ousimplesmenteestruturas,soobjetosquepossuemvrioscomponentes.Osprprioscomponentespodem,porsuavez,sertambmestruturas.Porexemplo,umadatapodeservista como uma estrutura com trs componentes: dia, mes e ano. Mesmo que sejam formadas por di-versoscomponentesasestruturassotratadasnoprogramacomoobjetossimples.Paracombinaroscomponentes em uma estrutura necessrio empregar um functor. Um functor um smbolo funcio-nal (um nome de funo) que permite agrupar diversos objetos em umnicoobjetoestruturado.Umfunctor adequada ao exemplo dado data, ento a data correspondente a 13 de outubro de 1993, cujaestrutura est presente na Figura 3.2, pode ser escrita como:data(13, outubro, 1993)data13 out. 1993datafunctor argumentos(13, outubro, 1993)(a) (b)Figura 3.2 Uma data como exemplo de objeto estruturadoNa figura acima, em (a) temos a representao de data sob a forma de rvore e em (b) a forma como escrita em Prolog. Todos os componentes no exemplo so constantes (dois inteiros e um tomo), en-tretanto,podemtambmservariveisououtrasestruturas.Umdiaqualquerdemarode1996,porexemplo, pode ser representado por:data(Dia, maro, 1996)Note que "Dia" uma varivel e pode ser instanciada para qualquer objeto em algum ponto da execu-o.Sintaticamente todos os objetos em Prolog so denominados termos. O conjunto de termos Prolog, ousimplesmente termos, o menor conjunto que satisfaz s seguintes condies: Toda constante um termo; Toda varivel um termo; Set1,t2,...,tnsotermosefumtomo,entof(t1,t2,...,tn)tambmumtermo,ondeotomo f desempenha o papel de um smbolo funcional n-rio. Diz-se ainda que a expresso f(t1,t2, ..., tn) um termo funcional Prolog.Todos os objetos estruturados podem ser representados como rvores. A raiz da rvore o functor eos ramos que dela partem so os argumentos ou componentes. Se algum dos componentes for tambmuma rvore, ento ele passa a constituir uma sub-rvore do objeto estruturado completo. Por exemplo,na Figura 3.3 mostrada a estrutura em rvore correspondente expresso:(a + b) * (c - 5)DeacordocomasintaxedostermosProlog,anteriormenteapresentada,etomandoossmbolos"*","+" e "-" como functores, a expresso dada pode ser escrita:*(+(a, b), -(c, 5))27*+ -a b c 5Figura 3.3 Uma expresso aritmtica estruturada em rvoreEste , naturalmente, um termo legal em Prolog, entretanto, no a forma trivial com a qual estamosacostumados. Normalmente se ir preferir a notao usual, infixa, como utilizada na matemtica. Naverdade a linguagem Prolog admite as duas formas, prefixa e infixa, para a escrita de expresses arit-mticas. Detalhes sobre operadores e definio de operadores especiais sero abordados mais adiante.3.2 UNIFICAONa seo anterior foi visto como os objetos podem ser utilizados na representao de objetos de dadoscomplexos. A operao mais importante entre dois termos Prolog denominadaunificao.Aunifi-caopode,porsis,produziralgunsresultadosinteressantes.Dadosdoistermos,diz-sequeelesunificam se:(1) Eles so idnticos, ou(2) Asvariveisdeambosostermospodemserinstanciadascomobjetosdemaneiraque,apsasubstituio das variveis por esses objetos, os termos se tornam idnticos.Por exemplo, os termos data(D, M, 1994) e data(X, maro, A) unificam. Uma instanciao que tornaos dois termos idnticos :D instanciada com X;M instanciada com maro;A instanciada com 1994.Por outro lado, os termos data(D, M, 1994) e data(X, Y, 94) no unificam, assim como no unificamdata(X,Y,Z)eponto(X,Y,Z).Aunificaoumprocessoquetomadoistermoscomoentradaeverificaseelespodemserunificados.Seostermosnounificam,dizemosqueoprocessofalha.Seeles unificam, ento o processo bem-sucedido e as variveis dos termos que participam do processoso instanciadas com os valores encontrados para os objetos, de modo que os dois termos participan-tes se tornam idnticos. Vamos considerar novamente a unificao entre duas datas. O requisito paraque essa operao se efetue informada ao sistema Prolog pela seguinte consulta, usando o operador"=":?-data(D, M, 1994) = data(X, maro, A)J foi mencionada a instanciao D=X, M=maro e A=1994, que obtm a unificao. H, entretanto,outras instanciaes que tambm tornam os termos idnticos. Duas delas so:D=1, X=1, M=maro, A=1994D=terceiro, X=terceiro, M=maro, A=1994Essas duas instanciaes so consideradas menos gerais do que a primeira, uma vez que restringem ovalordasvariveisDeXmaisfortementedoqueserianecessrio..Paratornarosdoistermosdoexemplo idnticos, basta que D e X tenham o mesmo valor, seja qual for esse valor. A unificao emProlog sempre resulta na instanciao mais geral, isto , a que limita o mnimo possvel o escopo devaloresdasvariveis,deixandoamaiorliberdadepossvelsinstanciaesposteriores.Asregras28gerais que determinam se dois termos S e T unificam so as seguintes: Se S e T so constantes, ento S e T unificam somente se ambos representam o mesmo objeto; Se S uma varivel e T qualquer coisa, ento S e T unificam com S instanciada com T. In-versamente, se T uma varivel, ento T instanciada com S; Se S e T so estruturas, unificam somente se: (1) S e T tem o mesmo functor principal, e (2) to-dos os seus componentes correspondentes tambm unificam. A instanciao resultante deter-minada pela unificao dos componentes.Essa ltima regra pode ser exemplificada pelo processo de unificao dos termostringulo(ponto(1, 1), A, ponto(2, 3))comtringulo(X, ponto(4, Y), ponto(2, Z))cuja representao em rvore apresentada na Figura 3.4.tringuloponto A ponto1 1 2 3tringuloponto2 Zponto4 YXFigura 3.4 Termos representados em rvoreO processo de unificao comea pela raiz (o functor principal). Como ambos os functores unificam,o processo parte para a unificao dos argumentos, onde a unificao dos pares de argumentos corres-pondentes ocorre. Assim o processo completo pode ser visto como a seguinte seqncia de operaesde unificao simples:tringulo = tringuloponto(1, 1) = XA = ponto(4, Y)ponto(2, 3) = ponto(2, Z)Oprocessocompletodeunificaobemsucedidoporquetodasasunificaesnaseqnciaacimatambm o so. A instanciao resultante :X = ponto(1, 1)A = ponto(4, Y)Z = 33.3 SEMNTICA DECLARATIVA E SEMNTICA PROCEDIMENTALConformeseestudounocaptuloanterior,osprogramasPrologpodemserinterpretadosdetrsma-neirasdistintas:declarativamente,procedimentalmenteeoperacionalmente.Iremosagoraaprofundar29um pouco tais idias. Seja por exemplo a clusula:P :- Q, Ronde P, Q e R possuem a sintaxe de termos Prolog. Duas alternativas para a leitura declarativa dessaclusula so:P verdadeira se Q e R so verdadeiraseDe Q e R segue PPor outro lado, duas leituras procedimentais alternativas so:Para solucionar o problema Pprimeiro solucione o subproblema Qe depois solucione o subproblema RPara satisfazer P, primeiro satisfaa Q e depois RAssim a diferena entre as leituras declarativa e procedimental reside principalmente no fato que essaltimanoapenasdefineorelacionamentolgicoexistenteentreacabeaeocorpodaclusula,como tambm exige a existncia de uma ordem na qual os objetivos sero processados.Asemnticadeclarativadosprogramasdeterminaseumdadoobjetivoverdadeiroe,sefor,paeraquevaloresdevariveisistoseverifica.Paradefinirprecisamenteosignificadodeclarativoprecisa-mosintroduziroconceitodeinstnciadeumaclusula.UmainstnciadeumaclusulaCessamesma clusula C com cada uma de suas variveis substituda por algum termo. Uma variante de umaclusulaCumainstnciadessamesmaclusulaCcomcadaumadesuasvariveissubstitudaporoutra varivel. Considere, por exemplo, a clusula:temFilho(X) :- progenitor(X, Y).Duas variantes dela so:temFilho(A) :- progenitor(A, B).temFilho(Joo) :- progenitor(Joo, Algum).Duas instncias dela so:temFilho(joo) :- progenitor(joo, Algum).temFilho(sr(J)) :- progenitor(sr(J), jr(J)).Assim, dado um programa e um objetivo G, o significado declarativo nos diz que:"Um objetivo G verdadeiro (isto , satisfatvel ou segue logicamente do programa) se e somente se h uma clu-sula C no programa e uma instncia I de C tal que: (1) A cabea de I idntica a G, e (2) todos os objetivosno corpo de I so verdadeiros."Essa definio pode ser estendida para as consultas como se segue: Em geral uma consulta ao sistemaProlog uma lista de objetivos separados por vrgulas. Uma lista de objetivos verdadeira se todos osobjetivosnelacontidossoverdadeirosparaalgumainstanciaodesuasvariveis.Osvaloresatri-budos s variveis que tornam os objetivos da lista simultaneamente verdadeiros correspondem suainstanciao mais geral.Umavrgulaentreosobjetivossignificaaconjunodestesobjetivos,isto,todosdevemsersatis-feitos. A linguagem Prolog tambm aceita a disjuno de objetivos: basta que um s dentre os objeti-vosdadisjunosejasatisfeitoparaquetodooconjuntosejaconsideradosatisfeito.Aoperaodedisjuno representada pelo ponto-e-vrgula (;). Por exemplo, a clusula abaixo:P :- Q; R.lida:PverdadeiroseQverdadeiroouRverdadeiro.Osignificadodaclusulaportantoomesmo que:P :- Q.P :- R.30A operao de conjuno mais forte do que a disjuno, assim a clusula:P :- Q, R; S, T, U.deve ser entendida como:P :- (Q, R); (S, T, U).e significa o mesmo que as clusulas:P :- Q, R.P :- S, T, U.3.4 SEMNTICA OPERACIONALOsignificadooperacionalespecificacomooPrologrespondeasconsultasquelhesoformuladas.Responder a uma consulta significa satisfazer uma lista de objetivos. Estes podem ser satisfeitos se asvariveis que neles ocorrem podem ser instanciadas de forma que eles possam ser conseqncia lgicado programa. Assim, o significado operacional do Prolog o de um procedimento computacional paraexecutarumalistadeobjetivoscomrespeitoaumdadoprograma.Comexecutarobjetivossequersignificar tentar satisfaz-los. Considere o diagrama mostrado na Figura 3.5, representando tal proce-dimento,quedenominaremosexecutor.Suasentradasesadasso:(1)entrada:umprogramaeumalista de objetivos; (2) sada: um indicador de sucesso/falha e instanciaes de variveis.O significado dos resultados de sada do executor o seguinte: O indicador de sucesso/falha tem o valor "sim" se os objetivos forem todos satisfeitos e "no"em caso contrrio; As instanciaes so produzidas somente no caso deconclusobem-sucedidaecorrespondemaos valores das variveis que satisfazem os objetivos.programa objetivosexecutorsucesso/falha instanciaesFigura 3.5 Procedimento de execuo do sistema PrologRESUMOAt aqui estudou-se um tipo de Prolog bsico, denominado tambm de Prolog "puro". Esta denomina-o devida ao fato de corresponder muito de perto lgica de predicados de primeira ordem. Exten-sescujoobjetivoadequaralinguagemanecessidadesprticasseroestudadasmaisadiante.Ospontos mais importantes do presente captulo so: Objetos simples, em Prolog, so tomos, variveis e nmeros. Objetos estruturados, ou estrutu-ras so empregados para representar entidades que possuem diversos componentes; Asestruturassoconstrudaspormeiodefunctores.Cadafunctordefinidopormeiodeseunome e sua aridade ou nmero de argumentos; O tipo de um objeto reconhecido exclusivamente atravs de sua forma sinttica;31 O escopo lxico das variveis em um programa uma clusula. O mesmo nome de varivel emduas clusulas distintas representa duas variveis diferentes; AsestruturasPrologpodemsersemprerepresentadaspormeiodervores.Prologpodeservista como uma linguagem orientada ao processamento de rvores; A operao de unificao toma dois termos e tenta torn-los idnticos por meio da instanciaodas variveis em ambos; Quando a unificao bem sucedida, resulta na instanciao mais geral das variveis envolvi-das; A semntica declarativa do Prolog define se um objetivo verdadeiro com relao a um dadoprograma e, se for, para que particulares instanciaes de variveis isto ocorre; Uma vrgula entre os objetivos significa a sua conjuno, enquanto que um ponto-e-vrgula si-gnifica a sua disjuno; Asemnticaoperacionalrepresentaumprocedimentoparasatisfazeralistadeobjetivosnocontexto de um dado programa. A sada desse procedimento o valor-verdade da lista de obje-tivoscomarespectivainstanciaodesuavariveis.Oprocedimentopermiteoretornoauto-mtico (backtracking) para o exame de novas alternativas; AinterpretaodeclarativadeprogramasescritosemPrologpuronodependedaordemdasclusulas nem da ordem dos objetivos dentro das clusulas; Ainterpretaoprocedimentaldependedaordemdosobjetivoseclusulas.Assimaordempodeafetaraeficinciadeumprograma.Umaordenaoinadequadapodemesmoconduzirachamadas recursivas infinitas;EXERCCIOS3.1 Quais dos seguintes objetos esto sintaticamente corretos e a que tipo de objeto pertencem?a. Danielab. danielac. 'Daniela'd. _danielae. 'Daniela vai a Paris'f. vai(daniela, paris)g. 8118h. 2(X, Y)i. +(sul, oeste)j. trs(Cavalos(Baios))3.2 Sugira uma representao para retngulos, quadrados, crculos e elipses, usando uma abordagemsimilar apresentada na Figura 3.4. Procure obter a representao mais geral possvel, por exem-plo, um quadrado um caso especial de retngulo e um crculo pode ser considerado um caso es-pecial de elipse.3.3 Quais das prximas operaes de unificao sero bem sucedidas e quais iro falhar? Para as queforem bem sucedidas, quais so as instanciaes de variveis resultantes?a. ponto(A, B) = ponto(1, 2)b. ponto(A, B) = ponto(X, Y, Z)c. mais(2, 2) = 4d. +(2, D) = +(E, 2)e. t(p(-1,0), P2, P3) = t(P1, p(1, 0), p(0, Y))3.4 DefinaumarepresentaoPrologparasegmentosderetanoplanoexpressosemfunodos32pontos limites. Que termo ir representar qualquer segmento de reta vertical em X=5?3.5 Supondo que um retngulo seja representado pelo termo:retngulo(SupEsq, InfDir)onde SupEsq representa o ponto superior esquerdo e InfDir o ponto inferior direito de um retn-gulo em uma tela de vdeo (1280 x 1024), defina a relaoquadrado(R, ...)que verdadeira se R um quadrado.3.6 Considere o seguinte programa:f(1, um).f(s(1), dois).f(s(s(1))), trs).f(s(s(s(X))), N) :- f(X, N).Como iria o sistema Prolog responder as seguintes questes? Quando vrias respostas so poss-veis, d pelo menos duas:a. ?-f(s(1), A).b. ?-f(s(s(1)), dois).c. ?-f(s(s(s(s(s(s(1)))))), C).d. ?-f(D, trs).334. OPERADORES E ARITMTICA4.1 OPERADORESNa matemtica costuma-se escrever expresses como2*a + b*conde + e * so operadores e 2, a, b e c so argumentos. Em particular, + e * so denominados opera-doresinfixosporqueselocalizamentreosdoisargumentosqueoperam.Taisexpressessorepre-sentadas por rvores como na Figura 4.1 e podem ser escritas, se for desejado, sob a forma de termosProlog, com os smbolos + e * como functores:+(*(2, a), *(b, c))+* *2 a b cFigura 4.1 Representao em rvore da expresso +(*(2, a), *(b, c))Normalmente,entretanto,prefervelescreverasexpressesmatemticasnaformausual,comosoperadores infixos, como em:2*a + b*cTalnotaotambmaceitapeloProlog,entretanto,trata-seapenasdarepresentaoexternadesteobjeto, que ser automaticamente convertida para a forma convencional dos termos Prolog. Na sada,entretanto, o termo ser novamente convertido para a forma externa, com os operadores infixos.Assim, as expresses matemticas so manipuladas pelo Prolog comomerasextensesnotacionaisenenhum novo princpio para a estruturao deobjetosestsendoproposto.Seforescritoa+b,osis-tema ir reconhecer e manipular tal expresso exatamente como se houvesse sido escrito +(a, b). Paraque o sistemaentendaapropriadamenteexpressestaiscomoa+b*c,necessrioexistirumapriori-dade de execuo entre os operadores. Assim o operador + executado prioritariamente ao operador*. essa prioridade de execuo que decide qual a interpretao correta da expresso. Por exemplo, aexpresso a+b*c poderia em princpio ser entendida como:+(a, *(b, c)) ou *(+(a, b), c)A regra geral que o operadordemaiorprioridadesejaofunctorprincipaldotermo.Seexpressescontendo + e * devem ser entendidas segundo as convenes usuais, ento + deve ter maior precedn-cia que *. Assim a expresso a+b*c