Prolog Tutorial

De Augusto Baffa Wiki
Ir para navegação Ir para pesquisar
Outros idiomas:
English • ‎português do Brasil

Este material é uma tradução (com pequenas adaptações e atualizações) do material original publicado pelo professor Dr. John R. Fisher, Ph.D., professor emérito na California State Polytechnic University, Pomona, com sua autorização concedida em 14 de outubro de 2020. Todo o conteúdo está sendo revisado pelo professor Dr. Augusto Baffa, D.Sc., professor do Departamento de Informática da Pontifícia Universidade Católica do Rio de Janeiro (PUC-Rio) que também deverá adicionar novos exemplos com conectores para programas em Python.

Veja todo o conteúdo deste tutorial consultando o sumário.


Introdução

Prolog é uma linguagem de programação lógica e declarativa. O próprio nome, Prolog, é uma abreviação de PROgramming in LOGic. A herança da Prolog inclui a pesquisa sobre provadores de teoremas e outros sistemas de dedução automatizados desenvolvidos nas décadas de 1960 e 1970. O mecanismo de inferência do Prolog é baseado no princípio de resolução de Robinson (1965)[1] juntamente com os mecanismos de extração de respostas propostos por Green (1968)[2]. Essas ideias se juntaram com força com o advento dos procedimentos de resolução linear. Procedimentos explícitos de resolução linear direcionada a um objetivo, como os de Kowalski e Kuehner (1971)[3] e Kowalski (1974)[4], deram ímpeto ao desenvolvimento de um sistema de programação lógica de propósito geral. O "primeiro" Prolog foi "Marseille Prolog" baseado no trabalho de Colmerauer (1970). A primeira descrição detalhada da linguagem Prolog foi o manual para o intérprete Marseille Prolog (Roussel, 1975). A outra grande influência na natureza deste primeiro Prolog foi que ele foi projetado para facilitar o processamento de linguagem natural.


Prolog é o principal exemplo de uma linguagem de programação de quarta geração que suporta o paradigma de programação declarativa. O Projeto de Computador Japonês de Quinta Geração, anunciado em 1981, adotou Prolog como uma linguagem de desenvolvimento e, portanto, concentrou considerável atenção na linguagem e em suas capacidades. Os programas neste tutorial são escritos em Prolog "padrão" (University of) Edinburgh, conforme especificado no livro Prolog clássico dos autores Clocksin e Mellish (1981, 1992)[5]. O outro tipo principal de Prolog é a família Prolog II de Prologs que são descendentes do "Marseille Prolog". A referência a Giannesini, et.al. (1986)[6] usa uma versão do Prolog II. Existem diferenças entre essas duas variedades de Prolog: parte da diferença é a sintaxe e parte é a semântica. No entanto, os alunos que aprendem qualquer tipo de Prolog podem facilmente se adaptar ao outro tipo.


Este tutorial deve ser usado para ajudar a aprender os conceitos básicos e essenciais do Prolog. Os programas de amostra foram especialmente escolhidos para ajudar a promover o uso da programação Prolog em um curso de inteligência artificial. Lisp e Prolog são as linguagens de programação simbólica mais usadas para inteligência artificial. Elas são amplamente consideradas como linguagens excelentes para "programação exploratória" e "programação baseada em protótipo".

Capítulos

