DEPARTAMENTO DE MATEMÁTICA

 

LIVRO DE SUMÁRIOS

Cadeira Programação em Lógica

Ano lectivo: 1998/99 Semestre Ímpar

Horário

Teóricas

3ª feiras

11:00

13:00

 

Práticas

4ª feiras

9:00

11:00

 

 

Docente: José Júlio Alves Alferes

 

Frequências e exames

25/01/99

14:00

Sala 128

CLAV

19/02/99

14:00

Sala 128

CLAV

 

Júri: José Júlio Alves Alferes

Irene Pimenta Rodrigues

Salvador Pinto Abreu

 

Aula N. 1 (teórica) Data 06/10/1998

Sumário: Breve história da Programação em Lógica. Conceitos básicos: programa como conjunto de regra e factos; interpretação universal de variáveis em factos e regras; perguntas/golos e interpretação existencial de variáveis. Primeira introdução à semântica operacional da programação em lógica: derivação SLD; "backtracking" (ou retrocesso).

 

Aula N. 1 (prática) Data 07/10/1998

Sumário: Familiarização com o XSB-Prolog e suas funcionalidades. Breve discussão sobre outros sistemas de programação em Prolog. Consulta de programas. Experimentação com o programa de especificação de relações familiares, apresentado na 2ª aula teórica. Ambientação com o mecanismo de trace do Prolog.

 

Aula N. 2 (teórica) Data 13/10/1998

Sumário: Introdução às noções de termo e símbolo funcional. Descrição da sintaxe de programas Prolog "puros". Estruturas de dados recursivas. Programação de relações simples sobre números naturais. Introdução às listas em Prolog. Programação de predicados simples sobre listas.

 

Aula N. 2 (prática) Data 14/10/1998

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

 

Aula N. 3 (teórica) Data 20/10/1998

Sumário: Continuação de programação com listas. Outras estruturas de dados recursivas: programas sobre árvores binárias e fórmulas de lógica proposicional.

 

Aula N. 3 (prática) Data 21/10/1998

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

 

Aula N. 4 (teórica) Data 27/10/1998

Sumário: Primitivas Prolog para cálculo aritmético: predicado is/2, operadores aritméticos, comparadores. Uso das primitivas em programas simples. Recursividade terminal e versões "iterativas". "Tradução" de versões iterativas de programas em linguagens imperativas, para programas em lógica com recursividade terminal.

 

Aula N. 4 (prática) Data 28/10/1998

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

 

Aula N. 5 (teórica) Data 03/11/1998

Sumário: Análise mais detalhada da semântica procedimental de programas em lógica. Problemas de ciclos infinitos e de soluções redundantes. Controlo procedimental de programas: "cuts".

 

Aula N. 5 (prática) Data 04/11/1998

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

 

Aula N. 6 (teórica) Data 10/11/1998

Sumário: Predicados de sistema para análise de tipo e estruturas de dados: predicados integer/1, atom/1, compound/1, real/1, atomic/1, number/1, functor/3, arg/3 e =../2. Predicados de sistema meta-lógicos: predicados var/1, nonvar/1, ground/1, ==/2, copy_term/2 e call/1. Variáveis e predicados como objectos. Negação por falha finita.

 

Aula N. 6 (prática) Data 11/11/1998

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

 

Aula N. 7 (teórica) Data 17/11/1998

Sumário: Predicados extra-lógicos com efeitos colaterais: processamento de input/output; predicados de manipulação/alteração de programas.

 

Aula N. 7 (prática) Data 18/11/1998

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

  

Aula N. 8 (teórica) Data 24/11/1998

Sumário: Técnicas de programação aproveitando o uso de não determinismo.

 

Aula N. 8 (prática) Data 25/11/1998

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

 

Aula N. 9 (teórica) Data 02/12/1998

Sumário: Estruturas de dados incompletas: listas de diferença, filas, dicionários, termos incompletos. Técnicas de meta-programação com programação em lógica: programação de predicados que analisam soluções. Apresentação dos predicados de sistema: findall/3, bagof/3 e setof/3. Uso destes predicados em vários exemplos.

 

Aula N. 9 (prática) Data 09/12/1998

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

  

Aula N. 10 (teórica) Data 15/12/1998

Sumário: Definição de operadores em Prolog. Interpretadores para dar significado aos novos operadores. Interpretador de Prolog em Prolog: "vanilla meta-interpreter". Interpretadores para extensões à linguagem do Prolog: exemplo de introdução de equivalências. Interpretadores para alterações à semântica operacional do Prolog. Meta-interpretadores para: evitar ciclos infinitos por "ancestor resolution"; devolver justificações simples das provas efectuadas; execução de programas usando outras estratégias de procura (nomedamente procura em largura).

 

Aula N. 10 (prática) Data 16/12/1998

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

 

Aula N. 11 (teórica) Data 05/01/1999

Sumário: Técnicas de programação em lógica para implementação de analisadores sintáticos. Notação de DCGs. Uso para programação de "interfaces" simples em língua natural.

 

Aula N. 11 (prática) Data 06/01/1999

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).

 

Aula N. 12 (teórica) Data 12/01/1999

Sumário: Introdução a métodos com tabulação para execução de linguagens de programação em lógica. Apresentação informal de método de derivação com tabulação. Mecanismos de suspensão e reactivação de golos. Comparação com misto de execução "bottom-up" e "top-down" de programas. Uso para: programação de fechos transitivos; eficiência de execução de programas; representação de conhecimento.

 

Aula N. 12 (prática) Data 13/01/1999

Sumário: Resolução dos exercícios constantes da ficha prática correspondente (anexa-se a resolução).