Para uma visão completa de todo o conteúdo, consulte o sumário.

  • O Capítulo 1 explica o ambiente de programação Prolog para o iniciante.
  • O Capítulo 2 explica a sintaxe do Prolog e muitos fundamentos da programação do Prolog através do uso de exemplos cuidadosamente escolhidos. Os programas exemplo são organizados para orientar o aluno através do desenvolvimento de programas Prolog que são construídos de forma declarativa de cima para baixo. Todo o cuidado foi tomado para cobrir as técnicas de programação Prolog que são muito úteis em um curso de inteligência artificial. Na verdade, este manual pode servir como uma introdução conveniente, pequena e concisa do Prolog para tal curso. Questões semânticas foram abordadas pela introdução antecipada do conceito de uma árvore de cláusulas do programa que é usada para definir de uma maneira abstrata quais são as consequências de uma especificação de programa Prolog. O autor acredita que esta seja uma maneira viável de promover as questões semânticas básicas de verificação de software para programação Prolog. A última seção deste capítulo apresenta um exemplo que mostra que Prolog pode ser usado efetivamente para fornecer especificações precisas e cuidadosas de sistemas, ao contrário de sua reputação usual de ser difícil de documentar porque é fácil de usar como uma ferramenta de programação exploratória.
  • O Capítulo 3 explica a operação do mecanismo de inferência subjacente do Prolog e deve ser lido pela primeira vez depois que o aluno tiver estudado dois ou três dos programas exemplo do Capítulo 2. A última seção deste capítulo apresenta os meta-interpretadores do Prolog.
  • O Capítulo 4 fornece uma visão resumida dos principais predicados embutidos do Prolog, muitos dos quais são exemplificados no Capítulo 2.
  • O Capítulo 5 fornece um esboço para o desenvolvimento de programas de busca A*. A seção 5.3 tem um programa com busca αβ para o jogo da velha.
  • O Capítulo 6 apresenta uma apresentação única e extensa de um meta-interpretador lógico para bases de regra lógicas normais.
  • O Capítulo 7 fornece uma introdução ao gerador de analise gramatical embutido do Prolog e uma breve visão geral de como o Prolog pode ser usado para analisar sentenças em inglês (linguagem natural). Além disso, há uma seção que cobre a construção de interfaces de linguagem natural idiomática simples para programas.
  • O Capítulo 8 mostra como implementar diversos protótipos Prolog. A seção (§8.4) desenvolve uma conexão interativa entre Prolog (máquina de inferência) e Java (GUI) para jogar jogo da velha. O modelo de conexão simples é amplamente adaptável e aplicável.


Notas Finais do Autor

Versões anteriores de partes deste tutorial datam de 1988. O material introdutório foi originalmente usado para ajudar a explicar um interpretador Prolog desenvolvido pelo autor (não mais disponível) para uso em seus cursos. O autor acredita que o material introdutório, reunido na forma dada aqui, pode ser muito útil para o aluno que deseja uma introdução rápida, mas bem adaptada, ao Prolog.

Para tratamentos mais completos do Prolog, o aluno é aconselhado a consultar os livros de Clocksin e Mellish (1981,1992)[5], de O'Keefe (1990)[7], de Clocksin (1997[8], 2003[9]) ou de Sterling e Shapiro (1986)[10].

Para excelentes notas históricas sobre Prolog e processamento de linguagem natural usando Prolog, é recomendado o texto de Pereira e Shieber (1987)[11].


Referências

  • A Prolog Compendium (pdf) by Marc Bezem: Esta é uma excelente visão geral conceitual do Prolog adequado para o componente de programação lógica de um curso de Princípios de Linguagens de Programação.

  1. Appel, K.R., and Haken, W., Every planar map is four colorable, Bull. Am. Math. Soc., vol. 82, pp. 711-712, 1976.
  2. Apt, K., and Etalle, S., On the Unification Free Prolog Programs, Computer Science/Department of Software Technology, Report CS-R9331, May 1993.
  3. Baader, and F., Snyder, W., Unification Theory, Chapter 8 of Handbook of Automated Reasoning, edited by Alan Robinson and Andrei Voronkov, Elsevier Science Publishers , 2001.
  4. Bratko, I., Prolog Programming for Artificial Intelligence, Addison-Wesley International Computer Science Series, 1986.
  5. Campbell, J.A., ed., Implementations of Prolog, Wiley, 1984.
  6. Chang, C., and Lee, R. C., Symbolic Logic and Mechanical Theorem Proving, Academic Press, 1973.
  7. Clocksin, W.F., and Mellish, C.S., Programming in Prolog, Springer-Verlag, 1981, 1992.
  8. Clocksin, W.F., Cause and Effect: Prolog programming for the working programmer, Springer-Verlag, 1997.
  9. Clocksin, W.F., Programming in Prolog: using the ISO standard , Springer-Verlag, 2003.
  10. Covington, M. A.,Nute, D., and Vellino, A. Prolog Programming in Depth, Scott, Foresman and Company, Glenview, IL, London, 1988.
  11. DeGroot, D., and Lindstrom, G., Logic Programming, Relations, and Equations, Prentice- Hall, 1986.
  12. Fisher, J.R., Semantic trees for disjunctive logic programs, Intelligent Systems, Proc. Third Golden West International Conference, ed. E.A. Yfantis, pp.291-305, Klewer Academic Publishers, 1995.
  13. Fisher, J.R., Logic program based action specifications, Proc. 1995 Symposium on Applied Computing (SAC'95), Nashville, Tenn., pp.248-52.
  14. Fisher, J.R., and Tran, L., A Visual Logic, Proc. 1996 Symposium on Applied Computing (SAC'96), Philadelphia, Pa., pp.17-21.
  15. Gazdar, G., and Mellish, C., Natural Language Processing in Prolog, Addison-Wesley, 1989.
  16. Giannesini, F, Kanoui, H, Pasero, R., and van Caneghem, M, Prolog, Addison-Wesley International Computer Science Series, 1986.
  17. Green, C., Theorem-proving by resolution as a basis for question-answering systems, in B. Meltzer and D. Michie, eds., Machine Intelligence 4, 183-205, Edinburgh University press, 1968.
  18. Kowalski, R.A., Logic for problem solving, DCL Memo 75, Department of Artificial Intelligence, University of Edinburgh, Scotland, 1974.
  19. Kowalski, R.A., Logic for Problem Solving, North Holland, 1979.
  20. Kowalski, R.A., and Kuehner, D., Linear Resolution with selection function, Artificial Intelligence, (2) 227-60, 1971.
  21. Lloyd, J.W., Foundations of Logic Programming, Springer-Verlag, 1984, 2nd ed. 1987.
  22. Nilsson, N., Principles of Artificial Intelligence, Tioga, 1980.
  23. O'Keefe, Richard A.,The Craft of Prolog, MIT Press, 1990.
  24. Pereira, Fernando C.N., and Shieber, Stuart M., Prolog and Natural-Language Analysis, CSLI, 1987.
  25. Robinson, J.A., A machine-oriented logic based on the resolution principle, Journal A.C.M., (12) 23-44, 1965.
  26. Rowe, W.C., AI Through Prolog, Prentice Hall, 1988.
  27. Shoham, Y., Artificial Intelligence Techniques in Prolog, Morgan Kaufmann Publishers, 1994.
  28. Sterling, Leon, and Shapiro, Ehud, The Art of Prolog, MIT Press, 1986.
  29. Van Le, T., Prolog Programming, Wiley, 1993.
  30. Winston, Patrick Henry, Artificial Intelligence, 2nd. ed., Addison-Wesley, 1984.
  31. Winston, P.H., and Horn, P., Lisp, Addison-Wesley, 1985.


Veja Também


Referências

  1. Robinson, J.A., A machine-oriented logic based on the resolution principle, Journal A.C.M., (12) 23-44, 1965
  2. Green, C., Theorem-proving by resolution as a basis for question-answering systems, in B. Meltzer and D. Michie, eds., Machine Intelligence 4, 183-205, Edinburgh University press, 1968
  3. Kowalski, R.A., and Kuehner, D., Linear Resolution with selection function, Artificial Intelligence, (2) 227-60, 1971
  4. Kowalski, R.A., Logic for problem solving, DCL Memo 75, Department of Artificial Intelligence, University of Edinburgh, Scotland, 1974.
  5. 5,0 5,1 Clocksin, W.F., and Mellish, C.S., Programming in Prolog, Springer-Verlag, 1981, 1992.
  6. Giannesini, F, Kanoui, H, Pasero, R., and van Caneghem, M, Prolog, Addison-Wesley International Computer Science Series, 1986.
  7. O'Keefe, Richard A.,The Craft of Prolog, MIT Press, 1990.
  8. Clocksin, W.F., Cause and Effect: Prolog programming for the working programmer, Springer-Verlag, 1997
  9. Clocksin, W.F., Programming in Prolog: using the ISO standard , Springer-Verlag, 2003.
  10. Sterling, Leon, and Shapiro, Ehud, The Art of Prolog, MIT Press, 1986.
  11. Pereira, Fernando C.N., and Shieber, Stuart M., Prolog and Natural-Language Analysis, CSLI, 1987.