Lógica Computacional

Licenciatura em Ciências da Computação - 2º ano

Search: \.*

Education/LC Web Changed Changed by
0405 26 Feb 2007 - 01:13 - NEW JoseBacelarAlmeida

Retornar à página inicial

0506 03 Jul 2007 - 16:06 - r47 JoseBacelarAlmeida

Lógica Computacional (8504N2)

Licenciatura em Matemática e Ciências de Computação
2º Ano - 2º Semestre
Ano lectivo 2005/2006

Programa

Componente Teórica

  • Lógica Proposicional
    • Sintaxe
    • Linguagens de Cláusulas
    • Validade e Verificação
    • Redução Semântica
    • Modelos e Diagramas de Decisão Binária
    • Exemplos de problemas SAT
  • Lógica de Primeira Ordem
    • Sintaxe da Lógica de Predicados
    • Substituições
    • Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Programação com Restricções

Bibliografia

  • Prolog Programming for Artificial Intelligence. Ivan Bratko, Addison-Wesley, 1993.

  • The Art of Prolog : advanced programming techniques. L. Sterling & E. Shaphiro, MIT Press, 1994.

  • Essentials of Logic Programming. Christopher John Hogger. Oxford University Press, 1990.

  • Proof Theory and Automated Deduction. Jean Goubault-Larrecq & Ian Mackie , Kluwer Academic Publishers, 1997.

Critérios de Avaliação

  • Componente teórica: exame, com peso 70% (modalidade A) ou 40% (modalidade B)
  • Componente prática:
    • modalidade A: fichas com peso 30%
    • modalidade B: fichas de avaliação prática com peso 30% + trabalho prático com peso 30%

Equipa Docente

Horário Lectivo

  Horário Sala Docente
Teórica 4ªfeira 10:00-11:00 CP3 205 jmv
Teórica 5ªfeira 11:00-12:00 DI A2 jmv
Turnos Horário Sala Docente
TP1 5ªfeira 16:00-17:00 CP2 110 mjf
TP2 6ªfeira 8:00-9:00 CP1 209 mjf
P1 6ªfeira 9:00-11:00 DI 1.04 mjf
P2 6ªfeira 11:00-13:00 DI 1.04 mjf

Horário de Atendimento

Docente Horário
jmv  
mjf 5ªfeira 17:00-20:00

Material Disponibilizado

Aulas Teóricas

Aulas Teórico-Práticas

Aulas Práticas

  • Prolog: slides 1-20 (pdf)
  • Prolog: slides 21-32 (pdf)
  • Prolog: slides 33-48 (pdf)
  • Prolog: slides 49-60 (pdf)
  • Prolog: slides 61-68 (pdf)
  • Prolog: slides 69-88 (pdf)
  • Prolog: slides 89-92 (pdf)
  • Prolog: slides 93-100 (pdf)
  • Prolog: slides 101-104 (pdf)

Trabalho Prático

Exames

Notas

Links Úteis

0607 20 Feb 2008 - 15:33 - r16 JoseBacelarAlmeida

Lógica Computacional (8504N2)

Licenciatura em Matemática e Ciências de Computação
2º Ano - 2º Semestre
Ano lectivo 2006/2007



Equipa Docente

  • José Carlos Bacelar (jba at di)
  • Olga Pacheco (omp at di)

Horário Lectivo

Turno Horário Sala Docente
TP1 3ªfeira 10:00-11:00 DI 0.02 jba
P1 3ªfeira 11:00-13:00 DI 1.04 jba
Teórica 3ªfeira 14:00-15:00 CP2 104 jba
TP2 4ªfeira 10:00-11:00 DI 0.02 omp
P2 4ªfeira 11:00-13:00 DI 1.04 omp
Teórica 6ªfeira 16:00-17:00 CP2 104 jba

Horário de Atendimento

Docente Horário
jba 3ªfeira 15:00-19:00
omp 3ªfeira 14:00-16:00

Critérios de Avaliação

A avaliação da disciplina é realizada por exame final, sendo que a realização de fichas práticas ao longo do semestre permite a dispensa de parte desse exame (30%).

Temos então duas modalidades de avaliação:

  • Modalidade A: exame final com peso 70% e avaliação prática com peso 30% (ambas com nota mínima de 9 valores)
  • Modalidade B: exame final com peso 100%.

As melhorias de nota serão sempre realizadas na modalidade B.

Classificações finais superiores a 16 devem ainda contar com a realização de um pequeno projecto prático, cuja avaliação será incorporada na nota final com um peso de 20%.

Notas

As notas estão disponíveis aqui.

Sumários

Disponíveis aqui

Exames

Mini-Testes práticos

Exames Finais

  • Época Normal - 1ª Chamada (22 Junho, 9:30, salas CP3 402, CP3 403)
  • Época Normal - 2ª Chamada (6 Julho, 9:30, salas CP1 212 a CP1 214)
  • Época de Recurso (25 Julho, 9:30, salas CP3 301, CP3 302)
  • Época Especial (14 Setembro, 17:00, salas CP2 209)
0708 01 Feb 2009 - 18:16 - r13 JoseBacelarAlmeida

Lógica Computacional (8504N2)

Licenciatura em Matemática e Ciências de Computação
2º Ano - 2º Semestre
Ano lectivo 2007/2008



Equipa Docente

  • José Carlos Bacelar (jba at di)

Horário Lectivo

Turno Horário Sala Docente
TP1 3ªfeira 10:00-11:00 DI 1.04 CP2 104 jba
P1 3ªfeira 11:00-13:00 DI 1.04 jba
Teórica 3ªfeira 14:00-15:00 CP2 111 jba
TP2 4ªfeira 10:00-11:00 CP1 308 jba
P2 4ªfeira 11:00-13:00 DI 1.04 jba
Teórica 5ªfeira 16:00-17:00 CP2 111 jba

Horário de Atendimento

Docente Horário
jba 2ªfeira 15:00-19:00

Método de Avaliação

Durante o período lectivo far-se-ão dois testes: um sensivelmente a meio do semestre e outro no final. Ambos os testes incluem uma componente teórica e outra prática (Prolog). O peso relativo de cada uma dessas componentes será aproximadamente 70 e 30%.

Opcionalmente, os alunos podem ainda realizar um pequeno projecto prático, cuja avaliação será incorporada na nota final com um peso de 20%. Nas notas finais superiores a 16 valores esta componente será sempre considerada (querendo dizer que a nota é majorada a 16 valores se não se realizar o dito projecto).

Notas

Número Nome Classificação
    10

Sumários

Os sumários da disciplina estão disponíveis aqui.

Exames

0809 22 Jul 2009 - 17:27 - r9 JoseBacelarAlmeida

Lógica Computacional (8504N2)

Licenciatura em Matemática e Ciências de Computação
2º Ano - 2º Semestre
Ano lectivo 2008/2009



Equipa Docente

  • José Carlos Bacelar (jba at di)

Horário Lectivo

Turno Horário Sala Docente
Teórica 2ªfeira 14:00-15:00 CP2 111 jba
TP1 2ªfeira 16:00-17:00 CP2 111 jba
P1 2ªfeira 17:00-19:00 DI 1.09 jba
TP2 3ªfeira 10:00-11:00 CP2 111 jba
P2 3ªfeira 11:00-13:00 DI 1.04 jba
Teórica 5ªfeira 16:00-17:00 CP2 111 jba

Horário de Atendimento

Docente Horário
jba 2ªfeira 15:00-16:00
jba 3ªfeira 16:00-19:00

Método de Avaliação

A avaliação da disciplina consiste nas seguintes componentes:

  • Realização de uma prova individual escrita com nota mínima de 8 valores (90%)
  • Participação nas aulas (teórico-)práticas (10%)

Opcionalmente, os alunos podem ainda realizar um pequeno projecto prático, cuja avaliação será incorporada na nota final com um peso de 20%. Nas notas finais superiores a 16 valores esta componente será sempre considerada (querendo dizer que a nota é majorada a 16 valores se não se realizar o dito projecto).

Sumários

Os sumários da disciplina estão disponíveis no calendário.

Aulas Práticas

Os guiões das aulas práticas estão disponíveis aqui.

Exames

Notas

Num. Nome Aval. Contínua Teste Recurso T.Prático Final
47403 Adriana Madalena Oliveira Cunha 1 3.5 8 - 10
53502 Alvanir Martins Santos 0 - - - -
52856 Ana Alexandra Oliveira da Costa 2 - 16.2 17 17
48392 Ana Cristina Nunes Aires 0 - - - -
47424 André Gomes Rodrigues 0.5 - - - -
48408 André Gustavo Silva de Macedo 1 4.9 11.2 - 11
47408 André Manuel Rodrigues da Silva 2 12.8 - - 14
48401 Bruno Miguel Fernandes Gomes 1 - - - -
54073 Carlos Alberto Vieira Ramos 0.5 6.5 8 - 10
52853 Cláudio Filipe Belo da Silva Lourenço 1.5 - 14.9 - 15
50187 David Pereira Gonçalves 1 5.4 9.9 - 10
51176 Eduardo Luis Cardoso Fonseca 2 12.3 - - 13
51152 Francisco André Oliveira Reina Dourado 1 - - - -
43534 Francisco Manuel Pereira da Cunha 1 - - - -
35820 Gilberto Leandro Oliveira Fernandes 0 - - - -
52818 Ivo Daniel de Jesus Carrajola 1 - - - -
51163 João da Cunha Martins 2 5.8 8.3 - 10
50192 João Gaspar da Silva Rodrigues 2 8.5 - - 10
47415 João Paulo da Fonte Fonseca 2 9.8 12.6 - 13
47416 João Pedro Carvalho Martins 0 - - - -
47410 Jorge Filipe Vilaça Ferreira 0 - - - -
40995 Jorge Miguel Oliveira Santos 1 4.5 6.1 - R
33712 José Edmundo Ponte da Cunha 0 - - - -
25364 José Filipe da Silva Caldas 0 - - - -
50195 José Manuel da Silva Ramos Gomes Marques 1.5 6.2 10 - 11
47401 José Manuel Pereira Araújo 1 7.1 10.2 - 10
51178 Leandro Manuel Sousa Loureiro 1 - - - -
51177 Leonardo Manuel Nobre 0 - - - -
54056 Luis Filipe Ferreira Brito 0 - - - -
50199 Marco André Cálix Esteves Lopes 1.5 - 5 - R
50197 Marco Filipe Vieira Gomes 1 12.3 - - 12
48418 Mário Gil Ferreira Gonçalves 2 11.6 - - 13
43538 Mário Rui Monteiro Ricardo 0 - - - -
51155 Miguel Gonçalves Dias 1.5 8.6 - - 10
54052 Mónia Vanessa Vila Pinto de Sousa Passos 2 8 - - 10
51164 Nuno Antunes Marques 1.5 10.4 12.3 - 13
43550 Nuno Diogo Neto Ferreira 0 - 6.3 - R
43511 Paulo Renato Ribeiro Xavier 0 2 5.6 - R
47422 Pedro Nicola Ferreira Veloso 1.5 - - - -
51166 Rui Miguel Gonçalves Peixoto 1.5 11.1 - - 12
47429 Vítor Emanuel Alves Oliveira 0.5 - - - -
Avisos0405 26 Feb 2007 - 00:53 - NEW JoseBacelarAlmeida
Avisos0506 18 Feb 2007 - 23:26 - r8 JoseBacelarAlmeida

A resolução da ficha de avaliação prática 3 (enunciado da ficha está na página) é para ser entregue na aula prática de 2 de Junho.

-- MariaJoaoFrade - 25 May 2006

Já saiu o enunciado do Trabalho Prático (opcional).

-- MariaJoaoFrade - 08 May 2006

Nas aulas práticas do dia 5 de Maio, será realizada a avaliação prática 2 (enunciado da ficha está na página).

-- MariaJoaoFrade - 29 Apr 2006

É importante que para a aula prática do dia 21 de Abril os alunos tragam os ficheiros com a resolução dos exercícios propostos no Grupo VII.

-- MariaJoaoFrade - 07 Apr 2006

Nas aulas práticas do dia 31 de Março, será realizada a ficha de avaliação prática 1.

-- MariaJoaoFrade - 24 Mar 2006

Avisos0607 31 Jul 2007 - 23:03 - r8 JoseBacelarAlmeida
31/07 Já estão disponíveis as notas referentes à Época de Recurso. (aqui)

17/07 Já estão disponíveis as notas referentes à Época Normal. (aqui)

20/06 Foram disponibilizados exercícios teorico-práticos.

11/06 Já estão disponíveis as notas do segundo mini-teste prático e as notas práticas finais. (aqui)

05/06 Já estão disponíveis os slides correspondentes ao módulo de lógica de primeira ordem.

31/05 Já estão disponíveis (secção "Material de Apoio") os slides correspondentes ao terceiro módulo de lógica proposicional.

28/05 Já estão disponíveis as notas do primeiro mini-teste prático (aqui)

07/05 Na próxima 5ª e 6ª-feira (10 e 11/05) realizam-se as JOIN 2007. Por esse motivo não haverá aula teórica.

19/02 Na próxima 6ª-feira (26/02) não haverá aula teórica.

Avisos0708 27 Sep 2008 - 11:17 - r14 JoseBacelarAlmeida
24/09: Já estão disponíveis as notas da época de especial.

28/07: Já estão disponíveis as notas da época de recurso.

02/07: Já estão disponíveis as notas do 2º teste.

23/06: Sala do 2º teste: CP2-201 (hora: 14:00).

11/05: Já estão disponíveis as notas do 1º teste.

08/05: Estão disponíveis propostas para os projectos práticos em Projectos0708.

17/04: A data do teste intermédio passou para o dia 23/04 (4a-feira), às 14:00 (sala CP2-204CP2-104) .

08/04: A aula teórico-prática do turno 1 (3a, 10:00-11:00) passa para o lab. DI 1.04.

13/03: Já foram disponibilizadas as datas dos testes intermédios (site LCC). Os testes de Lógica Computacional são nos dias 23/04 22/04 e 27/06.

13/03: Foi marcada uma aula suplementar de Lógica Computacional para o dia 27/03 às 15:00 (em substituição da aula de PLC).

22/02: As aulas da disciplina de Lógica Computacional terão início somente no dia 06/03 (5a-feira).

Avisos0809 22 Jul 2009 - 17:28 - r4 JoseBacelarAlmeida
22/07/2009: Disponíveis notas da época de recurso.

07/05/2009: Disponível enunciado do projecto prático.

06/03/2009: Já disponível o guião da primeira aula prática (aqui).

Calendario 12 Feb 2009 - 17:16 - NEW JoseBacelarAlmeida
ELP1-0405 26 Feb 2007 - 00:55 - r25 JoseBacelarAlmeida

Notícias

Já estão disponíveis os resultados dos exames de recurso, e Notas Finais.

-- MariaJoaoFrade - 03 Mar 2005

AVISO Sessão de Dúvidas

Na próxima 3ª feira (dia 15 Fev) às 17:00 no Lab 011, vai realizar-se uma sessão de esclarecimento de dúvidas.

-- MariaJoaoFrade - 10 Feb 2005

AVISO PROVAS ORAIS

As provas orais irão realizar-se na 2ª feira dia 14, pelas 15:00, na sala DI-A1.

-- MariaJoaoFrade - 10 Feb 2005

Os resultados dos exames da 1ª e 2ª chamadas já estão disponíveis.

-- MariaJoaoFrade - 10 Feb 2005

As Notas Práticas já estão disponíveis.

-- MariaJoaoFrade - 10 Jan 2005

A entrega de trabalhos será no dia 6 Jan 2005, 5ª feira. Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.

-- MariaJoaoFrade - 13 Dec 2004

Já está disponível o enunciado do trabalho prático.

-- MariaJoaoFrade - 18 Nov. 2004

A inscrição nos turnos decorre no dia 23 Setembro (DI 0.11) no periodo das aulas teórico-práticas.

-- MariaJoaoFrade - 21 Set. 2004

Elementos Lógicos da Programação I

_Licenciatura em Matemática e Ciências da Computação_
2º Ano - 1º Semestre
Ano lectivo 2004/2005


Programa

  1. Dedução em Lógica Proposicional.
  2. Sistemas de Dedução Hilbertianos.
  3. Sistemas de Dedução de Gentzen e de Dedução Natural em LP.
  4. Dedução Automática em Lógica Proposicional.
  5. Sistemas Tableaux em LP.
  6. Método de Davis-Putman.
  7. Dedução em Lógica de Primeira Ordem.
  8. Sistemas de Dedução de Gentzen e de Dedução Natural em LPO.
  9. Tableaux na LPO.
  10. Introdução à Lógica Modal.
  11. Introdução à Lógica Linear.

Bibliografia

As notas acessíveis a partir desta página constituem o apoio documental base da disciplina e são complementadas pelos seguintes textos:

  • Basic Proof Theory. A.S. Troelstra & H.Schwichtenberg, Cambridge Tracks in Theoretical Computer Science, nº 48, 1996.

  • Proof Theory and Automated Deduction. Jean Goubault-Larrecq & Ian Mackie , Kluwer Academic Publishers, 1997.

  • First Order Logic and Automated Theorem Proving. Melvin Fitting, Graduate Texts in Computer Science. Springer-Verlag, 1996.

Critérios de Avaliação

A avaliação tem uma componente teórica e uma componente prática, ambas obrigatórias. A nota final será calculada com base na seguinte fórmula:

Nota Final = NT * 0.7 + NP * 0.3

sendo

  • NT a nota teórica (nota mínima de 9 valores), obtida através da realização de uma prova individual escrita;

  • NP a nota prática (nota mínima de 9 valores), resultante da avaliação de um trabalho prático (realizado em grupos de 3 alunos) e da avaliação contínua realizada ao longo das aulas laboratoriais e que terá por base a resolução de fichas de trabalho;

Equipa Docente

Horário Lectivo

  Horário Sala Docente
Teórica 3ªfeira 8:00-9:00 CP3.101 jmv
Teórica 5ªfeira 15:00-16:00 CP2.303 jmv
Turnos Horário Sala Docente
TP1 5ªfeira 9:00-11:00 DI 0.11 mjf
TP2 5ªfeira 16:00-18:00 DI 0.11 mjf

Horário de Atendimento

Docente Horário
jmv  
mjf 2ªfeira 12:00-13:00 e 14:00-18:00

Material Disponibilizado

Aulas Teóricas

Aulas Práticas

Fichas de trabalho

Isabelle/Isar

  • Exemplos de utilização do Isar (pdf) (ps)
  • Dedução Natural para a Lógica Proposicional (DNLP.thy)
  • Cálculo de Sequentes para a Lógica Proposicional Clássica (LKLP.thy)
  • Dedução Natural para a Lógica de Primeira Ordem (DNFOL.thy)
  • Cálculo de Sequentes para a Lógica de Primeira Ordem Clássica (LKFOL.thy)

Trabalho Prático

Exames 2004

Exames 2005

Links Úteis

Notas

Notas 2005/06

ELP1News0405 26 Feb 2007 - 00:38 - r7 JoseBacelarAlmeida
Já estão disponíveis os resultados dos exames de recurso, e Notas Finais.

-- MariaJoaoFrade - 03 Mar 2005

AVISO Sessão de Dúvidas

Na próxima 3ª feira (dia 15 Fev) às 17:00 no Lab 011, vai realizar-se uma sessão de esclarecimento de dúvidas.

-- MariaJoaoFrade - 10 Feb 2005

AVISO PROVAS ORAIS

As provas orais irão realizar-se na 2ª feira dia 14, pelas 15:00, na sala DI-A1.

-- MariaJoaoFrade - 10 Feb 2005

Os resultados dos exames da 1ª e 2ª chamadas já estão disponíveis.

-- MariaJoaoFrade - 10 Feb 2005

As Notas Práticas já estão disponíveis.

-- MariaJoaoFrade - 10 Jan 2005

A entrega de trabalhos será no dia 6 Jan 2005, 5ª feira. Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.

-- MariaJoaoFrade - 13 Dec 2004

Já está disponível o enunciado do trabalho prático.

-- MariaJoaoFrade - 18 Nov. 2004

A inscrição nos turnos decorre no dia 23 Setembro (DI 0.11) no periodo das aulas teórico-práticas.

-- MariaJoaoFrade - 21 Set. 2004

ELP2-0405 20 Sep 2007 - 14:17 - r21 JoseBacelarAlmeida

Elementos Lógicos da Programação II (702752)

Licenciatura de Matemática e Ciências da Computação
2º Ano - 2º Semestre
Ano lectivo 2004/2005


Programa

Programa Resumido

  • Lambda-Calculus: teoria equacional
  • Lambda-Calculus: sistema de redução
  • Sistemas de Tipos
  • Implementação do Lambda-Calculus
  • Estudo de uma linguagem baseada no Lambda-Calculus

Programa Detalhado

Bibliografia

Bibliografia Recomendada:

  • Lambda calculi: a guide for computer scientists - Chris Hankin, Claredon Press, Oxford, 1994.
  • Theories of Programming Languages - John C. Reynolds, Cambridge University Press, 1994.
  • Introduction to combinators and lambda-calculus - J. Roger Hindley, Cambridge University Press, 1993.

Bibliografia de Referência:

  • Lambda-Calculus: Its syntax and semantics - Henk P. Barendregt, North Holland, 1985.
  • Lambda-Calculus with types - Henk P. Barendregt,in ?Handbook of Logic in Computer Science, vol.2?, Claredon Press, Oxford, 1995.
  • Proofs and Types - Jean-Yves Girard, Cambridge University Press.

Outros Elementos de Estudo

  • Módulo I: Teoria básica do lambda-calculus (pdf)
  • Módulo II: Aspectos de Implementação (pdf)
  • Módulo III: Expressividade do lambda-calculus (pdf)
  • Módulo IV: Lambda-calculus com Tipos (pdf)
  • Módulo V: Sistemas de Tipos (pdf)
  • Material aulas TP jsp: lambda.hs, SKK.pdf.

Projectos práticos

Quem desejar realizar um projecto prático no âmbito desta disciplina deve contactar um dos docentes. O objectivo desse contacto é o de obter informação/apontadores adicionais sobre os vários projectos e decidir o projecto concreto a ser realizado.

Algumas ideias para projectos práticos:

  1. Animador de uma pequena linguagem funcional com tipos.
  2. Codificação da máquina abstracta de Krivine em C .
  3. Estudo sobre o impacto da operação de substituição na avaliação de lambda-termos .
  4. Inferência/verificação de tipos numa linguagem point-free .
  5. Sobre a avaliação de lambda-termos e os monads .

Horário e Equipa docente

Horário Lectivo:

Teóricas Práticas
3ª, das 8:00 às 9:00 (sala CP3.101) TP1 , 3ª, das 14:00 às 16:00 (sala DI 0.11)
  5ª, das 15:00 às 16:00 (sala CP3.102)   TP2 , 4ª, das 10:00 às 12:00 (sala DI 0.04)  

Horário de Atendimento:

JBA
  2ª, das 14:00 às 19:00  

Critério de Avaliação

Nota final é calculada com base nas seguintes componentes:

Componente Teórica (Exame) - OBRIGATÓRIA - peso nunca inferior a 70% (nota mínima de 8 valores).
Componente Prática - FACULTATIVA - com peso máximo de 30%.

A nota para a componente prática resulta de avaliação contínua (até 2 valores) e de um trabalho prático (até 4 valores).

Notas

Notas - 1ª e 2ª Cham. (pdf)

Notas - recurso (pdf)

Época Especial:

Número Nome Exame
35846  Márcio Azevedo  5.5
43488 Paula Silva 6.5



Notas do Ano Lectivo 2005/2006 (exames)

Recurso:

Número Nome Exame FINAL
   Jácome Miguel Costa Cunha  16 16
35866  Tiago Lamas Carvalheira  1.7 REP
32738  Paulo Sérgio Azevedo Magalhães  8.7 10
38580  Jorge Filipe Morgado Marques  11.2 11

AVISO: Na pauta dos serviços académicos, não surge o nome de Jácome Miguel Costa Cunha (melhoria).

2ª Chamada:

Número Nome Exame
32738  Paulo Sérgio Azevedo Magalhães  4.5
33684  António Augusto Dias Castro Ribeiro Silva  13
35846  Márcio Azevedo  10
36867  Rui Samuel Valinho  3.5
38580  Jorge Filipe Morgado Marques  6

1ª Chamada:

Número Nome Exame
39837  Rui Miguel Pacheco Almeida  5.5
43488  Paula Cristina Gomes da Silva  12



Notas do Ano Lectivo 2006/2007 (exames)

2ª Chamada:

Número Nome Exame
39837  Rui Miguel Pacheco Almeida  10

Época Especial:

Número Nome Exame
35806 Bruno Miguel Freitas de Sousa 10

MFES0809 05 Dec 2008 - 23:17 - r3 JoseBacelarAlmeida

Análise, Modelação e Teste de Software

MFES - Mestrado de Informática

13/11/2008

"Design by Contract and Java Modeling Language": apresentação do conceito e clausulas básicas do JML (requires, ensures, invariant). Universo de ferramentas para JML. Características do ESC/Java2 e da verificação de asserções em tempo de execução (jmlc/jmlrac).

Teórico-prática: exercício de utilização do plugin Eclipse do ESC/Java2 (análise estática simples).

20/11/2008

"JML - beyond the basics": especificação de casos multiplos e de comportamento excepcional; invariantes de ciclo; frame-confitions; dificuldades com aliasing de referências.

Teórico-prática: exercício de modelação em JML.

27/11/2008

"Abstract modeling in JML": herança de especificações; datagroups e abstracção; campos "ghost" e "model"; tipos abstractos para modelação.

Teórica-prática: acompanhamento do projecto JML.

04/12/2008

"Unit Testing and JmlUnit": objectivos e características dos testes unitários; utilização do JUnit; integração com verificação de asserções JML e ferramenta JML-Unit.

Teórica-prática: acompanhamento do projecto JML.

MaterialApoio 18 Feb 2010 - 13:00 - r15 OlgaPacheco

Slides

Exercícios Teórico-Práticos

Bibliografia

  • Proof Theory and Automated Deduction. Jean Goubault-Larrecq & Ian Mackie , Kluwer Academic Publishers, 1997.

  • From Logic to Logic Programming. Kees Doets, MIT Press, 1994.

  • The Art of Prolog : advanced programming techniques. L. Sterling & E. Shaphiro, MIT Press, 1994.

  • Prolog Programming for Artificial Intelligence. Ivan Bratko, Addison-Wesley, 1993.

  • Essentials of Logic Programming. Christopher John Hogger. Oxford University Press, 1990.

Apontadores Web

Edições Anteriores da Disciplina

Disciplinas Relacionadas do plano de curso de LCC

Disciplinas Relacionadas do plano antigo de LMCC

  • ELP1 - Elementos Lógicos da Programação I (2º ano, 1º semestre)
  • ELP2 - Elementos Lógicos da Programação II (2º ano, 2º semestre)
Notas0607 20 Sep 2007 - 14:00 - r9 JoseBacelarAlmeida

Época de Especial

Num Nome Exame
47414 André da Silva Rocha 3.85
35804 Ângelo David Soares Perez Dias 5
43514 César Carlos Martins Gomes 5.95
48405 Christophe Campos Peixoto 10
39496 Filipe Miguel Torres Falcão 0
43520 Ivo Manuel Lopes Rodrigues 3,65
47418 João Paulo da Silva Bordalo 10
30481 Maria de Fátima Sancho Monteiro 10
43550 Nuno Diogo Neto Ferreira 5.95
37074 Patrícia Alexandra Ribeiro 6.25
43510 Paulo Manuel de Oliveira Gomes 4.15
46222 Tiago de Sá Camacho da Côrte 3.15
41039 Tiago Fernando Melo Machado da Costa 6.95

Época de Recurso

Num Nome Turno Prática ?Prolog? Exame FINAL
47414 André da Silva Rocha 1 X S 5.35 R
48407 André Filipe Ferreira de Araújo Barbosa 2 12 N 12.3 12
35804 Ângelo David Soares Perez Dias --- --- S 2.8 R
47402 Carlos Miguel da Silva Brandão 2 X S 10.75 11
48405 Christophe Campos Peixoto 2 X S 6.6 R
47420 Eduardo Jorge Araújo da Costa 2 10 N 12.3 12
43526 Isac Lima Nunes 1 X S 12.8 13
47418 João Paulo da Silva Bordalo 2 X S 6.61 R
35842 Katia Marina Ferreira da Silva 1 X S 5 R
30481 Maria de Fátima Sancho Monteiro 2 X S 5 R
30746 Nuno André Passos Geraldes 1 X S 6.01 R
43550 Nuno Diogo Neto Ferreira --- --- S 4.2 R
37074 Patrícia Alexandra Ribeiro --- --- S 6.09 R
44633 Paulo Alexandre da Silva Lopes --- --- S 4.76 R
43510 Paulo Manuel de Oliveira Gomes --- --- S 3.85 R
41039 Tiago Fernando Melo Machado da Costa 1 X S 6.53 R

Época Normal

Num Nome Turno Prática Cham. ?Prolog? Exame FINAL
35804 Ângelo David Soares Perez Dias --- --- 1 S 1,75 R
48405 Christophe Campos Peixoto 2 X 1 N 0 R
43509 Dave Lage Moderno 1 18 1 N 18,5 18
42817 Hugo Adriano Ferreira Maia 1 17 1 N 17,5 17
43544 Hugo Manuel Sousa Ribeiro 1 X 1 S 9,5 10
47418 João Paulo da Silva Bordalo 2 X 1 S 6,9 R
41007 Luis Pedro Lima e Horta Nova 2 14 1 N 10,5 12
30481 Maria de Fátima Sancho Monteiro 2 X 1 S 5,75 R
43533 Miguel Alexandre Vieira dos Santos 1 12 1 N 12 12
43510 Paulo Manuel de Oliveira Gomes --- --- 1 S 6,9 R
41042 Pedro Miguel Ribeiro Martins 1 16 1 N 11 13
47406 Vera Lúcia Gonçalves Reina 1 11 1 N 11 11
48399 Vicente Machado Fernandes 1 15 1 N 17 16
43496 Ana Isabel Pinto Monteiro dos Santos 1 16 2 N 14 15
40997 André Feliciano Quintas da Silva Coelho 1 14 2 N 12 13
48407 André Filipe Ferreira de Araújo Barbosa --- --- 2 N 6,5 R
41037 André Vilas Boas da Costa --- --- 2 S 9,55 10
43543 Bruno Henrique Lourenço Ferreira 1 X 2 S 9,45 10
41020 Carlos Manuel Ferreira Lopes 2 X 2 S 11,7 12
47402 Carlos Miguel da Silva Brandão 2 X 2 S 5,2 R
48390 Daniel Tiago Rodrigues Braga 2 14 2 N 11 12
47420 Eduardo Jorge Araújo da Costa 2 10 2 N 6 R
41038 Hélder Nuno Ribeiro Macedo 1 12 2 N 10,5 11
43526 Isac Lima Nunes 1 X 2 S 4,5 R
46287 João Batista da Costa Lopes 2 X 2 S 9,45 10
35842 Katia Marina Ferreira da Silva 1 X 2 S 4,8 R
30746 Nuno André Passos Geraldes 1 X 2 S 4,85 R
43550 Nuno Diogo Neto Ferreira --- --- 2 S 7,1 R
41017 Nuno Miguel Macedo Salgado 2 15 2 N 9 11
37074 Patrícia Alexandra Ribeiro --- --- 2 S 3,1 R
43511 Paulo Renato Ribeiro Xavier --- --- 2 N 0 R
43532 Pedro Miguel Correia Araújo 2 13 2 N 10 11
38584 Rui Dinis da Silva 2 X 2 S 0 R
43503 Rui Pedro Alves de Carvalho 2 16 2 N 8,5 11
41705 Sandra Cláudia Pereira Rodrigues 1 12 2 N 10 11
46222 Tiago de Sá Camacho da Côrte 2 X 2 S 3,5 R
41039 Tiago Fernando Melo Machado da Costa 1 X 2 S 5,2 R
43501 Vânio Miguel Rodrigues Ferreira 2 X 2 S 9,6 10
48397 Vítor Hugo Correia Fernandes 2 15 2 N 11 12

Notas Práticas

Turno 1

Número Nome Teste 1 Teste 2 Prática
30746 Nuno André Geraldes 3   X
35842 Katia Marina Silva 1   X
40997 André Feliciano Coelho 2 3 14
41038 Hélder Nuno Macedo 2 3 12
41039 Tiago Fernando Costa 1 1 X
41042 Pedro Miguel Martins 4 4 16
41705 Sandra Claudio Rodrigues 1 4 12
42198 Ivan Pereira 2   X
42817 Hugo Adriano 4 5 17
43496 Ana Isabel Santos 3 5 16
43509 Dave Lage Moderno 5 5 18
43526 Isac Lima Nunes 1   X
43533 Miguel Santos 3 2 12
43543 Bruno Henrique Ferreira 1   X
43544 Hugo Ribeiro 1   X
47406 Vera Lúcia Reine 1 3 11
47414 André Silva Rocha 1 0 X
48399 Vicente M. Fernandes 4 3 15

Mini-Teste 1 (turno 2)

Número Nome Teste 1 Teste 2 Prática
30481 Maria de Fátima Sancho Monteiro 1 2 X
38584 Rui Dinis Silva 1   X
39496 Filipe Miguel Torres Falcão 1 2 X
39838 Bruno Edgar Almeida Soares 3   X
41007 Luis Pedro Lima e Horta Nova 3 4 14
41017 Nuno Miguel M. Salgado 4 4 15
41020 Carlos Manuel Ferreira Lopes 3   X
43501 Vanio Miguel Rodrigo Ferreira 2   X
43503 Rui Pedro Alves de Carvalho 4 4 16
43532 Pedro Miguel Correia Araújo 3 4 13
46222 Tiago de Sá Camacho da Corte 1 1 X
46287 João Batista da Costa Lopes 2 1 X
47402 Carlos Miguel Silva Brandão 1 1 X
47420 Eduardo Jorge Araújo da Costa 2 3 10
47452 João Paulo da Silva Bordalo 1   X
48390 Daniel Braga 4 3 14
48397 Vitor Hugo Correia Fernandes 4 4 15
48405 Christophe Peixoto 1   X
48406 André Batista Martins 1   X
48407 André Filipe Ferreira A. Barbosa 2 4 12

Praticas0607 29 May 2007 - 10:39 - r9 JoseBacelarAlmeida

Aulas Práticas


Aula 8: Predicados de Segunda Ordem

Existem meta-predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver User's Manual ou o help).

  • findall(?Template,:Goal,?Bag) : Bag é a lista de instâncias de Template encontradas nas provas de Goal. A ordem da lista corresponde à ordem em que são encontradas as respostas. Se não existirem instanciações para Template, Bag unifica com a lista vazia.
  • bagof(?Template,:Goal,?Bag) : Semelhante a findall, mas se Goal falhar, bagof falha.
  • setof(?Template,:Goal,?Set) : Semelhante a bagof, mas a lista é ordenada e sem repetições.

Exemplo:

| ?- findall(X, member(X,[1,2,3]), L).
L = [1,2,3]
yes

  • Utilize o predicado findall para determinar todas as soluções para o problema das N rainhas com N=8.


Aula 7: Estratégia Gerar e Testar.

Estratégia Gerar e Testar

O mecanismo de backtracking do PROLOG torna possível codificar, de forma directa, a estratégia de gerar e testar para encontrar a solução de um determinado problema. Segundo esta estratégia, o problema é decomposto em duas fases:

  • Gera-se "soluções cadidatas" para o problema.
  • Verifica-se se a "solução candidata" satisfaz os requisitos do problema (e é, portanto, uma "solução efectiva").

Podemos assim identificar o padrão com a seguinte regra PROLOG:

resolve(X) :- gera(X), testa(X).
Note-se o papel preponderante do backtracking para encontrar uma dada solução para resolve(X): o predicado gera(X) instancia X com uma possível solução. No caso de testa(X) falhar (a solução proposta não satisfaz os requisitos impostos pelo problema), o mecanismo de backtracking permite que gera(X) instancie uma nova alternativa, até que se encontre a solução pretendida.

O predicado gera acaba normalmente por se revelar o ponto crítico na aplicação desta estratégia: por um lado, pretende-se que ele cubra todas as possíveis soluções para o problema (caso contrário, podemos nunca gerar a solução requerida). Por outro, e por questões de eficiência, vamos pretender que ele produza o mínimo de soluções erradas (para minimizar o espaço de busca) -- na prática, este esforço de minimização traduz-se por eliminar candidatos notoriamente errados e por encontrar codificações apropriadas para as possíveis soluções.

Vejamos um exemplo concreto: pretende-se encontrar um divisor para um dado número N (diferente de 1 e N).

fromToL(L,U,[]) :- U < L, !.
fromToL(L,U,[L|X]) :- L1 is L+1, fromToL(L1,U,X).

gera(N,X) :- fromToL(2,N-1,L), member(X,L).

testa(N,X) :- N mod X =:= 0.

divisor(N,X) :- gera(N,X), testa(N,X).

Mas o programa apresentado pode ser consideravelmente optimizado se observarmos que nos é suficiente encontrar um divisor entre 2 e sqrt(N) (se X>sqrt(N) é um divisor de N, então também será N/X<sqrt(N)). Dessa forma teríamos:

divisor2(N,X) :- fromtoL(2,sqrt(N),L), member(X,L), N mod X =:= 0.
 

  • Verifique ambos os programas para um número primo elevado (e.g. 209953, 331777, 472393, ...)
  • Utilize a estratégia generate & test para determinar a raiz de um natural, definida da seguinte forma: um número natural X é a raiz de N quando X2<=N e (X+1)2>N

Problema das N rainhas.

Um exemplo clássico de programação em PROLOG consiste em escrever um predicado que permita resolver o problema das n rainhas. Esse problema consiste em dispor n rainas num tabuleiro de damas com dimensão n*n, sem que qualquer rainha se encontre ameaçada por outra. Como um exemplo de uma solução temos (num tabuleiro 4*4):

    Q  
Q      
      Q
  Q    

Note que cada linha e cada coluna deve conter uma, e só uma, rainha (porquê?). Dito isto, verificamos que uma forma expedita de representar as soluções para este problema consiste em utilizar uma lista que informe qual a coluna em que é colocada a rainha de cada uma das linhas (a solução do exemplo seria [3,1,4,2], querendo dizer que a rainha da primeira linha aparece na terceira coluna, a da segunda linha na primeira coluna, etc.) -- desta forma, aparece uma rainha em cada linha "por construção". A restrição de aparecer uma única rainha por cada coluna é traduzida por deverem aparecer na lista todos os números de 1 a 4, ou seja, a lista deve ser uma permutação de [1,2,3,4]. Temos assim resolvido o sub-problema de gerar soluções candidatas: são simplesmente permutações da lista [1..N].

Na fase de teste, falta unicamente verificar que nenhuma rainha está no alcance da diagonal de uma outra. Para isso notamos que:

  • Duas rainhas estão numa diagonal / sse a soma da linha e coluna da posição de cada uma delas for igual;
  • Duas rainhas estão numa diagonal \ sse a diferença da linha e coluna da posição de cada uma delas for igual.

Com base no que foi referido, codifique um predicado nrainhas(+N,?X) que determine uma solução para o problema das N-rainhas.


Aula 6: Manipulação de fórmulas lógicas proposicionais em Prolog.

Definição de Operadores em Prolog.

O Prolog permite definir operadores prefixos, sufixos ou infixos. Para tal devemos utilizar o predicado pré-definido op(_Prec_,=_Type_,=_Name_=)=. O argumento Name é o nome do operador definido; Prec é um número entre 0 e 1200 que determinará a sua precedência e Type determina o seu tipo e associatividade. Por exemplo, o operador de soma binário + está definido como op(700, yfx, +). A precedência 700 irá determinar que tenha menos precedência do que a multiplicação (definida com precedência 500 - note que um número menor indica maior precedência do operador), e o tipo yfx caracteriza o operador como infixo e associativo à esquerda. Outras possibilidades para o tipo dos operadores são: xfy, xfx para operadores infixos associativos à direita e sem associatividade; fx, fy para operadores prefixos e xf, yf para operadores sufixos.

Alguns dos operadores pré-definidos do Prolog são:

:- op( 1200, xfx, [ :-, --> ]).
:- op( 1200,  fx, [ :-, ?- ]).
:- op( 1100, xfy, [ ; ]).
:- op( 1000, xfy, [ ',' ]).
:- op(  700, xfx, [ =, is, =.., ==, \==, =:=, =\=, <, >, =<, >= ]).
:- op(  500, yfx, [ +, -]).
:- op(  500,  fx, [ +, - ]).
:- op(  300, xfx, [ mod ]).
:- op(  200, xfy, [ ^ ]).

  • Faça um pequeno predicado que lhe permita confirmar a maior precedência do operador * face ao operador +.

Manipulação de fórmulas lógicas proposicionais em Prolog.

A definição de operadores permite que a sintaxe do Prolog se aproxime do domínio onde se está a trabalhar. Considere que se pretendem representar fórmulas da Lógica Proposicional em Prolog. Em vez de considerar termos como or(not(p), and( and(p, r), not(q))), podemos utilizar operadores que nos permitam aproximar a sua representação da utilizada habitualmente. Assim definimos:

:- op(1130, xfy, <=>). % equivalencia
:- op(1110, xfy, =>).  % implicação
%:- op( 1100, xfy, [ ; ]). % disjunção
%:- op( 1000, xfy, [ ',' ]). % conjunção
:- op( 500, fy, ~).    % negação

Estamos a utilizar os operadores de conjunção e disjunção do Prolog (se preferir, pode definir os operadores /\ e \/). Assim, a fórmula apresentada atrás pode ser escrita como (~p ;  p , r, ~q) (note o papel da precedência e associatividade).

  • Defina um predicado que, dado uma fórmula proposicional, determine a Forma Normal Negativa (FNN).
  • Pretende-se definir um programa que permita verificar se uma dada fórmula é uma contradição pelo método de Davis Putnam. Para o efeito, considere os seguintes predicatos que convertem uma FNN na respectiva Forma Normal Conjuntiva (FNC), e que colocam esta última na sua forma matricial (como uma lista de listas) :
% -----------------------------------------------------------------
%  fnc(+NNF,?FNC)
%
% NNF é uma forma normal negatiiva e FNC a respectiva forma normal conjuntiva
cnf(((A,B);C), (F1,F2)) :- !, cnf((A;C),F1), cnf((B;C),F2).
cnf((A;(B,C)), (F1,F2)) :- !, cnf((A;B),F1), cnf((A;C),F2).
cnf((A;B), F) :- !, cnf(A, A1), cnf(B, B1),
  (/*IF*/ (A1=(C,D); B1=(C,D)) ->
   /*THEN*/ cnf((A1;B1), F) ; 
   /*ELSE*/ F=(A1;B1) ).
cnf((A,B), (A1,B1)) :- !, cnf(A, A1), cnf(B, B1).
cnf(Lit, Lit).

% -----------------------------------------------------------------
%  matCNF(+FNC,?MAT)
%
% FNC é uma forma normal conjuntiva e MAT é a sua representação sob a forma
% de matriz (lista de listas de literais).
matCNF((A,B),M) :- !, matCNF(A,MA), matCNF(B,MB), append(MA,MB,M).
matCNF((A;B),C) :- !, matCNF(A,[CA]), matCNF(B,[CB]), union2(CA,CB,C).
matCNF(~Lit, [[-Lit]]) :- !.
matCNF(Lit, [[Lit]]).

union2([],L,[L]).
union2([X|L1],L2,L3) :- member2(X,L2), !, union2(L1,L2,L3).
union2([X|_],L2,[])  :- (-Xn=X;-X=Xn), member2(Xn,L2), !.
union2([X|L1],L2,L3) :- union2(L1,[X|L2],L3).

member2(X,[Y|_]) :- X==Y, !.
member2(X,[_|T]) :- member2(X,T).


Aula 5: Utilização de cut e negação por falha.

O predicado pré-definido cut (!) permite eliminar ramos nas árvores de derivação de predicados Prolog. Operacionalmente, o cut pode ser caracterizado da seguinte forma: _"Durante o processo de prova, a 1a passagem pelo cut é sempre verdadeira (com sucesso). Se por backtracking se voltar ao cut, então o cut faz falhar o predicado que está na cabeça da regra."_

A utilização do cut está normalmente associada a questões de eficiência: os ramos da árvore que são eliminados acabariam eventualmente por falhar, e assim poupamos trabalho ao motor de inferência do Prolog. Esta utilização do cut é considerada benigna, porque não se afecta o significado dos predicados. Tomemos como exemplo um predicado que verifique se o terceiro argumento é o mínimo dos dois primeiros. Podería ser definido como:

minimo(X,Y,Y) :- X >= Y.
minimo(X,Y,X) :- X < Y.
Mas podemos facilmente observar que, uma vez verificado que X>=Y, não faz sentido tentar verificar que X<Y. Assim sendo, faz sentido colocar um cut no final da primeira cláusula:
minimo(X,Y,Y) :- X >= Y, !.
minimo(X,Y,X) :- X < Y.

  • Estaria correcto eliminar também o predicado X<Y na segunda cláusula? Justifique com exemplos apropriados.

É importante referir que certas utilizações do cut alteram propositadamente o comportamento do programa (tipicamente para impedir que a execução do programa entre em ciclo). Essas utilizações são normalmente consideradas "mais perigosas" porque obriga a que o programador detenha uma ideia muito precisa sobre o processo de construção da derivação por parte do Prolog.

  • Relembre as seguintes alternativas para calcular o multiplicação de naturais:
a(zero, Y, Y).
a(suc(X), Y, suc(Z)) :- a(X,Y,Z).

m1(zero, _, zero).
m1(suc(X), Y, Z) :- a(Y, W, Z), m1(X,Y,W).

m2(zero, _, zero).
m2(suc(X), Y, Z) :- m2(X,Y,W), a(Y, W, Z).
    • Seria possível impedir a computação infinita de m2 por intermédio da introdução de cuts?
    • A introdução de cuts também faria sentido para m1? Onde? Justifique.

  • Considere o seguinte programa que pretende inserir o primeiro argumento (um número) na lista ordenada passada no segundo argumento.
insert(X,[H|T],[H|T1]) :- X>H, !, insert(X,T,T1).
insert(X,L,[X|L]).
    • Mostre, avaliando um objectivo apropriado, que o programa está incorrecto.
    • Como o poderá corrigir?

Negação por falha.

Por vezes pretende-se garantir que um dado predicado não é válido. A utilização do cut (em conjunção com o predicado pré-definido fail que falha sempre) permite codificar uma forma restrita de negação: a "negação por falha". Considere o seguinte predicado:

neg(X) :- X, !, fail.
neg(X).
Note que neg(X) falha sempre que o Prolog consiga construir uma derivação para X. Por outro lado, sucede se falhar na construção dessa derivação (entra na segunda cláusula, que é trivialmente satisfeita). Obs.: o predicado pré-definido do Prolog \+ corresponde ao predicado neg apresentado.

  • Verifique o resultado de neg em predicados já definidos.
  • Considere o seguinte programa:
estudante(paulo). 
casado(joao). 
estudante_solteiro(X) :- \+ casado(X), estudante(X).
    • Como explica a resposta às questões estudante_solteiro(paulo) e estudante_solteiro(X)


Aula 4: Árvores de Prova. Tipos algébricos

Árvores de Prova em Prolog

Operacionalmente, o Prolog segue uma estratégia top down, depth-first para encontrar soluções das questões colocadas. O processo de Unificação permite concretizar as questões colocadas definindo as condições em que a questão inicial é satisfeita (a substituição obtida). Quando o motor de inferência se depara com uma situação de "falha", retrocede na árvore de prova por forma a tentar novas alternativas.

  • Relembre o predicado member que verifica se um elemento pertence a uma lista. Construa a árvore de procura de soluções para a questão member(X,[1,2,3]).
  • Considere agora o predicado takeout/3 referido na última aula. Construa a árvore de procura de soluções para a questão takeout(X,[1,2,3],Y).

Tipos algébricos em Prolog

A utilização de termos permite a manipulação em Prolog de valores de tipos algébricos (que em Haskell seriam declarados com data). Por exemplo, árvores binárias podem ser representadas por termos como vazia, nodo(vazia, vazia), etc.

  • Defina um predicado que verifique se uma lista é uma travessia in-order de uma árvore.
  • Defina predicados que determinem:
    • uma árvore é uma Árvore Binária de Procura
    • uma lista está ordenada.

Note no entanto que em Prolog não existe a noção de tipo. De facto nada nos impede de considerar termos como vazia(nodo,vazia(nodo)).


Aula 3: Continuação da manipulação de listas

  • Defina last/2 que verifique se o último elemento de uma lista é um dado.
  • Defina append/3 que concatene duas listas.
  • Utilize o predicado append para definir os predicados prefixo e sufixo que verificam se uma lista é prefixo ou sufixo doutra.
  • Defina split/4 que separe os elementos de uma lista nos menores e maiores que um dado valor.
  • Considere o predicado:
takeout(X,[X|R],R).
takeout(X,[F|R],[F|S]) :- takeout(X,R,S).
O que faz este predicado?
  • Utilize o predicado takeout para definir um predicado que determine se uma lista é permutação de uma outra.


Aula 2: Utilização de termos, introdução à manipulação de Listas.

Termos Estruturados

Para além dos tipos primitivos, o Prolog admite termos estruturados da forma f(t1,t2,...,tn), onde f é o functor do termo e t1,...tn são sub-termos.

Uma aplicação típica de termos estruturados é para organizar a informação contida num programa. Por exemplo, podemos armazenar datas com termos da forma "data(25,abril,2007)". O seguinte predicado extrai o dia duma data armazenada dessa forma:

diaData(D,data(D,_,_)).

  • Defina o predicado valData/1 que verifique se uma data é correcta.

Nada nos impede de considerarmos termos arbitrariamente complicados. Em particular, podemos considerar termos de natureza recursiva como a representação dos naturais com os construtores zero e suc (i.e. zero, suc(zero), suc(suc(zero)), etc.).

  • Defina o predicado nat/1 que verifique se um termo é um natural na representação referida.
  • Defina soma/3 que verifique se o terceiro argumento é a soma dos dois primeiros.
  • Mostre como usar o predicado soma/3 para calcular a subtração de dois naturais.
  • Defina predicados int2nat/2 e nat2int/2 que convertam naturais em inteiros e vice-versa.

Introdução às Listas em Prolog

Um exemplo de um tipo estruturado que está pré-definido no Prolog são as listas. A sintaxe mais prática é [] que denota a lista vazia e [H|T] que denota a lista com cabeça H e cauda T.

  • Defina member/2 que verifica se um elemento pertence a uma lista.
  • Utilize o predicado member para determinar quais dos elementos da lista [3,5,4,6,5,7] são pares.


Aula 1: Apresentação da linguagem PROLOG

Exemplo de apresentação

Tipos Primitivos

  • Variáveis:
  • Átomos:
  • Inteiros:
  • Reais:

Unificação, Igualdade, Atribuição

  • =
  • ==
  • is


Praticas0708 02 Jun 2008 - 22:41 - r17 JoseBacelarAlmeida

Aulas Práticas


Aula 9: Implementação do algoritmo Davis-Putnam em Prolog.

Pretende-se definir um programa que permita verificar se uma dada fórmula é uma contradição pelo método de Davis Putnam. Para o efeito, considere os seguintes predicatos que convertem uma FNN na respectiva Forma Normal Conjuntiva (FNC), e que colocam esta última na sua forma matricial (como uma lista de listas) :

% -----------------------------------------------------------------
%  fnc(+NNF,?FNC)
%
% NNF é uma forma normal negatiiva e FNC a respectiva forma normal conjuntiva
cnf(((A /\ B) \/ C), (F1 /\ F2)) :- !, cnf((A \/ C),F1), cnf((B \/ C),F2).
cnf((A \/ (B /\ C)), (F1,F2)) :- !, cnf((A \/ B),F1), cnf((A \/ C),F2).
cnf((A \/ B), F) :- !, cnf(A, A1), cnf(B, B1),
  (/*IF*/ (A1=(C /\ D); B1=(C /\ D)) ->
   /*THEN*/ cnf((A1 \/ B1), F) ; 
   /*ELSE*/ F=(A1 \/ B1) ).
cnf((A /\ B), (A1 /\ B1)) :- !, cnf(A, A1), cnf(B, B1).
cnf(Lit, Lit).

% -----------------------------------------------------------------
%  matCNF(+FNC,?MAT)
%
% FNC é uma forma normal conjuntiva e MAT é a sua representação sob a forma
% de matriz (lista de listas de literais).
matCNF((A /\ B),M) :- !, matCNF(A,MA), matCNF(B,MB), append(MA,MB,M).
matCNF((A \/ B),C) :- !, matCNF(A,[CA]), matCNF(B,[CB]), union2(CA,CB,C).
matCNF(~Lit, [[-Lit]]) :- !.
matCNF(Lit, [[Lit]]).

union2([],L,[L]).
union2([X|L1],L2,L3) :- member2(X,L2), !, union2(L1,L2,L3).
union2([X|_],L2,[])  :- (-Xn=X;-X=Xn), member2(Xn,L2), !.
union2([X|L1],L2,L3) :- union2(L1,[X|L2],L3).

member2(X,[Y|_]) :- X==Y, !.
member2(X,[_|T]) :- member2(X,T).

Exercícios:

  • Defina um predicado que determine a forma normal disjuntiva.
  • Defina o predicado de split/3 que determine o particionamento de uma FN.
  • Defina o predicado davisPutnam/1 que verifique se uma fórmula proposicional é inconsistente.

Aula 8: Manipulação de fórmulas de lógica proposicional em Prolog.

Definição de Operadores em Prolog.

O Prolog permite definir operadores prefixos, sufixos ou infixos. Para tal devemos utilizar o predicado pré-definido op( Prec , Type , Name ). O argumento Name é o nome do operador definido; Prec é um número entre 0 e 1200 que determinará a sua precedência e Type determina o seu tipo e associatividade. Por exemplo, o operador de soma binário + está definido como op(700, yfx, +). A precedência 700 irá determinar que tenha menos precedência do que a multiplicação (definida com precedência 500 - note que um número menor indica maior precedência do operador), e o tipo yfx caracteriza o operador como infixo e associativo à esquerda. Outras possibilidades para o tipo dos operadores são: xfy, xfx para operadores infixos associativos à direita e sem associatividade; fx, fy para operadores prefixos e xf, yf para operadores sufixos.

Alguns dos operadores pré-definidos do Prolog são:

:- op( 1200, xfx, [ :-, --> ]).
:- op( 1200,  fx, [ :-, ?- ]).
:- op( 1100, xfy, [ ; ]).
:- op( 1000, xfy, [ ',' ]).
:- op(  700, xfx, [ =, is, =.., ==, \==, =:=, =\=, <, >, =<, >= ]).
:- op(  500, yfx, [ +, -]).
:- op(  500,  fx, [ +, - ]).
:- op(  300, xfx, [ mod ]).
:- op(  200, xfy, [ ^ ]).

  • Faça um pequeno predicado que lhe permita confirmar a maior precedência do operador * face ao operador +.

Manipulação de fórmulas de lógica proposicional em Prolog.

A definição de operadores permite que a sintaxe do Prolog se aproxime do domínio onde se está a trabalhar. Considere que se pretendem representar fórmulas da Lógica Proposicional em Prolog. Em vez de considerar termos como or(not(p), and( and(p, r), not(q))), podemos utilizar operadores que nos permitam aproximar a sua representação da utilizada habitualmente. Assim definimos:

:- op(1110, xfy, =>). 
:- op( 1100, yfx, \/).
:- op( 1000, yfx, /\).
:- op( 500, fy, ~).   

que denotam os operadores de implicação, disjunção, conjunção e negação. Assim, a fórmula apresentada atrás pode ser escrita como (~p  \/  p  /\ r /\ ~q) (note o papel da precedência e associatividade).

Exercícios:

  • Defina o predicado props(+Form,-Props) que calcule o conjunto de símbolos de proposições utilizados na fórmula dada.
  • Defina o predicado val(+Form,+Mod) que verifique se a fórmula é válida no modelo passado como argumento.
  • Como poderia reformular a definição do predicado val por forma a que não seja necessário instanciar o modelo (ou seja, construir o predicado valM(+Form, ?Mod).
  • Defina o predicado nnf(+Form, -NNF) que determine a forma normal negativa de uma fórmula.

Aula 7: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog

Predicados de segunda ordem

Existem meta-predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver User's Manual ou o help).

  • findall(?Template,:Goal,?Bag) : Bag é a lista de instâncias de Template encontradas nas provas de Goal. A ordem da lista corresponde à ordem em que são encontradas as respostas. Se não existirem instanciações para Template, Bag unifica com a lista vazia.
  • bagof(?Template,:Goal,?Bag) : Semelhante a findall, mas se Goal falhar, bagof falha.
  • setof(?Template,:Goal,?Set) : Semelhante a bagof, mas a lista é ordenada e sem repetições.

Exemplo:

| ?- findall(X, member(X,[1,2,3]), L).
L = [1,2,3]
yes

Relacionados com os apresentados, encontramos outros predicados de ordem superior, como o bem conhecido map (do haskell). No Prolog o predicado maplist implementa a funcionalidade análoga.

Exercícios:

  • Teste os predicados apresentados codificando exemplos apropriados.
  • Utilize o predicado findall para determinar todas as soluções para o problema das N rainhas com N=8.

Outras características do Prolog

Manipulação da base de conhecimento: O Prolog permite manipular dinamicamente a base de conhecimento (inserir ou remover factos ou regras). Para isso disponibiliza os predicados assert, retract, rectractall (e variantes...).

Input/Output: tal como qualquer linguagem com o mínimo de preocupações práticas, é possível realizar operações de Input/Output. Para o efeito dispõe-se dos predicados write, read (entre outros, e com muitas variantes...); open e close para maniputação de ficheiros, etc...

Exercícios:

  • Consulte a documentação relativa aos predicados referidos e teste cada um deles com exemplos apropriados.
  • Extenda o programa das N rainhas com um predicado runQueens que interrogue o utilizador sobre o número de rainhas a considerar e imprima no écran todas as soluções admissíveis.


Aula 6: Estratégia Gerar e Testar.

Estratégia Gerar e Testar

O mecanismo de backtracking do PROLOG torna possível codificar, de forma directa, a estratégia de gerar e testar para encontrar a solução de um determinado problema. Segundo esta estratégia, o problema é decomposto em duas fases:

  • Gera-se "soluções cadidatas" para o problema.
  • Verifica-se se a "solução candidata" satisfaz os requisitos do problema (e é, portanto, uma "solução efectiva").

Podemos assim identificar o padrão com a seguinte regra PROLOG:

resolve(X) :- gera(X), testa(X).
Note-se o papel preponderante do backtracking para encontrar uma dada solução para resolve(X): o predicado gera(X) instancia X com uma possível solução. No caso de testa(X) falhar (a solução proposta não satisfaz os requisitos impostos pelo problema), o mecanismo de backtracking permite que gera(X) instancie uma nova alternativa, até que se encontre a solução pretendida.

O predicado gera acaba normalmente por se revelar o ponto crítico na aplicação desta estratégia: por um lado, pretende-se que ele cubra todas as possíveis soluções para o problema (caso contrário, podemos nunca gerar a solução requerida). Por outro, e por questões de eficiência, vamos pretender que ele produza o mínimo de soluções erradas (para minimizar o espaço de busca) -- na prática, este esforço de minimização traduz-se por eliminar candidatos notoriamente errados e por encontrar codificações apropriadas para as possíveis soluções.

Vejamos um exemplo concreto: pretende-se encontrar um divisor para um dado número N (diferente de 1 e N).

fromToL(L,U,[]) :- U < L, !.
fromToL(L,U,[L|X]) :- L1 is L+1, fromToL(L1,U,X).

gera(N,X) :- fromToL(2,N-1,L), member(X,L).

testa(N,X) :- N mod X =:= 0.

divisor(N,X) :- gera(N,X), testa(N,X).

Mas o programa apresentado pode ser consideravelmente optimizado se observarmos que nos é suficiente encontrar um divisor entre 2 e sqrt(N) (se X>sqrt(N) é um divisor de N, então também será N/X<sqrt(N)). Dessa forma teríamos:

divisor2(N,X) :- fromtoL(2,sqrt(N),L), member(X,L), N mod X =:= 0.
 

  • Verifique ambos os programas para um número primo elevado (e.g. 209953, 331777, 472393, ...)
  • Utilize a estratégia generate & test para determinar a raiz de um natural, definida da seguinte forma: um número natural X é a raiz de N quando X2<=N e (X+1)2>N

Problema das N rainhas.

Um exemplo clássico de programação em PROLOG consiste em escrever um predicado que permita resolver o problema das n rainhas. Esse problema consiste em dispor n rainas num tabuleiro de damas com dimensão n*n, sem que qualquer rainha se encontre ameaçada por outra. Como um exemplo de uma solução temos (num tabuleiro 4*4):

    Q  
Q      
      Q
  Q    

Note que cada linha e cada coluna deve conter uma, e só uma, rainha (porquê?). Dito isto, verificamos que uma forma expedita de representar as soluções para este problema consiste em utilizar uma lista que informe qual a coluna em que é colocada a rainha de cada uma das linhas (a solução do exemplo seria [3,1,4,2], querendo dizer que a rainha da primeira linha aparece na terceira coluna, a da segunda linha na primeira coluna, etc.) -- desta forma, aparece uma rainha em cada linha "por construção". A restrição de aparecer uma única rainha por cada coluna é traduzida por deverem aparecer na lista todos os números de 1 a 4, ou seja, a lista deve ser uma permutação de [1,2,3,4]. Temos assim resolvido o sub-problema de gerar soluções candidatas: são simplesmente permutações da lista [1..N].

Na fase de teste, falta unicamente verificar que nenhuma rainha está no alcance da diagonal de uma outra. Para isso notamos que:

  • Duas rainhas estão numa diagonal / sse a soma da linha e coluna da posição de cada uma delas for igual;
  • Duas rainhas estão numa diagonal \ sse a diferença da linha e coluna da posição de cada uma delas for igual.

Com base no que foi referido, codifique um predicado nrainhas(+N,?X) que determine uma solução para o problema das N-rainhas.


Aula 5: Utilização de cut e negação por falha.

O predicado pré-definido cut (!) permite eliminar ramos nas árvores de derivação de predicados Prolog. Operacionalmente, o cut pode ser caracterizado da seguinte forma: _Durante o processo de prova, a 1a passagem pelo cut é sempre verdadeira (com sucesso). Se por backtracking se voltar ao cut, então o cut faz falhar o predicado que está na cabeça da regra._

A utilização do cut está normalmente associada a questões de eficiência: os ramos da árvore que são eliminados acabariam eventualmente por falhar, e assim poupamos trabalho ao motor de inferência do Prolog. Esta utilização do cut é considerada benigna (green cut), porque não se afecta o significado dos predicados. Tomemos como exemplo um predicado que verifique se o terceiro argumento é o mínimo dos dois primeiros. Podería ser definido como:

minimo(X,Y,Y) :- X >= Y.
minimo(X,Y,X) :- X < Y.
Mas podemos facilmente observar que, uma vez verificado que X>=Y, não faz sentido tentar verificar que X<Y. Assim sendo, faz sentido colocar um cut no final da primeira cláusula:
minimo(X,Y,Y) :- X >= Y, !.
minimo(X,Y,X) :- X < Y.

  • Estaria correcto eliminar também o predicado X<Y na segunda cláusula? Justifique com exemplos apropriados.

É importante referir que certas utilizações do cut alteram propositadamente o comportamento do programa (tipicamente para impedir que a execução do programa entre em ciclo). Essas utilizações são normalmente consideradas "mais perigosas" (red cuts) porque obrigam a que o programador detenha uma ideia muito precisa sobre o processo de construção da derivação por parte do Prolog.

  • Considere a seguinte base de conhecimento:
q(0,X,Y) :- p(X), !, p(Y).
q(_,X,b) :- p(X).
q(_,c,Y) :- p(Y), !.
p(a). p(b).
    • Quais são as soluções admissíveis para os objectivos q(1,X,Y) e q(0,X,Y).
    • Apresente as árvores de derivação correspondentes aos objectivos da alínea anterior.

  • Considere o seguinte programa que pretende inserir o primeiro argumento (um número) na lista ordenada passada no segundo argumento.
insert(X,[H|T],[H|T1]) :- X>H, !, insert(X,T,T1).
insert(X,L,[X|L]).
    • Mostre, avaliando um objectivo apropriado, que o programa está incorrecto.
    • Como o poderá corrigir?

Negação por falha.

Por vezes pretende-se garantir que um dado predicado não é válido. A utilização do cut (em conjunção com o predicado pré-definido fail que falha sempre) permite codificar uma forma restrita de negação: a "negação por falha". Considere o seguinte predicado:

neg(X) :- X, !, fail.
neg(X).
Note que neg(X) falha sempre que o Prolog consiga construir uma derivação para X. Por outro lado, sucede se falhar na construção dessa derivação (entra na segunda cláusula, que é trivialmente satisfeita). Obs.: o predicado pré-definido do Prolog \+ corresponde ao predicado neg apresentado.

  • Verifique o resultado de neg em predicados já definidos.
  • Considere o seguinte programa:
estudante(paulo). 
casado(joao). 
estudante_solteiro(X) :- \+ casado(X), estudante(X).
    • Como explica a resposta às questões estudante_solteiro(paulo) e estudante_solteiro(X)


Aula 4: Exercícios de Manipulação de Listas e Tipos Algébricos

Manipulação de Listas

  • Defina last/2 que verifique se o último elemento de uma lista é um dado.
  • Defina append/3 que concatene duas listas.
  • Utilize o predicado append para definir os predicados prefixo e sufixo que verificam se uma lista é prefixo ou sufixo doutra.
  • Defina split/4 que separe os elementos de uma lista nos menores e maiores que um dado valor.
  • Considere o predicado:
takeout(X,[X|R],R).
takeout(X,[F|R],[F|S]) :- takeout(X,R,S).
    • O que faz este predicado?
    • Construa a árvore de procura de soluções para a questão takeout(X,[1,2,3],Y).
  • Utilize o predicado takeout para definir um predicado que determine se uma lista é permutação de uma outra.

Tipos Algébricos

A utilização de termos permite a manipulação em Prolog de valores de tipos algébricos (que em Haskell seriam declarados com data). Um primeiro exemplo disso já foi ilustrado na última aula quando se manipularam naturais (zero, suc(zero), etc.). Para sistematizar, vejamos agora como manipular um outro tipo algébrico bem conhecido: as árvores binárias. Uma escolha óbvia para representar os seus valores será considerar o átomo vazia para representar a árvore vazia e termos da forma nodo(X,E,D) para representar nodos intermédios (com valor X, sub-árvore esquerda E e sub-árvore direita D). Temos então como exemplos de termos: vazia, nodo(4, vazia, vazia), etc.

Note no entanto que em Prolog não existe a noção de tipo (e.g. não podemos, à priori, condicionar um dado argumento de um predicado a ser uma árvore binária --- a única alternativa será definir-se um predicado que suceda para termos que tenham a estrutura prescrita...)

  • Defina um predicado arvBin/1 que verifique se o termo dado é uma árvore binária (e.g. deve falhar para termos como vazia(nodo,vazia(nodo))).
  • Defina um predicado que verifique se uma lista é uma travessia in-order de uma árvore.
  • Defina predicados que determinem:
    • uma árvore é uma Árvore Binária de Procura
    • uma lista está ordenada.


Aula 3: Árvores de derivação do Prolog.

Considere-se a definição do predicado member/2

member(X,[X|_]).
member(X,[_|T]) :- member(X,T).

Este predicado foi definido na última aula com o objectivo de verificar se um elemento está contido numa lista. De facto, podemos utiliza-lo como:

?- member(2,[1,2,3]).
true .

?- member(4,[1,2,3]).
fail.

Mas podemos também utiliza-lo com variáveis não instanciadas com o objectivo de determinar quais os elementos de uma lista:

?- member(X,[1,2,3]).
X = 1 ;
X = 2 ;
X = 3 ;
fail.
Ou até para determinar soluções a questões mais complicadas, como (mais um exemplo da última aula):
?- member(X,[3,5,4,6,5,7]), X mod 2 =:= 0.
X = 4 ;
X = 6 ;
fail.

O objectivo desta aula é o de se perceber como é que o Prolog consegue chegar às soluções apresentadas (substituições de variáveis que validam o objectivo).

Inferência do Prolog

Um objectivo em Prolog consiste numa lista de predicados. O resultado da "execução" desse objectivo num interpretador consiste numa substituição que verifique esses predicados. O processo construção da substituição é normalmente designado por inferência, e pode ser justificado construindo uma árvore como se descreve:

  1. Na raiz da árvore, coloca-se a lista de predicados. O Prolog irá processar cada predicado dessa lista por ordem.
  2. Para cada predicado, o Prolog irá procurar encontrar na base de conhecimento uma instância dum facto ou duma regra cuja cabeça unifique com esse predicado. Esta procura processa-se também pela ordem pela qual as definições ocorrem na base de conhecimento.
  3. Quando é encontrada uma regra nas condições referidas, cria-se um descendente na árvore contendo a lista já afectada pela substituição resultante da unificação (relembre que o resultada na unificação é uma substituição das variáveis) e onde o predicado em análise é substituído pelo lado direito da regra (ou simplesmente desaparece, no caso dos factos). É habitual anotarmos os arcos da árvore com as substituições resultantes das unificações.
  4. Quando existe mais do que uma possibilidade para a referida unificação (e.g. várias regras são aplicáveis), traduz-se por uma ramificação da árvore de inferência.
  5. Operacionalmente, o Prolog trata esta ramificação pelo mecanismo de backtracking (travessia depth-first da árvore).
  6. Quando a lista de predicados fica vazia, cria-se uma folha na árvore denotada como true --- representa um resultado apresentado ao utilizador (a substituição calculada ao longo do caminho).
  7. Quando não existe qualquer regra na base de conhecimento que unifique com o primeiro predicado da lista, cria-se uma folha denotada por fail .

A árvore de derivação para o objectivo "member(X,[1,2]), X mod 2 ==0" será:

Exercícios:

  • Considere a seguinte definição do predicado factorial:
fact(1,0).
fact(R,X) :- X2 is X-1, fact(R2,X2), R is X*R2.
    • Apresente a árvore de inferência para o objectivo fact(R,2).
    • Comente os resultados obtidos. Explique, em particular, que problemas aponta à solução apresentada.
    • Como pode ultrapassar os problemas detectados.
  • Considere o seguinte predicado:
nat2int(zero,0).
nat2int(suc(X),N) :- nat2int(X,N2), N is N2+1.
    • Apresente a árvore de inferência para o objectivo nat2int(suc(suc(zero)),X).
    • Apresente a árvore de inferência para o objectivo nat2int(X,2).
    • Comente os resultados obtidos.
    • Consegue propor alguma forma de ultrapassar os problemas detectados?

Tracing e Debug

Uma forma expedita de detectar problemas em programas Prolog consiste em utilizar o mecanismo de tracing. Esse mecanismo permite "monitorizar" determinados predicados durante o processo de inferência. Considere-se novamente o objectivo considerado atrás que faz uso do predicado member/2:

?- trace(member).
%         member/2: [call, redo, exit, fail]
true.

[debug]  ?- member(X,[1,2]), X mod 2 =:= 0.
 T Call: (8) member(_G318, [1, 2])
 T Exit: (8) member(1, [1, 2])
 T Redo: (8) member(_G318, [1, 2])
 T Call: (9) member(_G318, [2])
 T Exit: (9) member(2, [2])
 T Exit: (8) member(2, [1, 2])
X = 2 ;
 T Redo: (9) member(_G318, [2])
 T Call: (10) member(_G318, [])
 T Fail: (10) member(_G318, [])
fail.
Note que o Prolog sinalizada diferentes eventos relativos ao predicado observado:
  • Call: o predicado em "resolução";
  • Exit: o predicado foi resolvido com sucesso (pode por isso ser removido da lista de objectivos);
  • Redo: nova visita ao predicado (por backtracking);
  • Fail: predicado falha definitivamente (já não existem mais alternativas para o backtracking).

Exercício:

  • Interprete o resultado do trace apresentado na árvore de inferência apresentada acima.
  • Realize análises de traces para as restantes árvores construídas nesta aula...


Aula 2: Operações aritméticas e Manipulação de listas.

Operações aritméticas

Já vimos que o Prolog aceita termos que representem expressões matemáticas, como 3+4*2. Mas quando manipulamos esses termos estamos normalmente interessados em avaliar essas expressões (i.e. calcular o seu resultado). O Prolog disponibiliza para o efeito o predicado is que avalia o segundo argumento e unifica o resultado com o primeiro. Alguns exemplos (onde se utiliza a notação infixa para o predicado):

?- X is 3+2.
X = 5.

?- 3+2 is 2+3.
fail.

?- 5 is 3+2.
true.

?- 5 is X+2.
ERROR: is/2: Arguments are not sufficiently instantiated
Um aspecto importante na utilização do predicado is é a assimetria induzida: o segundo argumento deve ser sempre uma expressão completamente instanciada. Assim, se definirmos o predicado:
soma(X,Y,Z) :- X is Y + Z.
devemos considerar o segundo e o terceiro argumentos como "argumentos de entrada", que necessitam estar devidamente instanciados. Uma forma compacta de se exprimir esse facto (normalmente utilizada na documentação) é através da assinatura soma(-X,+Y,+Z) --- assim identifica-se o argumento Y e Z como de entrada e X como de saída.

Exercício:

  • Defina o predicado factorial(-R,+X) que suceda quando R for o factorial de X.
  • Uma forma alternativa de lidar com números naturais consiste em considerar termos zero, suc(zero), suc(suc(zero)), etc. (i.e. utilizar notação unária para os naturais). Defina o predicado nat2int que sucede quando o primeiro argumento é a representação unária do segundo.
  • No predicado definido na alínea anterior, verifique:
    • que argumentos tem de ser utilizados como entrada e como saída;
    • o que acontece quando solicita ao interpretador várias respostas.
  • Verifique, com o auxílio do mecanismo de help do SWI-Prolog (ou da documentação on-line, se preferir) qual a funcionalidade oferecida pelos operadores:
    =:=, =\=, <, =<, ==, @< 

Manipulação de listas

Um exemplo de um tipo estruturado muito utilizado em Prolog são as listas. A sintaxe pré-definida é [] que denota a lista vazia e [H|T] que denota a lista com cabeça H e cauda T.

  • Defina member/2 que verifica se um elemento pertence a uma lista.
  • Utilize o predicado member para determinar quais dos elementos da lista [3,5,4,6,5,7] são pares.
  • Defina um predicado que permita calcular o somatório de uma lista de inteiros.
  • O que alteraria, no predicado definido na alínea anterior, para calcular o somatório de uma lista de expressões inteiras?


Aula 1: Apresentação da linguagem PROLOG

Ao longo das aulas práticas de Lógica Computacional fazer uso da linguagem PROLOG. O interpretador adoptado será o SWI-Prolog que está disponível para para a generalidade das plataformas (MS-Windows, Linux, macOSX).

Conceitos Preliminares

Termos: o Prolog é uma linguagem simbólica que manipula termos que podem ser:

  • Variáveis - denotadas por identificadores começados por letras maiúsculas (e.g. X, Y, Xs, ...);
  • Constantes - átomos (identificadores começados por letras minúsculas) ou valores de tipos pré-definidos como inteiros, reais, strings, etc. (e.g. abc, xyz, 32, 3.1415)
  • Termos Compostos - termos da forma f(t1,...,tn) onde f é designado por functor (nome da função) e t1...tn são termos (e.g. xyz(X,abc), abc(abc(abc,abc)), +(4,2))

obs.: como iremos ver adiante, o Prolog permite a declaração de operadores infixos. Assim irá permitir escrever 4 + 2 como alternativa ao termo +(4,2) (o mesmo se aplica a outros operadores infixos que serão apresentados adiante).

Substituições e Unificação: o que caracteriza as variáveis é o facto de elas poderem vir a ser substituidas por outros termos. Considere-se o termo t(X,Y): se substituirmos X por abc(A,3) e Y por Z obtemos o termos t(abc(A,3),Z).

Uma operação fundamental no modelo de execução do Prolog é o que se designa por Unificação de dois termos. A ideia consiste em encontrar uma substituição que iguale (se possível) os termos dados. Vejamos alguns exemplos:

  • X = 4, Y = 3 é um unificador dos termos abc(3,X) e abc(Y,4);
  • X = 4, Y = 3 é um unificador dos termos abc(X,X) e abc(Y,4);
  • os termos abc(3,4) e abc(X,X) não dispõe de unificador.

Uma característica dos unificadores apresentados é que se tratam sempre dos unificadores mais gerais (qualquer outra substituição que unifique os termos pode ser expressa como um refinamento da substituição dada). Adiante iremos ter oportunidade de aprofundar estes aspectos mais teóricos... Para já interessa reter que o Prolog, quando unificar dois termos, determina sempre o unificador mais geral (i.e. a substituição mais simples que iguala os termos).

EXERCÍCIO: Determine o unificador mais geral para os seguintes pares de termos (se existir... naturalmente):

  • f(X,g(Y)) e g(X,f(Y))
  • f(X,g(Y)) e Z
  • f(X,g(y)) e f(g(y),X)
  • f(X) e X
  • f(X) e f(3+2)
  • f(3) e f(2+1)
  • f(3) e A(X)

Programas em Prolog

Executar um programa em Prolog consiste em interrogar o interpretador sobre a validade de um dado predicado lógico. A resposta mais simples será então true ou fail (se o predicado for válido ou não, respectivamente).

Objectivo (Goal):

Quando se invoca o SWI-Prolog, surge o prompt ?- que assinala que o interpretador aguarda a introdução de um objectivo (ou query, ou goal).

Calvin:~ jba$ /opt/local/bin/swipl 
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.51)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- 

Como referimos, o objectivo será um predicado lógico. Iremos ter oportunidade de definir novos predicados mas, para já, concentremo-nos na utilização do predicado pré-definido =/2 (o /2 significa que o predicado espera dois argumentos). Este predicado será válido precisamente quando os termos que forem passados como argumentos unificarem. Assim podemos introduzir:

?- =(3,3).
true.

?- 3=3.
true.

?- 3=2.
fail.

?- 3=X.
X = 3.

?- 3+2=X.
X = 3+2.

?- 3 + X = Y * 2.
fail.

?- 

Os exemplos apresentados revelam-nos duas coisas: (1) podemos utilizar a notação infixa e, (2) quando no objectivo estão envolvidas veriáveis o Prolog retorna uma substituição dessas variáveis que verifiquem o predicado (ou falha, se não existir nenhuma substituição nessas condições) --- podemos então dizer que, intuitivamente, as variáveis dos objectivos estão quantificadas existencialmente.

EXERCÍCIO: Interrogue o interpretador de Prolog por forma a ele retornar os unificadores mais gerais atrás solicitados.

Factos (base de conhecimento I):

Referimos que executar um programa em Prolog consiste em interrogar o interpretador relativamente a um objectivo. Mas, em que é que consiste um programa Prolog?. Um programa em Prolog será a base de conhecimento que o interpretador utiliza para determinar a validade do objectivo pedido. Essa base de conhecimento será consituída por:

  • Factos: que estabelecem a validade imediata (de instâncias) de predicados;
  • Regras: que condicionam a validade de predicados à validade de sub-objectivos.

Comecemos pelos primeiros. Como exemplos de factos podemos ter:

pai(joao,manuel).
pai(cristina, jose).
pai(joaquim,manuel).
pai(francisco,joao).
pai(helena,joao)

Com base nestes factos, diriamos que pai(joaquim,manuel) é válido mas pai(joaquim,jose) já não o é (porque nada estabelece a sua validade). Para verificar isso com o Prolog, necessitamos de carregar a base de conhecimento no interpretador. Para tal devemos:

  • gravar um ficheiro com os factos apresentados (normalmente dá-se a extensão ".pl" aos ficheiros Prolog, e.g. "pai.pl");
  • carregar o ficheiro no interpretador por intermédio do predicado pré-definido consult (e.g. "consult(pai.pl)").

EXERCÍCIO: Verifique a validade de alguns objectivos com a base de conhecimento apresentada. O que acontece quando se inclui variáveis?

Por vezes, o interpretador retorna uma substituição de resultado sem voltar ao prompt inicial. Isso assinala que a solução apresentada é uma de várias possíveis, podendo o utilizador:

  • digitar . e retornar ao prompt inicial;
  • digitar ; para solicitar outra solução.

EXERCÍCIO:

  • introduza um predicado que permita determinar todos os filhos de "manuel".
  • o que aconteceria se incluisse na base de conhecimento o facto pai(X,carlos) ? Experimente... (verifique o impacto de o incluir no início e no fim da base de conhecimento).

O exercício anterior permite concluir que, nos factos, devemos realizar uma interpretação universal das variáveis.

Se as questões colocadas ao interpretador de Prolog são predicados lógicos, é natural perguntarmo-nos como construir predicados à custa de conectivas lógicas (como e, ou, etc.). O Prolog tem definido os operadores:

  • conjunção: denotado por uma vírgula (,)
  • disjunção: denotado por um ponto e vírgula (;)

(As restantes conectivas lógicas proposicionais serão introduzidas mais tarde.)

Regras (base de conhecimento II):

A expressividade do Prolog resulta do facto de permitir incluir, na base de conhecimento, regras que condicionam a validade de um predicado (colocado no lado esquerdo do operador :-, e designado por cabeça da regra) à validade de um conjunto de outros predicados (designados por corpo da regra). A título de exemplo, temos que a regra:

avo(X,Y) :- pai(X,Z), pai(Z,Y).

Quando acrescentada à base de conhecimento apresentada acima, permite que o Prolog responda afirmativamente ao predicado avo(francisco,manuel). No processo, o interpretador verificará os predicados pai(francisco,joao) e pai(joao,manuel).

Note que nas regras, as variáveis que ocorrem na cabeça da regra devem ser entendidas como quantificadas universalmente (como nos factos). Já as que só ocorrem no corpo da regra devem ser entendidas como quantificadas existencialmente (como nos objectivos).

Exercício: Extenda a base de conhecimento para exprimir outros graus de parentesco, como "irmão", "tio", etc.


Praticas0809 29 May 2009 - 23:07 - r13 JoseBacelarAlmeida

Aulas Práticas


Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog

Predicados de segunda ordem

Existem meta-predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver User's Manual ou o help).

  • findall(?Template,:Goal,?Bag) : Bag é a lista de instâncias de Template encontradas nas provas de Goal. A ordem da lista corresponde à ordem em que são encontradas as respostas. Se não existirem instanciações para Template, Bag unifica com a lista vazia.
  • bagof(?Template,:Goal,?Bag) : Semelhante a findall, mas se Goal falhar, bagof falha.
  • setof(?Template,:Goal,?Set) : Semelhante a bagof, mas a lista é ordenada e sem repetições.

Exemplo:

| ?- findall(X, member(X,[1,2,3]), L).
L = [1,2,3]
yes

Relacionados com os apresentados, encontramos outros predicados de ordem superior, como o bem conhecido map (do haskell). No Prolog o predicado maplist implementa a funcionalidade análoga.

Exercícios:

  • Teste os predicados apresentados codificando exemplos apropriados.
  • Utilize o predicado findall para determinar todas as soluções para o problema das N rainhas com N=8.

Outras características do Prolog

Manipulação da base de conhecimento: O Prolog permite manipular dinamicamente a base de conhecimento (inserir ou remover factos ou regras). Para isso disponibiliza os predicados assert, retract, rectractall (e variantes...).

Input/Output: tal como qualquer linguagem com o mínimo de preocupações práticas, é possível realizar operações de Input/Output. Para o efeito dispõe-se dos predicados write, read (entre outros, e com muitas variantes...); open e close para maniputação de ficheiros, etc...

Exercícios:

  • Consulte a documentação relativa aos predicados referidos e teste cada um deles com exemplos apropriados.
  • Extenda o programa das N rainhas com um predicado runQueens que interrogue o utilizador sobre o número de rainhas a considerar e imprima no écran todas as soluções admissíveis.


Aula 9: Estratégia Gerar e Testar.

Estratégia Gerar e Testar

O mecanismo de backtracking do PROLOG torna possível codificar, de forma directa, a estratégia de gerar e testar para encontrar a solução de um determinado problema. Segundo esta estratégia, o problema é decomposto em duas fases:

  • Gera-se "soluções cadidatas" para o problema.
  • Verifica-se se a "solução candidata" satisfaz os requisitos do problema (e é, portanto, uma "solução efectiva").

Podemos assim identificar o padrão com a seguinte regra PROLOG:

resolve(X) :- gera(X), testa(X).
Note-se o papel preponderante do backtracking para encontrar uma dada solução para resolve(X): o predicado gera(X) instancia X com uma possível solução. No caso de testa(X) falhar (a solução proposta não satisfaz os requisitos impostos pelo problema), o mecanismo de backtracking permite que gera(X) instancie uma nova alternativa, até que se encontre a solução pretendida.

O predicado gera acaba normalmente por se revelar o ponto crítico na aplicação desta estratégia: por um lado, pretende-se que ele cubra todas as possíveis soluções para o problema (caso contrário, podemos nunca gerar a solução requerida). Por outro, e por questões de eficiência, vamos pretender que ele produza o mínimo de soluções erradas (para minimizar o espaço de busca) -- na prática, este esforço de minimização traduz-se por eliminar candidatos notoriamente errados e por encontrar codificações apropriadas para as possíveis soluções.

Vejamos um exemplo concreto: pretende-se encontrar um divisor para um dado número N (diferente de 1 e N).

fromToL(L,U,[]) :- U < L, !.
fromToL(L,U,[L|X]) :- L1 is L+1, fromToL(L1,U,X).

gera(N,X) :- fromToL(2,N-1,L), member(X,L).

testa(N,X) :- N mod X =:= 0.

divisor(N,X) :- gera(N,X), testa(N,X).

Mas o programa apresentado pode ser consideravelmente optimizado se observarmos que nos é suficiente encontrar um divisor entre 2 e sqrt(N) (se X>sqrt(N) é um divisor de N, então também será N/X<sqrt(N)). Dessa forma teríamos:

divisor2(N,X) :- fromtoL(2,sqrt(N),L), member(X,L), N mod X =:= 0.
 

  • Verifique ambos os programas para um número primo elevado (e.g. 209953, 331777, 472393, ...)
  • Utilize a estratégia generate & test para determinar a raiz de um natural, definida da seguinte forma: um número natural X é a raiz de N quando X2<=N e (X+1)2>N

Problema das N rainhas.

Um exemplo clássico de programação em PROLOG consiste em escrever um predicado que permita resolver o problema das n rainhas. Esse problema consiste em dispor n rainas num tabuleiro de damas com dimensão n*n, sem que qualquer rainha se encontre ameaçada por outra. Como um exemplo de uma solução temos (num tabuleiro 4*4):

    Q  
Q      
      Q
  Q    

Note que cada linha e cada coluna deve conter uma, e só uma, rainha (porquê?). Dito isto, verificamos que uma forma expedita de representar as soluções para este problema consiste em utilizar uma lista que informe qual a coluna em que é colocada a rainha de cada uma das linhas (a solução do exemplo seria [3,1,4,2], querendo dizer que a rainha da primeira linha aparece na terceira coluna, a da segunda linha na primeira coluna, etc.) -- desta forma, aparece uma rainha em cada linha "por construção". A restrição de aparecer uma única rainha por cada coluna é traduzida por deverem aparecer na lista todos os números de 1 a 4, ou seja, a lista deve ser uma permutação de [1,2,3,4]. Temos assim resolvido o sub-problema de gerar soluções candidatas: são simplesmente permutações da lista [1..N].

Na fase de teste, falta unicamente verificar que nenhuma rainha está no alcance da diagonal de uma outra. Para isso notamos que:

  • Duas rainhas estão numa diagonal / sse a soma da linha e coluna da posição de cada uma delas for igual;
  • Duas rainhas estão numa diagonal \ sse a diferença da linha e coluna da posição de cada uma delas for igual.

Com base no que foi referido, codifique um predicado nrainhas(+N,?X) que determine uma solução para o problema das N-rainhas.


Aula 8: Implementação do algoritmo Davis-Putnam em Prolog.

Pretende-se definir um programa que permita verificar se uma dada fórmula é uma contradição pelo método de Davis Putnam. Para o efeito, sugere-se que considere o seguinte predicado matCNF que converte uma Forma Normal Conjuntiva (FNC) na respectiva forma matricial (como uma lista de listas):


% -----------------------------------------------------------------
%  matCNF(+FNC,?MAT)
%
% FNC é uma forma normal conjuntiva e MAT é a sua representação sob a forma
% de matriz (lista de listas de literais).
% obs: os literais são da forma "atom" ou "-atom".
matCNF((A /\ B),M) :- !, matCNF(A,MA), matCNF(B,MB), append(MA,MB,M).
matCNF((A \/ B),C) :- !, matCNF(A,[CA]), matCNF(B,[CB]), union2(CA,CB,C).
matCNF(~Lit, [[-Lit]]) :- !.
matCNF(Lit, [[Lit]]).

union2([],L,[L]).
union2([X|L1],L2,L3) :- member2(X,L2), !, union2(L1,L2,L3).
union2([X|_],L2,[])  :- (-Xn=X;-X=Xn), member2(Xn,L2), !.
union2([X|L1],L2,L3) :- union2(L1,[X|L2],L3).

member2(X,[Y|_]) :- X==Y, !.
member2(X,[_|T]) :- member2(X,T).

Exercícios:

  • Defina o predicado de split/3 que determine o particionamento de uma FNC.
  • Defina o predicado davisPutnam/1 que verifique se uma fórmula proposicional é inconsistente.



Aula 7: Lógica Proposicional em Prolog.

Cálculo de Sequentes.

Pretende-se definir um predicado em Prolog que implemente as regras do cálculo de sequentes LC. Para tal deverá considerar que os sequentes são constituídos por pares de listas, sendo portanto o predicado pretendido da forma lc(+Gamma,+Delta) (Gamma e Delta são listas de fórmulas e o predicado verificará se o sequente Gamma |- Delta é válido ou não).

Formas Normais.

Defina os predicados:

  • nnf(+Form, -NNF) que determine a forma normal negativa de uma fórmula.
  • cnf(+NNF, -CNF) que determina a forma normal conjuntiva (FNC) de uma fórmula dada na FNN.


Aula 6: Manipulação de fórmulas de lógica proposicional em Prolog.

Definição de Operadores em Prolog.

O Prolog permite definir operadores prefixos, sufixos ou infixos. Para tal devemos utilizar o predicado pré-definido op( Prec , Type , Name ). O argumento Name é o nome do operador definido; Prec é um número entre 0 e 1200 que determinará a sua precedência e Type determina o seu tipo e associatividade. Por exemplo, o operador de soma binário + está definido como op(700, yfx, +). A precedência 700 irá determinar que tenha menos precedência do que a multiplicação (definida com precedência 500 - note que um número menor indica maior precedência do operador), e o tipo yfx caracteriza o operador como infixo e associativo à esquerda. Outras possibilidades para o tipo dos operadores são: xfy, xfx para operadores infixos associativos à direita e sem associatividade; fx, fy para operadores prefixos e xf, yf para operadores sufixos.

Alguns dos operadores pré-definidos do Prolog são:

:- op( 1200, xfx, [ :-, --> ]).
:- op( 1200,  fx, [ :-, ?- ]).
:- op( 1100, xfy, [ ; ]).
:- op( 1000, xfy, [ ',' ]).
:- op(  700, xfx, [ =, is, =.., ==, \==, =:=, =\=, <, >, =<, >= ]).
:- op(  500, yfx, [ +, -]).
:- op(  500,  fx, [ +, - ]).
:- op(  300, xfx, [ mod ]).
:- op(  200, xfy, [ ^ ]).

  • Faça um pequeno predicado que lhe permita confirmar a maior precedência do operador * face ao operador +.

Manipulação de fórmulas de lógica proposicional em Prolog.

A definição de operadores permite que a sintaxe do Prolog se aproxime do domínio onde se está a trabalhar. Considere que se pretendem representar fórmulas da Lógica Proposicional em Prolog. Em vez de considerar termos como or(not(p), and( and(p, r), not(q))), podemos utilizar operadores que nos permitam aproximar a sua representação da utilizada habitualmente. Assim definimos:

:- op( 550, xfy, ==>). 
:- op( 540, yfx, \/).
:- op( 520, yfx, /\).
:- op( 510, fy, ~).   

que denotam os operadores de implicação, disjunção, conjunção e negação. Assim, a fórmula apresentada atrás pode ser escrita como (~p  \/  p  /\ r /\ ~q) (note o papel da precedência e associatividade).

Exercícios:

  • Defina o predicado props(+Form,-Props) que calcule o conjunto de símbolos de proposições utilizados na fórmula dada.
  • Defina o predicado val(+Form,+Mod) que verifique se a fórmula é válida no modelo passado como argumento.
  • Como poderia reformular a definição do predicado val por forma a que não seja necessário instanciar o modelo (ou seja, construir o predicado valM(+Form, ?Mod).


Aula 5: Utilização de cut e negação por falha.

O predicado pré-definido cut (!) permite eliminar ramos nas árvores de derivação de predicados Prolog. Operacionalmente, o cut pode ser caracterizado da seguinte forma: Durante o processo de prova, a 1a passagem pelo cut é sempre verdadeira (com sucesso). Se por backtracking se voltar ao cut, então o cut faz falhar o predicado que está na cabeça da regra.

A utilização do cut está normalmente associada a questões de eficiência: os ramos da árvore que são eliminados acabariam eventualmente por falhar, e assim poupamos trabalho ao motor de inferência do Prolog. Esta utilização do cut é considerada benigna (green cut), porque não se afecta o significado dos predicados. Tomemos como exemplo um predicado que verifique se o terceiro argumento é o mínimo dos dois primeiros. Podería ser definido como:

minimo(X,Y,Y) :- X >= Y.
minimo(X,Y,X) :- X < Y.
Mas podemos facilmente observar que, uma vez verificado que X>=Y, não faz sentido tentar verificar que X<Y. Assim sendo, faz sentido colocar um cut no final da primeira cláusula:
minimo(X,Y,Y) :- X >= Y, !.
minimo(X,Y,X) :- X < Y.

  • Estaria correcto eliminar também o predicado X<Y na segunda cláusula? Justifique com exemplos apropriados.

É importante referir que certas utilizações do cut alteram propositadamente o comportamento do programa (tipicamente para impedir que a execução do programa entre em ciclo). Essas utilizações são normalmente consideradas "mais perigosas" (red cuts) porque obrigam a que o programador detenha uma ideia muito precisa sobre o processo de construção da derivação por parte do Prolog.

  • Considere a seguinte base de conhecimento:
q(0,X,Y) :- p(X), !, p(Y).
q(_,X,b) :- p(X).
q(_,c,Y) :- p(Y), !.
p(a). p(b).
    • Quais são as soluções admissíveis para os objectivos q(1,X,Y) e q(0,X,Y).
    • Apresente as árvores de derivação correspondentes aos objectivos da alínea anterior.

  • Considere o seguinte programa que pretende inserir o primeiro argumento (um número) na lista ordenada passada no segundo argumento.
insert(X,[H|T],[H|T1]) :- X>H, !, insert(X,T,T1).
insert(X,L,[X|L]).
    • Mostre, avaliando um objectivo apropriado, que o programa está incorrecto.
    • Como o poderá corrigir?

Negação por falha.

Por vezes pretende-se garantir que um dado predicado não é válido. A utilização do cut (em conjunção com o predicado pré-definido fail que falha sempre) permite codificar uma forma restrita de negação: a "negação por falha". Considere o seguinte predicado:

neg(X) :- X, !, fail.
neg(X).
Note que neg(X) falha sempre que o Prolog consiga construir uma derivação para X. Por outro lado, sucede se falhar na construção dessa derivação (entra na segunda cláusula, que é trivialmente satisfeita). Obs.: o predicado pré-definido do Prolog \+ corresponde ao predicado neg apresentado.

  • Verifique o resultado de neg em predicados já definidos.
  • Considere o seguinte programa:
estudante(paulo). 
casado(joao). 
estudante_solteiro(X) :- \+ casado(X), estudante(X).
    • Como explica a resposta às questões estudante_solteiro(paulo) e estudante_solteiro(X)


Aula 4: Exercícios de Manipulação de Listas e Tipos Algébricos

Manipulação de Listas

  • Defina last/2 que verifique se o último elemento de uma lista é um dado.
  • Defina append/3 que concatene duas listas.
  • Utilize o predicado append para definir os predicados prefixo e sufixo que verificam se uma lista é prefixo ou sufixo doutra.
  • Defina split/4 que separe os elementos de uma lista nos menores e maiores que um dado valor.
  • Considere o predicado:
takeout(X,[X|R],R).
takeout(X,[F|R],[F|S]) :- takeout(X,R,S).
    • O que faz este predicado?
    • Construa a árvore de procura de soluções para a questão takeout(X,[1,2,3],Y).
  • Utilize o predicado takeout para definir um predicado que determine se uma lista é permutação de uma outra.

Tipos Algébricos

A utilização de termos permite a manipulação em Prolog de valores de tipos algébricos (que em Haskell seriam declarados com data). Um primeiro exemplo disso já foi ilustrado na última aula quando se manipularam naturais (zero, suc(zero), etc.). Para sistematizar, vejamos agora como manipular um outro tipo algébrico bem conhecido: as árvores binárias. Uma escolha óbvia para representar os seus valores será considerar o átomo vazia para representar a árvore vazia e termos da forma nodo(X,E,D) para representar nodos intermédios (com valor X, sub-árvore esquerda E e sub-árvore direita D). Temos então como exemplos de termos: vazia, nodo(4, vazia, vazia), etc.

Note no entanto que em Prolog não existe a noção de tipo (e.g. não podemos, à priori, condicionar um dado argumento de um predicado a ser uma árvore binária --- a única alternativa será definir-se um predicado que suceda para termos que tenham a estrutura prescrita...)

  • Defina um predicado arvBin/1 que verifique se o termo dado é uma árvore binária (e.g. deve falhar para termos como vazia(nodo,vazia(nodo))).
  • Defina um predicado que verifique se uma lista é uma travessia in-order de uma árvore.
  • Defina predicados que determinem:
    • uma árvore é uma Árvore Binária de Procura
    • uma lista está ordenada.


Aula 3: Árvores de derivação do Prolog.

Considere-se a definição do predicado member/2

member(X,[X|_]).
member(X,[_|T]) :- member(X,T).

Este predicado foi definido na última aula com o objectivo de verificar se um elemento está contido numa lista. De facto, podemos utiliza-lo como:

?- member(2,[1,2,3]).
true .

?- member(4,[1,2,3]).
fail.

Mas podemos também utiliza-lo com variáveis não instanciadas com o objectivo de determinar quais os elementos de uma lista:

?- member(X,[1,2,3]).
X = 1 ;
X = 2 ;
X = 3 ;
fail.
Ou até para determinar soluções a questões mais complicadas, como (mais um exemplo da última aula):
?- member(X,[3,5,4,6,5,7]), X mod 2 =:= 0.
X = 4 ;
X = 6 ;
fail.

O objectivo desta aula é o de se perceber como é que o Prolog consegue chegar às soluções apresentadas (substituições de variáveis que validam o objectivo).

Inferência do Prolog

Um objectivo em Prolog consiste numa lista de predicados. O resultado da "execução" desse objectivo num interpretador consiste numa substituição que verifique esses predicados. O processo construção da substituição é normalmente designado por inferência, e pode ser justificado construindo uma árvore como se descreve:

  1. Na raiz da árvore, coloca-se a lista de predicados. O Prolog irá processar cada predicado dessa lista por ordem.
  2. Para cada predicado, o Prolog irá procurar encontrar na base de conhecimento uma instância dum facto ou duma regra cuja cabeça unifique com esse predicado. Esta procura processa-se também pela ordem pela qual as definições ocorrem na base de conhecimento.
  3. Quando é encontrada uma regra nas condições referidas, cria-se um descendente na árvore contendo a lista já afectada pela substituição resultante da unificação (relembre que o resultada na unificação é uma substituição das variáveis) e onde o predicado em análise é substituído pelo lado direito da regra (ou simplesmente desaparece, no caso dos factos). É habitual anotarmos os arcos da árvore com as substituições resultantes das unificações.
  4. Quando existe mais do que uma possibilidade para a referida unificação (e.g. várias regras são aplicáveis), traduz-se por uma ramificação da árvore de inferência.
  5. Operacionalmente, o Prolog trata esta ramificação pelo mecanismo de backtracking (travessia depth-first da árvore).
  6. Quando a lista de predicados fica vazia, cria-se uma folha na árvore denotada como true --- representa um resultado apresentado ao utilizador (a substituição calculada ao longo do caminho).
  7. Quando não existe qualquer regra na base de conhecimento que unifique com o primeiro predicado da lista, cria-se uma folha denotada por fail .

A árvore de derivação para o objectivo "member(X,[1,2]), X mod 2 ==0" será:

Exercícios:

  • Considere a seguinte definição do predicado factorial:
fact(1,0).
fact(R,X) :- X2 is X-1, fact(R2,X2), R is X*R2.
    • Apresente a árvore de inferência para o objectivo fact(R,2).
    • Comente os resultados obtidos. Explique, em particular, que problemas aponta à solução apresentada.
    • Como pode ultrapassar os problemas detectados.
  • Considere o seguinte predicado:
nat2int(zero,0).
nat2int(suc(X),N) :- nat2int(X,N2), N is N2+1.
    • Apresente a árvore de inferência para o objectivo nat2int(suc(suc(zero)),X).
    • Apresente a árvore de inferência para o objectivo nat2int(X,2).
    • Comente os resultados obtidos.
    • Consegue propor alguma forma de ultrapassar os problemas detectados?

Tracing e Debug

Uma forma expedita de detectar problemas em programas Prolog consiste em utilizar o mecanismo de tracing. Esse mecanismo permite "monitorizar" determinados predicados durante o processo de inferência. Considere-se novamente o objectivo considerado atrás que faz uso do predicado member/2:

?- trace(member).
%         member/2: [call, redo, exit, fail]
true.

[debug]  ?- member(X,[1,2]), X mod 2 =:= 0.
 T Call: (8) member(_G318, [1, 2])
 T Exit: (8) member(1, [1, 2])
 T Redo: (8) member(_G318, [1, 2])
 T Call: (9) member(_G318, [2])
 T Exit: (9) member(2, [2])
 T Exit: (8) member(2, [1, 2])
X = 2 ;
 T Redo: (9) member(_G318, [2])
 T Call: (10) member(_G318, [])
 T Fail: (10) member(_G318, [])
fail.
Note que o Prolog sinalizada diferentes eventos relativos ao predicado observado:
  • Call: o predicado em "resolução";
  • Exit: o predicado foi resolvido com sucesso (pode por isso ser removido da lista de objectivos);
  • Redo: nova visita ao predicado (por backtracking);
  • Fail: predicado falha definitivamente (já não existem mais alternativas para o backtracking).

Exercício:

  • Interprete o resultado do trace apresentado na árvore de inferência apresentada acima.
  • Realize análises de traces para as restantes árvores construídas nesta aula...


Aula 2: Operações aritméticas e Manipulação de listas.

Operações aritméticas

Já vimos que o Prolog aceita termos que representem expressões matemáticas, como 3+4*2. Mas quando manipulamos esses termos estamos normalmente interessados em avaliar essas expressões (i.e. calcular o seu resultado). O Prolog disponibiliza para o efeito o predicado is que avalia o segundo argumento e unifica o resultado com o primeiro. Alguns exemplos (onde se utiliza a notação infixa para o predicado):

?- X is 3+2.
X = 5.

?- 3+2 is 2+3.
fail.

?- 5 is 3+2.
true.

?- 5 is X+2.
ERROR: is/2: Arguments are not sufficiently instantiated
Um aspecto importante na utilização do predicado is é a assimetria induzida: o segundo argumento deve ser sempre uma expressão completamente instanciada. Assim, se definirmos o predicado:
soma(X,Y,Z) :- X is Y + Z.
devemos considerar o segundo e o terceiro argumentos como "argumentos de entrada", que necessitam estar devidamente instanciados. Uma forma compacta de se exprimir esse facto (normalmente utilizada na documentação) é através da assinatura soma(-X,+Y,+Z) --- assim identifica-se o argumento Y e Z como de entrada e X como de saída.

Exercício:

  • Defina o predicado factorial(-R,+X) que suceda quando R for o factorial de X.
  • Uma forma alternativa de lidar com números naturais consiste em considerar termos zero, suc(zero), suc(suc(zero)), etc. (i.e. utilizar notação unária para os naturais). Defina o predicado nat2int que sucede quando o primeiro argumento é a representação unária do segundo.
  • No predicado definido na alínea anterior, verifique:
    • que argumentos tem de ser utilizados como entrada e como saída;
    • o que acontece quando solicita ao interpretador várias respostas.
  • Verifique, com o auxílio do mecanismo de help do SWI-Prolog (ou da documentação on-line, se preferir) qual a funcionalidade oferecida pelos operadores:
    =:=, =\=, <, =<, ==, @< 

Manipulação de listas

Um exemplo de um tipo estruturado muito utilizado em Prolog são as listas. A sintaxe pré-definida é [] que denota a lista vazia e [H|T] que denota a lista com cabeça H e cauda T.

  • Defina member/2 que verifica se um elemento pertence a uma lista.
  • Utilize o predicado member para determinar quais dos elementos da lista [3,5,4,6,5,7] são pares.
  • Defina um predicado que permita calcular o somatório de uma lista de inteiros.
  • O que alteraria, no predicado definido na alínea anterior, para calcular o somatório de uma lista de expressões inteiras?
  • Defina o predicado concat/3 que verifique quando uma lista é a concatenação de outras duas. Verifique o resultado quando o invoca com diferentes listas instanciadas.


Aula 1: Apresentação da linguagem PROLOG

Ao longo das aulas práticas de Lógica Computacional fazer uso da linguagem PROLOG. O interpretador adoptado será o SWI-Prolog que está disponível para para a generalidade das plataformas (MS-Windows, Linux, macOSX).

Conceitos Preliminares

Termos: o Prolog é uma linguagem simbólica que manipula termos que podem ser:

  • Variáveis - denotadas por identificadores começados por letras maiúsculas (e.g. X, Y, Xs, ...);
  • Constantes - átomos (identificadores começados por letras minúsculas) ou valores de tipos pré-definidos como inteiros, reais, strings, etc. (e.g. abc, xyz, 32, 3.1415)
  • Termos Compostos - termos da forma f(t1,...,tn) onde f é designado por functor (nome da função) e t1...tn são termos (e.g. xyz(X,abc), abc(abc(abc,abc)), +(4,2))

obs.: como iremos ver adiante, o Prolog permite a declaração de operadores infixos. Assim irá permitir escrever 4 + 2 como alternativa ao termo +(4,2) (o mesmo se aplica a outros operadores infixos que serão apresentados adiante).

Substituições e Unificação: o que caracteriza as variáveis é o facto de elas poderem vir a ser substituidas por outros termos. Considere-se o termo t(X,Y): se substituirmos X por abc(A,3) e Y por Z obtemos o termos t(abc(A,3),Z).

Uma operação fundamental no modelo de execução do Prolog é o que se designa por Unificação de dois termos. A ideia consiste em encontrar uma substituição que iguale (se possível) os termos dados. Vejamos alguns exemplos:

  • X = 4, Y = 3 é um unificador dos termos abc(3,X) e abc(Y,4);
  • X = 4, Y = 3 é um unificador dos termos abc(X,X) e abc(Y,4);
  • os termos abc(3,4) e abc(X,X) não dispõe de unificador.

Uma característica dos unificadores apresentados é que se tratam sempre dos unificadores mais gerais (qualquer outra substituição que unifique os termos pode ser expressa como um refinamento da substituição dada). Adiante iremos ter oportunidade de aprofundar estes aspectos mais teóricos... Para já interessa reter que o Prolog, quando unificar dois termos, determina sempre o unificador mais geral (i.e. a substituição mais simples que iguala os termos).

EXERCÍCIO: Determine o unificador mais geral para os seguintes pares de termos (se existir... naturalmente):

  • f(X,g(Y)) e g(X,f(Y))
  • f(X,g(Y)) e Z
  • f(X,g(y)) e f(g(y),X)
  • f(X) e X
  • f(X) e f(3+2)
  • f(3) e f(2+1)
  • f(3) e A(X)

Programas em Prolog

Executar um programa em Prolog consiste em interrogar o interpretador sobre a validade de um dado predicado lógico. A resposta mais simples será então true ou fail (se o predicado for válido ou não, respectivamente).

Objectivo (Goal):

Quando se invoca o SWI-Prolog, surge o prompt ?- que assinala que o interpretador aguarda a introdução de um objectivo (ou query, ou goal).

Calvin:~ jba$ /opt/local/bin/swipl 
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.51)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- 

Como referimos, o objectivo será um predicado lógico. Iremos ter oportunidade de definir novos predicados mas, para já, concentremo-nos na utilização do predicado pré-definido =/2 (o /2 significa que o predicado espera dois argumentos). Este predicado será válido precisamente quando os termos que forem passados como argumentos unificarem. Assim podemos introduzir:

?- =(3,3).
true.

?- 3=3.
true.

?- 3=2.
fail.

?- 3=X.
X = 3.

?- 3+2=X.
X = 3+2.

?- 3 + X = Y * 2.
fail.

?- 

Os exemplos apresentados revelam-nos duas coisas: (1) podemos utilizar a notação infixa e, (2) quando no objectivo estão envolvidas veriáveis o Prolog retorna uma substituição dessas variáveis que verifiquem o predicado (ou falha, se não existir nenhuma substituição nessas condições) --- podemos então dizer que, intuitivamente, as variáveis dos objectivos estão quantificadas existencialmente.

EXERCÍCIO: Interrogue o interpretador de Prolog por forma a ele retornar os unificadores mais gerais atrás solicitados.

Factos (base de conhecimento I):

Referimos que executar um programa em Prolog consiste em interrogar o interpretador relativamente a um objectivo. Mas, em que é que consiste um programa Prolog?. Um programa em Prolog será a base de conhecimento que o interpretador utiliza para determinar a validade do objectivo pedido. Essa base de conhecimento será consituída por:

  • Factos: que estabelecem a validade imediata (de instâncias) de predicados;
  • Regras: que condicionam a validade de predicados à validade de sub-objectivos.

Comecemos pelos primeiros. Como exemplos de factos podemos ter:

pai(joao,manuel).
pai(cristina, jose).
pai(joaquim,manuel).
pai(francisco,joao).
pai(helena,joao)

Com base nestes factos, diriamos que pai(joaquim,manuel) é válido mas pai(joaquim,jose) já não o é (porque nada estabelece a sua validade). Para verificar isso com o Prolog, necessitamos de carregar a base de conhecimento no interpretador. Para tal devemos:

  • gravar um ficheiro com os factos apresentados (normalmente dá-se a extensão ".pl" aos ficheiros Prolog, e.g. "pai.pl");
  • carregar o ficheiro no interpretador por intermédio do predicado pré-definido consult (e.g. "consult(pai.pl)").

EXERCÍCIO: Verifique a validade de alguns objectivos com a base de conhecimento apresentada. O que acontece quando se inclui variáveis?

Por vezes, o interpretador retorna uma substituição de resultado sem voltar ao prompt inicial. Isso assinala que a solução apresentada é uma de várias possíveis, podendo o utilizador:

  • digitar . e retornar ao prompt inicial;
  • digitar ; para solicitar outra solução.

EXERCÍCIO:

  • introduza um predicado que permita determinar todos os filhos de "manuel".
  • o que aconteceria se incluisse na base de conhecimento o facto pai(X,carlos) ? Experimente... (verifique o impacto de o incluir no início e no fim da base de conhecimento).

O exercício anterior permite concluir que, nos factos, devemos realizar uma interpretação universal das variáveis.

Se as questões colocadas ao interpretador de Prolog são predicados lógicos, é natural perguntarmo-nos como construir predicados à custa de conectivas lógicas (como e, ou, etc.). O Prolog tem definido os operadores:

  • conjunção: denotado por uma vírgula (,)
  • disjunção: denotado por um ponto e vírgula (;)

(As restantes conectivas lógicas proposicionais serão introduzidas mais tarde.)

Regras (base de conhecimento II):

A expressividade do Prolog resulta do facto de permitir incluir, na base de conhecimento, regras que condicionam a validade de um predicado (colocado no lado esquerdo do operador :-, e designado por cabeça da regra) à validade de um conjunto de outros predicados (designados por corpo da regra). A título de exemplo, temos que a regra:

avo(X,Y) :- pai(X,Z), pai(Z,Y).

Quando acrescentada à base de conhecimento apresentada acima, permite que o Prolog responda afirmativamente ao predicado avo(francisco,manuel). No processo, o interpretador verificará os predicados pai(francisco,joao) e pai(joao,manuel).

Note que nas regras, as variáveis que ocorrem na cabeça da regra devem ser entendidas como quantificadas universalmente (como nos factos). Já as que só ocorrem no corpo da regra devem ser entendidas como quantificadas existencialmente (como nos objectivos).

Exercício: Estenda a base de conhecimento para exprimir outros graus de parentesco, como "irmão", "tio", etc.


ProgDetalhado0607 04 Jul 2007 - 18:16 - NEW JoseBacelarAlmeida

Programa detalhado do ano lectivo 2006/2007

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG
  • Analogia de Curry-Howard
    • Identidade das Provas (em Dedução Natural)
    • Normalização de provas
    • Sistemas de Anotação de Termos
    • Lambda-Calculus com tipos (formulação de Curry)
    • Beta-redução e suas propriedades
    • Analogia de Curry-Howard

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
ProgDetalhado0708 11 Jun 2008 - 22:07 - NEW JoseBacelarAlmeida

Programa detalhado do ano lectivo 2007/2008

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG
  • Analogia de Curry-Howard
    • Identidade das Provas (em Dedução Natural)
    • Normalização de provas
    • Sistemas de Anotação de Termos e Lambda-Calculus com tipos (formulação de Curry)

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
ProgDetalhado0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida

Programa detalhado do ano lectivo 2008/2009

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
Programa0506 03 Jul 2007 - 22:09 - r3 JoseBacelarAlmeida

Programa Resumido (2005/2006)

Componente Teórica

  • Lógica Proposicional
    • Sintaxe
    • Linguagens de Cláusulas
    • Validade e Verificação
    • Redução Semântica
    • Modelos e Diagramas de Decisão Binária
    • Exemplos de problemas SAT
  • Lógica de Primeira Ordem
    • Sintaxe da Lógica de Predicados
    • Substituições
    • Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Programação com Restricções

Programa0607 04 Jul 2007 - 18:17 - r3 JoseBacelarAlmeida


Programa Resumido

Componente Teórica

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
    • Métodos de Verificação
    • Aspectos de Complexidade (SAT)
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO
    • Sistemas Deductivos
    • Resolução de primeira ordem
    • Inferência em Teorias de Horn
  • Analogia de Curry-Howard
    • Identidade das provas e normalização
    • Sistemas de anotações de termos
    • Lambda-calculus com tipos
    • Analogia de Curry-Howard

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Utilização do Sistema de Prova Assistida Coq (opcional)


Programa detalhado do ano lectivo 2006/2007

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG
  • Analogia de Curry-Howard
    • Identidade das Provas (em Dedução Natural)
    • Normalização de provas
    • Sistemas de Anotação de Termos
    • Lambda-Calculus com tipos (formulação de Curry)
    • Beta-redução e suas propriedades
    • Analogia de Curry-Howard

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
Programa0708 20 Feb 2008 - 15:22 - NEW JoseBacelarAlmeida


Programa Resumido

Componente Teórica

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
    • Métodos de Verificação
    • Aspectos de Complexidade (SAT)
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO
    • Sistemas Deductivos
    • Resolução de primeira ordem
    • Inferência em Teorias de Horn
  • Analogia de Curry-Howard
    • Identidade das provas e normalização
    • Sistemas de anotações de termos
    • Lambda-calculus com tipos
    • Analogia de Curry-Howard

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Utilização do Sistema de Prova Assistida Coq (opcional)


Programa detalhado do ano lectivo 2007/2008

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG
  • Analogia de Curry-Howard
    • Identidade das Provas (em Dedução Natural)
    • Normalização de provas
    • Sistemas de Anotação de Termos e Lambda-Calculus com tipos (formulação de Curry)

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
Programa0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida


Programa Resumido

Componente Teórica

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
    • Métodos de Verificação
    • Aspectos de Complexidade (SAT)
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO
    • Sistemas Deductivos
    • Resolução de primeira ordem
    • Inferência em Teorias de Horn
  • Analogia de Curry-Howard
    • Identidade das provas e normalização
    • Sistemas de anotações de termos
    • Lambda-calculus com tipos
    • Analogia de Curry-Howard

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Utilização do Sistema de Prova Assistida Coq (opcional)


Programa detalhado do ano lectivo 2008/2009

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
Projectos0708 08 May 2008 - 22:56 - r3 JoseBacelarAlmeida

Propostas de Projectos Práticos - 2007/2008

Esta página apresenta algumas ideias para projectos práticos da disciplina de Lógica Computacional. Os alunos interessados em realizar um projecto devem contactar o docente para definir a atribuição respectiva.

Utilização de SMT Provers na verificação de software

O objectivo deste projecto é o de explorar um SMT Prover na verificação de software. Um SMT Prover é uma ferramenta que combina um verificador automático de fórmulas proposicionais com estratégias específicas para lidar com problemas de decisão em teorias específicas (como aritmética linear, manipulação de arrays, etc.). Essas teorias são particularmente orientadas para cobrir as obrigações de prova resultantes da verificação de programas.

Com este projecto pretende-se validar esse desígnio verificando as obrigações de prova resultantes de programas concretos com um SMT Prover. Como gerador de obrigações de prova sugere-se a utilização de WHY (http://why.lri.fr/index.en.html) e como SMT prover o YICES (http://yices.csl.sri.com/).

Codificação de ORBDDs em Haskell

A codificação de Binary Decision Diagrams (BDDs) pressupõe um controlo apertado sobre a gestão de memória e nos algoritmos utilizados na sua construção. Esse facto torna a sua codificação em Haskell um desafio interessante, obrigando à utilização de Monads para permitir aspectos imperativos na sua programação.

Este projecto pretende estudar a implementação de BDDs em Haskell. Tanto pode incidir sobre a codificação "de raiz" dessas estruturas como pode adoptar uma implementação pré-existente a analisar a sua implementação e o respectivo desempenho (e.g. comparando-a com uma biblioteca análoga desenvolvida em C).

Apontadores:

Codificação do algoritmo Davis-Putnam em Haskell

Um dos algoritmos mais utilizados na verificação de fórmulas proposicionais é o Davis-Putnam(-Logemann-Loveland). Este projecto propõe-se estudar a implementação desse algoritmo em Haskell. Tal como no caso do projecto anterior, o âmbito deste projecto tanto pode incidir sobre a codificação de raiz do algoritmo, como no estudo de uma implementação existente.

Apontadores:

Outros recursos:

Projectos0809 08 May 2009 - 02:24 - r2 JoseBacelarAlmeida

Projecto

O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere-se que os interessados realizem os exemplos do tutorial e de o survey Coq in a Hurry.

Para aplicar os conceitos estudados, devem escolher um (ou mais) dos desafios apresentados. Note que o trabalho é individual e a escolha do desafio deve ser sempre combinada com o docente. Para a entrega devem apresentar um pacote com o conjunto das scripts desenvolvidas (quer dos exemplos realizados, quer do desafio escolhido), "abundantemente" comentadas (preferencialmente fazendo uso da ferramenta coqdoc para produzir um documento contendo essas scripts). As sessões de apresentação irão consistir na execução e discussão das referidas scripts.

Apontadores Web:

Desafios:

  • Mostre que n^2 pode ser calculado como a soma dos primeiros n números ímpares.
  • Demonstre que o somatório, para i=0..n de i e i^2 é respectivamente n*(n+1)/2 e n*(n+1)*(2*n+1)/6.
  • Mostre que, para qualquer lista l, rev(rev(l))=l (rev é a função que inverte a ordem dos elementos numa lista).
  • Considere a função f (a,b) (c,d) = (a*c+a*d+b*d, a*c+b*d). Mostre que:
    • a função é associativa e dispõe de elemento neutro.
    • a aplicação iterada dessa função (n vezes) sobre o valor (1,0) retorna o valor (Fib(n), Fib(n-1)) (onde Fib é a função de Fibonacci)
Sumarios0607 11 Jun 2007 - 19:45 - r16 JoseBacelarAlmeida

Sumários


Docente: José Carlos Bacelar

Aulas Teóricas

08/06: Esclarecimento de dúvidas.

05/06: Referência às propriedades básicas do Lambda-calculus com tipos: subject-reduction, Church-Rosser, normalização forte.

01/06: Lambda-calculus com tipos. Analogia de Curry-Howard.

29/05: Identidade das provas e processo de normalização. Sistemas de anotação de termos.

25/05: Motor de inferência do PROLOG: selecção das cláusulas; unificação; backtracking; árvores de inferência.

22/05: Resolução em cláusulas de primeira ordem. Cláusulas de Horn. Resolução SLD e inferência do PROLOG.

18/05: Tolerância de ponto: enterro da gata.

15/05: Tolerância de ponto: enterro da gata.

11/05: JOIN'2007

08/05: Resolução proposicional em fórmulas de primeira ordem. Unificação.

04/05: Correcção das regras no cálculo de sequentes. Versão semântica do teorema de Herbrand.

27/04: Prenex Normal Forms e Skolenização. Modelos de Herbrand.

24/04: Cálculo de Sequentes para Lógica de Primeira Ordem.

20/04: Sobre o problema SAT: noções de complexidade. Lógica de Primeira Ordem: sintaxe e semântica.

17/04: BDDs: redução de árvores de decisão e construção bottom up.

13/04: Algoritmo Davis Putnam.

30/03: Não houve aula (ETAPS 07)

27/03: Não houve aula (ETAPS 07)

23/03: Algoritmo de resolução de Robinson. Exemplos de aplicação.

20/03: Formas Normais Conjuntivas e Formas Normais Disjuntivas. Resolução de cláusulas em formulas na FNC.

16/03: Apresentação do método de Tableaux. Formas normais negativas.

13/03: Esboço da demonstração da propriedade de eliminação de corte no cálculo de sequentes. Resumo das propriedades do cálculo de sequentes.

09/03: Demonstração dos teoremas de correcção e completude para o cálculo de sequentes (LC).

06/03: Apresentação do cálculo de sequentes (sistema LC)

02/03: Sintaxe e semântica da lógica proposicional. Consequência semântica e sistemas de dedução. Dedução natural.

27/02: Apresentação da disciplina.

23/02: Não houve aula (Simpósio Doutoral).

Aulas Teórico-Práticas

05/06: Unificação em cláusulas LPO.

29/05: Cálculo de sequentes em Lógica de Primeira Ordem.

22/05: Formas Prenex e Skolenização.

15/05: Tolerância de ponto: enterro da gata.

08/05: BDDs: redução e construção bottom-up.

24/04: Algoritmo Davis-Putman: exercícios de aplicação.

17/04: Algoritmo de resoluçao de Robinson: exemplos de aplicação.

27/03: Formas clausais: Fórmulas Normais Conjuntivas e Fórmulas Normais Disjuntivas. Resulução proposicional.

20/03: Avaliação de fórmulas proposicionais por aplicação do método tableaux. Formas normais negativas.

13/03: Demonstrações simples envolvendo indução sobre estrutura das fórmulas e derivações em sistemas de dedução. Construção de derivações no sistema de cálculo de sequentes.

06/03: Exercícios sobre noções elementares da lógica proposicionais: validade de fórmulas; consequência semântica; derivações em Dedução Natural.

27/02: Inscrição nos turnos.

Aulas Práticas

05/06: Mini-teste 2

29/05 Predicados de segunda ordem.

22/05: Estratégia Gerar e Testar.

15/05: Tolerância de ponto: enterro da gata.

08/05: Utilização de operadores em Prolog. Manipulação de fórmuas lógicas.

24/04: Utilização de cut e negação por falha.

17/04: Mini-teste 1

27/03: Árvores de Prova. Tipos algébricos.

20/03: Continuação da manipulação de listas. Exploração do mecanismo de backtracking.

13/03: Utilização de termos, introdução à manipulação de Listas.

06/03: Apresentação da linguagem Prolog.

27/02: Inscrição nos turnos.


Docente: Olga Pacheco

Aulas Teórico-Práticas

17/03: Prova de que a relação de consequência semântica é uma relação de dedução. Representação no cálculo de sequentes das regras da dedução natural.

07/03: Exercícios sobre noções elementares da lógica proposicional: validade de fórmulas; consequência semântica; derivações em Dedução Natural.

28/02: Inscrição nos turnos.

Aulas Práticas

14/03: Utlilização de termos estruturados. Representação dos naturais baseada nos construtores 0 e sucessor (definição dos predicados: menor, maior ou igual, soma e multiplicação). Manipulação de listas em Prolog (definição dos predicados: cabeça, cauda, ultimo elemento, elemento na posição n, e membro).

07/03: Apresentação da linguagem Prolog. Representação em Prolog de informação sobre árvores geneológicas (definição dos predicados: mãe, pai, irmão, tio, avô, avó, avô paterno, avó paterna, bisavô, bisavó,...).

28/02: Inscrição nos turnos.


Sumarios0708 01 Feb 2009 - 18:25 - r15 JoseBacelarAlmeida

Sumários


Aulas Teóricas (3ª 14:00-15:00; 5ª 16:00-17:00)

26/02: Não houve aula.

28/02: Não houve aula.

04/03: Aula de substituição em 27/03, às 15:00.

06/03: Revisões de Lógica Proposicional: sintaxe das fórmulas; noção de modelo e validade; tautologias e contradições; teorias; consequência semântica.

11/03: Relações de dedução. Sistema de Dedução Natural (formulação clássica e com sequentes).

13/03: Propriedades do sistema de Dedução Natural. Apresentação do Cálculo de Sequentes.

27/03 (15:00): Demonstração do teorema de Correcção e Completude do sistema de Dedução Natural.

27/03: Continuação das demonstrações de Correcção e Completude do sistema de Dedução Natural.

01/04: Esboço das demonstrações da Correcção e Completude do Cálculo de Sequentes e da propriedade de Eliminação do Corte. Apresentação do método de Tableaux.

03/04: Formal Normal Negativa (FNN) e Formais Clausais (Forma Normal Disjuntiva (FND) e Forma Normal Conjuntiva (FNC)).

08/04: Método de resolução proposicional. Apresentação do algoritmo de Robinson e ilustração da aplicação.

10/04: Algoritmo de Davis-Putnam.

15/04: BDDs: motivação e definição; redução de árvores de decisão binárias.

17/04: Construção bottom-up de BDDs.

22/04: TESTE INTERMÉDIO.

24/04: Lógica de Primeira Ordem: Sintaxe e Semântica.

29/04: Formas Normais: Prenex; Herbrand e Skolen.

06/05: Modelos de Herbrand.

08/05: Não houve aula (impossibilidade do docente).

13/05: Tolerância de Ponto: Enterro da Gata.

15/05: Tolerância de Ponto: Enterro da Gata.

20/05: Cálculo de Sequentes para Lógica de Primeira Ordem.

27/05: Resolução Proposicional em Lógica de Primeira Ordem.

29/05: Unificação.

03/06: Resolução de Primeira Ordem.

05/06: Analogia de Curry Howard: motivação; normalização das provas.

10/06: Sistemas de Anotação de Provas para Dedução Natural. Lambda-Calculus com tipos.

12/06: Esclarecimento de dúvidas. Correcção do primeiro teste.


TP1

Aulas Teórico-Práticas (3ª 10:00-11:00)

26/02: Não houve aula.

04/03: Não houve aula.

11/03: Exercícios sobre validade e consequência semântica.

01/04: Exercícios sobre relações de dedução. Construção de árvores em Dedução Natural.

08/04: Exercícios sobre construção de derivações no Cálculo de Sequentes.

15/04: Exercícios sobre Formas Clausais e Resolução Proposicional.

22/04: TESTE INTERMÉDIO.

29/04: Exercícios spbre método Davis Putnam .

06/05: Exercícios sobre validade em lógica de primeira ordem.

13/05: Tolerância de Ponto: Enterro da Gata.

20/05: Exercícios sobre formas normais (prenex, skolen e herbrand)

27/05: Exercícios sobre cálculo de sequentes para lógica de predicados.

03/06: Exercícios sobre resolução.


Aulas Práticas (3ª 11:00-13:00)

26/02: Não houve aula.

04/03: Não houve aula.

11/03: Apresentação da linguagem Prolog.

01/04: Operações aritméticas e manipulação de listas.

08/04: Árvores de Inferência.

15/04: Exercícios de Manipulação de Listas e Tipos Algébricos.

22/04: TESTE INTERMÉDIO.

29/04: Utilização de Cut e Negação por falha.

06/05: Estratégia Gerar e Testar.

13/05: Tolerância de Ponto: Enterro da Gata.

20/05: Predicados de ordem superior.

27/05: Manipulação de Fórmulas Lógicas em Prolog.

03/06: Implementação do algoritmo de Davis-Putnam.


TP2

Aulas Teórico-Práticas (4ª 10:00-11:00)

27/02: Não houve aula.

05/03: Não houve aula.

12/03: Exercícios sobre validade e Consequência semântica.

26/03: Exercícios sobre relações de dedução. Construção de árvores em Dedução Natural.

02/04: Exercícios sobre construção de derivações no Cálculo de Sequentes.

09/04: Exercícios sobre o método de Tableaux e cálculo de formas normais.

16/04: Exercícios sobre resolução proposicional.

23/04: TESTES INTERMÉDIOS.

30/04: Exercícios sobre método Davis Putnam.

07/05: Exercícios sobre validade em lógica de primeira ordem.

14/05: Tolerância de Ponto: Enterro da Gata.

21/05: Exercícios sobre formas normais (prenex, skolen e herbrand).

28/05: Exercícios sobre cálculo de sequentes para lógica de predicados.

04/06: Exercícios sobre resolução.

11/06: Esclarecimento de Dúvidas.


Aulas Práticas (4ª 11:00-13:00)

27/02: Não houve aula.

05/03: Não houve aula.

12/03: Apresentação da linguagem PROLOG.

26/03: Operações aritméticas e manipulação de listas.

02/04: Árvores de Inferência.

09/04: Exercícios de Manipulação de Listas e Tipos Algébricos.

16/04: Utilização de Cut e Negação por falha.

23/04: TESTES INTERMÉDIOS.

30/04: Continuação da aula anterior.

07/05: Estratégia Gerar e Testar.

14/05: Tolerância de Ponto: Enterro da Gata.

21/05: Predicados de ordem superior.

28/05: Manipulação de Fórmulas Lógicas em Prolog.

04/06: Implementação do algoritmo de Davis-Putnam.

11/06: Esclarecimento de dúvidas.

Sumarios0809 01 Feb 2009 - 18:23 - NEW JoseBacelarAlmeida

Sumários


Aulas Teóricas (3ª 14:00-15:00; 5ª 16:00-17:00)


TP1

Aulas Teórico-Práticas (2ª 16:00-17:00)


Aulas Práticas (2ª 17:00-19:00)


TP2

Aulas Teórico-Práticas (3ª 10:00-11:00)


Aulas Práticas (3ª 11:00-13:00)

Topicos0405 26 Feb 2007 - 00:54 - NEW JoseBacelarAlmeida
Topicos0506 19 Feb 2007 - 01:17 - NEW JoseBacelarAlmeida
Topicos0607 19 Feb 2007 - 01:16 - NEW JoseBacelarAlmeida
Topicos0708 20 Feb 2008 - 15:23 - NEW JoseBacelarAlmeida
Topicos0809 12 Feb 2009 - 17:21 - r2 JoseBacelarAlmeida
WebAtom 24 Jan 2006 - 06:07 - r2 TWikiContributor
TWiki's Education/LC web The Education/LC web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise. http://wiki.di.uminho.pt/twiki/bin/view/Education/LC Copyright 2020 by contributing authors 2020-10-30T14:39:17Z WebStatistics http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebStatistics 2020-10-30T14:39:17Z Statistics for Education/LC Web Month: Topic views: Topic saves: File uploads: Most popular topic views: Top contributors for topic save ... (last changed by TWikiGuest) TWikiGuest WebHome http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebHome 2010-02-18T13:06:08Z Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva ... (last changed by OlgaPacheco) OlgaPacheco MaterialApoio http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/MaterialApoio 2010-02-18T13:00:50Z Slides Lógica Proposicional I Cálculo de Sequentes (versão: 11/06/2008) Lógica Proposicional II Método Tableaux , Formas Clausais, Resolução (versão: 11 ... (last changed by OlgaPacheco) OlgaPacheco Avisos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Avisos0809 2009-07-22T17:28:03Z 22/07/2009: Disponíveis notas da época de recurso. 07/05/2009: Disponível enunciado do projecto prático. 06/03/2009: Já disponível o guião da primeira aula pr ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida 0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/0809 2009-07-22T17:27:12Z Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2008/2009 Equipa Docente José Carlos Bacelar ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida ProgDetalhado0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/ProgDetalhado0809 2009-06-18T22:10:46Z Programa detalhado do ano lectivo 2008/2009 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Programa0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Programa0809 2009-06-18T22:10:01Z Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Praticas0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Praticas0809 2009-05-29T23:07:19Z Aulas Práticas #Aula10P Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog Predicados de segunda ordem Existem meta ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Projectos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Projectos0809 2009-05-08T02:24:38Z Projecto O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere se que os interessados realizem os exemplos ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Topicos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Topicos0809 2009-02-12T17:21:40Z Calendário (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Calendario http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Calendario 2009-02-12T17:16:45Z (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Sumarios0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Sumarios0708 2009-02-01T18:25:15Z Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) 26/02: Não houve aula. 28/02: Não houve aula. 04/03: Aula de substituição em 27/03 , às 15:00. 06 ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Sumarios0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Sumarios0809 2009-02-01T18:23:00Z Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) TP1 Aulas Teórico Práticas (2ª 16:00 17:00) Aulas Práticas (2ª 17:00 19:00) TP2 Aulas Teórico Pr ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida 0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/0708 2009-02-01T18:16:25Z Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2007/2008 Equipa Docente José Carlos Bacelar ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida WebPreferences http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebPreferences 2009-02-01T18:15:29Z Education/LC Web Preferences The following settings are web preferences of the Education/LC web. These preferences overwrite the site level preferences in ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida MFES0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/MFES0809 2008-12-05T23:17:24Z Análise, Modelação e Teste de Software MFES Mestrado de Informática 13/11/2008 "Design by Contract and Java Modeling Language": apresentação do conceito e clausulas ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida
WebChanges 15 Nov 2006 - 19:43 - r3 TWikiContributor

50 Recent Changes in TWiki Web retrieved at 17:01 (GMT)

WebStatistics 30 Oct 2020 - 14:39 - r2239 TWikiGuest
Statistics for Education/LC Web Month: Topic views: Topic saves: File uploads: Most popular topic views: Top contributors for topic save ...
WebHome 18 Feb 2010 - 13:06 - r14 OlgaPacheco
Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva ...
MaterialApoio 18 Feb 2010 - 13:00 - r15 OlgaPacheco
Slides Lógica Proposicional I Cálculo de Sequentes (versão: 11/06/2008) Lógica Proposicional II Método Tableaux , Formas Clausais, Resolução (versão: 11 ...
Avisos0809 22 Jul 2009 - 17:28 - r4 JoseBacelarAlmeida
22/07/2009: Disponíveis notas da época de recurso. 07/05/2009: Disponível enunciado do projecto prático. 06/03/2009: Já disponível o guião da primeira aula pr ...
0809 22 Jul 2009 - 17:27 - r9 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2008/2009 Equipa Docente José Carlos Bacelar ...
ProgDetalhado0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida
Programa detalhado do ano lectivo 2008/2009 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
Programa0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
Praticas0809 29 May 2009 - 23:07 - r13 JoseBacelarAlmeida
Aulas Práticas #Aula10P Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog Predicados de segunda ordem Existem meta ...
Projectos0809 08 May 2009 - 02:24 - r2 JoseBacelarAlmeida
Projecto O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere se que os interessados realizem os exemplos ...
Topicos0809 12 Feb 2009 - 17:21 - r2 JoseBacelarAlmeida
Calendário
Calendario 12 Feb 2009 - 17:16 - NEW JoseBacelarAlmeida
Sumarios0708 01 Feb 2009 - 18:25 - r15 JoseBacelarAlmeida
Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) 26/02: Não houve aula. 28/02: Não houve aula. 04/03: Aula de substituição em 27/03 , às 15:00. 06 ...
Sumarios0809 01 Feb 2009 - 18:23 - NEW JoseBacelarAlmeida
Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) TP1 Aulas Teórico Práticas (2ª 16:00 17:00) Aulas Práticas (2ª 17:00 19:00) TP2 Aulas Teórico Pr ...
0708 01 Feb 2009 - 18:16 - r13 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2007/2008 Equipa Docente José Carlos Bacelar ...
WebPreferences 01 Feb 2009 - 18:15 - r20 JoseBacelarAlmeida
Education/LC Web Preferences The following settings are web preferences of the Education/LC web. These preferences overwrite the site level preferences in ...
MFES0809 05 Dec 2008 - 23:17 - r3 JoseBacelarAlmeida
Análise, Modelação e Teste de Software MFES Mestrado de Informática 13/11/2008 "Design by Contract and Java Modeling Language": apresentação do conceito e clausulas ...
Avisos0708 27 Sep 2008 - 11:17 - r14 JoseBacelarAlmeida
24/09: Já estão disponíveis as notas da época de especial. 28/07: Já estão disponíveis as notas da época de recurso. 02/07: Já estão disponíveis as notas do 2 ...
ProgDetalhado0708 11 Jun 2008 - 22:07 - NEW JoseBacelarAlmeida
Programa detalhado do ano lectivo 2007/2008 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
Praticas0708 02 Jun 2008 - 22:41 - r17 JoseBacelarAlmeida
Aulas Práticas #Aula9P Aula 9: Implementação do algoritmo Davis Putnam em Prolog. Pretende se definir um programa que permita verificar se uma dada fórmula é uma ...
Projectos0708 08 May 2008 - 22:56 - r3 JoseBacelarAlmeida
Propostas de Projectos Práticos 2007/2008 Esta página apresenta algumas ideias para projectos práticos da disciplina de Lógica Computacional. Os alunos interessados ...
0607 20 Feb 2008 - 15:33 - r16 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2006/2007 Equipa Docente José Carlos Bacelar ...
Topicos0708 20 Feb 2008 - 15:23 - NEW JoseBacelarAlmeida
Sumários
Programa0708 20 Feb 2008 - 15:22 - NEW JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
ELP2-0405 20 Sep 2007 - 14:17 - r21 JoseBacelarAlmeida
Elementos Lógicos da Programação II (702752) Licenciatura de Matemática e Ciências da Computação 2º Ano 2º Semestre Ano lectivo 2004/2005 Programa Programa ...
Notas0607 20 Sep 2007 - 14:00 - r9 JoseBacelarAlmeida
Época de Especial Num Nome Exame 47414 André da Silva Rocha 3.85 35804 Ângelo David Soares Perez Dias 5 43514 César Carlos Martins ...
Avisos0607 31 Jul 2007 - 23:03 - r8 JoseBacelarAlmeida
31/07 Já estão disponíveis as notas referentes à Época de Recurso. (aqui) 17/07 Já estão disponíveis as notas referentes à Época Normal. (aqui) 20/06 Foram disponibilizados ...
Programa0607 04 Jul 2007 - 18:17 - r3 JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
ProgDetalhado0607 04 Jul 2007 - 18:16 - NEW JoseBacelarAlmeida
Programa detalhado do ano lectivo 2006/2007 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
Programa0506 03 Jul 2007 - 22:09 - r3 JoseBacelarAlmeida
Programa Resumido (2005/2006) Componente Teórica Lógica Proposicional Sintaxe Linguagens de Cláusulas Validade e Verificação ...
WebSideBar 03 Jul 2007 - 21:54 - r7 JoseBacelarAlmeida
Tópicos Apresentação Programa Funcionamento Material " else ""}%}% Avisos " else ""}%}%
0506 03 Jul 2007 - 16:06 - r47 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2005/2006 Programa Componente Teórica Lógica ...
Sumarios0607 11 Jun 2007 - 19:45 - r16 JoseBacelarAlmeida
Sumários Docente: José Carlos Bacelar Aulas Teóricas 08/06: Esclarecimento de dúvidas. 05/06: Referência às propriedades básicas do Lambda calculus com tipos ...
Praticas0607 29 May 2007 - 10:39 - r9 JoseBacelarAlmeida
Aulas Práticas #Aula8P Aula 8: Predicados de Segunda Ordem Existem meta predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver ...
WebCss 21 May 2007 - 23:44 - r4 JoseBacelarAlmeida
.natRevision { width:0px; height:0px; overflow:hidden; } .natBreadCrumbs { width:0px; height:0px; overflow:hidden; } .avisos { color: #444; font size ...
WebTopicActions 21 May 2007 - 23:43 - r2 JoseBacelarAlmeida
0405 26 Feb 2007 - 01:13 - NEW JoseBacelarAlmeida
Retornar à página inicial
ELP1-0405 26 Feb 2007 - 00:55 - r25 JoseBacelarAlmeida
Notícias Elementos Lógicos da Programação I em Matemática e Ciências da Computação 2º Ano 1º Semestre Ano lectivo 2004/2005 Programa 1. Dedu ...
Topicos0405 26 Feb 2007 - 00:54 - NEW JoseBacelarAlmeida
Avisos0405 26 Feb 2007 - 00:53 - NEW JoseBacelarAlmeida
ELP1News0405 26 Feb 2007 - 00:38 - r7 JoseBacelarAlmeida
Já estão disponíveis os resultados dos exames de recurso, e Notas Finais . MariaJoaoFrade 03 Mar 2005 AVISO Sessão de Dúvidas Na próxima 3ª feira ...
Topicos0506 19 Feb 2007 - 01:17 - NEW JoseBacelarAlmeida
Topicos0607 19 Feb 2007 - 01:16 - NEW JoseBacelarAlmeida
Sumários
Avisos0506 18 Feb 2007 - 23:26 - r8 JoseBacelarAlmeida
A resolução da ficha de avaliação prática 3 (enunciado da ficha está na página) é para ser entregue na aula prática de 2 de Junho . MariaJoaoFrade 25 May 2006 ...
WebTopBar 13 Feb 2007 - 14:43 - NEW AlcinoCunha
WebLeftBar 13 Feb 2007 - 10:35 - r5 AlcinoCunha
Apresentação Sumários Projectos Material
WebTopicList 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebIndex 15 Nov 2006 - 19:43 - r4 TWikiContributor
WebSearch 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebSearchAdvanced 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebTopicCreator 15 Nov 2006 - 19:43 - r2 TWikiContributor
Found 50 topics.

See also: rss-small RSS feed, recent changes with 50, 100, 200, 500, 1000 topics, all changes

WebCss 21 May 2007 - 23:44 - r4 JoseBacelarAlmeida
.natRevision { width:0px; height:0px; overflow:hidden; }

.natBreadCrumbs { width:0px; height:0px; overflow:hidden; }

.avisos { color: #444; font-size:12px; }

.natMainFooterContents, .natMainHeaderContents { padding:0px; margin:0px 0px; }

WebHome 18 Feb 2010 - 13:06 - r14 OlgaPacheco
Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva sobre a qual é analisada:
  • Uma primeira perspectiva consiste em eleger o processo de verificar a validade de fórmulas lógicas como problema computacional - por outras palavras, procuram-se construir programas que estabeleçam a validade de fórmulas lógicas. Tal como iremos ter oportunidade de estudar neste curso, este problema é difícil, mesmo para lógicas muito simples (e.g. lógica proposicional).
  • Uma segunda perspectiva consiste em adoptar a noção de dedução lógica como motor de cálculo de uma linguagem de programação. Uma destas linguagens é o Prolog, que será estudada neste curso.
  • Por último, iremos também abordar o que é habitualmente designado por Analogia de Curry-Howard: esta analogia permite-nos estabelecer um paralelo entre sistemas lógicos e linguagens de programação funcionais, constituindo assim uma fundamentação lógica para essas linguagens.

WebIndex 15 Nov 2006 - 19:43 - r4 TWikiContributor
Education/LC Web Changed Changed by
0405 26 Feb 2007 - 01:13 - NEW JoseBacelarAlmeida
Retornar à página inicial
0506 03 Jul 2007 - 16:06 - r47 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2005/2006 Programa Componente Teórica Lógica ...
0607 20 Feb 2008 - 15:33 - r16 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2006/2007 Equipa Docente José Carlos Bacelar ...
0708 01 Feb 2009 - 18:16 - r13 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2007/2008 Equipa Docente José Carlos Bacelar ...
0809 22 Jul 2009 - 17:27 - r9 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2008/2009 Equipa Docente José Carlos Bacelar ...
Avisos0405 26 Feb 2007 - 00:53 - NEW JoseBacelarAlmeida
Avisos0506 18 Feb 2007 - 23:26 - r8 JoseBacelarAlmeida
A resolução da ficha de avaliação prática 3 (enunciado da ficha está na página) é para ser entregue na aula prática de 2 de Junho . MariaJoaoFrade 25 May 2006 ...
Avisos0607 31 Jul 2007 - 23:03 - r8 JoseBacelarAlmeida
31/07 Já estão disponíveis as notas referentes à Época de Recurso. (aqui) 17/07 Já estão disponíveis as notas referentes à Época Normal. (aqui) 20/06 Foram disponibilizados ...
Avisos0708 27 Sep 2008 - 11:17 - r14 JoseBacelarAlmeida
24/09: Já estão disponíveis as notas da época de especial. 28/07: Já estão disponíveis as notas da época de recurso. 02/07: Já estão disponíveis as notas do 2 ...
Avisos0809 22 Jul 2009 - 17:28 - r4 JoseBacelarAlmeida
22/07/2009: Disponíveis notas da época de recurso. 07/05/2009: Disponível enunciado do projecto prático. 06/03/2009: Já disponível o guião da primeira aula pr ...
Calendario 12 Feb 2009 - 17:16 - NEW JoseBacelarAlmeida
ELP1-0405 26 Feb 2007 - 00:55 - r25 JoseBacelarAlmeida
Notícias Elementos Lógicos da Programação I em Matemática e Ciências da Computação 2º Ano 1º Semestre Ano lectivo 2004/2005 Programa 1. Dedu ...
ELP1News0405 26 Feb 2007 - 00:38 - r7 JoseBacelarAlmeida
Já estão disponíveis os resultados dos exames de recurso, e Notas Finais . MariaJoaoFrade 03 Mar 2005 AVISO Sessão de Dúvidas Na próxima 3ª feira ...
ELP2-0405 20 Sep 2007 - 14:17 - r21 JoseBacelarAlmeida
Elementos Lógicos da Programação II (702752) Licenciatura de Matemática e Ciências da Computação 2º Ano 2º Semestre Ano lectivo 2004/2005 Programa Programa ...
MFES0809 05 Dec 2008 - 23:17 - r3 JoseBacelarAlmeida
Análise, Modelação e Teste de Software MFES Mestrado de Informática 13/11/2008 "Design by Contract and Java Modeling Language": apresentação do conceito e clausulas ...
MaterialApoio 18 Feb 2010 - 13:00 - r15 OlgaPacheco
Slides Lógica Proposicional I Cálculo de Sequentes (versão: 11/06/2008) Lógica Proposicional II Método Tableaux , Formas Clausais, Resolução (versão: 11 ...
Notas0607 20 Sep 2007 - 14:00 - r9 JoseBacelarAlmeida
Época de Especial Num Nome Exame 47414 André da Silva Rocha 3.85 35804 Ângelo David Soares Perez Dias 5 43514 César Carlos Martins ...
Praticas0607 29 May 2007 - 10:39 - r9 JoseBacelarAlmeida
Aulas Práticas #Aula8P Aula 8: Predicados de Segunda Ordem Existem meta predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver ...
Praticas0708 02 Jun 2008 - 22:41 - r17 JoseBacelarAlmeida
Aulas Práticas #Aula9P Aula 9: Implementação do algoritmo Davis Putnam em Prolog. Pretende se definir um programa que permita verificar se uma dada fórmula é uma ...
Praticas0809 29 May 2009 - 23:07 - r13 JoseBacelarAlmeida
Aulas Práticas #Aula10P Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog Predicados de segunda ordem Existem meta ...
ProgDetalhado0607 04 Jul 2007 - 18:16 - NEW JoseBacelarAlmeida
Programa detalhado do ano lectivo 2006/2007 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
ProgDetalhado0708 11 Jun 2008 - 22:07 - NEW JoseBacelarAlmeida
Programa detalhado do ano lectivo 2007/2008 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
ProgDetalhado0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida
Programa detalhado do ano lectivo 2008/2009 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
Programa0506 03 Jul 2007 - 22:09 - r3 JoseBacelarAlmeida
Programa Resumido (2005/2006) Componente Teórica Lógica Proposicional Sintaxe Linguagens de Cláusulas Validade e Verificação ...
Programa0607 04 Jul 2007 - 18:17 - r3 JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
Programa0708 20 Feb 2008 - 15:22 - NEW JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
Programa0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
Projectos0708 08 May 2008 - 22:56 - r3 JoseBacelarAlmeida
Propostas de Projectos Práticos 2007/2008 Esta página apresenta algumas ideias para projectos práticos da disciplina de Lógica Computacional. Os alunos interessados ...
Projectos0809 08 May 2009 - 02:24 - r2 JoseBacelarAlmeida
Projecto O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere se que os interessados realizem os exemplos ...
Sumarios0607 11 Jun 2007 - 19:45 - r16 JoseBacelarAlmeida
Sumários Docente: José Carlos Bacelar Aulas Teóricas 08/06: Esclarecimento de dúvidas. 05/06: Referência às propriedades básicas do Lambda calculus com tipos ...
Sumarios0708 01 Feb 2009 - 18:25 - r15 JoseBacelarAlmeida
Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) 26/02: Não houve aula. 28/02: Não houve aula. 04/03: Aula de substituição em 27/03 , às 15:00. 06 ...
Sumarios0809 01 Feb 2009 - 18:23 - NEW JoseBacelarAlmeida
Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) TP1 Aulas Teórico Práticas (2ª 16:00 17:00) Aulas Práticas (2ª 17:00 19:00) TP2 Aulas Teórico Pr ...
Topicos0405 26 Feb 2007 - 00:54 - NEW JoseBacelarAlmeida
Topicos0506 19 Feb 2007 - 01:17 - NEW JoseBacelarAlmeida
Topicos0607 19 Feb 2007 - 01:16 - NEW JoseBacelarAlmeida
Sumários
Topicos0708 20 Feb 2008 - 15:23 - NEW JoseBacelarAlmeida
Sumários
Topicos0809 12 Feb 2009 - 17:21 - r2 JoseBacelarAlmeida
Calendário
WebAtom 24 Jan 2006 - 06:07 - r2 TWikiContributor
TWiki's Education/LC web
WebChanges 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebCss 21 May 2007 - 23:44 - r4 JoseBacelarAlmeida
.natRevision { width:0px; height:0px; overflow:hidden; } .natBreadCrumbs { width:0px; height:0px; overflow:hidden; } .avisos { color: #444; font size ...
WebHome 18 Feb 2010 - 13:06 - r14 OlgaPacheco
Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva ...
WebIndex 15 Nov 2006 - 19:43 - r4 TWikiContributor
WebLeftBar 13 Feb 2007 - 10:35 - r5 AlcinoCunha
Apresentação Sumários Projectos Material
WebNotify 28 Mar 2005 - 09:40 - r5 TWikiContributor
TWikiGuest example #64;your.company .WebChangesAlert, ., .TWikiRegistration
WebPreferences 01 Feb 2009 - 18:15 - r20 JoseBacelarAlmeida
Education/LC Web Preferences The following settings are web preferences of the Education/LC web. These preferences overwrite the site level preferences in ...
WebRss 28 Mar 2005 - 09:40 - r4 TWikiContributor
" else "TWiki's Education/LC web"}% /Education/LC
WebSearch 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebSearchAdvanced 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebSideBar 03 Jul 2007 - 21:54 - r7 JoseBacelarAlmeida
Tópicos Apresentação Programa Funcionamento Material " else ""}%}% Avisos " else ""}%}%
WebStatistics 30 Oct 2020 - 14:39 - r2239 TWikiGuest
Statistics for Education/LC Web Month: Topic views: Topic saves: File uploads: Most popular topic views: Top contributors for topic save ...
WebTopBar 13 Feb 2007 - 14:43 - NEW AlcinoCunha
WebTopicActions 21 May 2007 - 23:43 - r2 JoseBacelarAlmeida
WebTopicCreator 15 Nov 2006 - 19:43 - r2 TWikiContributor
WebTopicList 15 Nov 2006 - 19:43 - r3 TWikiContributor
Found 54 topics.

See also the faster WebTopicList

WebLeftBar 13 Feb 2007 - 10:35 - r5 AlcinoCunha
Apresentação
Sumários
Projectos
Material
WebNotify 28 Mar 2005 - 09:40 - r5 TWikiContributor
This is a subscription service to be automatically notified by e-mail when topics change in this Education/LC web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:

Web Changes Notification Service

Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.

Users subscribe to email notifications using their WikiName or an alternative email address, and can specify the webs/topics they wish to track using one of these bullet list formats:

three spaces * [ webname . ] wikiName - SMTP mail address
three spaces * [ webName . ] wikiName
three spaces * SMTP mail address
three spaces * SMTP mail address : topics
three spaces * [ webname . ] wikiName : topics

In the above examples, topics is a space-separated list of topic names. The user may further customize the specific content they will receive using the following formats:

  • Specify topics without a Web. prefix
  • Topics must exist in this web.
  • Topics may be specified using * wildcards
  • Each topic may optionally be preceded by a '+' or '-' sign. The '+' sign means "subscribe to this topic" (the same as not putting anything). The '-' sign means "unsubscribe" or "don't send notifications regarding this topic". This allows users to elect to filter out certain topics (and their children, to an arbitrary depth). Topic filters ('-') take precedence over topic includes ('+').
  • Each topic may optionally be followed by an integer in parentheses, indicating the depth of the tree of children below that topic. Changes in all these children will be detected and reported along with changes to the topic itself. Note This uses the TWiki "Topic parent" feature.
  • Each topic may optionally be immediately followed by an exclamation mark ! or a question mark ? with no intervening spaces, indicating that the topic (and children if there is a tree depth specifier as well) should be mailed out as complete topics instead of change summaries. ! causes the topic to be mailed every time even if there have been no changes, ? will mail the topic only if there have been changes to it. This only makes sense for subscriptions.

For example: Subscribe Daisy to all changes to topics in this web.

   * daisy.cutter@flowers.com
Subscribe Daisy to all changes in all webs that start with Web.
   * daisy.cutter@flowers.com: Web*
Subscribe Daisy to changes to topics starting with Petal, and their immediate children, WeedKillers and children to a depth of 3, and all topics that match start with Pretty and end with Flowers e.g. PrettyPinkFlowers
   * TWiki.DaisyCutter: Petal* (1) TWiki.WeedKillers (3) Pretty*Flowers
Subscribe StarTrekFan to changes to all topics that start with Star except those that end in Wars, sInTheirEyes or shipTroopers.
   * TWiki.StarTrekFan: Star* - *Wars - *sInTheirEyes - *shipTroopers
Subscribe Daisy to the full content of NewsLetter whenever it has changed
   * daisy@flowers.com: TWiki.NewsLetter?
Subscribe buttercup to NewsLetter and its immediate children, even if it hasn't changed.
   * buttercup@flowers.com: TWiki.NewsLetter! (1)
Subscribe GardenGroup (which includes Petunia) to all changed topics under AllnewsLetters to a depth of 3. Then unsubscribe Petunia from the ManureNewsLetter, which she would normally get as a member of GardenGroup? :
   * TWiki.GardenGroup: TWiki.AllNewsLetters? (3)
   * petunia@flowers.com: - TWiki.ManureNewsLetter
A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified about changes that topic once (though they will still receive individual mails for news topics).

If a TWiki group is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.

TIP Tip: List names in alphabetical order to make it easier to find the names.

Note for System Administrators: Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the MailerContrib topic for details of how to set up this service.

Note: If you prefer a news feed, point your reader to WebRss (for RSS 1.0 feeds) or WebAtom (for ATOM 1.0 feeds). Learn more at WebRssBase and WebAtomBase, respectively.

Related topics: WebChangesAlert, TWikiUsers, TWikiRegistration

WebPreferences 01 Feb 2009 - 18:15 - r20 JoseBacelarAlmeida

Education/LC Web Preferences

The following settings are web preferences of the Education.LC web. These preferences overwrite the site-level preferences in TWiki.TWikiPreferences and Main.TWikiPreferences, and can be overwritten by user preferences (your personal topic, eg: TWikiGuest in the Main web).

Web Parameters

  • Set ANO_DEF = 0809

Web Preferences Settings

These settings override the defaults for this web only. See full list of defaults with explanation. Many of the settings below are commented out. Remove the # sign to enable a local customisation.

Natural Skin configuration

  • Set SKIN=nat

  • Set SKINSTYLE = Plain
  • Set STYLEBORDER = thin
  • Set STYLEBUTTONS = off
  • Set STYLESIDEBAR = left
  • Set STYLEVARIATION = none
  • Set STYLESEARCHBOX = off

  • Set PAGETITLE=Lógica Computacional

  • Set NATWEBLOGO = Lógica Computacional

  • Set WEBCOPYRIGHT = This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. Ideas, requests, problems? Send feedback.

  • List of topics of the Education/LC web:

 #D0D0D0 
  • Web-specific background color: (Pick a lighter one of the StandardColors).
    • Set WEBBGCOLOR = #D0D0D0
    • Note: This setting is automatically configured when you create a web

  • Image, URL and alternate tooltip text of web's logo.
    Note: Don't add your own local logos to the TWikiLogos topic; create your own logos topic instead.

  • List this web in the SiteMap. If you want the web listed, then set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Use links that include the name of the web, i.e. Education/LC.Topic links.
    Note: Unlike other variables, the setting of SITEMAPLIST is not inherited from parent webs. It has to be set in every web that is to be listed in the SiteMap
    • Set SITEMAPLIST = on
    • Set SITEMAPWHAT =
    • Set SITEMAPUSETO = Licenciatura em Ciências da Computação - 2º ano
    • Note: Above settings are automatically configured when you create a web

  • Exclude web from a web="all" search: (Set to on for hidden webs).
    • #Set NOSEARCHALL = on
    • Note: This setting is automatically configured when you create a web

  • Prevent automatic linking of WikiWords and acronyms (if set to on); link WikiWords (if empty); can be overwritten by web preferences:
    • #Set NOAUTOLINK =
    • Note: You can still use the [[...][...]] syntax to link topics if you disabled WikiWord linking. The <noautolink> ... </noautolink> syntax can be used to prevents links within a block of text.

  • Default template for new topics for this web:
    • WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
    • TWiki.WebTopicEditTemplate: Site-level default topic template

  • Comma separated list of forms that can be attached to topics in this web. See TWikiForms for more information.
    • Set WEBFORMS =

  • Users or groups who are not / are allowed to view / change / rename topics in the Education/LC web: (See TWikiAccessControl). Remove the # to enable any of these settings. Remember that an empty setting is a valid setting; setting DENYWEBVIEW to nothing means that anyone can view the web.
    • #Set DENYWEBVIEW =
    • #Set ALLOWWEBVIEW =
    • #Set DENYWEBCHANGE =
    • #Set ALLOWWEBCHANGE = TWikiAdminGroup
    • #Set DENYWEBRENAME =
    • #Set ALLOWWEBRENAME = TWikiAdminGroup

  • Web preferences that are not allowed to be overridden by user or topic preferences:
    • Set FINALPREFERENCES = NOSEARCHALL, ATTACHFILESIZELIMIT, WIKIWEBMASTER, WEBCOPYRIGHT, WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME

Help on Preferences

  • A preference setting is defined by:
    3 or 6 spaces * Set NAME = value
    Example:
    • Set WEBBGCOLOR = #FFFFC0
  • A preferences setting can be disabled with a # sign. Remove the # sign to enable a local customisation. Example:
  • Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
    • When you write variable %WEBBGCOLOR% , it gets expanded to #D0D0D0
  • The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
  • You can introduce your own preferences variables and use them in your topics and templates.

Related Topics

Tools

WebRss 28 Mar 2005 - 09:40 - r4 TWikiContributor
TWiki search results for \.* http://wiki.di.uminho.pt/twiki/bin/view/Education/LC The Education/LC web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise. en-us Copyright 2020 by contributing authors TWiki Administrator [webmaster@di.uminho.pt] The contributing authors of TWiki TWiki DIUM.Education/LC http://wiki.di.uminho.pt/twiki/bin/view/Education/LC /twiki/pub/Main/LocalLogos/um_eengP.jpg WebHome http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebHome Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva ... (last changed by OlgaPacheco) 2010-02-18T13:06:08Z OlgaPacheco MaterialApoio http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/MaterialApoio Slides Lógica Proposicional I Cálculo de Sequentes (versão: 11/06/2008) Lógica Proposicional II Método Tableaux , Formas Clausais, Resolução (versão: 11 ... (last changed by OlgaPacheco) 2010-02-18T13:00:50Z OlgaPacheco Avisos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Avisos0809 22/07/2009: Disponíveis notas da época de recurso. 07/05/2009: Disponível enunciado do projecto prático. 06/03/2009: Já disponível o guião da primeira aula pr ... (last changed by JoseBacelarAlmeida) 2009-07-22T17:28:03Z JoseBacelarAlmeida 0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/0809 Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2008/2009 Equipa Docente José Carlos Bacelar ... (last changed by JoseBacelarAlmeida) 2009-07-22T17:27:12Z JoseBacelarAlmeida ProgDetalhado0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/ProgDetalhado0809 Programa detalhado do ano lectivo 2008/2009 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ... (last changed by JoseBacelarAlmeida) 2009-06-18T22:10:46Z JoseBacelarAlmeida Programa0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Programa0809 Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ... (last changed by JoseBacelarAlmeida) 2009-06-18T22:10:01Z JoseBacelarAlmeida Praticas0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Praticas0809 Aulas Práticas #Aula10P Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog Predicados de segunda ordem Existem meta ... (last changed by JoseBacelarAlmeida) 2009-05-29T23:07:19Z JoseBacelarAlmeida Projectos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Projectos0809 Projecto O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere se que os interessados realizem os exemplos ... (last changed by JoseBacelarAlmeida) 2009-05-08T02:24:38Z JoseBacelarAlmeida Topicos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Topicos0809 Calendário (last changed by JoseBacelarAlmeida) 2009-02-12T17:21:40Z JoseBacelarAlmeida Calendario http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Calendario (last changed by JoseBacelarAlmeida) 2009-02-12T17:16:45Z JoseBacelarAlmeida Sumarios0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Sumarios0708 Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) 26/02: Não houve aula. 28/02: Não houve aula. 04/03: Aula de substituição em 27/03 , às 15:00. 06 ... (last changed by JoseBacelarAlmeida) 2009-02-01T18:25:15Z JoseBacelarAlmeida Sumarios0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Sumarios0809 Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) TP1 Aulas Teórico Práticas (2ª 16:00 17:00) Aulas Práticas (2ª 17:00 19:00) TP2 Aulas Teórico Pr ... (last changed by JoseBacelarAlmeida) 2009-02-01T18:23:00Z JoseBacelarAlmeida 0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/0708 Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2007/2008 Equipa Docente José Carlos Bacelar ... (last changed by JoseBacelarAlmeida) 2009-02-01T18:16:25Z JoseBacelarAlmeida WebPreferences http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebPreferences Education/LC Web Preferences The following settings are web preferences of the Education/LC web. These preferences overwrite the site level preferences in ... (last changed by JoseBacelarAlmeida) 2009-02-01T18:15:29Z JoseBacelarAlmeida MFES0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/MFES0809 Análise, Modelação e Teste de Software MFES Mestrado de Informática 13/11/2008 "Design by Contract and Java Modeling Language": apresentação do conceito e clausulas ... (last changed by JoseBacelarAlmeida) 2008-12-05T23:17:24Z JoseBacelarAlmeida Avisos0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Avisos0708 24/09: Já estão disponíveis as notas da época de especial. 28/07: Já estão disponíveis as notas da época de recurso. 02/07: Já estão disponíveis as notas do 2 ... (last changed by JoseBacelarAlmeida) 2008-09-27T11:17:47Z JoseBacelarAlmeida
WebSearch 15 Nov 2006 - 19:43 - r3 TWikiContributor

Web Search

Search: \.*

Found 0 topics.

  Advanced search | Help
TIP: to search for all topics that contain "SOAP", "WSDL", a literal "web service", but not "shampoo", write: soap wsdl "web service" -shampoo
Search where:       
(otherwise search Education/LC Web only)

Other search options:
WebSearchAdvanced 15 Nov 2006 - 19:43 - r3 TWikiContributor

Advanced Search

Search: \.*

Education/LC Web Changed Changed by
0405 26 Feb 2007 - 01:13 - NEW JoseBacelarAlmeida

Retornar à página inicial

0506 03 Jul 2007 - 16:06 - r47 JoseBacelarAlmeida

Lógica Computacional (8504N2)

Licenciatura em Matemática e Ciências de Computação
2º Ano - 2º Semestre
Ano lectivo 2005/2006

Programa

Componente Teórica

  • Lógica Proposicional
    • Sintaxe
    • Linguagens de Cláusulas
    • Validade e Verificação
    • Redução Semântica
    • Modelos e Diagramas de Decisão Binária
    • Exemplos de problemas SAT
  • Lógica de Primeira Ordem
    • Sintaxe da Lógica de Predicados
    • Substituições
    • Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Programação com Restricções

Bibliografia

  • Prolog Programming for Artificial Intelligence. Ivan Bratko, Addison-Wesley, 1993.

  • The Art of Prolog : advanced programming techniques. L. Sterling & E. Shaphiro, MIT Press, 1994.

  • Essentials of Logic Programming. Christopher John Hogger. Oxford University Press, 1990.

  • Proof Theory and Automated Deduction. Jean Goubault-Larrecq & Ian Mackie , Kluwer Academic Publishers, 1997.

Critérios de Avaliação

  • Componente teórica: exame, com peso 70% (modalidade A) ou 40% (modalidade B)
  • Componente prática:
    • modalidade A: fichas com peso 30%
    • modalidade B: fichas de avaliação prática com peso 30% + trabalho prático com peso 30%

Equipa Docente

Horário Lectivo

  Horário Sala Docente
Teórica 4ªfeira 10:00-11:00 CP3 205 jmv
Teórica 5ªfeira 11:00-12:00 DI A2 jmv
Turnos Horário Sala Docente
TP1 5ªfeira 16:00-17:00 CP2 110 mjf
TP2 6ªfeira 8:00-9:00 CP1 209 mjf
P1 6ªfeira 9:00-11:00 DI 1.04 mjf
P2 6ªfeira 11:00-13:00 DI 1.04 mjf

Horário de Atendimento

Docente Horário
jmv  
mjf 5ªfeira 17:00-20:00

Material Disponibilizado

Aulas Teóricas

Aulas Teórico-Práticas

Aulas Práticas

  • Prolog: slides 1-20 (pdf)
  • Prolog: slides 21-32 (pdf)
  • Prolog: slides 33-48 (pdf)
  • Prolog: slides 49-60 (pdf)
  • Prolog: slides 61-68 (pdf)
  • Prolog: slides 69-88 (pdf)
  • Prolog: slides 89-92 (pdf)
  • Prolog: slides 93-100 (pdf)
  • Prolog: slides 101-104 (pdf)

Trabalho Prático

Exames

Notas

Links Úteis

0607 20 Feb 2008 - 15:33 - r16 JoseBacelarAlmeida

Lógica Computacional (8504N2)

Licenciatura em Matemática e Ciências de Computação
2º Ano - 2º Semestre
Ano lectivo 2006/2007



Equipa Docente

  • José Carlos Bacelar (jba at di)
  • Olga Pacheco (omp at di)

Horário Lectivo

Turno Horário Sala Docente
TP1 3ªfeira 10:00-11:00 DI 0.02 jba
P1 3ªfeira 11:00-13:00 DI 1.04 jba
Teórica 3ªfeira 14:00-15:00 CP2 104 jba
TP2 4ªfeira 10:00-11:00 DI 0.02 omp
P2 4ªfeira 11:00-13:00 DI 1.04 omp
Teórica 6ªfeira 16:00-17:00 CP2 104 jba

Horário de Atendimento

Docente Horário
jba 3ªfeira 15:00-19:00
omp 3ªfeira 14:00-16:00

Critérios de Avaliação

A avaliação da disciplina é realizada por exame final, sendo que a realização de fichas práticas ao longo do semestre permite a dispensa de parte desse exame (30%).

Temos então duas modalidades de avaliação:

  • Modalidade A: exame final com peso 70% e avaliação prática com peso 30% (ambas com nota mínima de 9 valores)
  • Modalidade B: exame final com peso 100%.

As melhorias de nota serão sempre realizadas na modalidade B.

Classificações finais superiores a 16 devem ainda contar com a realização de um pequeno projecto prático, cuja avaliação será incorporada na nota final com um peso de 20%.

Notas

As notas estão disponíveis aqui.

Sumários

Disponíveis aqui

Exames

Mini-Testes práticos

Exames Finais

  • Época Normal - 1ª Chamada (22 Junho, 9:30, salas CP3 402, CP3 403)
  • Época Normal - 2ª Chamada (6 Julho, 9:30, salas CP1 212 a CP1 214)
  • Época de Recurso (25 Julho, 9:30, salas CP3 301, CP3 302)
  • Época Especial (14 Setembro, 17:00, salas CP2 209)
0708 01 Feb 2009 - 18:16 - r13 JoseBacelarAlmeida

Lógica Computacional (8504N2)

Licenciatura em Matemática e Ciências de Computação
2º Ano - 2º Semestre
Ano lectivo 2007/2008



Equipa Docente

  • José Carlos Bacelar (jba at di)

Horário Lectivo

Turno Horário Sala Docente
TP1 3ªfeira 10:00-11:00 DI 1.04 CP2 104 jba
P1 3ªfeira 11:00-13:00 DI 1.04 jba
Teórica 3ªfeira 14:00-15:00 CP2 111 jba
TP2 4ªfeira 10:00-11:00 CP1 308 jba
P2 4ªfeira 11:00-13:00 DI 1.04 jba
Teórica 5ªfeira 16:00-17:00 CP2 111 jba

Horário de Atendimento

Docente Horário
jba 2ªfeira 15:00-19:00

Método de Avaliação

Durante o período lectivo far-se-ão dois testes: um sensivelmente a meio do semestre e outro no final. Ambos os testes incluem uma componente teórica e outra prática (Prolog). O peso relativo de cada uma dessas componentes será aproximadamente 70 e 30%.

Opcionalmente, os alunos podem ainda realizar um pequeno projecto prático, cuja avaliação será incorporada na nota final com um peso de 20%. Nas notas finais superiores a 16 valores esta componente será sempre considerada (querendo dizer que a nota é majorada a 16 valores se não se realizar o dito projecto).

Notas

Número Nome Classificação
    10

Sumários

Os sumários da disciplina estão disponíveis aqui.

Exames

0809 22 Jul 2009 - 17:27 - r9 JoseBacelarAlmeida

Lógica Computacional (8504N2)

Licenciatura em Matemática e Ciências de Computação
2º Ano - 2º Semestre
Ano lectivo 2008/2009



Equipa Docente

  • José Carlos Bacelar (jba at di)

Horário Lectivo

Turno Horário Sala Docente
Teórica 2ªfeira 14:00-15:00 CP2 111 jba
TP1 2ªfeira 16:00-17:00 CP2 111 jba
P1 2ªfeira 17:00-19:00 DI 1.09 jba
TP2 3ªfeira 10:00-11:00 CP2 111 jba
P2 3ªfeira 11:00-13:00 DI 1.04 jba
Teórica 5ªfeira 16:00-17:00 CP2 111 jba

Horário de Atendimento

Docente Horário
jba 2ªfeira 15:00-16:00
jba 3ªfeira 16:00-19:00

Método de Avaliação

A avaliação da disciplina consiste nas seguintes componentes:

  • Realização de uma prova individual escrita com nota mínima de 8 valores (90%)
  • Participação nas aulas (teórico-)práticas (10%)

Opcionalmente, os alunos podem ainda realizar um pequeno projecto prático, cuja avaliação será incorporada na nota final com um peso de 20%. Nas notas finais superiores a 16 valores esta componente será sempre considerada (querendo dizer que a nota é majorada a 16 valores se não se realizar o dito projecto).

Sumários

Os sumários da disciplina estão disponíveis no calendário.

Aulas Práticas

Os guiões das aulas práticas estão disponíveis aqui.

Exames

Notas

Num. Nome Aval. Contínua Teste Recurso T.Prático Final
47403 Adriana Madalena Oliveira Cunha 1 3.5 8 - 10
53502 Alvanir Martins Santos 0 - - - -
52856 Ana Alexandra Oliveira da Costa 2 - 16.2 17 17
48392 Ana Cristina Nunes Aires 0 - - - -
47424 André Gomes Rodrigues 0.5 - - - -
48408 André Gustavo Silva de Macedo 1 4.9 11.2 - 11
47408 André Manuel Rodrigues da Silva 2 12.8 - - 14
48401 Bruno Miguel Fernandes Gomes 1 - - - -
54073 Carlos Alberto Vieira Ramos 0.5 6.5 8 - 10
52853 Cláudio Filipe Belo da Silva Lourenço 1.5 - 14.9 - 15
50187 David Pereira Gonçalves 1 5.4 9.9 - 10
51176 Eduardo Luis Cardoso Fonseca 2 12.3 - - 13
51152 Francisco André Oliveira Reina Dourado 1 - - - -
43534 Francisco Manuel Pereira da Cunha 1 - - - -
35820 Gilberto Leandro Oliveira Fernandes 0 - - - -
52818 Ivo Daniel de Jesus Carrajola 1 - - - -
51163 João da Cunha Martins 2 5.8 8.3 - 10
50192 João Gaspar da Silva Rodrigues 2 8.5 - - 10
47415 João Paulo da Fonte Fonseca 2 9.8 12.6 - 13
47416 João Pedro Carvalho Martins 0 - - - -
47410 Jorge Filipe Vilaça Ferreira 0 - - - -
40995 Jorge Miguel Oliveira Santos 1 4.5 6.1 - R
33712 José Edmundo Ponte da Cunha 0 - - - -
25364 José Filipe da Silva Caldas 0 - - - -
50195 José Manuel da Silva Ramos Gomes Marques 1.5 6.2 10 - 11
47401 José Manuel Pereira Araújo 1 7.1 10.2 - 10
51178 Leandro Manuel Sousa Loureiro 1 - - - -
51177 Leonardo Manuel Nobre 0 - - - -
54056 Luis Filipe Ferreira Brito 0 - - - -
50199 Marco André Cálix Esteves Lopes 1.5 - 5 - R
50197 Marco Filipe Vieira Gomes 1 12.3 - - 12
48418 Mário Gil Ferreira Gonçalves 2 11.6 - - 13
43538 Mário Rui Monteiro Ricardo 0 - - - -
51155 Miguel Gonçalves Dias 1.5 8.6 - - 10
54052 Mónia Vanessa Vila Pinto de Sousa Passos 2 8 - - 10
51164 Nuno Antunes Marques 1.5 10.4 12.3 - 13
43550 Nuno Diogo Neto Ferreira 0 - 6.3 - R
43511 Paulo Renato Ribeiro Xavier 0 2 5.6 - R
47422 Pedro Nicola Ferreira Veloso 1.5 - - - -
51166 Rui Miguel Gonçalves Peixoto 1.5 11.1 - - 12
47429 Vítor Emanuel Alves Oliveira 0.5 - - - -
Avisos0405 26 Feb 2007 - 00:53 - NEW JoseBacelarAlmeida
Avisos0506 18 Feb 2007 - 23:26 - r8 JoseBacelarAlmeida

A resolução da ficha de avaliação prática 3 (enunciado da ficha está na página) é para ser entregue na aula prática de 2 de Junho.

-- MariaJoaoFrade - 25 May 2006

Já saiu o enunciado do Trabalho Prático (opcional).

-- MariaJoaoFrade - 08 May 2006

Nas aulas práticas do dia 5 de Maio, será realizada a avaliação prática 2 (enunciado da ficha está na página).

-- MariaJoaoFrade - 29 Apr 2006

É importante que para a aula prática do dia 21 de Abril os alunos tragam os ficheiros com a resolução dos exercícios propostos no Grupo VII.

-- MariaJoaoFrade - 07 Apr 2006

Nas aulas práticas do dia 31 de Março, será realizada a ficha de avaliação prática 1.

-- MariaJoaoFrade - 24 Mar 2006

Avisos0607 31 Jul 2007 - 23:03 - r8 JoseBacelarAlmeida
31/07 Já estão disponíveis as notas referentes à Época de Recurso. (aqui)

17/07 Já estão disponíveis as notas referentes à Época Normal. (aqui)

20/06 Foram disponibilizados exercícios teorico-práticos.

11/06 Já estão disponíveis as notas do segundo mini-teste prático e as notas práticas finais. (aqui)

05/06 Já estão disponíveis os slides correspondentes ao módulo de lógica de primeira ordem.

31/05 Já estão disponíveis (secção "Material de Apoio") os slides correspondentes ao terceiro módulo de lógica proposicional.

28/05 Já estão disponíveis as notas do primeiro mini-teste prático (aqui)

07/05 Na próxima 5ª e 6ª-feira (10 e 11/05) realizam-se as JOIN 2007. Por esse motivo não haverá aula teórica.

19/02 Na próxima 6ª-feira (26/02) não haverá aula teórica.

Avisos0708 27 Sep 2008 - 11:17 - r14 JoseBacelarAlmeida
24/09: Já estão disponíveis as notas da época de especial.

28/07: Já estão disponíveis as notas da época de recurso.

02/07: Já estão disponíveis as notas do 2º teste.

23/06: Sala do 2º teste: CP2-201 (hora: 14:00).

11/05: Já estão disponíveis as notas do 1º teste.

08/05: Estão disponíveis propostas para os projectos práticos em Projectos0708.

17/04: A data do teste intermédio passou para o dia 23/04 (4a-feira), às 14:00 (sala CP2-204CP2-104) .

08/04: A aula teórico-prática do turno 1 (3a, 10:00-11:00) passa para o lab. DI 1.04.

13/03: Já foram disponibilizadas as datas dos testes intermédios (site LCC). Os testes de Lógica Computacional são nos dias 23/04 22/04 e 27/06.

13/03: Foi marcada uma aula suplementar de Lógica Computacional para o dia 27/03 às 15:00 (em substituição da aula de PLC).

22/02: As aulas da disciplina de Lógica Computacional terão início somente no dia 06/03 (5a-feira).

Avisos0809 22 Jul 2009 - 17:28 - r4 JoseBacelarAlmeida
22/07/2009: Disponíveis notas da época de recurso.

07/05/2009: Disponível enunciado do projecto prático.

06/03/2009: Já disponível o guião da primeira aula prática (aqui).

Calendario 12 Feb 2009 - 17:16 - NEW JoseBacelarAlmeida
ELP1-0405 26 Feb 2007 - 00:55 - r25 JoseBacelarAlmeida

Notícias

Já estão disponíveis os resultados dos exames de recurso, e Notas Finais.

-- MariaJoaoFrade - 03 Mar 2005

AVISO Sessão de Dúvidas

Na próxima 3ª feira (dia 15 Fev) às 17:00 no Lab 011, vai realizar-se uma sessão de esclarecimento de dúvidas.

-- MariaJoaoFrade - 10 Feb 2005

AVISO PROVAS ORAIS

As provas orais irão realizar-se na 2ª feira dia 14, pelas 15:00, na sala DI-A1.

-- MariaJoaoFrade - 10 Feb 2005

Os resultados dos exames da 1ª e 2ª chamadas já estão disponíveis.

-- MariaJoaoFrade - 10 Feb 2005

As Notas Práticas já estão disponíveis.

-- MariaJoaoFrade - 10 Jan 2005

A entrega de trabalhos será no dia 6 Jan 2005, 5ª feira. Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.

-- MariaJoaoFrade - 13 Dec 2004

Já está disponível o enunciado do trabalho prático.

-- MariaJoaoFrade - 18 Nov. 2004

A inscrição nos turnos decorre no dia 23 Setembro (DI 0.11) no periodo das aulas teórico-práticas.

-- MariaJoaoFrade - 21 Set. 2004

Elementos Lógicos da Programação I

_Licenciatura em Matemática e Ciências da Computação_
2º Ano - 1º Semestre
Ano lectivo 2004/2005


Programa

  1. Dedução em Lógica Proposicional.
  2. Sistemas de Dedução Hilbertianos.
  3. Sistemas de Dedução de Gentzen e de Dedução Natural em LP.
  4. Dedução Automática em Lógica Proposicional.
  5. Sistemas Tableaux em LP.
  6. Método de Davis-Putman.
  7. Dedução em Lógica de Primeira Ordem.
  8. Sistemas de Dedução de Gentzen e de Dedução Natural em LPO.
  9. Tableaux na LPO.
  10. Introdução à Lógica Modal.
  11. Introdução à Lógica Linear.

Bibliografia

As notas acessíveis a partir desta página constituem o apoio documental base da disciplina e são complementadas pelos seguintes textos:

  • Basic Proof Theory. A.S. Troelstra & H.Schwichtenberg, Cambridge Tracks in Theoretical Computer Science, nº 48, 1996.

  • Proof Theory and Automated Deduction. Jean Goubault-Larrecq & Ian Mackie , Kluwer Academic Publishers, 1997.

  • First Order Logic and Automated Theorem Proving. Melvin Fitting, Graduate Texts in Computer Science. Springer-Verlag, 1996.

Critérios de Avaliação

A avaliação tem uma componente teórica e uma componente prática, ambas obrigatórias. A nota final será calculada com base na seguinte fórmula:

Nota Final = NT * 0.7 + NP * 0.3

sendo

  • NT a nota teórica (nota mínima de 9 valores), obtida através da realização de uma prova individual escrita;

  • NP a nota prática (nota mínima de 9 valores), resultante da avaliação de um trabalho prático (realizado em grupos de 3 alunos) e da avaliação contínua realizada ao longo das aulas laboratoriais e que terá por base a resolução de fichas de trabalho;

Equipa Docente

Horário Lectivo

  Horário Sala Docente
Teórica 3ªfeira 8:00-9:00 CP3.101 jmv
Teórica 5ªfeira 15:00-16:00 CP2.303 jmv
Turnos Horário Sala Docente
TP1 5ªfeira 9:00-11:00 DI 0.11 mjf
TP2 5ªfeira 16:00-18:00 DI 0.11 mjf

Horário de Atendimento

Docente Horário
jmv  
mjf 2ªfeira 12:00-13:00 e 14:00-18:00

Material Disponibilizado

Aulas Teóricas

Aulas Práticas

Fichas de trabalho

Isabelle/Isar

  • Exemplos de utilização do Isar (pdf) (ps)
  • Dedução Natural para a Lógica Proposicional (DNLP.thy)
  • Cálculo de Sequentes para a Lógica Proposicional Clássica (LKLP.thy)
  • Dedução Natural para a Lógica de Primeira Ordem (DNFOL.thy)
  • Cálculo de Sequentes para a Lógica de Primeira Ordem Clássica (LKFOL.thy)

Trabalho Prático

Exames 2004

Exames 2005

Links Úteis

Notas

Notas 2005/06

ELP1News0405 26 Feb 2007 - 00:38 - r7 JoseBacelarAlmeida
Já estão disponíveis os resultados dos exames de recurso, e Notas Finais.

-- MariaJoaoFrade - 03 Mar 2005

AVISO Sessão de Dúvidas

Na próxima 3ª feira (dia 15 Fev) às 17:00 no Lab 011, vai realizar-se uma sessão de esclarecimento de dúvidas.

-- MariaJoaoFrade - 10 Feb 2005

AVISO PROVAS ORAIS

As provas orais irão realizar-se na 2ª feira dia 14, pelas 15:00, na sala DI-A1.

-- MariaJoaoFrade - 10 Feb 2005

Os resultados dos exames da 1ª e 2ª chamadas já estão disponíveis.

-- MariaJoaoFrade - 10 Feb 2005

As Notas Práticas já estão disponíveis.

-- MariaJoaoFrade - 10 Jan 2005

A entrega de trabalhos será no dia 6 Jan 2005, 5ª feira. Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.

-- MariaJoaoFrade - 13 Dec 2004

Já está disponível o enunciado do trabalho prático.

-- MariaJoaoFrade - 18 Nov. 2004

A inscrição nos turnos decorre no dia 23 Setembro (DI 0.11) no periodo das aulas teórico-práticas.

-- MariaJoaoFrade - 21 Set. 2004

ELP2-0405 20 Sep 2007 - 14:17 - r21 JoseBacelarAlmeida

Elementos Lógicos da Programação II (702752)

Licenciatura de Matemática e Ciências da Computação
2º Ano - 2º Semestre
Ano lectivo 2004/2005


Programa

Programa Resumido

  • Lambda-Calculus: teoria equacional
  • Lambda-Calculus: sistema de redução
  • Sistemas de Tipos
  • Implementação do Lambda-Calculus
  • Estudo de uma linguagem baseada no Lambda-Calculus

Programa Detalhado

Bibliografia

Bibliografia Recomendada:

  • Lambda calculi: a guide for computer scientists - Chris Hankin, Claredon Press, Oxford, 1994.
  • Theories of Programming Languages - John C. Reynolds, Cambridge University Press, 1994.
  • Introduction to combinators and lambda-calculus - J. Roger Hindley, Cambridge University Press, 1993.

Bibliografia de Referência:

  • Lambda-Calculus: Its syntax and semantics - Henk P. Barendregt, North Holland, 1985.
  • Lambda-Calculus with types - Henk P. Barendregt,in ?Handbook of Logic in Computer Science, vol.2?, Claredon Press, Oxford, 1995.
  • Proofs and Types - Jean-Yves Girard, Cambridge University Press.

Outros Elementos de Estudo

  • Módulo I: Teoria básica do lambda-calculus (pdf)
  • Módulo II: Aspectos de Implementação (pdf)
  • Módulo III: Expressividade do lambda-calculus (pdf)
  • Módulo IV: Lambda-calculus com Tipos (pdf)
  • Módulo V: Sistemas de Tipos (pdf)
  • Material aulas TP jsp: lambda.hs, SKK.pdf.

Projectos práticos

Quem desejar realizar um projecto prático no âmbito desta disciplina deve contactar um dos docentes. O objectivo desse contacto é o de obter informação/apontadores adicionais sobre os vários projectos e decidir o projecto concreto a ser realizado.

Algumas ideias para projectos práticos:

  1. Animador de uma pequena linguagem funcional com tipos.
  2. Codificação da máquina abstracta de Krivine em C .
  3. Estudo sobre o impacto da operação de substituição na avaliação de lambda-termos .
  4. Inferência/verificação de tipos numa linguagem point-free .
  5. Sobre a avaliação de lambda-termos e os monads .

Horário e Equipa docente

Horário Lectivo:

Teóricas Práticas
3ª, das 8:00 às 9:00 (sala CP3.101) TP1 , 3ª, das 14:00 às 16:00 (sala DI 0.11)
  5ª, das 15:00 às 16:00 (sala CP3.102)   TP2 , 4ª, das 10:00 às 12:00 (sala DI 0.04)  

Horário de Atendimento:

JBA
  2ª, das 14:00 às 19:00  

Critério de Avaliação

Nota final é calculada com base nas seguintes componentes:

Componente Teórica (Exame) - OBRIGATÓRIA - peso nunca inferior a 70% (nota mínima de 8 valores).
Componente Prática - FACULTATIVA - com peso máximo de 30%.

A nota para a componente prática resulta de avaliação contínua (até 2 valores) e de um trabalho prático (até 4 valores).

Notas

Notas - 1ª e 2ª Cham. (pdf)

Notas - recurso (pdf)

Época Especial:

Número Nome Exame
35846  Márcio Azevedo  5.5
43488 Paula Silva 6.5



Notas do Ano Lectivo 2005/2006 (exames)

Recurso:

Número Nome Exame FINAL
   Jácome Miguel Costa Cunha  16 16
35866  Tiago Lamas Carvalheira  1.7 REP
32738  Paulo Sérgio Azevedo Magalhães  8.7 10
38580  Jorge Filipe Morgado Marques  11.2 11

AVISO: Na pauta dos serviços académicos, não surge o nome de Jácome Miguel Costa Cunha (melhoria).

2ª Chamada:

Número Nome Exame
32738  Paulo Sérgio Azevedo Magalhães  4.5
33684  António Augusto Dias Castro Ribeiro Silva  13
35846  Márcio Azevedo  10
36867  Rui Samuel Valinho  3.5
38580  Jorge Filipe Morgado Marques  6

1ª Chamada:

Número Nome Exame
39837  Rui Miguel Pacheco Almeida  5.5
43488  Paula Cristina Gomes da Silva  12



Notas do Ano Lectivo 2006/2007 (exames)

2ª Chamada:

Número Nome Exame
39837  Rui Miguel Pacheco Almeida  10

Época Especial:

Número Nome Exame
35806 Bruno Miguel Freitas de Sousa 10

MFES0809 05 Dec 2008 - 23:17 - r3 JoseBacelarAlmeida

Análise, Modelação e Teste de Software

MFES - Mestrado de Informática

13/11/2008

"Design by Contract and Java Modeling Language": apresentação do conceito e clausulas básicas do JML (requires, ensures, invariant). Universo de ferramentas para JML. Características do ESC/Java2 e da verificação de asserções em tempo de execução (jmlc/jmlrac).

Teórico-prática: exercício de utilização do plugin Eclipse do ESC/Java2 (análise estática simples).

20/11/2008

"JML - beyond the basics": especificação de casos multiplos e de comportamento excepcional; invariantes de ciclo; frame-confitions; dificuldades com aliasing de referências.

Teórico-prática: exercício de modelação em JML.

27/11/2008

"Abstract modeling in JML": herança de especificações; datagroups e abstracção; campos "ghost" e "model"; tipos abstractos para modelação.

Teórica-prática: acompanhamento do projecto JML.

04/12/2008

"Unit Testing and JmlUnit": objectivos e características dos testes unitários; utilização do JUnit; integração com verificação de asserções JML e ferramenta JML-Unit.

Teórica-prática: acompanhamento do projecto JML.

MaterialApoio 18 Feb 2010 - 13:00 - r15 OlgaPacheco

Slides

Exercícios Teórico-Práticos

Bibliografia

  • Proof Theory and Automated Deduction. Jean Goubault-Larrecq & Ian Mackie , Kluwer Academic Publishers, 1997.

  • From Logic to Logic Programming. Kees Doets, MIT Press, 1994.

  • The Art of Prolog : advanced programming techniques. L. Sterling & E. Shaphiro, MIT Press, 1994.

  • Prolog Programming for Artificial Intelligence. Ivan Bratko, Addison-Wesley, 1993.

  • Essentials of Logic Programming. Christopher John Hogger. Oxford University Press, 1990.

Apontadores Web

Edições Anteriores da Disciplina

Disciplinas Relacionadas do plano de curso de LCC

Disciplinas Relacionadas do plano antigo de LMCC

  • ELP1 - Elementos Lógicos da Programação I (2º ano, 1º semestre)
  • ELP2 - Elementos Lógicos da Programação II (2º ano, 2º semestre)
Notas0607 20 Sep 2007 - 14:00 - r9 JoseBacelarAlmeida

Época de Especial

Num Nome Exame
47414 André da Silva Rocha 3.85
35804 Ângelo David Soares Perez Dias 5
43514 César Carlos Martins Gomes 5.95
48405 Christophe Campos Peixoto 10
39496 Filipe Miguel Torres Falcão 0
43520 Ivo Manuel Lopes Rodrigues 3,65
47418 João Paulo da Silva Bordalo 10
30481 Maria de Fátima Sancho Monteiro 10
43550 Nuno Diogo Neto Ferreira 5.95
37074 Patrícia Alexandra Ribeiro 6.25
43510 Paulo Manuel de Oliveira Gomes 4.15
46222 Tiago de Sá Camacho da Côrte 3.15
41039 Tiago Fernando Melo Machado da Costa 6.95

Época de Recurso

Num Nome Turno Prática ?Prolog? Exame FINAL
47414 André da Silva Rocha 1 X S 5.35 R
48407 André Filipe Ferreira de Araújo Barbosa 2 12 N 12.3 12
35804 Ângelo David Soares Perez Dias --- --- S 2.8 R
47402 Carlos Miguel da Silva Brandão 2 X S 10.75 11
48405 Christophe Campos Peixoto 2 X S 6.6 R
47420 Eduardo Jorge Araújo da Costa 2 10 N 12.3 12
43526 Isac Lima Nunes 1 X S 12.8 13
47418 João Paulo da Silva Bordalo 2 X S 6.61 R
35842 Katia Marina Ferreira da Silva 1 X S 5 R
30481 Maria de Fátima Sancho Monteiro 2 X S 5 R
30746 Nuno André Passos Geraldes 1 X S 6.01 R
43550 Nuno Diogo Neto Ferreira --- --- S 4.2 R
37074 Patrícia Alexandra Ribeiro --- --- S 6.09 R
44633 Paulo Alexandre da Silva Lopes --- --- S 4.76 R
43510 Paulo Manuel de Oliveira Gomes --- --- S 3.85 R
41039 Tiago Fernando Melo Machado da Costa 1 X S 6.53 R

Época Normal

Num Nome Turno Prática Cham. ?Prolog? Exame FINAL
35804 Ângelo David Soares Perez Dias --- --- 1 S 1,75 R
48405 Christophe Campos Peixoto 2 X 1 N 0 R
43509 Dave Lage Moderno 1 18 1 N 18,5 18
42817 Hugo Adriano Ferreira Maia 1 17 1 N 17,5 17
43544 Hugo Manuel Sousa Ribeiro 1 X 1 S 9,5 10
47418 João Paulo da Silva Bordalo 2 X 1 S 6,9 R
41007 Luis Pedro Lima e Horta Nova 2 14 1 N 10,5 12
30481 Maria de Fátima Sancho Monteiro 2 X 1 S 5,75 R
43533 Miguel Alexandre Vieira dos Santos 1 12 1 N 12 12
43510 Paulo Manuel de Oliveira Gomes --- --- 1 S 6,9 R
41042 Pedro Miguel Ribeiro Martins 1 16 1 N 11 13
47406 Vera Lúcia Gonçalves Reina 1 11 1 N 11 11
48399 Vicente Machado Fernandes 1 15 1 N 17 16
43496 Ana Isabel Pinto Monteiro dos Santos 1 16 2 N 14 15
40997 André Feliciano Quintas da Silva Coelho 1 14 2 N 12 13
48407 André Filipe Ferreira de Araújo Barbosa --- --- 2 N 6,5 R
41037 André Vilas Boas da Costa --- --- 2 S 9,55 10
43543 Bruno Henrique Lourenço Ferreira 1 X 2 S 9,45 10
41020 Carlos Manuel Ferreira Lopes 2 X 2 S 11,7 12
47402 Carlos Miguel da Silva Brandão 2 X 2 S 5,2 R
48390 Daniel Tiago Rodrigues Braga 2 14 2 N 11 12
47420 Eduardo Jorge Araújo da Costa 2 10 2 N 6 R
41038 Hélder Nuno Ribeiro Macedo 1 12 2 N 10,5 11
43526 Isac Lima Nunes 1 X 2 S 4,5 R
46287 João Batista da Costa Lopes 2 X 2 S 9,45 10
35842 Katia Marina Ferreira da Silva 1 X 2 S 4,8 R
30746 Nuno André Passos Geraldes 1 X 2 S 4,85 R
43550 Nuno Diogo Neto Ferreira --- --- 2 S 7,1 R
41017 Nuno Miguel Macedo Salgado 2 15 2 N 9 11
37074 Patrícia Alexandra Ribeiro --- --- 2 S 3,1 R
43511 Paulo Renato Ribeiro Xavier --- --- 2 N 0 R
43532 Pedro Miguel Correia Araújo 2 13 2 N 10 11
38584 Rui Dinis da Silva 2 X 2 S 0 R
43503 Rui Pedro Alves de Carvalho 2 16 2 N 8,5 11
41705 Sandra Cláudia Pereira Rodrigues 1 12 2 N 10 11
46222 Tiago de Sá Camacho da Côrte 2 X 2 S 3,5 R
41039 Tiago Fernando Melo Machado da Costa 1 X 2 S 5,2 R
43501 Vânio Miguel Rodrigues Ferreira 2 X 2 S 9,6 10
48397 Vítor Hugo Correia Fernandes 2 15 2 N 11 12

Notas Práticas

Turno 1

Número Nome Teste 1 Teste 2 Prática
30746 Nuno André Geraldes 3   X
35842 Katia Marina Silva 1   X
40997 André Feliciano Coelho 2 3 14
41038 Hélder Nuno Macedo 2 3 12
41039 Tiago Fernando Costa 1 1 X
41042 Pedro Miguel Martins 4 4 16
41705 Sandra Claudio Rodrigues 1 4 12
42198 Ivan Pereira 2   X
42817 Hugo Adriano 4 5 17
43496 Ana Isabel Santos 3 5 16
43509 Dave Lage Moderno 5 5 18
43526 Isac Lima Nunes 1   X
43533 Miguel Santos 3 2 12
43543 Bruno Henrique Ferreira 1   X
43544 Hugo Ribeiro 1   X
47406 Vera Lúcia Reine 1 3 11
47414 André Silva Rocha 1 0 X
48399 Vicente M. Fernandes 4 3 15

Mini-Teste 1 (turno 2)

Número Nome Teste 1 Teste 2 Prática
30481 Maria de Fátima Sancho Monteiro 1 2 X
38584 Rui Dinis Silva 1   X
39496 Filipe Miguel Torres Falcão 1 2 X
39838 Bruno Edgar Almeida Soares 3   X
41007 Luis Pedro Lima e Horta Nova 3 4 14
41017 Nuno Miguel M. Salgado 4 4 15
41020 Carlos Manuel Ferreira Lopes 3   X
43501 Vanio Miguel Rodrigo Ferreira 2   X
43503 Rui Pedro Alves de Carvalho 4 4 16
43532 Pedro Miguel Correia Araújo 3 4 13
46222 Tiago de Sá Camacho da Corte 1 1 X
46287 João Batista da Costa Lopes 2 1 X
47402 Carlos Miguel Silva Brandão 1 1 X
47420 Eduardo Jorge Araújo da Costa 2 3 10
47452 João Paulo da Silva Bordalo 1   X
48390 Daniel Braga 4 3 14
48397 Vitor Hugo Correia Fernandes 4 4 15
48405 Christophe Peixoto 1   X
48406 André Batista Martins 1   X
48407 André Filipe Ferreira A. Barbosa 2 4 12

Praticas0607 29 May 2007 - 10:39 - r9 JoseBacelarAlmeida

Aulas Práticas


Aula 8: Predicados de Segunda Ordem

Existem meta-predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver User's Manual ou o help).

  • findall(?Template,:Goal,?Bag) : Bag é a lista de instâncias de Template encontradas nas provas de Goal. A ordem da lista corresponde à ordem em que são encontradas as respostas. Se não existirem instanciações para Template, Bag unifica com a lista vazia.
  • bagof(?Template,:Goal,?Bag) : Semelhante a findall, mas se Goal falhar, bagof falha.
  • setof(?Template,:Goal,?Set) : Semelhante a bagof, mas a lista é ordenada e sem repetições.

Exemplo:

| ?- findall(X, member(X,[1,2,3]), L).
L = [1,2,3]
yes

  • Utilize o predicado findall para determinar todas as soluções para o problema das N rainhas com N=8.


Aula 7: Estratégia Gerar e Testar.

Estratégia Gerar e Testar

O mecanismo de backtracking do PROLOG torna possível codificar, de forma directa, a estratégia de gerar e testar para encontrar a solução de um determinado problema. Segundo esta estratégia, o problema é decomposto em duas fases:

  • Gera-se "soluções cadidatas" para o problema.
  • Verifica-se se a "solução candidata" satisfaz os requisitos do problema (e é, portanto, uma "solução efectiva").

Podemos assim identificar o padrão com a seguinte regra PROLOG:

resolve(X) :- gera(X), testa(X).
Note-se o papel preponderante do backtracking para encontrar uma dada solução para resolve(X): o predicado gera(X) instancia X com uma possível solução. No caso de testa(X) falhar (a solução proposta não satisfaz os requisitos impostos pelo problema), o mecanismo de backtracking permite que gera(X) instancie uma nova alternativa, até que se encontre a solução pretendida.

O predicado gera acaba normalmente por se revelar o ponto crítico na aplicação desta estratégia: por um lado, pretende-se que ele cubra todas as possíveis soluções para o problema (caso contrário, podemos nunca gerar a solução requerida). Por outro, e por questões de eficiência, vamos pretender que ele produza o mínimo de soluções erradas (para minimizar o espaço de busca) -- na prática, este esforço de minimização traduz-se por eliminar candidatos notoriamente errados e por encontrar codificações apropriadas para as possíveis soluções.

Vejamos um exemplo concreto: pretende-se encontrar um divisor para um dado número N (diferente de 1 e N).

fromToL(L,U,[]) :- U < L, !.
fromToL(L,U,[L|X]) :- L1 is L+1, fromToL(L1,U,X).

gera(N,X) :- fromToL(2,N-1,L), member(X,L).

testa(N,X) :- N mod X =:= 0.

divisor(N,X) :- gera(N,X), testa(N,X).

Mas o programa apresentado pode ser consideravelmente optimizado se observarmos que nos é suficiente encontrar um divisor entre 2 e sqrt(N) (se X>sqrt(N) é um divisor de N, então também será N/X<sqrt(N)). Dessa forma teríamos:

divisor2(N,X) :- fromtoL(2,sqrt(N),L), member(X,L), N mod X =:= 0.
 

  • Verifique ambos os programas para um número primo elevado (e.g. 209953, 331777, 472393, ...)
  • Utilize a estratégia generate & test para determinar a raiz de um natural, definida da seguinte forma: um número natural X é a raiz de N quando X2<=N e (X+1)2>N

Problema das N rainhas.

Um exemplo clássico de programação em PROLOG consiste em escrever um predicado que permita resolver o problema das n rainhas. Esse problema consiste em dispor n rainas num tabuleiro de damas com dimensão n*n, sem que qualquer rainha se encontre ameaçada por outra. Como um exemplo de uma solução temos (num tabuleiro 4*4):

    Q  
Q      
      Q
  Q    

Note que cada linha e cada coluna deve conter uma, e só uma, rainha (porquê?). Dito isto, verificamos que uma forma expedita de representar as soluções para este problema consiste em utilizar uma lista que informe qual a coluna em que é colocada a rainha de cada uma das linhas (a solução do exemplo seria [3,1,4,2], querendo dizer que a rainha da primeira linha aparece na terceira coluna, a da segunda linha na primeira coluna, etc.) -- desta forma, aparece uma rainha em cada linha "por construção". A restrição de aparecer uma única rainha por cada coluna é traduzida por deverem aparecer na lista todos os números de 1 a 4, ou seja, a lista deve ser uma permutação de [1,2,3,4]. Temos assim resolvido o sub-problema de gerar soluções candidatas: são simplesmente permutações da lista [1..N].

Na fase de teste, falta unicamente verificar que nenhuma rainha está no alcance da diagonal de uma outra. Para isso notamos que:

  • Duas rainhas estão numa diagonal / sse a soma da linha e coluna da posição de cada uma delas for igual;
  • Duas rainhas estão numa diagonal \ sse a diferença da linha e coluna da posição de cada uma delas for igual.

Com base no que foi referido, codifique um predicado nrainhas(+N,?X) que determine uma solução para o problema das N-rainhas.


Aula 6: Manipulação de fórmulas lógicas proposicionais em Prolog.

Definição de Operadores em Prolog.

O Prolog permite definir operadores prefixos, sufixos ou infixos. Para tal devemos utilizar o predicado pré-definido op(_Prec_,=_Type_,=_Name_=)=. O argumento Name é o nome do operador definido; Prec é um número entre 0 e 1200 que determinará a sua precedência e Type determina o seu tipo e associatividade. Por exemplo, o operador de soma binário + está definido como op(700, yfx, +). A precedência 700 irá determinar que tenha menos precedência do que a multiplicação (definida com precedência 500 - note que um número menor indica maior precedência do operador), e o tipo yfx caracteriza o operador como infixo e associativo à esquerda. Outras possibilidades para o tipo dos operadores são: xfy, xfx para operadores infixos associativos à direita e sem associatividade; fx, fy para operadores prefixos e xf, yf para operadores sufixos.

Alguns dos operadores pré-definidos do Prolog são:

:- op( 1200, xfx, [ :-, --> ]).
:- op( 1200,  fx, [ :-, ?- ]).
:- op( 1100, xfy, [ ; ]).
:- op( 1000, xfy, [ ',' ]).
:- op(  700, xfx, [ =, is, =.., ==, \==, =:=, =\=, <, >, =<, >= ]).
:- op(  500, yfx, [ +, -]).
:- op(  500,  fx, [ +, - ]).
:- op(  300, xfx, [ mod ]).
:- op(  200, xfy, [ ^ ]).

  • Faça um pequeno predicado que lhe permita confirmar a maior precedência do operador * face ao operador +.

Manipulação de fórmulas lógicas proposicionais em Prolog.

A definição de operadores permite que a sintaxe do Prolog se aproxime do domínio onde se está a trabalhar. Considere que se pretendem representar fórmulas da Lógica Proposicional em Prolog. Em vez de considerar termos como or(not(p), and( and(p, r), not(q))), podemos utilizar operadores que nos permitam aproximar a sua representação da utilizada habitualmente. Assim definimos:

:- op(1130, xfy, <=>). % equivalencia
:- op(1110, xfy, =>).  % implicação
%:- op( 1100, xfy, [ ; ]). % disjunção
%:- op( 1000, xfy, [ ',' ]). % conjunção
:- op( 500, fy, ~).    % negação

Estamos a utilizar os operadores de conjunção e disjunção do Prolog (se preferir, pode definir os operadores /\ e \/). Assim, a fórmula apresentada atrás pode ser escrita como (~p ;  p , r, ~q) (note o papel da precedência e associatividade).

  • Defina um predicado que, dado uma fórmula proposicional, determine a Forma Normal Negativa (FNN).
  • Pretende-se definir um programa que permita verificar se uma dada fórmula é uma contradição pelo método de Davis Putnam. Para o efeito, considere os seguintes predicatos que convertem uma FNN na respectiva Forma Normal Conjuntiva (FNC), e que colocam esta última na sua forma matricial (como uma lista de listas) :
% -----------------------------------------------------------------
%  fnc(+NNF,?FNC)
%
% NNF é uma forma normal negatiiva e FNC a respectiva forma normal conjuntiva
cnf(((A,B);C), (F1,F2)) :- !, cnf((A;C),F1), cnf((B;C),F2).
cnf((A;(B,C)), (F1,F2)) :- !, cnf((A;B),F1), cnf((A;C),F2).
cnf((A;B), F) :- !, cnf(A, A1), cnf(B, B1),
  (/*IF*/ (A1=(C,D); B1=(C,D)) ->
   /*THEN*/ cnf((A1;B1), F) ; 
   /*ELSE*/ F=(A1;B1) ).
cnf((A,B), (A1,B1)) :- !, cnf(A, A1), cnf(B, B1).
cnf(Lit, Lit).

% -----------------------------------------------------------------
%  matCNF(+FNC,?MAT)
%
% FNC é uma forma normal conjuntiva e MAT é a sua representação sob a forma
% de matriz (lista de listas de literais).
matCNF((A,B),M) :- !, matCNF(A,MA), matCNF(B,MB), append(MA,MB,M).
matCNF((A;B),C) :- !, matCNF(A,[CA]), matCNF(B,[CB]), union2(CA,CB,C).
matCNF(~Lit, [[TWiki.-Lit][-Lit]]) :- !.
matCNF(Lit, [[TWiki.Lit][Lit]]).

union2([],L,[L]).
union2([X|L1],L2,L3) :- member2(X,L2), !, union2(L1,L2,L3).
union2([X|_],L2,[])  :- (-Xn=X;-X=Xn), member2(Xn,L2), !.
union2([X|L1],L2,L3) :- union2(L1,[X|L2],L3).

member2(X,[Y|_]) :- X==Y, !.
member2(X,[_|T]) :- member2(X,T).


Aula 5: Utilização de cut e negação por falha.

O predicado pré-definido cut (!) permite eliminar ramos nas árvores de derivação de predicados Prolog. Operacionalmente, o cut pode ser caracterizado da seguinte forma: _"Durante o processo de prova, a 1a passagem pelo cut é sempre verdadeira (com sucesso). Se por backtracking se voltar ao cut, então o cut faz falhar o predicado que está na cabeça da regra."_

A utilização do cut está normalmente associada a questões de eficiência: os ramos da árvore que são eliminados acabariam eventualmente por falhar, e assim poupamos trabalho ao motor de inferência do Prolog. Esta utilização do cut é considerada benigna, porque não se afecta o significado dos predicados. Tomemos como exemplo um predicado que verifique se o terceiro argumento é o mínimo dos dois primeiros. Podería ser definido como:

minimo(X,Y,Y) :- X >= Y.
minimo(X,Y,X) :- X < Y.
Mas podemos facilmente observar que, uma vez verificado que X>=Y, não faz sentido tentar verificar que X<Y. Assim sendo, faz sentido colocar um cut no final da primeira cláusula:
minimo(X,Y,Y) :- X >= Y, !.
minimo(X,Y,X) :- X < Y.

  • Estaria correcto eliminar também o predicado X<Y na segunda cláusula? Justifique com exemplos apropriados.

É importante referir que certas utilizações do cut alteram propositadamente o comportamento do programa (tipicamente para impedir que a execução do programa entre em ciclo). Essas utilizações são normalmente consideradas "mais perigosas" porque obriga a que o programador detenha uma ideia muito precisa sobre o processo de construção da derivação por parte do Prolog.

  • Relembre as seguintes alternativas para calcular o multiplicação de naturais:
a(zero, Y, Y).
a(suc(X), Y, suc(Z)) :- a(X,Y,Z).

m1(zero, _, zero).
m1(suc(X), Y, Z) :- a(Y, W, Z), m1(X,Y,W).

m2(zero, _, zero).
m2(suc(X), Y, Z) :- m2(X,Y,W), a(Y, W, Z).
    • Seria possível impedir a computação infinita de m2 por intermédio da introdução de cuts?
    • A introdução de cuts também faria sentido para m1? Onde? Justifique.

  • Considere o seguinte programa que pretende inserir o primeiro argumento (um número) na lista ordenada passada no segundo argumento.
insert(X,[H|T],[H|T1]) :- X>H, !, insert(X,T,T1).
insert(X,L,[X|L]).
    • Mostre, avaliando um objectivo apropriado, que o programa está incorrecto.
    • Como o poderá corrigir?

Negação por falha.

Por vezes pretende-se garantir que um dado predicado não é válido. A utilização do cut (em conjunção com o predicado pré-definido fail que falha sempre) permite codificar uma forma restrita de negação: a "negação por falha". Considere o seguinte predicado:

neg(X) :- X, !, fail.
neg(X).
Note que neg(X) falha sempre que o Prolog consiga construir uma derivação para X. Por outro lado, sucede se falhar na construção dessa derivação (entra na segunda cláusula, que é trivialmente satisfeita). Obs.: o predicado pré-definido do Prolog \+ corresponde ao predicado neg apresentado.

  • Verifique o resultado de neg em predicados já definidos.
  • Considere o seguinte programa:
estudante(paulo). 
casado(joao). 
estudante_solteiro(X) :- \+ casado(X), estudante(X).
    • Como explica a resposta às questões estudante_solteiro(paulo) e estudante_solteiro(X)


Aula 4: Árvores de Prova. Tipos algébricos

Árvores de Prova em Prolog

Operacionalmente, o Prolog segue uma estratégia top down, depth-first para encontrar soluções das questões colocadas. O processo de Unificação permite concretizar as questões colocadas definindo as condições em que a questão inicial é satisfeita (a substituição obtida). Quando o motor de inferência se depara com uma situação de "falha", retrocede na árvore de prova por forma a tentar novas alternativas.

  • Relembre o predicado member que verifica se um elemento pertence a uma lista. Construa a árvore de procura de soluções para a questão member(X,[1,2,3]).
  • Considere agora o predicado takeout/3 referido na última aula. Construa a árvore de procura de soluções para a questão takeout(X,[1,2,3],Y).

Tipos algébricos em Prolog

A utilização de termos permite a manipulação em Prolog de valores de tipos algébricos (que em Haskell seriam declarados com data). Por exemplo, árvores binárias podem ser representadas por termos como vazia, nodo(vazia, vazia), etc.

  • Defina um predicado que verifique se uma lista é uma travessia in-order de uma árvore.
  • Defina predicados que determinem:
    • uma árvore é uma Árvore Binária de Procura
    • uma lista está ordenada.

Note no entanto que em Prolog não existe a noção de tipo. De facto nada nos impede de considerar termos como vazia(nodo,vazia(nodo)).


Aula 3: Continuação da manipulação de listas

  • Defina last/2 que verifique se o último elemento de uma lista é um dado.
  • Defina append/3 que concatene duas listas.
  • Utilize o predicado append para definir os predicados prefixo e sufixo que verificam se uma lista é prefixo ou sufixo doutra.
  • Defina split/4 que separe os elementos de uma lista nos menores e maiores que um dado valor.
  • Considere o predicado:
takeout(X,[X|R],R).
takeout(X,[F|R],[F|S]) :- takeout(X,R,S).
O que faz este predicado?
  • Utilize o predicado takeout para definir um predicado que determine se uma lista é permutação de uma outra.


Aula 2: Utilização de termos, introdução à manipulação de Listas.

Termos Estruturados

Para além dos tipos primitivos, o Prolog admite termos estruturados da forma f(t1,t2,...,tn), onde f é o functor do termo e t1,...tn são sub-termos.

Uma aplicação típica de termos estruturados é para organizar a informação contida num programa. Por exemplo, podemos armazenar datas com termos da forma "data(25,abril,2007)". O seguinte predicado extrai o dia duma data armazenada dessa forma:

diaData(D,data(D,_,_)).

  • Defina o predicado valData/1 que verifique se uma data é correcta.

Nada nos impede de considerarmos termos arbitrariamente complicados. Em particular, podemos considerar termos de natureza recursiva como a representação dos naturais com os construtores zero e suc (i.e. zero, suc(zero), suc(suc(zero)), etc.).

  • Defina o predicado nat/1 que verifique se um termo é um natural na representação referida.
  • Defina soma/3 que verifique se o terceiro argumento é a soma dos dois primeiros.
  • Mostre como usar o predicado soma/3 para calcular a subtração de dois naturais.
  • Defina predicados int2nat/2 e nat2int/2 que convertam naturais em inteiros e vice-versa.

Introdução às Listas em Prolog

Um exemplo de um tipo estruturado que está pré-definido no Prolog são as listas. A sintaxe mais prática é [] que denota a lista vazia e [H|T] que denota a lista com cabeça H e cauda T.

  • Defina member/2 que verifica se um elemento pertence a uma lista.
  • Utilize o predicado member para determinar quais dos elementos da lista [3,5,4,6,5,7] são pares.


Aula 1: Apresentação da linguagem PROLOG

Exemplo de apresentação

Tipos Primitivos

  • Variáveis:
  • Átomos:
  • Inteiros:
  • Reais:

Unificação, Igualdade, Atribuição

  • =
  • ==
  • is


Praticas0708 02 Jun 2008 - 22:41 - r17 JoseBacelarAlmeida

Aulas Práticas


Aula 9: Implementação do algoritmo Davis-Putnam em Prolog.

Pretende-se definir um programa que permita verificar se uma dada fórmula é uma contradição pelo método de Davis Putnam. Para o efeito, considere os seguintes predicatos que convertem uma FNN na respectiva Forma Normal Conjuntiva (FNC), e que colocam esta última na sua forma matricial (como uma lista de listas) :

% -----------------------------------------------------------------
%  fnc(+NNF,?FNC)
%
% NNF é uma forma normal negatiiva e FNC a respectiva forma normal conjuntiva
cnf(((A /\ B) \/ C), (F1 /\ F2)) :- !, cnf((A \/ C),F1), cnf((B \/ C),F2).
cnf((A \/ (B /\ C)), (F1,F2)) :- !, cnf((A \/ B),F1), cnf((A \/ C),F2).
cnf((A \/ B), F) :- !, cnf(A, A1), cnf(B, B1),
  (/*IF*/ (A1=(C /\ D); B1=(C /\ D)) ->
   /*THEN*/ cnf((A1 \/ B1), F) ; 
   /*ELSE*/ F=(A1 \/ B1) ).
cnf((A /\ B), (A1 /\ B1)) :- !, cnf(A, A1), cnf(B, B1).
cnf(Lit, Lit).

% -----------------------------------------------------------------
%  matCNF(+FNC,?MAT)
%
% FNC é uma forma normal conjuntiva e MAT é a sua representação sob a forma
% de matriz (lista de listas de literais).
matCNF((A /\ B),M) :- !, matCNF(A,MA), matCNF(B,MB), append(MA,MB,M).
matCNF((A \/ B),C) :- !, matCNF(A,[CA]), matCNF(B,[CB]), union2(CA,CB,C).
matCNF(~Lit, [[TWiki.-Lit][-Lit]]) :- !.
matCNF(Lit, [[TWiki.Lit][Lit]]).

union2([],L,[L]).
union2([X|L1],L2,L3) :- member2(X,L2), !, union2(L1,L2,L3).
union2([X|_],L2,[])  :- (-Xn=X;-X=Xn), member2(Xn,L2), !.
union2([X|L1],L2,L3) :- union2(L1,[X|L2],L3).

member2(X,[Y|_]) :- X==Y, !.
member2(X,[_|T]) :- member2(X,T).

Exercícios:

  • Defina um predicado que determine a forma normal disjuntiva.
  • Defina o predicado de split/3 que determine o particionamento de uma FN.
  • Defina o predicado davisPutnam/1 que verifique se uma fórmula proposicional é inconsistente.

Aula 8: Manipulação de fórmulas de lógica proposicional em Prolog.

Definição de Operadores em Prolog.

O Prolog permite definir operadores prefixos, sufixos ou infixos. Para tal devemos utilizar o predicado pré-definido op( Prec , Type , Name ). O argumento Name é o nome do operador definido; Prec é um número entre 0 e 1200 que determinará a sua precedência e Type determina o seu tipo e associatividade. Por exemplo, o operador de soma binário + está definido como op(700, yfx, +). A precedência 700 irá determinar que tenha menos precedência do que a multiplicação (definida com precedência 500 - note que um número menor indica maior precedência do operador), e o tipo yfx caracteriza o operador como infixo e associativo à esquerda. Outras possibilidades para o tipo dos operadores são: xfy, xfx para operadores infixos associativos à direita e sem associatividade; fx, fy para operadores prefixos e xf, yf para operadores sufixos.

Alguns dos operadores pré-definidos do Prolog são:

:- op( 1200, xfx, [ :-, --> ]).
:- op( 1200,  fx, [ :-, ?- ]).
:- op( 1100, xfy, [ ; ]).
:- op( 1000, xfy, [ ',' ]).
:- op(  700, xfx, [ =, is, =.., ==, \==, =:=, =\=, <, >, =<, >= ]).
:- op(  500, yfx, [ +, -]).
:- op(  500,  fx, [ +, - ]).
:- op(  300, xfx, [ mod ]).
:- op(  200, xfy, [ ^ ]).

  • Faça um pequeno predicado que lhe permita confirmar a maior precedência do operador * face ao operador +.

Manipulação de fórmulas de lógica proposicional em Prolog.

A definição de operadores permite que a sintaxe do Prolog se aproxime do domínio onde se está a trabalhar. Considere que se pretendem representar fórmulas da Lógica Proposicional em Prolog. Em vez de considerar termos como or(not(p), and( and(p, r), not(q))), podemos utilizar operadores que nos permitam aproximar a sua representação da utilizada habitualmente. Assim definimos:

:- op(1110, xfy, =>). 
:- op( 1100, yfx, \/).
:- op( 1000, yfx, /\).
:- op( 500, fy, ~).   

que denotam os operadores de implicação, disjunção, conjunção e negação. Assim, a fórmula apresentada atrás pode ser escrita como (~p  \/  p  /\ r /\ ~q) (note o papel da precedência e associatividade).

Exercícios:

  • Defina o predicado props(+Form,-Props) que calcule o conjunto de símbolos de proposições utilizados na fórmula dada.
  • Defina o predicado val(+Form,+Mod) que verifique se a fórmula é válida no modelo passado como argumento.
  • Como poderia reformular a definição do predicado val por forma a que não seja necessário instanciar o modelo (ou seja, construir o predicado valM(+Form, ?Mod).
  • Defina o predicado nnf(+Form, -NNF) que determine a forma normal negativa de uma fórmula.

Aula 7: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog

Predicados de segunda ordem

Existem meta-predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver User's Manual ou o help).

  • findall(?Template,:Goal,?Bag) : Bag é a lista de instâncias de Template encontradas nas provas de Goal. A ordem da lista corresponde à ordem em que são encontradas as respostas. Se não existirem instanciações para Template, Bag unifica com a lista vazia.
  • bagof(?Template,:Goal,?Bag) : Semelhante a findall, mas se Goal falhar, bagof falha.
  • setof(?Template,:Goal,?Set) : Semelhante a bagof, mas a lista é ordenada e sem repetições.

Exemplo:

| ?- findall(X, member(X,[1,2,3]), L).
L = [1,2,3]
yes

Relacionados com os apresentados, encontramos outros predicados de ordem superior, como o bem conhecido map (do haskell). No Prolog o predicado maplist implementa a funcionalidade análoga.

Exercícios:

  • Teste os predicados apresentados codificando exemplos apropriados.
  • Utilize o predicado findall para determinar todas as soluções para o problema das N rainhas com N=8.

Outras características do Prolog

Manipulação da base de conhecimento: O Prolog permite manipular dinamicamente a base de conhecimento (inserir ou remover factos ou regras). Para isso disponibiliza os predicados assert, retract, rectractall (e variantes...).

Input/Output: tal como qualquer linguagem com o mínimo de preocupações práticas, é possível realizar operações de Input/Output. Para o efeito dispõe-se dos predicados write, read (entre outros, e com muitas variantes...); open e close para maniputação de ficheiros, etc...

Exercícios:

  • Consulte a documentação relativa aos predicados referidos e teste cada um deles com exemplos apropriados.
  • Extenda o programa das N rainhas com um predicado runQueens que interrogue o utilizador sobre o número de rainhas a considerar e imprima no écran todas as soluções admissíveis.


Aula 6: Estratégia Gerar e Testar.

Estratégia Gerar e Testar

O mecanismo de backtracking do PROLOG torna possível codificar, de forma directa, a estratégia de gerar e testar para encontrar a solução de um determinado problema. Segundo esta estratégia, o problema é decomposto em duas fases:

  • Gera-se "soluções cadidatas" para o problema.
  • Verifica-se se a "solução candidata" satisfaz os requisitos do problema (e é, portanto, uma "solução efectiva").

Podemos assim identificar o padrão com a seguinte regra PROLOG:

resolve(X) :- gera(X), testa(X).
Note-se o papel preponderante do backtracking para encontrar uma dada solução para resolve(X): o predicado gera(X) instancia X com uma possível solução. No caso de testa(X) falhar (a solução proposta não satisfaz os requisitos impostos pelo problema), o mecanismo de backtracking permite que gera(X) instancie uma nova alternativa, até que se encontre a solução pretendida.

O predicado gera acaba normalmente por se revelar o ponto crítico na aplicação desta estratégia: por um lado, pretende-se que ele cubra todas as possíveis soluções para o problema (caso contrário, podemos nunca gerar a solução requerida). Por outro, e por questões de eficiência, vamos pretender que ele produza o mínimo de soluções erradas (para minimizar o espaço de busca) -- na prática, este esforço de minimização traduz-se por eliminar candidatos notoriamente errados e por encontrar codificações apropriadas para as possíveis soluções.

Vejamos um exemplo concreto: pretende-se encontrar um divisor para um dado número N (diferente de 1 e N).

fromToL(L,U,[]) :- U < L, !.
fromToL(L,U,[L|X]) :- L1 is L+1, fromToL(L1,U,X).

gera(N,X) :- fromToL(2,N-1,L), member(X,L).

testa(N,X) :- N mod X =:= 0.

divisor(N,X) :- gera(N,X), testa(N,X).

Mas o programa apresentado pode ser consideravelmente optimizado se observarmos que nos é suficiente encontrar um divisor entre 2 e sqrt(N) (se X>sqrt(N) é um divisor de N, então também será N/X<sqrt(N)). Dessa forma teríamos:

divisor2(N,X) :- fromtoL(2,sqrt(N),L), member(X,L), N mod X =:= 0.
 

  • Verifique ambos os programas para um número primo elevado (e.g. 209953, 331777, 472393, ...)
  • Utilize a estratégia generate & test para determinar a raiz de um natural, definida da seguinte forma: um número natural X é a raiz de N quando X2<=N e (X+1)2>N

Problema das N rainhas.

Um exemplo clássico de programação em PROLOG consiste em escrever um predicado que permita resolver o problema das n rainhas. Esse problema consiste em dispor n rainas num tabuleiro de damas com dimensão n*n, sem que qualquer rainha se encontre ameaçada por outra. Como um exemplo de uma solução temos (num tabuleiro 4*4):

    Q  
Q      
      Q
  Q    

Note que cada linha e cada coluna deve conter uma, e só uma, rainha (porquê?). Dito isto, verificamos que uma forma expedita de representar as soluções para este problema consiste em utilizar uma lista que informe qual a coluna em que é colocada a rainha de cada uma das linhas (a solução do exemplo seria [3,1,4,2], querendo dizer que a rainha da primeira linha aparece na terceira coluna, a da segunda linha na primeira coluna, etc.) -- desta forma, aparece uma rainha em cada linha "por construção". A restrição de aparecer uma única rainha por cada coluna é traduzida por deverem aparecer na lista todos os números de 1 a 4, ou seja, a lista deve ser uma permutação de [1,2,3,4]. Temos assim resolvido o sub-problema de gerar soluções candidatas: são simplesmente permutações da lista [1..N].

Na fase de teste, falta unicamente verificar que nenhuma rainha está no alcance da diagonal de uma outra. Para isso notamos que:

  • Duas rainhas estão numa diagonal / sse a soma da linha e coluna da posição de cada uma delas for igual;
  • Duas rainhas estão numa diagonal \ sse a diferença da linha e coluna da posição de cada uma delas for igual.

Com base no que foi referido, codifique um predicado nrainhas(+N,?X) que determine uma solução para o problema das N-rainhas.


Aula 5: Utilização de cut e negação por falha.

O predicado pré-definido cut (!) permite eliminar ramos nas árvores de derivação de predicados Prolog. Operacionalmente, o cut pode ser caracterizado da seguinte forma: _Durante o processo de prova, a 1a passagem pelo cut é sempre verdadeira (com sucesso). Se por backtracking se voltar ao cut, então o cut faz falhar o predicado que está na cabeça da regra._

A utilização do cut está normalmente associada a questões de eficiência: os ramos da árvore que são eliminados acabariam eventualmente por falhar, e assim poupamos trabalho ao motor de inferência do Prolog. Esta utilização do cut é considerada benigna (green cut), porque não se afecta o significado dos predicados. Tomemos como exemplo um predicado que verifique se o terceiro argumento é o mínimo dos dois primeiros. Podería ser definido como:

minimo(X,Y,Y) :- X >= Y.
minimo(X,Y,X) :- X < Y.
Mas podemos facilmente observar que, uma vez verificado que X>=Y, não faz sentido tentar verificar que X<Y. Assim sendo, faz sentido colocar um cut no final da primeira cláusula:
minimo(X,Y,Y) :- X >= Y, !.
minimo(X,Y,X) :- X < Y.

  • Estaria correcto eliminar também o predicado X<Y na segunda cláusula? Justifique com exemplos apropriados.

É importante referir que certas utilizações do cut alteram propositadamente o comportamento do programa (tipicamente para impedir que a execução do programa entre em ciclo). Essas utilizações são normalmente consideradas "mais perigosas" (red cuts) porque obrigam a que o programador detenha uma ideia muito precisa sobre o processo de construção da derivação por parte do Prolog.

  • Considere a seguinte base de conhecimento:
q(0,X,Y) :- p(X), !, p(Y).
q(_,X,b) :- p(X).
q(_,c,Y) :- p(Y), !.
p(a). p(b).
    • Quais são as soluções admissíveis para os objectivos q(1,X,Y) e q(0,X,Y).
    • Apresente as árvores de derivação correspondentes aos objectivos da alínea anterior.

  • Considere o seguinte programa que pretende inserir o primeiro argumento (um número) na lista ordenada passada no segundo argumento.
insert(X,[H|T],[H|T1]) :- X>H, !, insert(X,T,T1).
insert(X,L,[X|L]).
    • Mostre, avaliando um objectivo apropriado, que o programa está incorrecto.
    • Como o poderá corrigir?

Negação por falha.

Por vezes pretende-se garantir que um dado predicado não é válido. A utilização do cut (em conjunção com o predicado pré-definido fail que falha sempre) permite codificar uma forma restrita de negação: a "negação por falha". Considere o seguinte predicado:

neg(X) :- X, !, fail.
neg(X).
Note que neg(X) falha sempre que o Prolog consiga construir uma derivação para X. Por outro lado, sucede se falhar na construção dessa derivação (entra na segunda cláusula, que é trivialmente satisfeita). Obs.: o predicado pré-definido do Prolog \+ corresponde ao predicado neg apresentado.

  • Verifique o resultado de neg em predicados já definidos.
  • Considere o seguinte programa:
estudante(paulo). 
casado(joao). 
estudante_solteiro(X) :- \+ casado(X), estudante(X).
    • Como explica a resposta às questões estudante_solteiro(paulo) e estudante_solteiro(X)


Aula 4: Exercícios de Manipulação de Listas e Tipos Algébricos

Manipulação de Listas

  • Defina last/2 que verifique se o último elemento de uma lista é um dado.
  • Defina append/3 que concatene duas listas.
  • Utilize o predicado append para definir os predicados prefixo e sufixo que verificam se uma lista é prefixo ou sufixo doutra.
  • Defina split/4 que separe os elementos de uma lista nos menores e maiores que um dado valor.
  • Considere o predicado:
takeout(X,[X|R],R).
takeout(X,[F|R],[F|S]) :- takeout(X,R,S).
    • O que faz este predicado?
    • Construa a árvore de procura de soluções para a questão takeout(X,[1,2,3],Y).
  • Utilize o predicado takeout para definir um predicado que determine se uma lista é permutação de uma outra.

Tipos Algébricos

A utilização de termos permite a manipulação em Prolog de valores de tipos algébricos (que em Haskell seriam declarados com data). Um primeiro exemplo disso já foi ilustrado na última aula quando se manipularam naturais (zero, suc(zero), etc.). Para sistematizar, vejamos agora como manipular um outro tipo algébrico bem conhecido: as árvores binárias. Uma escolha óbvia para representar os seus valores será considerar o átomo vazia para representar a árvore vazia e termos da forma nodo(X,E,D) para representar nodos intermédios (com valor X, sub-árvore esquerda E e sub-árvore direita D). Temos então como exemplos de termos: vazia, nodo(4, vazia, vazia), etc.

Note no entanto que em Prolog não existe a noção de tipo (e.g. não podemos, à priori, condicionar um dado argumento de um predicado a ser uma árvore binária --- a única alternativa será definir-se um predicado que suceda para termos que tenham a estrutura prescrita...)

  • Defina um predicado arvBin/1 que verifique se o termo dado é uma árvore binária (e.g. deve falhar para termos como vazia(nodo,vazia(nodo))).
  • Defina um predicado que verifique se uma lista é uma travessia in-order de uma árvore.
  • Defina predicados que determinem:
    • uma árvore é uma Árvore Binária de Procura
    • uma lista está ordenada.


Aula 3: Árvores de derivação do Prolog.

Considere-se a definição do predicado member/2

member(X,[X|_]).
member(X,[_|T]) :- member(X,T).

Este predicado foi definido na última aula com o objectivo de verificar se um elemento está contido numa lista. De facto, podemos utiliza-lo como:

?- member(2,[1,2,3]).
true .

?- member(4,[1,2,3]).
fail.

Mas podemos também utiliza-lo com variáveis não instanciadas com o objectivo de determinar quais os elementos de uma lista:

?- member(X,[1,2,3]).
X = 1 ;
X = 2 ;
X = 3 ;
fail.
Ou até para determinar soluções a questões mais complicadas, como (mais um exemplo da última aula):
?- member(X,[3,5,4,6,5,7]), X mod 2 =:= 0.
X = 4 ;
X = 6 ;
fail.

O objectivo desta aula é o de se perceber como é que o Prolog consegue chegar às soluções apresentadas (substituições de variáveis que validam o objectivo).

Inferência do Prolog

Um objectivo em Prolog consiste numa lista de predicados. O resultado da "execução" desse objectivo num interpretador consiste numa substituição que verifique esses predicados. O processo construção da substituição é normalmente designado por inferência, e pode ser justificado construindo uma árvore como se descreve:

  1. Na raiz da árvore, coloca-se a lista de predicados. O Prolog irá processar cada predicado dessa lista por ordem.
  2. Para cada predicado, o Prolog irá procurar encontrar na base de conhecimento uma instância dum facto ou duma regra cuja cabeça unifique com esse predicado. Esta procura processa-se também pela ordem pela qual as definições ocorrem na base de conhecimento.
  3. Quando é encontrada uma regra nas condições referidas, cria-se um descendente na árvore contendo a lista já afectada pela substituição resultante da unificação (relembre que o resultada na unificação é uma substituição das variáveis) e onde o predicado em análise é substituído pelo lado direito da regra (ou simplesmente desaparece, no caso dos factos). É habitual anotarmos os arcos da árvore com as substituições resultantes das unificações.
  4. Quando existe mais do que uma possibilidade para a referida unificação (e.g. várias regras são aplicáveis), traduz-se por uma ramificação da árvore de inferência.
  5. Operacionalmente, o Prolog trata esta ramificação pelo mecanismo de backtracking (travessia depth-first da árvore).
  6. Quando a lista de predicados fica vazia, cria-se uma folha na árvore denotada como true --- representa um resultado apresentado ao utilizador (a substituição calculada ao longo do caminho).
  7. Quando não existe qualquer regra na base de conhecimento que unifique com o primeiro predicado da lista, cria-se uma folha denotada por fail .

A árvore de derivação para o objectivo "member(X,[1,2]), X mod 2 ==0" será:

Exercícios:

  • Considere a seguinte definição do predicado factorial:
fact(1,0).
fact(R,X) :- X2 is X-1, fact(R2,X2), R is X*R2.
    • Apresente a árvore de inferência para o objectivo fact(R,2).
    • Comente os resultados obtidos. Explique, em particular, que problemas aponta à solução apresentada.
    • Como pode ultrapassar os problemas detectados.
  • Considere o seguinte predicado:
nat2int(zero,0).
nat2int(suc(X),N) :- nat2int(X,N2), N is N2+1.
    • Apresente a árvore de inferência para o objectivo nat2int(suc(suc(zero)),X).
    • Apresente a árvore de inferência para o objectivo nat2int(X,2).
    • Comente os resultados obtidos.
    • Consegue propor alguma forma de ultrapassar os problemas detectados?

Tracing e Debug

Uma forma expedita de detectar problemas em programas Prolog consiste em utilizar o mecanismo de tracing. Esse mecanismo permite "monitorizar" determinados predicados durante o processo de inferência. Considere-se novamente o objectivo considerado atrás que faz uso do predicado member/2:

?- trace(member).
%         member/2: [call, redo, exit, fail]
true.

[debug]  ?- member(X,[1,2]), X mod 2 =:= 0.
 T Call: (8) member(_G318, [1, 2])
 T Exit: (8) member(1, [1, 2])
 T Redo: (8) member(_G318, [1, 2])
 T Call: (9) member(_G318, [2])
 T Exit: (9) member(2, [2])
 T Exit: (8) member(2, [1, 2])
X = 2 ;
 T Redo: (9) member(_G318, [2])
 T Call: (10) member(_G318, [])
 T Fail: (10) member(_G318, [])
fail.
Note que o Prolog sinalizada diferentes eventos relativos ao predicado observado:
  • Call: o predicado em "resolução";
  • Exit: o predicado foi resolvido com sucesso (pode por isso ser removido da lista de objectivos);
  • Redo: nova visita ao predicado (por backtracking);
  • Fail: predicado falha definitivamente (já não existem mais alternativas para o backtracking).

Exercício:

  • Interprete o resultado do trace apresentado na árvore de inferência apresentada acima.
  • Realize análises de traces para as restantes árvores construídas nesta aula...


Aula 2: Operações aritméticas e Manipulação de listas.

Operações aritméticas

Já vimos que o Prolog aceita termos que representem expressões matemáticas, como 3+4*2. Mas quando manipulamos esses termos estamos normalmente interessados em avaliar essas expressões (i.e. calcular o seu resultado). O Prolog disponibiliza para o efeito o predicado is que avalia o segundo argumento e unifica o resultado com o primeiro. Alguns exemplos (onde se utiliza a notação infixa para o predicado):

?- X is 3+2.
X = 5.

?- 3+2 is 2+3.
fail.

?- 5 is 3+2.
true.

?- 5 is X+2.
ERROR: is/2: Arguments are not sufficiently instantiated
Um aspecto importante na utilização do predicado is é a assimetria induzida: o segundo argumento deve ser sempre uma expressão completamente instanciada. Assim, se definirmos o predicado:
soma(X,Y,Z) :- X is Y + Z.
devemos considerar o segundo e o terceiro argumentos como "argumentos de entrada", que necessitam estar devidamente instanciados. Uma forma compacta de se exprimir esse facto (normalmente utilizada na documentação) é através da assinatura soma(-X,+Y,+Z) --- assim identifica-se o argumento Y e Z como de entrada e X como de saída.

Exercício:

  • Defina o predicado factorial(-R,+X) que suceda quando R for o factorial de X.
  • Uma forma alternativa de lidar com números naturais consiste em considerar termos zero, suc(zero), suc(suc(zero)), etc. (i.e. utilizar notação unária para os naturais). Defina o predicado nat2int que sucede quando o primeiro argumento é a representação unária do segundo.
  • No predicado definido na alínea anterior, verifique:
    • que argumentos tem de ser utilizados como entrada e como saída;
    • o que acontece quando solicita ao interpretador várias respostas.
  • Verifique, com o auxílio do mecanismo de help do SWI-Prolog (ou da documentação on-line, se preferir) qual a funcionalidade oferecida pelos operadores:
    =:=, =\=, <, =<, ==, @< 

Manipulação de listas

Um exemplo de um tipo estruturado muito utilizado em Prolog são as listas. A sintaxe pré-definida é [] que denota a lista vazia e [H|T] que denota a lista com cabeça H e cauda T.

  • Defina member/2 que verifica se um elemento pertence a uma lista.
  • Utilize o predicado member para determinar quais dos elementos da lista [3,5,4,6,5,7] são pares.
  • Defina um predicado que permita calcular o somatório de uma lista de inteiros.
  • O que alteraria, no predicado definido na alínea anterior, para calcular o somatório de uma lista de expressões inteiras?


Aula 1: Apresentação da linguagem PROLOG

Ao longo das aulas práticas de Lógica Computacional fazer uso da linguagem PROLOG. O interpretador adoptado será o SWI-Prolog que está disponível para para a generalidade das plataformas (MS-Windows, Linux, macOSX).

Conceitos Preliminares

Termos: o Prolog é uma linguagem simbólica que manipula termos que podem ser:

  • Variáveis - denotadas por identificadores começados por letras maiúsculas (e.g. X, Y, Xs, ...);
  • Constantes - átomos (identificadores começados por letras minúsculas) ou valores de tipos pré-definidos como inteiros, reais, strings, etc. (e.g. abc, xyz, 32, 3.1415)
  • Termos Compostos - termos da forma f(t1,...,tn) onde f é designado por functor (nome da função) e t1...tn são termos (e.g. xyz(X,abc), abc(abc(abc,abc)), +(4,2))

obs.: como iremos ver adiante, o Prolog permite a declaração de operadores infixos. Assim irá permitir escrever 4 + 2 como alternativa ao termo +(4,2) (o mesmo se aplica a outros operadores infixos que serão apresentados adiante).

Substituições e Unificação: o que caracteriza as variáveis é o facto de elas poderem vir a ser substituidas por outros termos. Considere-se o termo t(X,Y): se substituirmos X por abc(A,3) e Y por Z obtemos o termos t(abc(A,3),Z).

Uma operação fundamental no modelo de execução do Prolog é o que se designa por Unificação de dois termos. A ideia consiste em encontrar uma substituição que iguale (se possível) os termos dados. Vejamos alguns exemplos:

  • X = 4, Y = 3 é um unificador dos termos abc(3,X) e abc(Y,4);
  • X = 4, Y = 3 é um unificador dos termos abc(X,X) e abc(Y,4);
  • os termos abc(3,4) e abc(X,X) não dispõe de unificador.

Uma característica dos unificadores apresentados é que se tratam sempre dos unificadores mais gerais (qualquer outra substituição que unifique os termos pode ser expressa como um refinamento da substituição dada). Adiante iremos ter oportunidade de aprofundar estes aspectos mais teóricos... Para já interessa reter que o Prolog, quando unificar dois termos, determina sempre o unificador mais geral (i.e. a substituição mais simples que iguala os termos).

EXERCÍCIO: Determine o unificador mais geral para os seguintes pares de termos (se existir... naturalmente):

  • f(X,g(Y)) e g(X,f(Y))
  • f(X,g(Y)) e Z
  • f(X,g(y)) e f(g(y),X)
  • f(X) e X
  • f(X) e f(3+2)
  • f(3) e f(2+1)
  • f(3) e A(X)

Programas em Prolog

Executar um programa em Prolog consiste em interrogar o interpretador sobre a validade de um dado predicado lógico. A resposta mais simples será então true ou fail (se o predicado for válido ou não, respectivamente).

Objectivo (Goal):

Quando se invoca o SWI-Prolog, surge o prompt ?- que assinala que o interpretador aguarda a introdução de um objectivo (ou query, ou goal).

Calvin:~ jba$ /opt/local/bin/swipl 
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.51)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- 

Como referimos, o objectivo será um predicado lógico. Iremos ter oportunidade de definir novos predicados mas, para já, concentremo-nos na utilização do predicado pré-definido =/2 (o /2 significa que o predicado espera dois argumentos). Este predicado será válido precisamente quando os termos que forem passados como argumentos unificarem. Assim podemos introduzir:

?- =(3,3).
true.

?- 3=3.
true.

?- 3=2.
fail.

?- 3=X.
X = 3.

?- 3+2=X.
X = 3+2.

?- 3 + X = Y * 2.
fail.

?- 

Os exemplos apresentados revelam-nos duas coisas: (1) podemos utilizar a notação infixa e, (2) quando no objectivo estão envolvidas veriáveis o Prolog retorna uma substituição dessas variáveis que verifiquem o predicado (ou falha, se não existir nenhuma substituição nessas condições) --- podemos então dizer que, intuitivamente, as variáveis dos objectivos estão quantificadas existencialmente.

EXERCÍCIO: Interrogue o interpretador de Prolog por forma a ele retornar os unificadores mais gerais atrás solicitados.

Factos (base de conhecimento I):

Referimos que executar um programa em Prolog consiste em interrogar o interpretador relativamente a um objectivo. Mas, em que é que consiste um programa Prolog?. Um programa em Prolog será a base de conhecimento que o interpretador utiliza para determinar a validade do objectivo pedido. Essa base de conhecimento será consituída por:

  • Factos: que estabelecem a validade imediata (de instâncias) de predicados;
  • Regras: que condicionam a validade de predicados à validade de sub-objectivos.

Comecemos pelos primeiros. Como exemplos de factos podemos ter:

pai(joao,manuel).
pai(cristina, jose).
pai(joaquim,manuel).
pai(francisco,joao).
pai(helena,joao)

Com base nestes factos, diriamos que pai(joaquim,manuel) é válido mas pai(joaquim,jose) já não o é (porque nada estabelece a sua validade). Para verificar isso com o Prolog, necessitamos de carregar a base de conhecimento no interpretador. Para tal devemos:

  • gravar um ficheiro com os factos apresentados (normalmente dá-se a extensão ".pl" aos ficheiros Prolog, e.g. "pai.pl");
  • carregar o ficheiro no interpretador por intermédio do predicado pré-definido consult (e.g. "consult(pai.pl)").

EXERCÍCIO: Verifique a validade de alguns objectivos com a base de conhecimento apresentada. O que acontece quando se inclui variáveis?

Por vezes, o interpretador retorna uma substituição de resultado sem voltar ao prompt inicial. Isso assinala que a solução apresentada é uma de várias possíveis, podendo o utilizador:

  • digitar . e retornar ao prompt inicial;
  • digitar ; para solicitar outra solução.

EXERCÍCIO:

  • introduza um predicado que permita determinar todos os filhos de "manuel".
  • o que aconteceria se incluisse na base de conhecimento o facto pai(X,carlos) ? Experimente... (verifique o impacto de o incluir no início e no fim da base de conhecimento).

O exercício anterior permite concluir que, nos factos, devemos realizar uma interpretação universal das variáveis.

Se as questões colocadas ao interpretador de Prolog são predicados lógicos, é natural perguntarmo-nos como construir predicados à custa de conectivas lógicas (como e, ou, etc.). O Prolog tem definido os operadores:

  • conjunção: denotado por uma vírgula (,)
  • disjunção: denotado por um ponto e vírgula (;)

(As restantes conectivas lógicas proposicionais serão introduzidas mais tarde.)

Regras (base de conhecimento II):

A expressividade do Prolog resulta do facto de permitir incluir, na base de conhecimento, regras que condicionam a validade de um predicado (colocado no lado esquerdo do operador :-, e designado por cabeça da regra) à validade de um conjunto de outros predicados (designados por corpo da regra). A título de exemplo, temos que a regra:

avo(X,Y) :- pai(X,Z), pai(Z,Y).

Quando acrescentada à base de conhecimento apresentada acima, permite que o Prolog responda afirmativamente ao predicado avo(francisco,manuel). No processo, o interpretador verificará os predicados pai(francisco,joao) e pai(joao,manuel).

Note que nas regras, as variáveis que ocorrem na cabeça da regra devem ser entendidas como quantificadas universalmente (como nos factos). Já as que só ocorrem no corpo da regra devem ser entendidas como quantificadas existencialmente (como nos objectivos).

Exercício: Extenda a base de conhecimento para exprimir outros graus de parentesco, como "irmão", "tio", etc.


Praticas0809 29 May 2009 - 23:07 - r13 JoseBacelarAlmeida

Aulas Práticas


Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog

Predicados de segunda ordem

Existem meta-predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver User's Manual ou o help).

  • findall(?Template,:Goal,?Bag) : Bag é a lista de instâncias de Template encontradas nas provas de Goal. A ordem da lista corresponde à ordem em que são encontradas as respostas. Se não existirem instanciações para Template, Bag unifica com a lista vazia.
  • bagof(?Template,:Goal,?Bag) : Semelhante a findall, mas se Goal falhar, bagof falha.
  • setof(?Template,:Goal,?Set) : Semelhante a bagof, mas a lista é ordenada e sem repetições.

Exemplo:

| ?- findall(X, member(X,[1,2,3]), L).
L = [1,2,3]
yes

Relacionados com os apresentados, encontramos outros predicados de ordem superior, como o bem conhecido map (do haskell). No Prolog o predicado maplist implementa a funcionalidade análoga.

Exercícios:

  • Teste os predicados apresentados codificando exemplos apropriados.
  • Utilize o predicado findall para determinar todas as soluções para o problema das N rainhas com N=8.

Outras características do Prolog

Manipulação da base de conhecimento: O Prolog permite manipular dinamicamente a base de conhecimento (inserir ou remover factos ou regras). Para isso disponibiliza os predicados assert, retract, rectractall (e variantes...).

Input/Output: tal como qualquer linguagem com o mínimo de preocupações práticas, é possível realizar operações de Input/Output. Para o efeito dispõe-se dos predicados write, read (entre outros, e com muitas variantes...); open e close para maniputação de ficheiros, etc...

Exercícios:

  • Consulte a documentação relativa aos predicados referidos e teste cada um deles com exemplos apropriados.
  • Extenda o programa das N rainhas com um predicado runQueens que interrogue o utilizador sobre o número de rainhas a considerar e imprima no écran todas as soluções admissíveis.


Aula 9: Estratégia Gerar e Testar.

Estratégia Gerar e Testar

O mecanismo de backtracking do PROLOG torna possível codificar, de forma directa, a estratégia de gerar e testar para encontrar a solução de um determinado problema. Segundo esta estratégia, o problema é decomposto em duas fases:

  • Gera-se "soluções cadidatas" para o problema.
  • Verifica-se se a "solução candidata" satisfaz os requisitos do problema (e é, portanto, uma "solução efectiva").

Podemos assim identificar o padrão com a seguinte regra PROLOG:

resolve(X) :- gera(X), testa(X).
Note-se o papel preponderante do backtracking para encontrar uma dada solução para resolve(X): o predicado gera(X) instancia X com uma possível solução. No caso de testa(X) falhar (a solução proposta não satisfaz os requisitos impostos pelo problema), o mecanismo de backtracking permite que gera(X) instancie uma nova alternativa, até que se encontre a solução pretendida.

O predicado gera acaba normalmente por se revelar o ponto crítico na aplicação desta estratégia: por um lado, pretende-se que ele cubra todas as possíveis soluções para o problema (caso contrário, podemos nunca gerar a solução requerida). Por outro, e por questões de eficiência, vamos pretender que ele produza o mínimo de soluções erradas (para minimizar o espaço de busca) -- na prática, este esforço de minimização traduz-se por eliminar candidatos notoriamente errados e por encontrar codificações apropriadas para as possíveis soluções.

Vejamos um exemplo concreto: pretende-se encontrar um divisor para um dado número N (diferente de 1 e N).

fromToL(L,U,[]) :- U < L, !.
fromToL(L,U,[L|X]) :- L1 is L+1, fromToL(L1,U,X).

gera(N,X) :- fromToL(2,N-1,L), member(X,L).

testa(N,X) :- N mod X =:= 0.

divisor(N,X) :- gera(N,X), testa(N,X).

Mas o programa apresentado pode ser consideravelmente optimizado se observarmos que nos é suficiente encontrar um divisor entre 2 e sqrt(N) (se X>sqrt(N) é um divisor de N, então também será N/X<sqrt(N)). Dessa forma teríamos:

divisor2(N,X) :- fromtoL(2,sqrt(N),L), member(X,L), N mod X =:= 0.
 

  • Verifique ambos os programas para um número primo elevado (e.g. 209953, 331777, 472393, ...)
  • Utilize a estratégia generate & test para determinar a raiz de um natural, definida da seguinte forma: um número natural X é a raiz de N quando X2<=N e (X+1)2>N

Problema das N rainhas.

Um exemplo clássico de programação em PROLOG consiste em escrever um predicado que permita resolver o problema das n rainhas. Esse problema consiste em dispor n rainas num tabuleiro de damas com dimensão n*n, sem que qualquer rainha se encontre ameaçada por outra. Como um exemplo de uma solução temos (num tabuleiro 4*4):

    Q  
Q      
      Q
  Q    

Note que cada linha e cada coluna deve conter uma, e só uma, rainha (porquê?). Dito isto, verificamos que uma forma expedita de representar as soluções para este problema consiste em utilizar uma lista que informe qual a coluna em que é colocada a rainha de cada uma das linhas (a solução do exemplo seria [3,1,4,2], querendo dizer que a rainha da primeira linha aparece na terceira coluna, a da segunda linha na primeira coluna, etc.) -- desta forma, aparece uma rainha em cada linha "por construção". A restrição de aparecer uma única rainha por cada coluna é traduzida por deverem aparecer na lista todos os números de 1 a 4, ou seja, a lista deve ser uma permutação de [1,2,3,4]. Temos assim resolvido o sub-problema de gerar soluções candidatas: são simplesmente permutações da lista [1..N].

Na fase de teste, falta unicamente verificar que nenhuma rainha está no alcance da diagonal de uma outra. Para isso notamos que:

  • Duas rainhas estão numa diagonal / sse a soma da linha e coluna da posição de cada uma delas for igual;
  • Duas rainhas estão numa diagonal \ sse a diferença da linha e coluna da posição de cada uma delas for igual.

Com base no que foi referido, codifique um predicado nrainhas(+N,?X) que determine uma solução para o problema das N-rainhas.


Aula 8: Implementação do algoritmo Davis-Putnam em Prolog.

Pretende-se definir um programa que permita verificar se uma dada fórmula é uma contradição pelo método de Davis Putnam. Para o efeito, sugere-se que considere o seguinte predicado matCNF que converte uma Forma Normal Conjuntiva (FNC) na respectiva forma matricial (como uma lista de listas):


% -----------------------------------------------------------------
%  matCNF(+FNC,?MAT)
%
% FNC é uma forma normal conjuntiva e MAT é a sua representação sob a forma
% de matriz (lista de listas de literais).
% obs: os literais são da forma "atom" ou "-atom".
matCNF((A /\ B),M) :- !, matCNF(A,MA), matCNF(B,MB), append(MA,MB,M).
matCNF((A \/ B),C) :- !, matCNF(A,[CA]), matCNF(B,[CB]), union2(CA,CB,C).
matCNF(~Lit, [[TWiki.-Lit][-Lit]]) :- !.
matCNF(Lit, [[TWiki.Lit][Lit]]).

union2([],L,[L]).
union2([X|L1],L2,L3) :- member2(X,L2), !, union2(L1,L2,L3).
union2([X|_],L2,[])  :- (-Xn=X;-X=Xn), member2(Xn,L2), !.
union2([X|L1],L2,L3) :- union2(L1,[X|L2],L3).

member2(X,[Y|_]) :- X==Y, !.
member2(X,[_|T]) :- member2(X,T).

Exercícios:

  • Defina o predicado de split/3 que determine o particionamento de uma FNC.
  • Defina o predicado davisPutnam/1 que verifique se uma fórmula proposicional é inconsistente.



Aula 7: Lógica Proposicional em Prolog.

Cálculo de Sequentes.

Pretende-se definir um predicado em Prolog que implemente as regras do cálculo de sequentes LC. Para tal deverá considerar que os sequentes são constituídos por pares de listas, sendo portanto o predicado pretendido da forma lc(+Gamma,+Delta) (Gamma e Delta são listas de fórmulas e o predicado verificará se o sequente Gamma |- Delta é válido ou não).

Formas Normais.

Defina os predicados:

  • nnf(+Form, -NNF) que determine a forma normal negativa de uma fórmula.
  • cnf(+NNF, -CNF) que determina a forma normal conjuntiva (FNC) de uma fórmula dada na FNN.


Aula 6: Manipulação de fórmulas de lógica proposicional em Prolog.

Definição de Operadores em Prolog.

O Prolog permite definir operadores prefixos, sufixos ou infixos. Para tal devemos utilizar o predicado pré-definido op( Prec , Type , Name ). O argumento Name é o nome do operador definido; Prec é um número entre 0 e 1200 que determinará a sua precedência e Type determina o seu tipo e associatividade. Por exemplo, o operador de soma binário + está definido como op(700, yfx, +). A precedência 700 irá determinar que tenha menos precedência do que a multiplicação (definida com precedência 500 - note que um número menor indica maior precedência do operador), e o tipo yfx caracteriza o operador como infixo e associativo à esquerda. Outras possibilidades para o tipo dos operadores são: xfy, xfx para operadores infixos associativos à direita e sem associatividade; fx, fy para operadores prefixos e xf, yf para operadores sufixos.

Alguns dos operadores pré-definidos do Prolog são:

:- op( 1200, xfx, [ :-, --> ]).
:- op( 1200,  fx, [ :-, ?- ]).
:- op( 1100, xfy, [ ; ]).
:- op( 1000, xfy, [ ',' ]).
:- op(  700, xfx, [ =, is, =.., ==, \==, =:=, =\=, <, >, =<, >= ]).
:- op(  500, yfx, [ +, -]).
:- op(  500,  fx, [ +, - ]).
:- op(  300, xfx, [ mod ]).
:- op(  200, xfy, [ ^ ]).

  • Faça um pequeno predicado que lhe permita confirmar a maior precedência do operador * face ao operador +.

Manipulação de fórmulas de lógica proposicional em Prolog.

A definição de operadores permite que a sintaxe do Prolog se aproxime do domínio onde se está a trabalhar. Considere que se pretendem representar fórmulas da Lógica Proposicional em Prolog. Em vez de considerar termos como or(not(p), and( and(p, r), not(q))), podemos utilizar operadores que nos permitam aproximar a sua representação da utilizada habitualmente. Assim definimos:

:- op( 550, xfy, ==>). 
:- op( 540, yfx, \/).
:- op( 520, yfx, /\).
:- op( 510, fy, ~).   

que denotam os operadores de implicação, disjunção, conjunção e negação. Assim, a fórmula apresentada atrás pode ser escrita como (~p  \/  p  /\ r /\ ~q) (note o papel da precedência e associatividade).

Exercícios:

  • Defina o predicado props(+Form,-Props) que calcule o conjunto de símbolos de proposições utilizados na fórmula dada.
  • Defina o predicado val(+Form,+Mod) que verifique se a fórmula é válida no modelo passado como argumento.
  • Como poderia reformular a definição do predicado val por forma a que não seja necessário instanciar o modelo (ou seja, construir o predicado valM(+Form, ?Mod).


Aula 5: Utilização de cut e negação por falha.

O predicado pré-definido cut (!) permite eliminar ramos nas árvores de derivação de predicados Prolog. Operacionalmente, o cut pode ser caracterizado da seguinte forma: Durante o processo de prova, a 1a passagem pelo cut é sempre verdadeira (com sucesso). Se por backtracking se voltar ao cut, então o cut faz falhar o predicado que está na cabeça da regra.

A utilização do cut está normalmente associada a questões de eficiência: os ramos da árvore que são eliminados acabariam eventualmente por falhar, e assim poupamos trabalho ao motor de inferência do Prolog. Esta utilização do cut é considerada benigna (green cut), porque não se afecta o significado dos predicados. Tomemos como exemplo um predicado que verifique se o terceiro argumento é o mínimo dos dois primeiros. Podería ser definido como:

minimo(X,Y,Y) :- X >= Y.
minimo(X,Y,X) :- X < Y.
Mas podemos facilmente observar que, uma vez verificado que X>=Y, não faz sentido tentar verificar que X<Y. Assim sendo, faz sentido colocar um cut no final da primeira cláusula:
minimo(X,Y,Y) :- X >= Y, !.
minimo(X,Y,X) :- X < Y.

  • Estaria correcto eliminar também o predicado X<Y na segunda cláusula? Justifique com exemplos apropriados.

É importante referir que certas utilizações do cut alteram propositadamente o comportamento do programa (tipicamente para impedir que a execução do programa entre em ciclo). Essas utilizações são normalmente consideradas "mais perigosas" (red cuts) porque obrigam a que o programador detenha uma ideia muito precisa sobre o processo de construção da derivação por parte do Prolog.

  • Considere a seguinte base de conhecimento:
q(0,X,Y) :- p(X), !, p(Y).
q(_,X,b) :- p(X).
q(_,c,Y) :- p(Y), !.
p(a). p(b).
    • Quais são as soluções admissíveis para os objectivos q(1,X,Y) e q(0,X,Y).
    • Apresente as árvores de derivação correspondentes aos objectivos da alínea anterior.

  • Considere o seguinte programa que pretende inserir o primeiro argumento (um número) na lista ordenada passada no segundo argumento.
insert(X,[H|T],[H|T1]) :- X>H, !, insert(X,T,T1).
insert(X,L,[X|L]).
    • Mostre, avaliando um objectivo apropriado, que o programa está incorrecto.
    • Como o poderá corrigir?

Negação por falha.

Por vezes pretende-se garantir que um dado predicado não é válido. A utilização do cut (em conjunção com o predicado pré-definido fail que falha sempre) permite codificar uma forma restrita de negação: a "negação por falha". Considere o seguinte predicado:

neg(X) :- X, !, fail.
neg(X).
Note que neg(X) falha sempre que o Prolog consiga construir uma derivação para X. Por outro lado, sucede se falhar na construção dessa derivação (entra na segunda cláusula, que é trivialmente satisfeita). Obs.: o predicado pré-definido do Prolog \+ corresponde ao predicado neg apresentado.

  • Verifique o resultado de neg em predicados já definidos.
  • Considere o seguinte programa:
estudante(paulo). 
casado(joao). 
estudante_solteiro(X) :- \+ casado(X), estudante(X).
    • Como explica a resposta às questões estudante_solteiro(paulo) e estudante_solteiro(X)


Aula 4: Exercícios de Manipulação de Listas e Tipos Algébricos

Manipulação de Listas

  • Defina last/2 que verifique se o último elemento de uma lista é um dado.
  • Defina append/3 que concatene duas listas.
  • Utilize o predicado append para definir os predicados prefixo e sufixo que verificam se uma lista é prefixo ou sufixo doutra.
  • Defina split/4 que separe os elementos de uma lista nos menores e maiores que um dado valor.
  • Considere o predicado:
takeout(X,[X|R],R).
takeout(X,[F|R],[F|S]) :- takeout(X,R,S).
    • O que faz este predicado?
    • Construa a árvore de procura de soluções para a questão takeout(X,[1,2,3],Y).
  • Utilize o predicado takeout para definir um predicado que determine se uma lista é permutação de uma outra.

Tipos Algébricos

A utilização de termos permite a manipulação em Prolog de valores de tipos algébricos (que em Haskell seriam declarados com data). Um primeiro exemplo disso já foi ilustrado na última aula quando se manipularam naturais (zero, suc(zero), etc.). Para sistematizar, vejamos agora como manipular um outro tipo algébrico bem conhecido: as árvores binárias. Uma escolha óbvia para representar os seus valores será considerar o átomo vazia para representar a árvore vazia e termos da forma nodo(X,E,D) para representar nodos intermédios (com valor X, sub-árvore esquerda E e sub-árvore direita D). Temos então como exemplos de termos: vazia, nodo(4, vazia, vazia), etc.

Note no entanto que em Prolog não existe a noção de tipo (e.g. não podemos, à priori, condicionar um dado argumento de um predicado a ser uma árvore binária --- a única alternativa será definir-se um predicado que suceda para termos que tenham a estrutura prescrita...)

  • Defina um predicado arvBin/1 que verifique se o termo dado é uma árvore binária (e.g. deve falhar para termos como vazia(nodo,vazia(nodo))).
  • Defina um predicado que verifique se uma lista é uma travessia in-order de uma árvore.
  • Defina predicados que determinem:
    • uma árvore é uma Árvore Binária de Procura
    • uma lista está ordenada.


Aula 3: Árvores de derivação do Prolog.

Considere-se a definição do predicado member/2

member(X,[X|_]).
member(X,[_|T]) :- member(X,T).

Este predicado foi definido na última aula com o objectivo de verificar se um elemento está contido numa lista. De facto, podemos utiliza-lo como:

?- member(2,[1,2,3]).
true .

?- member(4,[1,2,3]).
fail.

Mas podemos também utiliza-lo com variáveis não instanciadas com o objectivo de determinar quais os elementos de uma lista:

?- member(X,[1,2,3]).
X = 1 ;
X = 2 ;
X = 3 ;
fail.
Ou até para determinar soluções a questões mais complicadas, como (mais um exemplo da última aula):
?- member(X,[3,5,4,6,5,7]), X mod 2 =:= 0.
X = 4 ;
X = 6 ;
fail.

O objectivo desta aula é o de se perceber como é que o Prolog consegue chegar às soluções apresentadas (substituições de variáveis que validam o objectivo).

Inferência do Prolog

Um objectivo em Prolog consiste numa lista de predicados. O resultado da "execução" desse objectivo num interpretador consiste numa substituição que verifique esses predicados. O processo construção da substituição é normalmente designado por inferência, e pode ser justificado construindo uma árvore como se descreve:

  1. Na raiz da árvore, coloca-se a lista de predicados. O Prolog irá processar cada predicado dessa lista por ordem.
  2. Para cada predicado, o Prolog irá procurar encontrar na base de conhecimento uma instância dum facto ou duma regra cuja cabeça unifique com esse predicado. Esta procura processa-se também pela ordem pela qual as definições ocorrem na base de conhecimento.
  3. Quando é encontrada uma regra nas condições referidas, cria-se um descendente na árvore contendo a lista já afectada pela substituição resultante da unificação (relembre que o resultada na unificação é uma substituição das variáveis) e onde o predicado em análise é substituído pelo lado direito da regra (ou simplesmente desaparece, no caso dos factos). É habitual anotarmos os arcos da árvore com as substituições resultantes das unificações.
  4. Quando existe mais do que uma possibilidade para a referida unificação (e.g. várias regras são aplicáveis), traduz-se por uma ramificação da árvore de inferência.
  5. Operacionalmente, o Prolog trata esta ramificação pelo mecanismo de backtracking (travessia depth-first da árvore).
  6. Quando a lista de predicados fica vazia, cria-se uma folha na árvore denotada como true --- representa um resultado apresentado ao utilizador (a substituição calculada ao longo do caminho).
  7. Quando não existe qualquer regra na base de conhecimento que unifique com o primeiro predicado da lista, cria-se uma folha denotada por fail .

A árvore de derivação para o objectivo "member(X,[1,2]), X mod 2 ==0" será:

Exercícios:

  • Considere a seguinte definição do predicado factorial:
fact(1,0).
fact(R,X) :- X2 is X-1, fact(R2,X2), R is X*R2.
    • Apresente a árvore de inferência para o objectivo fact(R,2).
    • Comente os resultados obtidos. Explique, em particular, que problemas aponta à solução apresentada.
    • Como pode ultrapassar os problemas detectados.
  • Considere o seguinte predicado:
nat2int(zero,0).
nat2int(suc(X),N) :- nat2int(X,N2), N is N2+1.
    • Apresente a árvore de inferência para o objectivo nat2int(suc(suc(zero)),X).
    • Apresente a árvore de inferência para o objectivo nat2int(X,2).
    • Comente os resultados obtidos.
    • Consegue propor alguma forma de ultrapassar os problemas detectados?

Tracing e Debug

Uma forma expedita de detectar problemas em programas Prolog consiste em utilizar o mecanismo de tracing. Esse mecanismo permite "monitorizar" determinados predicados durante o processo de inferência. Considere-se novamente o objectivo considerado atrás que faz uso do predicado member/2:

?- trace(member).
%         member/2: [call, redo, exit, fail]
true.

[debug]  ?- member(X,[1,2]), X mod 2 =:= 0.
 T Call: (8) member(_G318, [1, 2])
 T Exit: (8) member(1, [1, 2])
 T Redo: (8) member(_G318, [1, 2])
 T Call: (9) member(_G318, [2])
 T Exit: (9) member(2, [2])
 T Exit: (8) member(2, [1, 2])
X = 2 ;
 T Redo: (9) member(_G318, [2])
 T Call: (10) member(_G318, [])
 T Fail: (10) member(_G318, [])
fail.
Note que o Prolog sinalizada diferentes eventos relativos ao predicado observado:
  • Call: o predicado em "resolução";
  • Exit: o predicado foi resolvido com sucesso (pode por isso ser removido da lista de objectivos);
  • Redo: nova visita ao predicado (por backtracking);
  • Fail: predicado falha definitivamente (já não existem mais alternativas para o backtracking).

Exercício:

  • Interprete o resultado do trace apresentado na árvore de inferência apresentada acima.
  • Realize análises de traces para as restantes árvores construídas nesta aula...


Aula 2: Operações aritméticas e Manipulação de listas.

Operações aritméticas

Já vimos que o Prolog aceita termos que representem expressões matemáticas, como 3+4*2. Mas quando manipulamos esses termos estamos normalmente interessados em avaliar essas expressões (i.e. calcular o seu resultado). O Prolog disponibiliza para o efeito o predicado is que avalia o segundo argumento e unifica o resultado com o primeiro. Alguns exemplos (onde se utiliza a notação infixa para o predicado):

?- X is 3+2.
X = 5.

?- 3+2 is 2+3.
fail.

?- 5 is 3+2.
true.

?- 5 is X+2.
ERROR: is/2: Arguments are not sufficiently instantiated
Um aspecto importante na utilização do predicado is é a assimetria induzida: o segundo argumento deve ser sempre uma expressão completamente instanciada. Assim, se definirmos o predicado:
soma(X,Y,Z) :- X is Y + Z.
devemos considerar o segundo e o terceiro argumentos como "argumentos de entrada", que necessitam estar devidamente instanciados. Uma forma compacta de se exprimir esse facto (normalmente utilizada na documentação) é através da assinatura soma(-X,+Y,+Z) --- assim identifica-se o argumento Y e Z como de entrada e X como de saída.

Exercício:

  • Defina o predicado factorial(-R,+X) que suceda quando R for o factorial de X.
  • Uma forma alternativa de lidar com números naturais consiste em considerar termos zero, suc(zero), suc(suc(zero)), etc. (i.e. utilizar notação unária para os naturais). Defina o predicado nat2int que sucede quando o primeiro argumento é a representação unária do segundo.
  • No predicado definido na alínea anterior, verifique:
    • que argumentos tem de ser utilizados como entrada e como saída;
    • o que acontece quando solicita ao interpretador várias respostas.
  • Verifique, com o auxílio do mecanismo de help do SWI-Prolog (ou da documentação on-line, se preferir) qual a funcionalidade oferecida pelos operadores:
    =:=, =\=, <, =<, ==, @< 

Manipulação de listas

Um exemplo de um tipo estruturado muito utilizado em Prolog são as listas. A sintaxe pré-definida é [] que denota a lista vazia e [H|T] que denota a lista com cabeça H e cauda T.

  • Defina member/2 que verifica se um elemento pertence a uma lista.
  • Utilize o predicado member para determinar quais dos elementos da lista [3,5,4,6,5,7] são pares.
  • Defina um predicado que permita calcular o somatório de uma lista de inteiros.
  • O que alteraria, no predicado definido na alínea anterior, para calcular o somatório de uma lista de expressões inteiras?
  • Defina o predicado concat/3 que verifique quando uma lista é a concatenação de outras duas. Verifique o resultado quando o invoca com diferentes listas instanciadas.


Aula 1: Apresentação da linguagem PROLOG

Ao longo das aulas práticas de Lógica Computacional fazer uso da linguagem PROLOG. O interpretador adoptado será o SWI-Prolog que está disponível para para a generalidade das plataformas (MS-Windows, Linux, macOSX).

Conceitos Preliminares

Termos: o Prolog é uma linguagem simbólica que manipula termos que podem ser:

  • Variáveis - denotadas por identificadores começados por letras maiúsculas (e.g. X, Y, Xs, ...);
  • Constantes - átomos (identificadores começados por letras minúsculas) ou valores de tipos pré-definidos como inteiros, reais, strings, etc. (e.g. abc, xyz, 32, 3.1415)
  • Termos Compostos - termos da forma f(t1,...,tn) onde f é designado por functor (nome da função) e t1...tn são termos (e.g. xyz(X,abc), abc(abc(abc,abc)), +(4,2))

obs.: como iremos ver adiante, o Prolog permite a declaração de operadores infixos. Assim irá permitir escrever 4 + 2 como alternativa ao termo +(4,2) (o mesmo se aplica a outros operadores infixos que serão apresentados adiante).

Substituições e Unificação: o que caracteriza as variáveis é o facto de elas poderem vir a ser substituidas por outros termos. Considere-se o termo t(X,Y): se substituirmos X por abc(A,3) e Y por Z obtemos o termos t(abc(A,3),Z).

Uma operação fundamental no modelo de execução do Prolog é o que se designa por Unificação de dois termos. A ideia consiste em encontrar uma substituição que iguale (se possível) os termos dados. Vejamos alguns exemplos:

  • X = 4, Y = 3 é um unificador dos termos abc(3,X) e abc(Y,4);
  • X = 4, Y = 3 é um unificador dos termos abc(X,X) e abc(Y,4);
  • os termos abc(3,4) e abc(X,X) não dispõe de unificador.

Uma característica dos unificadores apresentados é que se tratam sempre dos unificadores mais gerais (qualquer outra substituição que unifique os termos pode ser expressa como um refinamento da substituição dada). Adiante iremos ter oportunidade de aprofundar estes aspectos mais teóricos... Para já interessa reter que o Prolog, quando unificar dois termos, determina sempre o unificador mais geral (i.e. a substituição mais simples que iguala os termos).

EXERCÍCIO: Determine o unificador mais geral para os seguintes pares de termos (se existir... naturalmente):

  • f(X,g(Y)) e g(X,f(Y))
  • f(X,g(Y)) e Z
  • f(X,g(y)) e f(g(y),X)
  • f(X) e X
  • f(X) e f(3+2)
  • f(3) e f(2+1)
  • f(3) e A(X)

Programas em Prolog

Executar um programa em Prolog consiste em interrogar o interpretador sobre a validade de um dado predicado lógico. A resposta mais simples será então true ou fail (se o predicado for válido ou não, respectivamente).

Objectivo (Goal):

Quando se invoca o SWI-Prolog, surge o prompt ?- que assinala que o interpretador aguarda a introdução de um objectivo (ou query, ou goal).

Calvin:~ jba$ /opt/local/bin/swipl 
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.51)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- 

Como referimos, o objectivo será um predicado lógico. Iremos ter oportunidade de definir novos predicados mas, para já, concentremo-nos na utilização do predicado pré-definido =/2 (o /2 significa que o predicado espera dois argumentos). Este predicado será válido precisamente quando os termos que forem passados como argumentos unificarem. Assim podemos introduzir:

?- =(3,3).
true.

?- 3=3.
true.

?- 3=2.
fail.

?- 3=X.
X = 3.

?- 3+2=X.
X = 3+2.

?- 3 + X = Y * 2.
fail.

?- 

Os exemplos apresentados revelam-nos duas coisas: (1) podemos utilizar a notação infixa e, (2) quando no objectivo estão envolvidas veriáveis o Prolog retorna uma substituição dessas variáveis que verifiquem o predicado (ou falha, se não existir nenhuma substituição nessas condições) --- podemos então dizer que, intuitivamente, as variáveis dos objectivos estão quantificadas existencialmente.

EXERCÍCIO: Interrogue o interpretador de Prolog por forma a ele retornar os unificadores mais gerais atrás solicitados.

Factos (base de conhecimento I):

Referimos que executar um programa em Prolog consiste em interrogar o interpretador relativamente a um objectivo. Mas, em que é que consiste um programa Prolog?. Um programa em Prolog será a base de conhecimento que o interpretador utiliza para determinar a validade do objectivo pedido. Essa base de conhecimento será consituída por:

  • Factos: que estabelecem a validade imediata (de instâncias) de predicados;
  • Regras: que condicionam a validade de predicados à validade de sub-objectivos.

Comecemos pelos primeiros. Como exemplos de factos podemos ter:

pai(joao,manuel).
pai(cristina, jose).
pai(joaquim,manuel).
pai(francisco,joao).
pai(helena,joao)

Com base nestes factos, diriamos que pai(joaquim,manuel) é válido mas pai(joaquim,jose) já não o é (porque nada estabelece a sua validade). Para verificar isso com o Prolog, necessitamos de carregar a base de conhecimento no interpretador. Para tal devemos:

  • gravar um ficheiro com os factos apresentados (normalmente dá-se a extensão ".pl" aos ficheiros Prolog, e.g. "pai.pl");
  • carregar o ficheiro no interpretador por intermédio do predicado pré-definido consult (e.g. "consult(pai.pl)").

EXERCÍCIO: Verifique a validade de alguns objectivos com a base de conhecimento apresentada. O que acontece quando se inclui variáveis?

Por vezes, o interpretador retorna uma substituição de resultado sem voltar ao prompt inicial. Isso assinala que a solução apresentada é uma de várias possíveis, podendo o utilizador:

  • digitar . e retornar ao prompt inicial;
  • digitar ; para solicitar outra solução.

EXERCÍCIO:

  • introduza um predicado que permita determinar todos os filhos de "manuel".
  • o que aconteceria se incluisse na base de conhecimento o facto pai(X,carlos) ? Experimente... (verifique o impacto de o incluir no início e no fim da base de conhecimento).

O exercício anterior permite concluir que, nos factos, devemos realizar uma interpretação universal das variáveis.

Se as questões colocadas ao interpretador de Prolog são predicados lógicos, é natural perguntarmo-nos como construir predicados à custa de conectivas lógicas (como e, ou, etc.). O Prolog tem definido os operadores:

  • conjunção: denotado por uma vírgula (,)
  • disjunção: denotado por um ponto e vírgula (;)

(As restantes conectivas lógicas proposicionais serão introduzidas mais tarde.)

Regras (base de conhecimento II):

A expressividade do Prolog resulta do facto de permitir incluir, na base de conhecimento, regras que condicionam a validade de um predicado (colocado no lado esquerdo do operador :-, e designado por cabeça da regra) à validade de um conjunto de outros predicados (designados por corpo da regra). A título de exemplo, temos que a regra:

avo(X,Y) :- pai(X,Z), pai(Z,Y).

Quando acrescentada à base de conhecimento apresentada acima, permite que o Prolog responda afirmativamente ao predicado avo(francisco,manuel). No processo, o interpretador verificará os predicados pai(francisco,joao) e pai(joao,manuel).

Note que nas regras, as variáveis que ocorrem na cabeça da regra devem ser entendidas como quantificadas universalmente (como nos factos). Já as que só ocorrem no corpo da regra devem ser entendidas como quantificadas existencialmente (como nos objectivos).

Exercício: Estenda a base de conhecimento para exprimir outros graus de parentesco, como "irmão", "tio", etc.


ProgDetalhado0607 04 Jul 2007 - 18:16 - NEW JoseBacelarAlmeida

Programa detalhado do ano lectivo 2006/2007

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG
  • Analogia de Curry-Howard
    • Identidade das Provas (em Dedução Natural)
    • Normalização de provas
    • Sistemas de Anotação de Termos
    • Lambda-Calculus com tipos (formulação de Curry)
    • Beta-redução e suas propriedades
    • Analogia de Curry-Howard

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
ProgDetalhado0708 11 Jun 2008 - 22:07 - NEW JoseBacelarAlmeida

Programa detalhado do ano lectivo 2007/2008

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG
  • Analogia de Curry-Howard
    • Identidade das Provas (em Dedução Natural)
    • Normalização de provas
    • Sistemas de Anotação de Termos e Lambda-Calculus com tipos (formulação de Curry)

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
ProgDetalhado0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida

Programa detalhado do ano lectivo 2008/2009

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
Programa0506 03 Jul 2007 - 22:09 - r3 JoseBacelarAlmeida

Programa Resumido (2005/2006)

Componente Teórica

  • Lógica Proposicional
    • Sintaxe
    • Linguagens de Cláusulas
    • Validade e Verificação
    • Redução Semântica
    • Modelos e Diagramas de Decisão Binária
    • Exemplos de problemas SAT
  • Lógica de Primeira Ordem
    • Sintaxe da Lógica de Predicados
    • Substituições
    • Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Programação com Restricções

Programa0607 04 Jul 2007 - 18:17 - r3 JoseBacelarAlmeida


Programa Resumido

Componente Teórica

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
    • Métodos de Verificação
    • Aspectos de Complexidade (SAT)
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO
    • Sistemas Deductivos
    • Resolução de primeira ordem
    • Inferência em Teorias de Horn
  • Analogia de Curry-Howard
    • Identidade das provas e normalização
    • Sistemas de anotações de termos
    • Lambda-calculus com tipos
    • Analogia de Curry-Howard

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Utilização do Sistema de Prova Assistida Coq (opcional)


Programa detalhado do ano lectivo 2006/2007

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG
  • Analogia de Curry-Howard
    • Identidade das Provas (em Dedução Natural)
    • Normalização de provas
    • Sistemas de Anotação de Termos
    • Lambda-Calculus com tipos (formulação de Curry)
    • Beta-redução e suas propriedades
    • Analogia de Curry-Howard

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
Programa0708 20 Feb 2008 - 15:22 - NEW JoseBacelarAlmeida


Programa Resumido

Componente Teórica

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
    • Métodos de Verificação
    • Aspectos de Complexidade (SAT)
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO
    • Sistemas Deductivos
    • Resolução de primeira ordem
    • Inferência em Teorias de Horn
  • Analogia de Curry-Howard
    • Identidade das provas e normalização
    • Sistemas de anotações de termos
    • Lambda-calculus com tipos
    • Analogia de Curry-Howard

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Utilização do Sistema de Prova Assistida Coq (opcional)


Programa detalhado do ano lectivo 2007/2008

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG
  • Analogia de Curry-Howard
    • Identidade das Provas (em Dedução Natural)
    • Normalização de provas
    • Sistemas de Anotação de Termos e Lambda-Calculus com tipos (formulação de Curry)

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
Programa0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida


Programa Resumido

Componente Teórica

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
    • Métodos de Verificação
    • Aspectos de Complexidade (SAT)
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica da Lógica de Predicados
    • Modelos de Herbrand da LPO
    • Sistemas Deductivos
    • Resolução de primeira ordem
    • Inferência em Teorias de Horn
  • Analogia de Curry-Howard
    • Identidade das provas e normalização
    • Sistemas de anotações de termos
    • Lambda-calculus com tipos
    • Analogia de Curry-Howard

Componente Teórico-Prática

  • Programação Lógica na linguagem Prolog
  • Utilização do Sistema de Prova Assistida Coq (opcional)


Programa detalhado do ano lectivo 2008/2009

  • Lógica Proposicional
    • Sintaxe e Semântica
    • Sistemas Dedutivos
      • Dedução Natural
      • Dedução Natural formulada com sequentes
      • Cálculo de Sequentes
    • Resultados de Correcção, Completude e Eliminação do Corte
    • Formas normais (negativa, disjuntiva e conjuntiva)
    • Métodos de Verificação
      • Tableaux
      • Algoritmo de Davis Putnam
      • BDDs
      • Resolução Proposicional
  • Lógica de Primeira Ordem
    • Sintaxe e Semântica
    • Modelos de Herbrand
    • Formas Prenex e Skolenização
    • Sistemas dedutivos (cálculo de sequentes)
    • Resolução proposional em lógica de Predicados
    • Unificação
    • Resolução de primeira ordem
    • Teorias de Horn
    • Resolução SLD e inferência da linguagem PROLOG

  • PROLOG
    • Conceitos básicos
      • Átomos, variáveis, termos;
      • Variáveis lógicas; substituições e unificação;
      • Factos e Regras.
    • Inferência e backtracking.
    • Listas e termos estruturados.
    • Cut e negação por falha.
    • Definição de operadores em Prolog.
    • Estratégia Gerar e Testar.
    • Predicados de segunda ordem.
Projectos0708 08 May 2008 - 22:56 - r3 JoseBacelarAlmeida

Propostas de Projectos Práticos - 2007/2008

Esta página apresenta algumas ideias para projectos práticos da disciplina de Lógica Computacional. Os alunos interessados em realizar um projecto devem contactar o docente para definir a atribuição respectiva.

Utilização de SMT Provers na verificação de software

O objectivo deste projecto é o de explorar um SMT Prover na verificação de software. Um SMT Prover é uma ferramenta que combina um verificador automático de fórmulas proposicionais com estratégias específicas para lidar com problemas de decisão em teorias específicas (como aritmética linear, manipulação de arrays, etc.). Essas teorias são particularmente orientadas para cobrir as obrigações de prova resultantes da verificação de programas.

Com este projecto pretende-se validar esse desígnio verificando as obrigações de prova resultantes de programas concretos com um SMT Prover. Como gerador de obrigações de prova sugere-se a utilização de WHY (http://why.lri.fr/index.en.html) e como SMT prover o YICES (http://yices.csl.sri.com/).

Codificação de ORBDDs em Haskell

A codificação de Binary Decision Diagrams (BDDs) pressupõe um controlo apertado sobre a gestão de memória e nos algoritmos utilizados na sua construção. Esse facto torna a sua codificação em Haskell um desafio interessante, obrigando à utilização de Monads para permitir aspectos imperativos na sua programação.

Este projecto pretende estudar a implementação de BDDs em Haskell. Tanto pode incidir sobre a codificação "de raiz" dessas estruturas como pode adoptar uma implementação pré-existente a analisar a sua implementação e o respectivo desempenho (e.g. comparando-a com uma biblioteca análoga desenvolvida em C).

Apontadores:

Codificação do algoritmo Davis-Putnam em Haskell

Um dos algoritmos mais utilizados na verificação de fórmulas proposicionais é o Davis-Putnam(-Logemann-Loveland). Este projecto propõe-se estudar a implementação desse algoritmo em Haskell. Tal como no caso do projecto anterior, o âmbito deste projecto tanto pode incidir sobre a codificação de raiz do algoritmo, como no estudo de uma implementação existente.

Apontadores:

Outros recursos:

Projectos0809 08 May 2009 - 02:24 - r2 JoseBacelarAlmeida

Projecto

O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere-se que os interessados realizem os exemplos do tutorial e de o survey Coq in a Hurry.

Para aplicar os conceitos estudados, devem escolher um (ou mais) dos desafios apresentados. Note que o trabalho é individual e a escolha do desafio deve ser sempre combinada com o docente. Para a entrega devem apresentar um pacote com o conjunto das scripts desenvolvidas (quer dos exemplos realizados, quer do desafio escolhido), "abundantemente" comentadas (preferencialmente fazendo uso da ferramenta coqdoc para produzir um documento contendo essas scripts). As sessões de apresentação irão consistir na execução e discussão das referidas scripts.

Apontadores Web:

Desafios:

  • Mostre que n^2 pode ser calculado como a soma dos primeiros n números ímpares.
  • Demonstre que o somatório, para i=0..n de i e i^2 é respectivamente n*(n+1)/2 e n*(n+1)*(2*n+1)/6.
  • Mostre que, para qualquer lista l, rev(rev(l))=l (rev é a função que inverte a ordem dos elementos numa lista).
  • Considere a função f (a,b) (c,d) = (a*c+a*d+b*d, a*c+b*d). Mostre que:
    • a função é associativa e dispõe de elemento neutro.
    • a aplicação iterada dessa função (n vezes) sobre o valor (1,0) retorna o valor (Fib(n), Fib(n-1)) (onde Fib é a função de Fibonacci)
Sumarios0607 11 Jun 2007 - 19:45 - r16 JoseBacelarAlmeida

Sumários


Docente: José Carlos Bacelar

Aulas Teóricas

08/06: Esclarecimento de dúvidas.

05/06: Referência às propriedades básicas do Lambda-calculus com tipos: subject-reduction, Church-Rosser, normalização forte.

01/06: Lambda-calculus com tipos. Analogia de Curry-Howard.

29/05: Identidade das provas e processo de normalização. Sistemas de anotação de termos.

25/05: Motor de inferência do PROLOG: selecção das cláusulas; unificação; backtracking; árvores de inferência.

22/05: Resolução em cláusulas de primeira ordem. Cláusulas de Horn. Resolução SLD e inferência do PROLOG.

18/05: Tolerância de ponto: enterro da gata.

15/05: Tolerância de ponto: enterro da gata.

11/05: JOIN'2007

08/05: Resolução proposicional em fórmulas de primeira ordem. Unificação.

04/05: Correcção das regras no cálculo de sequentes. Versão semântica do teorema de Herbrand.

27/04: Prenex Normal Forms e Skolenização. Modelos de Herbrand.

24/04: Cálculo de Sequentes para Lógica de Primeira Ordem.

20/04: Sobre o problema SAT: noções de complexidade. Lógica de Primeira Ordem: sintaxe e semântica.

17/04: BDDs: redução de árvores de decisão e construção bottom up.

13/04: Algoritmo Davis Putnam.

30/03: Não houve aula (ETAPS 07)

27/03: Não houve aula (ETAPS 07)

23/03: Algoritmo de resolução de Robinson. Exemplos de aplicação.

20/03: Formas Normais Conjuntivas e Formas Normais Disjuntivas. Resolução de cláusulas em formulas na FNC.

16/03: Apresentação do método de Tableaux. Formas normais negativas.

13/03: Esboço da demonstração da propriedade de eliminação de corte no cálculo de sequentes. Resumo das propriedades do cálculo de sequentes.

09/03: Demonstração dos teoremas de correcção e completude para o cálculo de sequentes (LC).

06/03: Apresentação do cálculo de sequentes (sistema LC)

02/03: Sintaxe e semântica da lógica proposicional. Consequência semântica e sistemas de dedução. Dedução natural.

27/02: Apresentação da disciplina.

23/02: Não houve aula (Simpósio Doutoral).

Aulas Teórico-Práticas

05/06: Unificação em cláusulas LPO.

29/05: Cálculo de sequentes em Lógica de Primeira Ordem.

22/05: Formas Prenex e Skolenização.

15/05: Tolerância de ponto: enterro da gata.

08/05: BDDs: redução e construção bottom-up.

24/04: Algoritmo Davis-Putman: exercícios de aplicação.

17/04: Algoritmo de resoluçao de Robinson: exemplos de aplicação.

27/03: Formas clausais: Fórmulas Normais Conjuntivas e Fórmulas Normais Disjuntivas. Resulução proposicional.

20/03: Avaliação de fórmulas proposicionais por aplicação do método tableaux. Formas normais negativas.

13/03: Demonstrações simples envolvendo indução sobre estrutura das fórmulas e derivações em sistemas de dedução. Construção de derivações no sistema de cálculo de sequentes.

06/03: Exercícios sobre noções elementares da lógica proposicionais: validade de fórmulas; consequência semântica; derivações em Dedução Natural.

27/02: Inscrição nos turnos.

Aulas Práticas

05/06: Mini-teste 2

29/05 Predicados de segunda ordem.

22/05: Estratégia Gerar e Testar.

15/05: Tolerância de ponto: enterro da gata.

08/05: Utilização de operadores em Prolog. Manipulação de fórmuas lógicas.

24/04: Utilização de cut e negação por falha.

17/04: Mini-teste 1

27/03: Árvores de Prova. Tipos algébricos.

20/03: Continuação da manipulação de listas. Exploração do mecanismo de backtracking.

13/03: Utilização de termos, introdução à manipulação de Listas.

06/03: Apresentação da linguagem Prolog.

27/02: Inscrição nos turnos.


Docente: Olga Pacheco

Aulas Teórico-Práticas

17/03: Prova de que a relação de consequência semântica é uma relação de dedução. Representação no cálculo de sequentes das regras da dedução natural.

07/03: Exercícios sobre noções elementares da lógica proposicional: validade de fórmulas; consequência semântica; derivações em Dedução Natural.

28/02: Inscrição nos turnos.

Aulas Práticas

14/03: Utlilização de termos estruturados. Representação dos naturais baseada nos construtores 0 e sucessor (definição dos predicados: menor, maior ou igual, soma e multiplicação). Manipulação de listas em Prolog (definição dos predicados: cabeça, cauda, ultimo elemento, elemento na posição n, e membro).

07/03: Apresentação da linguagem Prolog. Representação em Prolog de informação sobre árvores geneológicas (definição dos predicados: mãe, pai, irmão, tio, avô, avó, avô paterno, avó paterna, bisavô, bisavó,...).

28/02: Inscrição nos turnos.


Sumarios0708 01 Feb 2009 - 18:25 - r15 JoseBacelarAlmeida

Sumários


Aulas Teóricas (3ª 14:00-15:00; 5ª 16:00-17:00)

26/02: Não houve aula.

28/02: Não houve aula.

04/03: Aula de substituição em 27/03, às 15:00.

06/03: Revisões de Lógica Proposicional: sintaxe das fórmulas; noção de modelo e validade; tautologias e contradições; teorias; consequência semântica.

11/03: Relações de dedução. Sistema de Dedução Natural (formulação clássica e com sequentes).

13/03: Propriedades do sistema de Dedução Natural. Apresentação do Cálculo de Sequentes.

27/03 (15:00): Demonstração do teorema de Correcção e Completude do sistema de Dedução Natural.

27/03: Continuação das demonstrações de Correcção e Completude do sistema de Dedução Natural.

01/04: Esboço das demonstrações da Correcção e Completude do Cálculo de Sequentes e da propriedade de Eliminação do Corte. Apresentação do método de Tableaux.

03/04: Formal Normal Negativa (FNN) e Formais Clausais (Forma Normal Disjuntiva (FND) e Forma Normal Conjuntiva (FNC)).

08/04: Método de resolução proposicional. Apresentação do algoritmo de Robinson e ilustração da aplicação.

10/04: Algoritmo de Davis-Putnam.

15/04: BDDs: motivação e definição; redução de árvores de decisão binárias.

17/04: Construção bottom-up de BDDs.

22/04: TESTE INTERMÉDIO.

24/04: Lógica de Primeira Ordem: Sintaxe e Semântica.

29/04: Formas Normais: Prenex; Herbrand e Skolen.

06/05: Modelos de Herbrand.

08/05: Não houve aula (impossibilidade do docente).

13/05: Tolerância de Ponto: Enterro da Gata.

15/05: Tolerância de Ponto: Enterro da Gata.

20/05: Cálculo de Sequentes para Lógica de Primeira Ordem.

27/05: Resolução Proposicional em Lógica de Primeira Ordem.

29/05: Unificação.

03/06: Resolução de Primeira Ordem.

05/06: Analogia de Curry Howard: motivação; normalização das provas.

10/06: Sistemas de Anotação de Provas para Dedução Natural. Lambda-Calculus com tipos.

12/06: Esclarecimento de dúvidas. Correcção do primeiro teste.


TP1

Aulas Teórico-Práticas (3ª 10:00-11:00)

26/02: Não houve aula.

04/03: Não houve aula.

11/03: Exercícios sobre validade e consequência semântica.

01/04: Exercícios sobre relações de dedução. Construção de árvores em Dedução Natural.

08/04: Exercícios sobre construção de derivações no Cálculo de Sequentes.

15/04: Exercícios sobre Formas Clausais e Resolução Proposicional.

22/04: TESTE INTERMÉDIO.

29/04: Exercícios spbre método Davis Putnam .

06/05: Exercícios sobre validade em lógica de primeira ordem.

13/05: Tolerância de Ponto: Enterro da Gata.

20/05: Exercícios sobre formas normais (prenex, skolen e herbrand)

27/05: Exercícios sobre cálculo de sequentes para lógica de predicados.

03/06: Exercícios sobre resolução.


Aulas Práticas (3ª 11:00-13:00)

26/02: Não houve aula.

04/03: Não houve aula.

11/03: Apresentação da linguagem Prolog.

01/04: Operações aritméticas e manipulação de listas.

08/04: Árvores de Inferência.

15/04: Exercícios de Manipulação de Listas e Tipos Algébricos.

22/04: TESTE INTERMÉDIO.

29/04: Utilização de Cut e Negação por falha.

06/05: Estratégia Gerar e Testar.

13/05: Tolerância de Ponto: Enterro da Gata.

20/05: Predicados de ordem superior.

27/05: Manipulação de Fórmulas Lógicas em Prolog.

03/06: Implementação do algoritmo de Davis-Putnam.


TP2

Aulas Teórico-Práticas (4ª 10:00-11:00)

27/02: Não houve aula.

05/03: Não houve aula.

12/03: Exercícios sobre validade e Consequência semântica.

26/03: Exercícios sobre relações de dedução. Construção de árvores em Dedução Natural.

02/04: Exercícios sobre construção de derivações no Cálculo de Sequentes.

09/04: Exercícios sobre o método de Tableaux e cálculo de formas normais.

16/04: Exercícios sobre resolução proposicional.

23/04: TESTES INTERMÉDIOS.

30/04: Exercícios sobre método Davis Putnam.

07/05: Exercícios sobre validade em lógica de primeira ordem.

14/05: Tolerância de Ponto: Enterro da Gata.

21/05: Exercícios sobre formas normais (prenex, skolen e herbrand).

28/05: Exercícios sobre cálculo de sequentes para lógica de predicados.

04/06: Exercícios sobre resolução.

11/06: Esclarecimento de Dúvidas.


Aulas Práticas (4ª 11:00-13:00)

27/02: Não houve aula.

05/03: Não houve aula.

12/03: Apresentação da linguagem PROLOG.

26/03: Operações aritméticas e manipulação de listas.

02/04: Árvores de Inferência.

09/04: Exercícios de Manipulação de Listas e Tipos Algébricos.

16/04: Utilização de Cut e Negação por falha.

23/04: TESTES INTERMÉDIOS.

30/04: Continuação da aula anterior.

07/05: Estratégia Gerar e Testar.

14/05: Tolerância de Ponto: Enterro da Gata.

21/05: Predicados de ordem superior.

28/05: Manipulação de Fórmulas Lógicas em Prolog.

04/06: Implementação do algoritmo de Davis-Putnam.

11/06: Esclarecimento de dúvidas.

Sumarios0809 01 Feb 2009 - 18:23 - NEW JoseBacelarAlmeida

Sumários


Aulas Teóricas (3ª 14:00-15:00; 5ª 16:00-17:00)


TP1

Aulas Teórico-Práticas (2ª 16:00-17:00)


Aulas Práticas (2ª 17:00-19:00)


TP2

Aulas Teórico-Práticas (3ª 10:00-11:00)


Aulas Práticas (3ª 11:00-13:00)

Topicos0405 26 Feb 2007 - 00:54 - NEW JoseBacelarAlmeida
Topicos0506 19 Feb 2007 - 01:17 - NEW JoseBacelarAlmeida
Topicos0607 19 Feb 2007 - 01:16 - NEW JoseBacelarAlmeida
Topicos0708 20 Feb 2008 - 15:23 - NEW JoseBacelarAlmeida
Topicos0809 12 Feb 2009 - 17:21 - r2 JoseBacelarAlmeida
WebAtom 24 Jan 2006 - 06:07 - r2 TWikiContributor
TWiki's Education/LC web The Education/LC web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise. http://wiki.di.uminho.pt/twiki/bin/view/Education/LC Copyright 2020 by contributing authors 2020-10-30T14:39:17Z WebStatistics http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebStatistics 2020-10-30T14:39:17Z Statistics for Education/LC Web Month: Topic views: Topic saves: File uploads: Most popular topic views: Top contributors for topic save ... (last changed by TWikiGuest) TWikiGuest WebHome http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebHome 2010-02-18T13:06:08Z Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva ... (last changed by OlgaPacheco) OlgaPacheco MaterialApoio http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/MaterialApoio 2010-02-18T13:00:50Z Slides Lógica Proposicional I Cálculo de Sequentes (versão: 11/06/2008) Lógica Proposicional II Método Tableaux , Formas Clausais, Resolução (versão: 11 ... (last changed by OlgaPacheco) OlgaPacheco Avisos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Avisos0809 2009-07-22T17:28:03Z 22/07/2009: Disponíveis notas da época de recurso. 07/05/2009: Disponível enunciado do projecto prático. 06/03/2009: Já disponível o guião da primeira aula pr ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida 0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/0809 2009-07-22T17:27:12Z Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2008/2009 Equipa Docente José Carlos Bacelar ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida ProgDetalhado0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/ProgDetalhado0809 2009-06-18T22:10:46Z Programa detalhado do ano lectivo 2008/2009 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Programa0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Programa0809 2009-06-18T22:10:01Z Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Praticas0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Praticas0809 2009-05-29T23:07:19Z Aulas Práticas #Aula10P Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog Predicados de segunda ordem Existem meta ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Projectos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Projectos0809 2009-05-08T02:24:38Z Projecto O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere se que os interessados realizem os exemplos ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Topicos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Topicos0809 2009-02-12T17:21:40Z Calendário (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Calendario http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Calendario 2009-02-12T17:16:45Z (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Sumarios0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Sumarios0708 2009-02-01T18:25:15Z Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) 26/02: Não houve aula. 28/02: Não houve aula. 04/03: Aula de substituição em 27/03 , às 15:00. 06 ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida Sumarios0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Sumarios0809 2009-02-01T18:23:00Z Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) TP1 Aulas Teórico Práticas (2ª 16:00 17:00) Aulas Práticas (2ª 17:00 19:00) TP2 Aulas Teórico Pr ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida 0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/0708 2009-02-01T18:16:25Z Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2007/2008 Equipa Docente José Carlos Bacelar ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida WebPreferences http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebPreferences 2009-02-01T18:15:29Z Education/LC Web Preferences The following settings are web preferences of the Education/LC web. These preferences overwrite the site level preferences in ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida MFES0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/MFES0809 2008-12-05T23:17:24Z Análise, Modelação e Teste de Software MFES Mestrado de Informática 13/11/2008 "Design by Contract and Java Modeling Language": apresentação do conceito e clausulas ... (last changed by JoseBacelarAlmeida) JoseBacelarAlmeida
WebChanges 15 Nov 2006 - 19:43 - r3 TWikiContributor

50 Recent Changes in TWiki Web retrieved at 17:01 (GMT)

WebStatistics 30 Oct 2020 - 14:39 - r2239 TWikiGuest
Statistics for Education/LC Web Month: Topic views: Topic saves: File uploads: Most popular topic views: Top contributors for topic save ...
WebHome 18 Feb 2010 - 13:06 - r14 OlgaPacheco
Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva ...
MaterialApoio 18 Feb 2010 - 13:00 - r15 OlgaPacheco
Slides Lógica Proposicional I Cálculo de Sequentes (versão: 11/06/2008) Lógica Proposicional II Método Tableaux , Formas Clausais, Resolução (versão: 11 ...
Avisos0809 22 Jul 2009 - 17:28 - r4 JoseBacelarAlmeida
22/07/2009: Disponíveis notas da época de recurso. 07/05/2009: Disponível enunciado do projecto prático. 06/03/2009: Já disponível o guião da primeira aula pr ...
0809 22 Jul 2009 - 17:27 - r9 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2008/2009 Equipa Docente José Carlos Bacelar ...
ProgDetalhado0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida
Programa detalhado do ano lectivo 2008/2009 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
Programa0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
Praticas0809 29 May 2009 - 23:07 - r13 JoseBacelarAlmeida
Aulas Práticas #Aula10P Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog Predicados de segunda ordem Existem meta ...
Projectos0809 08 May 2009 - 02:24 - r2 JoseBacelarAlmeida
Projecto O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere se que os interessados realizem os exemplos ...
Topicos0809 12 Feb 2009 - 17:21 - r2 JoseBacelarAlmeida
Calendário
Calendario 12 Feb 2009 - 17:16 - NEW JoseBacelarAlmeida
Sumarios0708 01 Feb 2009 - 18:25 - r15 JoseBacelarAlmeida
Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) 26/02: Não houve aula. 28/02: Não houve aula. 04/03: Aula de substituição em 27/03 , às 15:00. 06 ...
Sumarios0809 01 Feb 2009 - 18:23 - NEW JoseBacelarAlmeida
Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) TP1 Aulas Teórico Práticas (2ª 16:00 17:00) Aulas Práticas (2ª 17:00 19:00) TP2 Aulas Teórico Pr ...
0708 01 Feb 2009 - 18:16 - r13 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2007/2008 Equipa Docente José Carlos Bacelar ...
WebPreferences 01 Feb 2009 - 18:15 - r20 JoseBacelarAlmeida
Education/LC Web Preferences The following settings are web preferences of the Education/LC web. These preferences overwrite the site level preferences in ...
MFES0809 05 Dec 2008 - 23:17 - r3 JoseBacelarAlmeida
Análise, Modelação e Teste de Software MFES Mestrado de Informática 13/11/2008 "Design by Contract and Java Modeling Language": apresentação do conceito e clausulas ...
Avisos0708 27 Sep 2008 - 11:17 - r14 JoseBacelarAlmeida
24/09: Já estão disponíveis as notas da época de especial. 28/07: Já estão disponíveis as notas da época de recurso. 02/07: Já estão disponíveis as notas do 2 ...
ProgDetalhado0708 11 Jun 2008 - 22:07 - NEW JoseBacelarAlmeida
Programa detalhado do ano lectivo 2007/2008 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
Praticas0708 02 Jun 2008 - 22:41 - r17 JoseBacelarAlmeida
Aulas Práticas #Aula9P Aula 9: Implementação do algoritmo Davis Putnam em Prolog. Pretende se definir um programa que permita verificar se uma dada fórmula é uma ...
Projectos0708 08 May 2008 - 22:56 - r3 JoseBacelarAlmeida
Propostas de Projectos Práticos 2007/2008 Esta página apresenta algumas ideias para projectos práticos da disciplina de Lógica Computacional. Os alunos interessados ...
0607 20 Feb 2008 - 15:33 - r16 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2006/2007 Equipa Docente José Carlos Bacelar ...
Topicos0708 20 Feb 2008 - 15:23 - NEW JoseBacelarAlmeida
Sumários
Programa0708 20 Feb 2008 - 15:22 - NEW JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
ELP2-0405 20 Sep 2007 - 14:17 - r21 JoseBacelarAlmeida
Elementos Lógicos da Programação II (702752) Licenciatura de Matemática e Ciências da Computação 2º Ano 2º Semestre Ano lectivo 2004/2005 Programa Programa ...
Notas0607 20 Sep 2007 - 14:00 - r9 JoseBacelarAlmeida
Época de Especial Num Nome Exame 47414 André da Silva Rocha 3.85 35804 Ângelo David Soares Perez Dias 5 43514 César Carlos Martins ...
Avisos0607 31 Jul 2007 - 23:03 - r8 JoseBacelarAlmeida
31/07 Já estão disponíveis as notas referentes à Época de Recurso. (aqui) 17/07 Já estão disponíveis as notas referentes à Época Normal. (aqui) 20/06 Foram disponibilizados ...
Programa0607 04 Jul 2007 - 18:17 - r3 JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
ProgDetalhado0607 04 Jul 2007 - 18:16 - NEW JoseBacelarAlmeida
Programa detalhado do ano lectivo 2006/2007 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
Programa0506 03 Jul 2007 - 22:09 - r3 JoseBacelarAlmeida
Programa Resumido (2005/2006) Componente Teórica Lógica Proposicional Sintaxe Linguagens de Cláusulas Validade e Verificação ...
WebSideBar 03 Jul 2007 - 21:54 - r7 JoseBacelarAlmeida
Tópicos Apresentação Programa Funcionamento Material " else ""}%}% Avisos " else ""}%}%
0506 03 Jul 2007 - 16:06 - r47 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2005/2006 Programa Componente Teórica Lógica ...
Sumarios0607 11 Jun 2007 - 19:45 - r16 JoseBacelarAlmeida
Sumários Docente: José Carlos Bacelar Aulas Teóricas 08/06: Esclarecimento de dúvidas. 05/06: Referência às propriedades básicas do Lambda calculus com tipos ...
Praticas0607 29 May 2007 - 10:39 - r9 JoseBacelarAlmeida
Aulas Práticas #Aula8P Aula 8: Predicados de Segunda Ordem Existem meta predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver ...
WebCss 21 May 2007 - 23:44 - r4 JoseBacelarAlmeida
.natRevision { width:0px; height:0px; overflow:hidden; } .natBreadCrumbs { width:0px; height:0px; overflow:hidden; } .avisos { color: #444; font size ...
WebTopicActions 21 May 2007 - 23:43 - r2 JoseBacelarAlmeida
0405 26 Feb 2007 - 01:13 - NEW JoseBacelarAlmeida
Retornar à página inicial
ELP1-0405 26 Feb 2007 - 00:55 - r25 JoseBacelarAlmeida
Notícias Elementos Lógicos da Programação I em Matemática e Ciências da Computação 2º Ano 1º Semestre Ano lectivo 2004/2005 Programa 1. Dedu ...
Topicos0405 26 Feb 2007 - 00:54 - NEW JoseBacelarAlmeida
Avisos0405 26 Feb 2007 - 00:53 - NEW JoseBacelarAlmeida
ELP1News0405 26 Feb 2007 - 00:38 - r7 JoseBacelarAlmeida
Já estão disponíveis os resultados dos exames de recurso, e Notas Finais . MariaJoaoFrade 03 Mar 2005 AVISO Sessão de Dúvidas Na próxima 3ª feira ...
Topicos0506 19 Feb 2007 - 01:17 - NEW JoseBacelarAlmeida
Topicos0607 19 Feb 2007 - 01:16 - NEW JoseBacelarAlmeida
Sumários
Avisos0506 18 Feb 2007 - 23:26 - r8 JoseBacelarAlmeida
A resolução da ficha de avaliação prática 3 (enunciado da ficha está na página) é para ser entregue na aula prática de 2 de Junho . MariaJoaoFrade 25 May 2006 ...
WebTopBar 13 Feb 2007 - 14:43 - NEW AlcinoCunha
WebLeftBar 13 Feb 2007 - 10:35 - r5 AlcinoCunha
Apresentação Sumários Projectos Material
WebTopicList 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebIndex 15 Nov 2006 - 19:43 - r4 TWikiContributor
WebSearch 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebSearchAdvanced 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebTopicCreator 15 Nov 2006 - 19:43 - r2 TWikiContributor
Found 50 topics.

See also: rss-small RSS feed, recent changes with 50, 100, 200, 500, 1000 topics, all changes

WebCss 21 May 2007 - 23:44 - r4 JoseBacelarAlmeida
.natRevision { width:0px; height:0px; overflow:hidden; }

.natBreadCrumbs { width:0px; height:0px; overflow:hidden; }

.avisos { color: #444; font-size:12px; }

.natMainFooterContents, .natMainHeaderContents { padding:0px; margin:0px 0px; }

WebHome 18 Feb 2010 - 13:06 - r14 OlgaPacheco
Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva sobre a qual é analisada:
  • Uma primeira perspectiva consiste em eleger o processo de verificar a validade de fórmulas lógicas como problema computacional - por outras palavras, procuram-se construir programas que estabeleçam a validade de fórmulas lógicas. Tal como iremos ter oportunidade de estudar neste curso, este problema é difícil, mesmo para lógicas muito simples (e.g. lógica proposicional).
  • Uma segunda perspectiva consiste em adoptar a noção de dedução lógica como motor de cálculo de uma linguagem de programação. Uma destas linguagens é o Prolog, que será estudada neste curso.
  • Por último, iremos também abordar o que é habitualmente designado por Analogia de Curry-Howard: esta analogia permite-nos estabelecer um paralelo entre sistemas lógicos e linguagens de programação funcionais, constituindo assim uma fundamentação lógica para essas linguagens.

WebIndex 15 Nov 2006 - 19:43 - r4 TWikiContributor
Education/LC Web Changed Changed by
0405 26 Feb 2007 - 01:13 - NEW JoseBacelarAlmeida
Retornar à página inicial
0506 03 Jul 2007 - 16:06 - r47 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2005/2006 Programa Componente Teórica Lógica ...
0607 20 Feb 2008 - 15:33 - r16 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2006/2007 Equipa Docente José Carlos Bacelar ...
0708 01 Feb 2009 - 18:16 - r13 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2007/2008 Equipa Docente José Carlos Bacelar ...
0809 22 Jul 2009 - 17:27 - r9 JoseBacelarAlmeida
Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2008/2009 Equipa Docente José Carlos Bacelar ...
Avisos0405 26 Feb 2007 - 00:53 - NEW JoseBacelarAlmeida
Avisos0506 18 Feb 2007 - 23:26 - r8 JoseBacelarAlmeida
A resolução da ficha de avaliação prática 3 (enunciado da ficha está na página) é para ser entregue na aula prática de 2 de Junho . MariaJoaoFrade 25 May 2006 ...
Avisos0607 31 Jul 2007 - 23:03 - r8 JoseBacelarAlmeida
31/07 Já estão disponíveis as notas referentes à Época de Recurso. (aqui) 17/07 Já estão disponíveis as notas referentes à Época Normal. (aqui) 20/06 Foram disponibilizados ...
Avisos0708 27 Sep 2008 - 11:17 - r14 JoseBacelarAlmeida
24/09: Já estão disponíveis as notas da época de especial. 28/07: Já estão disponíveis as notas da época de recurso. 02/07: Já estão disponíveis as notas do 2 ...
Avisos0809 22 Jul 2009 - 17:28 - r4 JoseBacelarAlmeida
22/07/2009: Disponíveis notas da época de recurso. 07/05/2009: Disponível enunciado do projecto prático. 06/03/2009: Já disponível o guião da primeira aula pr ...
Calendario 12 Feb 2009 - 17:16 - NEW JoseBacelarAlmeida
ELP1-0405 26 Feb 2007 - 00:55 - r25 JoseBacelarAlmeida
Notícias Elementos Lógicos da Programação I em Matemática e Ciências da Computação 2º Ano 1º Semestre Ano lectivo 2004/2005 Programa 1. Dedu ...
ELP1News0405 26 Feb 2007 - 00:38 - r7 JoseBacelarAlmeida
Já estão disponíveis os resultados dos exames de recurso, e Notas Finais . MariaJoaoFrade 03 Mar 2005 AVISO Sessão de Dúvidas Na próxima 3ª feira ...
ELP2-0405 20 Sep 2007 - 14:17 - r21 JoseBacelarAlmeida
Elementos Lógicos da Programação II (702752) Licenciatura de Matemática e Ciências da Computação 2º Ano 2º Semestre Ano lectivo 2004/2005 Programa Programa ...
MFES0809 05 Dec 2008 - 23:17 - r3 JoseBacelarAlmeida
Análise, Modelação e Teste de Software MFES Mestrado de Informática 13/11/2008 "Design by Contract and Java Modeling Language": apresentação do conceito e clausulas ...
MaterialApoio 18 Feb 2010 - 13:00 - r15 OlgaPacheco
Slides Lógica Proposicional I Cálculo de Sequentes (versão: 11/06/2008) Lógica Proposicional II Método Tableaux , Formas Clausais, Resolução (versão: 11 ...
Notas0607 20 Sep 2007 - 14:00 - r9 JoseBacelarAlmeida
Época de Especial Num Nome Exame 47414 André da Silva Rocha 3.85 35804 Ângelo David Soares Perez Dias 5 43514 César Carlos Martins ...
Praticas0607 29 May 2007 - 10:39 - r9 JoseBacelarAlmeida
Aulas Práticas #Aula8P Aula 8: Predicados de Segunda Ordem Existem meta predicados que permitem coleccionar todas as soluções para um dado objectivo de prova (ver ...
Praticas0708 02 Jun 2008 - 22:41 - r17 JoseBacelarAlmeida
Aulas Práticas #Aula9P Aula 9: Implementação do algoritmo Davis Putnam em Prolog. Pretende se definir um programa que permita verificar se uma dada fórmula é uma ...
Praticas0809 29 May 2009 - 23:07 - r13 JoseBacelarAlmeida
Aulas Práticas #Aula10P Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog Predicados de segunda ordem Existem meta ...
ProgDetalhado0607 04 Jul 2007 - 18:16 - NEW JoseBacelarAlmeida
Programa detalhado do ano lectivo 2006/2007 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
ProgDetalhado0708 11 Jun 2008 - 22:07 - NEW JoseBacelarAlmeida
Programa detalhado do ano lectivo 2007/2008 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
ProgDetalhado0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida
Programa detalhado do ano lectivo 2008/2009 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ...
Programa0506 03 Jul 2007 - 22:09 - r3 JoseBacelarAlmeida
Programa Resumido (2005/2006) Componente Teórica Lógica Proposicional Sintaxe Linguagens de Cláusulas Validade e Verificação ...
Programa0607 04 Jul 2007 - 18:17 - r3 JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
Programa0708 20 Feb 2008 - 15:22 - NEW JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
Programa0809 18 Jun 2009 - 22:10 - r2 JoseBacelarAlmeida
Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ...
Projectos0708 08 May 2008 - 22:56 - r3 JoseBacelarAlmeida
Propostas de Projectos Práticos 2007/2008 Esta página apresenta algumas ideias para projectos práticos da disciplina de Lógica Computacional. Os alunos interessados ...
Projectos0809 08 May 2009 - 02:24 - r2 JoseBacelarAlmeida
Projecto O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere se que os interessados realizem os exemplos ...
Sumarios0607 11 Jun 2007 - 19:45 - r16 JoseBacelarAlmeida
Sumários Docente: José Carlos Bacelar Aulas Teóricas 08/06: Esclarecimento de dúvidas. 05/06: Referência às propriedades básicas do Lambda calculus com tipos ...
Sumarios0708 01 Feb 2009 - 18:25 - r15 JoseBacelarAlmeida
Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) 26/02: Não houve aula. 28/02: Não houve aula. 04/03: Aula de substituição em 27/03 , às 15:00. 06 ...
Sumarios0809 01 Feb 2009 - 18:23 - NEW JoseBacelarAlmeida
Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) TP1 Aulas Teórico Práticas (2ª 16:00 17:00) Aulas Práticas (2ª 17:00 19:00) TP2 Aulas Teórico Pr ...
Topicos0405 26 Feb 2007 - 00:54 - NEW JoseBacelarAlmeida
Topicos0506 19 Feb 2007 - 01:17 - NEW JoseBacelarAlmeida
Topicos0607 19 Feb 2007 - 01:16 - NEW JoseBacelarAlmeida
Sumários
Topicos0708 20 Feb 2008 - 15:23 - NEW JoseBacelarAlmeida
Sumários
Topicos0809 12 Feb 2009 - 17:21 - r2 JoseBacelarAlmeida
Calendário
WebAtom 24 Jan 2006 - 06:07 - r2 TWikiContributor
TWiki's Education/LC web
WebChanges 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebCss 21 May 2007 - 23:44 - r4 JoseBacelarAlmeida
.natRevision { width:0px; height:0px; overflow:hidden; } .natBreadCrumbs { width:0px; height:0px; overflow:hidden; } .avisos { color: #444; font size ...
WebHome 18 Feb 2010 - 13:06 - r14 OlgaPacheco
Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva ...
WebIndex 15 Nov 2006 - 19:43 - r4 TWikiContributor
WebLeftBar 13 Feb 2007 - 10:35 - r5 AlcinoCunha
Apresentação Sumários Projectos Material
WebNotify 28 Mar 2005 - 09:40 - r5 TWikiContributor
TWikiGuest example #64;your.company .WebChangesAlert, ., .TWikiRegistration
WebPreferences 01 Feb 2009 - 18:15 - r20 JoseBacelarAlmeida
Education/LC Web Preferences The following settings are web preferences of the Education/LC web. These preferences overwrite the site level preferences in ...
WebRss 28 Mar 2005 - 09:40 - r4 TWikiContributor
" else "TWiki's Education/LC web"}% /Education/LC
WebSearch 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebSearchAdvanced 15 Nov 2006 - 19:43 - r3 TWikiContributor
WebSideBar 03 Jul 2007 - 21:54 - r7 JoseBacelarAlmeida
Tópicos Apresentação Programa Funcionamento Material " else ""}%}% Avisos " else ""}%}%
WebStatistics 30 Oct 2020 - 14:39 - r2239 TWikiGuest
Statistics for Education/LC Web Month: Topic views: Topic saves: File uploads: Most popular topic views: Top contributors for topic save ...
WebTopBar 13 Feb 2007 - 14:43 - NEW AlcinoCunha
WebTopicActions 21 May 2007 - 23:43 - r2 JoseBacelarAlmeida
WebTopicCreator 15 Nov 2006 - 19:43 - r2 TWikiContributor
WebTopicList 15 Nov 2006 - 19:43 - r3 TWikiContributor
Found 54 topics.

See also the faster WebTopicList

WebLeftBar 13 Feb 2007 - 10:35 - r5 AlcinoCunha
Apresentação
Sumários
Projectos
Material
WebNotify 28 Mar 2005 - 09:40 - r5 TWikiContributor
This is a subscription service to be automatically notified by e-mail when topics change in this Education/LC web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:

Web Changes Notification Service

Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.

Users subscribe to email notifications using their WikiName or an alternative email address, and can specify the webs/topics they wish to track using one of these bullet list formats:

three spaces * [ webname . ] wikiName - SMTP mail address
three spaces * [ webName . ] wikiName
three spaces * SMTP mail address
three spaces * SMTP mail address : topics
three spaces * [ webname . ] wikiName : topics

In the above examples, topics is a space-separated list of topic names. The user may further customize the specific content they will receive using the following formats:

  • Specify topics without a Web. prefix
  • Topics must exist in this web.
  • Topics may be specified using * wildcards
  • Each topic may optionally be preceded by a '+' or '-' sign. The '+' sign means "subscribe to this topic" (the same as not putting anything). The '-' sign means "unsubscribe" or "don't send notifications regarding this topic". This allows users to elect to filter out certain topics (and their children, to an arbitrary depth). Topic filters ('-') take precedence over topic includes ('+').
  • Each topic may optionally be followed by an integer in parentheses, indicating the depth of the tree of children below that topic. Changes in all these children will be detected and reported along with changes to the topic itself. Note This uses the TWiki "Topic parent" feature.
  • Each topic may optionally be immediately followed by an exclamation mark ! or a question mark ? with no intervening spaces, indicating that the topic (and children if there is a tree depth specifier as well) should be mailed out as complete topics instead of change summaries. ! causes the topic to be mailed every time even if there have been no changes, ? will mail the topic only if there have been changes to it. This only makes sense for subscriptions.

For example: Subscribe Daisy to all changes to topics in this web.

   * daisy.cutter@flowers.com
Subscribe Daisy to all changes in all webs that start with Web.
   * daisy.cutter@flowers.com: Web*
Subscribe Daisy to changes to topics starting with Petal, and their immediate children, WeedKillers and children to a depth of 3, and all topics that match start with Pretty and end with Flowers e.g. PrettyPinkFlowers
   * TWiki.DaisyCutter: Petal* (1) TWiki.WeedKillers (3) Pretty*Flowers
Subscribe StarTrekFan to changes to all topics that start with Star except those that end in Wars, sInTheirEyes or shipTroopers.
   * TWiki.StarTrekFan: Star* - *Wars - *sInTheirEyes - *shipTroopers
Subscribe Daisy to the full content of NewsLetter whenever it has changed
   * daisy@flowers.com: TWiki.NewsLetter?
Subscribe buttercup to NewsLetter and its immediate children, even if it hasn't changed.
   * buttercup@flowers.com: TWiki.NewsLetter! (1)
Subscribe GardenGroup (which includes Petunia) to all changed topics under AllnewsLetters to a depth of 3. Then unsubscribe Petunia from the ManureNewsLetter, which she would normally get as a member of GardenGroup? :
   * TWiki.GardenGroup: TWiki.AllNewsLetters? (3)
   * petunia@flowers.com: - TWiki.ManureNewsLetter
A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified about changes that topic once (though they will still receive individual mails for news topics).

If a TWiki group is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.

TIP Tip: List names in alphabetical order to make it easier to find the names.

Note for System Administrators: Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the MailerContrib topic for details of how to set up this service.

Note: If you prefer a news feed, point your reader to WebRss (for RSS 1.0 feeds) or WebAtom (for ATOM 1.0 feeds). Learn more at WebRssBase and WebAtomBase, respectively.

Related topics: WebChangesAlert, TWikiUsers, TWikiRegistration

WebPreferences 01 Feb 2009 - 18:15 - r20 JoseBacelarAlmeida

Education/LC Web Preferences

The following settings are web preferences of the Education.LC web. These preferences overwrite the site-level preferences in TWiki.TWikiPreferences and Main.TWikiPreferences, and can be overwritten by user preferences (your personal topic, eg: TWikiGuest in the Main web).

Web Parameters

  • Set ANO_DEF = 0809

Web Preferences Settings

These settings override the defaults for this web only. See full list of defaults with explanation. Many of the settings below are commented out. Remove the # sign to enable a local customisation.

Natural Skin configuration

  • Set SKIN=nat

  • Set SKINSTYLE = Plain
  • Set STYLEBORDER = thin
  • Set STYLEBUTTONS = off
  • Set STYLESIDEBAR = left
  • Set STYLEVARIATION = none
  • Set STYLESEARCHBOX = off

  • Set PAGETITLE=Lógica Computacional

  • Set NATWEBLOGO = Lógica Computacional

  • Set WEBCOPYRIGHT = This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. Ideas, requests, problems? Send feedback.

  • List of topics of the Education/LC web:

 #D0D0D0 
  • Web-specific background color: (Pick a lighter one of the StandardColors).
    • Set WEBBGCOLOR = #D0D0D0
    • Note: This setting is automatically configured when you create a web

  • Image, URL and alternate tooltip text of web's logo.
    Note: Don't add your own local logos to the TWikiLogos topic; create your own logos topic instead.

  • List this web in the SiteMap. If you want the web listed, then set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Use links that include the name of the web, i.e. Education/LC.Topic links.
    Note: Unlike other variables, the setting of SITEMAPLIST is not inherited from parent webs. It has to be set in every web that is to be listed in the SiteMap
    • Set SITEMAPLIST = on
    • Set SITEMAPWHAT =
    • Set SITEMAPUSETO = Licenciatura em Ciências da Computação - 2º ano
    • Note: Above settings are automatically configured when you create a web

  • Exclude web from a web="all" search: (Set to on for hidden webs).
    • #Set NOSEARCHALL = on
    • Note: This setting is automatically configured when you create a web

  • Prevent automatic linking of WikiWords and acronyms (if set to on); link WikiWords (if empty); can be overwritten by web preferences:
    • #Set NOAUTOLINK =
    • Note: You can still use the [[...][...]] syntax to link topics if you disabled WikiWord linking. The <noautolink> ... </noautolink> syntax can be used to prevents links within a block of text.

  • Default template for new topics for this web:
    • WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
    • TWiki.WebTopicEditTemplate: Site-level default topic template

  • Comma separated list of forms that can be attached to topics in this web. See TWikiForms for more information.
    • Set WEBFORMS =

  • Users or groups who are not / are allowed to view / change / rename topics in the Education/LC web: (See TWikiAccessControl). Remove the # to enable any of these settings. Remember that an empty setting is a valid setting; setting DENYWEBVIEW to nothing means that anyone can view the web.
    • #Set DENYWEBVIEW =
    • #Set ALLOWWEBVIEW =
    • #Set DENYWEBCHANGE =
    • #Set ALLOWWEBCHANGE = TWikiAdminGroup
    • #Set DENYWEBRENAME =
    • #Set ALLOWWEBRENAME = TWikiAdminGroup

  • Web preferences that are not allowed to be overridden by user or topic preferences:
    • Set FINALPREFERENCES = NOSEARCHALL, ATTACHFILESIZELIMIT, WIKIWEBMASTER, WEBCOPYRIGHT, WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME

Help on Preferences

  • A preference setting is defined by:
    3 or 6 spaces * Set NAME = value
    Example:
    • Set WEBBGCOLOR = #FFFFC0
  • A preferences setting can be disabled with a # sign. Remove the # sign to enable a local customisation. Example:
  • Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
    • When you write variable %WEBBGCOLOR% , it gets expanded to #D0D0D0
  • The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
  • You can introduce your own preferences variables and use them in your topics and templates.

Related Topics

Tools

WebRss 28 Mar 2005 - 09:40 - r4 TWikiContributor
TWiki search results for \.* http://wiki.di.uminho.pt/twiki/bin/view/Education/LC The Education/LC web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise. en-us Copyright 2020 by contributing authors TWiki Administrator [webmaster@di.uminho.pt] The contributing authors of TWiki TWiki DIUM.Education/LC http://wiki.di.uminho.pt/twiki/bin/view/Education/LC /twiki/pub/Main/LocalLogos/um_eengP.jpg WebHome http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebHome Esta disciplina tem por objectivo aprofundar a relação existente entre lógica formal e a computação. Esta relação pode assumir diferentes formas, dependendo da perspectiva ... (last changed by OlgaPacheco) 2010-02-18T13:06:08Z OlgaPacheco MaterialApoio http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/MaterialApoio Slides Lógica Proposicional I Cálculo de Sequentes (versão: 11/06/2008) Lógica Proposicional II Método Tableaux , Formas Clausais, Resolução (versão: 11 ... (last changed by OlgaPacheco) 2010-02-18T13:00:50Z OlgaPacheco Avisos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Avisos0809 22/07/2009: Disponíveis notas da época de recurso. 07/05/2009: Disponível enunciado do projecto prático. 06/03/2009: Já disponível o guião da primeira aula pr ... (last changed by JoseBacelarAlmeida) 2009-07-22T17:28:03Z JoseBacelarAlmeida 0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/0809 Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2008/2009 Equipa Docente José Carlos Bacelar ... (last changed by JoseBacelarAlmeida) 2009-07-22T17:27:12Z JoseBacelarAlmeida ProgDetalhado0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/ProgDetalhado0809 Programa detalhado do ano lectivo 2008/2009 Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Dedução Natural ... (last changed by JoseBacelarAlmeida) 2009-06-18T22:10:46Z JoseBacelarAlmeida Programa0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Programa0809 Programa Resumido Componente Teórica Lógica Proposicional Sintaxe e Semântica Sistemas Dedutivos Métodos de Verificação Aspectos ... (last changed by JoseBacelarAlmeida) 2009-06-18T22:10:01Z JoseBacelarAlmeida Praticas0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Praticas0809 Aulas Práticas #Aula10P Aula 10: Predicados de Segunda Ordem e outros predicados primitivos disponibilizados pelo Prolog Predicados de segunda ordem Existem meta ... (last changed by JoseBacelarAlmeida) 2009-05-29T23:07:19Z JoseBacelarAlmeida Projectos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Projectos0809 Projecto O objectivo deste projecto é o de explorar o demonstrador de teoremas COQ para realizar provas simples. Sugere se que os interessados realizem os exemplos ... (last changed by JoseBacelarAlmeida) 2009-05-08T02:24:38Z JoseBacelarAlmeida Topicos0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Topicos0809 Calendário (last changed by JoseBacelarAlmeida) 2009-02-12T17:21:40Z JoseBacelarAlmeida Calendario http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Calendario (last changed by JoseBacelarAlmeida) 2009-02-12T17:16:45Z JoseBacelarAlmeida Sumarios0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Sumarios0708 Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) 26/02: Não houve aula. 28/02: Não houve aula. 04/03: Aula de substituição em 27/03 , às 15:00. 06 ... (last changed by JoseBacelarAlmeida) 2009-02-01T18:25:15Z JoseBacelarAlmeida Sumarios0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Sumarios0809 Sumários Aulas Teóricas (3ª 14:00 15:00; 5ª 16:00 17:00) TP1 Aulas Teórico Práticas (2ª 16:00 17:00) Aulas Práticas (2ª 17:00 19:00) TP2 Aulas Teórico Pr ... (last changed by JoseBacelarAlmeida) 2009-02-01T18:23:00Z JoseBacelarAlmeida 0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/0708 Lógica Computacional (8504N2) em Matemática e Ciências de Computação 2º Ano 2º Semestre Ano lectivo 2007/2008 Equipa Docente José Carlos Bacelar ... (last changed by JoseBacelarAlmeida) 2009-02-01T18:16:25Z JoseBacelarAlmeida WebPreferences http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/WebPreferences Education/LC Web Preferences The following settings are web preferences of the Education/LC web. These preferences overwrite the site level preferences in ... (last changed by JoseBacelarAlmeida) 2009-02-01T18:15:29Z JoseBacelarAlmeida MFES0809 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/MFES0809 Análise, Modelação e Teste de Software MFES Mestrado de Informática 13/11/2008 "Design by Contract and Java Modeling Language": apresentação do conceito e clausulas ... (last changed by JoseBacelarAlmeida) 2008-12-05T23:17:24Z JoseBacelarAlmeida Avisos0708 http://wiki.di.uminho.pt/twiki/bin/view/Education/LC/Avisos0708 24/09: Já estão disponíveis as notas da época de especial. 28/07: Já estão disponíveis as notas da época de recurso. 02/07: Já estão disponíveis as notas do 2 ... (last changed by JoseBacelarAlmeida) 2008-09-27T11:17:47Z JoseBacelarAlmeida
WebSearch 15 Nov 2006 - 19:43 - r3 TWikiContributor

Web Search

Search: \.*

Found 0 topics.

  Advanced search | Help
TIP: to search for all topics that contain "SOAP", "WSDL", a literal "web service", but not "shampoo", write: soap wsdl "web service" -shampoo
Search where:       
(otherwise search Education/LC Web only)

Other search options:
WebSearchAdvanced 15 Nov 2006 - 19:43 - r3 TWikiContributor

Warning
Can't INCLUDE TWiki.WebSearchAdvanced repeatedly, topic is already included.
WebSideBar 03 Jul 2007 - 21:54 - r7 JoseBacelarAlmeida

Tópicos

Avisos

22/07/2009: Disponíveis notas da época de recurso.

07/05/2009: Disponível enunciado do projecto prático.

06/03/2009: Já disponível o guião da primeira aula prática (aqui).

WebStatistics 30 Oct 2020 - 14:39 - r2239 TWikiGuest

Statistics for Education/LC Web

Month: Topic
views:
Topic
saves:
File
uploads:
Most popular
topic views:
Top contributors for
topic save and uploads:
Oct 2020 4031 0 0 1768 0607
814 0708
310 WebPreferences
119 0809
 85 WebStatistics
 64 MaterialApoio
 62 ELP2-0405
 59 ELP1-0405
 57 Praticas0708
 51 Praticas0809
 47 Sumarios0708
 
Sep 2020 2578 0 0 1040 0607
482 0708
210 WebPreferences
 55 WebStatistics
 53 Praticas0708
 47 Praticas0809
 45 MaterialApoio
 44 ELP1-0405
 41 ELP2-0405
 40 Sumarios0708
 39 0809
 
Aug 2020 2509 0 0 748 0607
336 0708
187 WebPreferences
169 Praticas0809
 79 Praticas0708
 66 MaterialApoio
 64 WebStatistics
 50 ELP1-0405
 50 Notas0607
 45 0809
 43 0506
 
Jul 2020 2372 0 0 678 0607
328 0708
184 WebPreferences
108 Praticas0809
101 Praticas0708
 94 MaterialApoio
 54 0506
 52 ELP1-0405
 42 Sumarios0708
 40 Avisos0708
 40 WebStatistics
 
Jun 2020 2381 0 0 657 0607
304 0708
178 Praticas0809
148 0809
111 0506
104 WebPreferences
 79 WebHome
 70 MaterialApoio
 69 ELP2-0405
 49 Praticas0708
 45 Avisos0708
 
May 2020 1535 0 0 551 0607
241 0708
130 WebHome
 78 WebPreferences
 66 0506
 47 Praticas0809
 39 MaterialApoio
 34 ELP2-0405
 31 Programa0809
 29 0809
 28 Sumarios0708
 
Apr 2020 1479 0 0 570 0607
251 0708
 89 WebHome
 75 WebPreferences
 70 Praticas0809
 60 0506
 30 Praticas0708
 28 ELP2-0405
 25 0809
 22 MaterialApoio
 21 Sumarios0708
 
Mar 2020 1351 0 0 466 0607
238 0708
126 WebHome
 76 WebPreferences
 66 Praticas0809
 40 0506
 32 Praticas0708
 26 Sumarios0708
 26 MaterialApoio
 22 0809
 18 ELP1-0405
 
Feb 2020 1487 0 0 503 0607
247 0708
106 WebHome
 84 WebPreferences
 76 0809
 51 ELP2-0405
 47 Praticas0809
 38 0506
 29 Avisos0708
 29 Sumarios0708
 28 ELP1-0405
 
Jan 2020 1120 0 0 487 0607
219 0708
 60 WebPreferences
 45 WebHome
 38 Praticas0809
 27 MaterialApoio
 22 ELP1-0405
 17 0506
 15 Sumarios0708
 14 Praticas0708
 11 0809
 
Dec 2019 1298 0 0 497 0607
260 0708
 75 WebPreferences
 74 Praticas0809
 51 WebHome
 40 0506
 31 Praticas0708
 31 MaterialApoio
 22 ELP2-0405
 16 Programa0809
 16 ELP1-0405
 
Nov 2019 1230 0 0 483 0607
212 0708
 67 Praticas0809
 53 WebHome
 53 WebPreferences
 28 0809
 27 0506
 24 Praticas0708
 24 ELP1-0405
 21 Sumarios0708
 20 Programa0809
 
Oct 2019 1321 0 0 633 0607
291 0708
 91 WebPreferences
 58 WebHome
 41 Praticas0809
 22 0809
 20 MaterialApoio
 12 0506
 11 Programa0809
  8 Praticas0708
  8 Avisos0607
 
Sep 2019 2537 0 0 1171 ELP2-0405
410 0607
263 0809
213 0708
150 WebPreferences
 51 Praticas0809
 37 WebHome
 31 Praticas0708
 23 ELP1-0405
 18 Sumarios0708
 14 Programa0809
 
Aug 2019 9439 0 0 5707 ELP2-0405
1084 0607
954 0809
642 0708
501 WebPreferences
 58 WebStatistics
 42 Notas0607
 41 Praticas0809
 41 ELP1-0405
 41 0506
 34 WebHome
 
Jul 2019 1815 0 0 714 0607
339 0708
138 Notas0607
112 WebPreferences
 76 WebStatistics
 75 ELP2-0405
 54 Praticas0809
 47 WebHome
 38 0809
 30 ELP1-0405
 20 0506
 
Jun 2019 1260 0 0 597 0607
273 0708
 75 WebPreferences
 53 WebHome
 46 Praticas0809
 21 0809
 20 WebStatistics
 19 Notas0607
 15 Programa0809
 13 MFES0809
 12 MaterialApoio
 
May 2019 1728 0 0 953 0607
438 0708
118 WebPreferences
 60 Praticas0809
 25 WebHome
 21 ELP2-0405
 10 Praticas0708
  8 Sumarios0607
  8 0506
  7 Programa0809
  7 Sumarios0708
 
Apr 2019 141 0 0  83 0607
 34 0708
 12 WebPreferences
  2 Praticas0809
  2 ELP1-0405
  2 Praticas0607
  1 Sumarios0708
  1 WebHome
  1 Praticas0708
  1 ProgDetalhado0708
  1 Calendario
 
Mar 2019 1684 0 0 919 0607
467 0708
106 WebPreferences
 39 Praticas0809
 36 WebHome
 24 Praticas0708
 20 ELP1-0405
  9 Sumarios0708
  8 0506
  6 0809
  5 MFES0809
 
Feb 2019 2172 0 0 1315 0607
568 0708
153 WebPreferences
 18 WebHome
 13 Praticas0708
 13 Praticas0809
  7 0506
  6 Sumarios0708
  6 MaterialApoio
  5 Projectos0809
  5 Calendario
 
Jan 2019 6122 0 0 3873 0607
1457 0708
433 WebPreferences
 50 WebHome
 38 Praticas0809
 27 Praticas0708
 20 MaterialApoio
 18 Notas0607
 16 0506
 15 Sumarios0708
 13 0809
 
Dec 2018 7019 0 0 4581 0607
1559 0708
496 WebPreferences
 63 Praticas0809
 44 WebHome
 29 Praticas0708
 18 0506
 15 ELP2-0405
 15 Sumarios0708
 12 Programa0809
 12 ELP1-0405
 
Nov 2018 10098 0 0 6660 0607
2282 0708
716 WebPreferences
 88 Praticas0809
 79 WebHome
 37 Praticas0708
 36 0506
 22 Sumarios0708
 20 Notas0607
 18 ELP2-0405
 17 ELP1-0405
 
Oct 2018 10866 0 0 7301 0607
2386 0708
785 WebPreferences
 71 WebHome
 50 Praticas0809
 40 0506
 37 ELP2-0405
 34 Praticas0708
 20 Programa0809
 14 Sumarios0607
 14 Sumarios0708
 
Aug 2018 8417 0 0 6015 0607
1451 0708
654 WebPreferences
 63 WebHome
 38 Praticas0809
 33 0506
 15 ELP1-0405
 14 Praticas0708
  9 Notas0607
  8 Programa0809
  8 MFES0809
 
Jul 2018 5929 0 0 4257 0607
970 0708
479 WebPreferences
 28 WebHome
 21 Praticas0809
 15 Praticas0708
 15 ELP1-0405
 15 0506
 11 Programa0809
  9 MaterialApoio
  8 0809
 
Jun 2018 3398 0 0 2447 0607
603 0708
234 WebPreferences
 27 WebHome
 14 Praticas0809
  7 Praticas0708
  6 Avisos0607
  6 ELP1-0405
  5 MaterialApoio
  4 Projectos0809
  4 0809
 
May 2018 6176 0 0 4321 0607
990 0708
563 WebPreferences
 44 WebHome
 36 ELP1-0405
 34 0506
 21 Praticas0809
 14 Praticas0708
  9 0809
  9 MaterialApoio
  9 ELP1News0405
 
Apr 2018 9984 0 0 6983 0607
1404 0708
1159 WebPreferences
 88 WebHome
 60 Praticas0809
 45 0506
 31 ELP1-0405
 18 Praticas0708
 18 0809
 18 Sumarios0708
 14 Programa0809
 
Mar 2018 14262 0 0 9968 0607
1882 WebPreferences
1450 0708
146 0506
145 WebHome
 75 0809
 63 Praticas0809
 47 ELP1-0405
 44 Programa0809
 36 MaterialApoio
 29 Praticas0708
 
Feb 2018 5485 0 0 3544 0607
724 WebPreferences
317 0708
310 0506
203 ELP1-0405
 45 WebHome
 38 Praticas0708
 29 Praticas0607
 29 Sumarios0708
 25 Programa0809
 17 MFES0809
 
Jan 2018 3149 0 0 1453 0607
341 0506
340 WebPreferences
189 ELP1-0405
 98 Praticas0708
 67 0708
 56 Sumarios0708
 50 WebHome
 43 Notas0607
 41 Programa0809
 41 WebChanges
 
Dec 2017 1310 0 0 201 0607
113 0506
 77 ELP1-0405
 76 Praticas0708
 75 Notas0607
 69 WebHome
 62 ELP2-0405
 62 0809
 55 0708
 55 WebChanges
 51 Praticas0809
 
Nov 2017 187 0 0  34 WebHome
 21 Praticas0809
 15 Programa0809
 15 ELP1-0405
 11 0809
 11 MaterialApoio
  8 Sumarios0708
  5 Projectos0809
  5 Sumarios0607
  5 0708
  4 Praticas0708
 
Oct 2017 397 0 0  67 0809
 49 WebHome
 35 Notas0607
 27 Praticas0809
 14 Programa0809
 14 MaterialApoio
 13 Praticas0708
 12 Sumarios0607
 10 0607
  9 Programa0708
  7 WebIndex
 
Sep 2017 624 0 0 102 WebHome
101 Notas0607
 96 0809
 38 Praticas0809
 20 MaterialApoio
 19 Programa0809
 17 ELP1-0405
 16 0708
 14 WebPreferences
 14 Sumarios0708
 11 Calendario
 
Aug 2017 542 0 0  94 WebHome
 92 0809
 84 Notas0607
 29 Praticas0809
 18 Programa0809
 14 MaterialApoio
 11 ELP1-0405
 10 Praticas0708
 10 WebPreferences
  9 ELP2-0405
  9 Avisos0809
 
Jul 2017 476 0 0 135 Notas0607
 90 0809
 53 WebHome
 18 Praticas0809
 14 0607
 12 MaterialApoio
 11 WebStatistics
  9 WebPreferences
  9 Sumarios0708
  8 Praticas0708
  7 Programa0809
 
Jun 2017 679 0 0 143 0809
 90 Notas0607
 65 WebHome
 54 Praticas0809
 25 MaterialApoio
 16 Sumarios0607
 14 Calendario
 14 Programa0809
 14 ELP2-0405
 14 0607
 13 WebPreferences
 
May 2017 546 0 0 124 0809
 87 Notas0607
 63 WebHome
 35 Praticas0809
 18 MaterialApoio
 14 Calendario
 13 Programa0809
 13 MFES0809
 12 ELP1-0405
 10 Praticas0708
  9 ELP2-0405
 
Apr 2017 263 0 0  51 WebHome
 28 Praticas0809
 17 0809
 14 MaterialApoio
 10 Calendario
  8 MFES0809
  8 0607
  6 Projectos0809
  6 WebSearch
  5 WebPreferences
  5 Programa0809
 
Mar 2017 377 0 0  70 WebHome
 55 Praticas0809
 46 0809
 31 MaterialApoio
 17 Calendario
 16 Programa0809
 12 Praticas0708
 12 WebPreferences
 11 Projectos0809
 10 Sumarios0708
  9 MFES0809
 
Feb 2017 379 0 0  58 WebHome
 40 0809
 22 0708
 20 WebPreferences
 17 WebStatistics
 14 Calendario
 14 Programa0809
 12 MaterialApoio
 11 ELP1-0405
 10 Praticas0809
 10 MFES0809
 
Jan 2017 281 0 0  44 WebHome
 35 Praticas0809
 20 MaterialApoio
 14 ELP1-0405
 13 0506
 10 Praticas0708
 10 Sumarios0708
  9 Calendario
  9 0809
  8 Programa0809
  7 Projectos0809
 
Dec 2016 348 0 0  37 Praticas0809
 35 WebHome
 21 Praticas0708
 13 Sumarios0708
 12 Sumarios0607
 12 ELP1-0405
 12 0607
 10 WebPreferences
 10 ELP2-0405
 10 WebStatistics
 10 Avisos0506
 
Nov 2016 273 0 0  68 WebHome
 32 Praticas0809
 16 Programa0809
 15 MaterialApoio
 14 Praticas0708
 13 ELP1-0405
  9 Projectos0809
  9 0809
  9 0506
  7 Calendario
  7 Sumarios0607
 
Oct 2016 366 0 0  81 Praticas0809
 59 WebHome
 24 Praticas0708
 21 MaterialApoio
 20 WebPreferences
 18 Sumarios0607
 14 ELP1-0405
 12 0809
 11 Sumarios0708
 10 Programa0809
 10 0506
 
Sep 2016 119 0 0  25 WebHome
 11 Praticas0809
  8 Programa0809
  7 MaterialApoio
  6 WebPreferences
  6 ELP1-0405
  6 0809
  5 Praticas0708
  5 Sumarios0708
  5 0607
  4 0506
 
Aug 2016 271 0 0  73 WebHome
 27 Praticas0809
 21 0809
 15 0607
 12 MaterialApoio
 11 Programa0809
  8 Notas0607
  8 0506
  6 Sumarios0708
  5 Avisos0607
  5 WebStatistics
 
Jul 2016 265 0 0  43 WebHome
 39 Praticas0809
 20 Praticas0708
 14 MaterialApoio
 13 Praticas0607
 12 ELP1-0405
 10 Sumarios0607
 10 0809
  9 Sumarios0708
  8 Calendario
  7 Projectos0809
 
Jun 2016 347 0 0  62 WebHome
 62 Praticas0809
 24 Praticas0708
 13 MFES0809
 13 Sumarios0607
 12 Programa0809
 12 WebPreferences
 12 WebStatistics
 12 MaterialApoio
 11 0809
 11 0506
 
May 2016 355 0 0  57 Praticas0809
 47 WebHome
 26 0506
 21 0809
 16 Praticas0708
 16 Programa0809
 15 ELP2-0405
 13 Sumarios0708
 11 Notas0607
 11 MaterialApoio
  8 MFES0809
 
Apr 2016 281 0 0  39 WebHome
 29 Praticas0809
 15 0809
 14 ELP2-0405
 12 WebStatistics
 11 Programa0809
 11 Avisos0809
 10 Sumarios0607
 10 MaterialApoio
  8 Avisos0607
  8 Sumarios0708
 
Mar 2016 271 0 0  76 WebHome
 34 Praticas0809
 27 Programa0809
 14 Praticas0708
 14 0809
  9 MaterialApoio
  8 Sumarios0708
  7 Sumarios0607
  6 Calendario
  5 Projectos0809
  5 Programa0607
 
Feb 2016 408 0 0  97 WebHome
 45 Praticas0809
 32 Praticas0708
 18 MaterialApoio
 17 0809
 16 Programa0809
 15 Avisos0708
 15 WebPreferences
 10 Sumarios0607
 10 WebSideBar
  9 WebNotify
 
Jan 2016 321 0 0  40 Praticas0809
 31 WebHome
 28 Praticas0708
 25 Sumarios0708
 19 0809
 15 WebPreferences
 15 MaterialApoio
  8 MFES0809
  8 Programa0506
  8 ELP1-0405
  8 Topicos0809
 
Dec 2015 344 0 0  69 WebHome
 52 Praticas0809
 23 0809
 19 MaterialApoio
 16 Sumarios0607
 15 Praticas0708
 13 Programa0809
 10 ELP1-0405
  7 WebTopicList
  7 WebSearch
  7 WebPreferences
 
Nov 2015 279 0 0  43 WebHome
 35 Praticas0809
 22 Sumarios0607
 22 ELP1-0405
 15 Sumarios0708
 14 MaterialApoio
 11 Notas0607
 11 0809
  9 Praticas0708
  6 MFES0809
  5 WebPreferences
 
Oct 2015 323 0 0  52 WebHome
 39 Praticas0809
 34 0809
 14 MaterialApoio
 11 ELP1-0405
 10 Sumarios0708
  9 Praticas0708
  9 WebStatistics
  7 WebPreferences
  7 Programa0809
  7 Sumarios0607
 
Sep 2015 334 0 0  48 Praticas0809
 43 WebHome
 28 0809
 24 Praticas0708
 17 WebStatistics
 14 MaterialApoio
 11 Sumarios0607
 10 Programa0809
 10 WebChanges
  9 Notas0607
  7 ELP1-0405
 
Aug 2015 1131 0 0 191 Notas0607
186 ELP2-0405
119 WebStatistics
100 0809
 66 0708
 61 WebHome
 55 WebPreferences
 30 0607
 25 Praticas0809
 22 Sumarios0708
 20 Praticas0708
 
Jul 2015 464 0 0  60 WebHome
 48 0809
 38 Praticas0809
 28 Praticas0708
 23 WebStatistics
 16 Programa0809
 13 WebPreferences
 10 MFES0809
 10 Topicos0809
 10 MaterialApoio
  9 Projectos0809
 
Jun 2015 635 0 0 119 Praticas0809
116 WebHome
 37 0809
 33 WebStatistics
 31 Praticas0708
 22 Programa0809
 17 WebPreferences
 15 Projectos0809
 13 MFES0809
 13 Sumarios0607
 13 Sumarios0708
 
May 2015 650 0 0  84 Praticas0809
 81 WebHome
 71 Praticas0708
 50 0809
 23 Programa0809
 21 Avisos0708
 20 Sumarios0708
 19 WebStatistics
 16 Praticas0607
 16 Sumarios0809
 14 WebChanges
 
Apr 2015 438 0 0  80 Praticas0809
 60 Praticas0708
 42 WebHome
 28 0607
 21 MaterialApoio
 19 Sumarios0708
 14 0809
 13 WebStatistics
 13 ELP1-0405
 12 Programa0809
 12 Sumarios0607
 
Mar 2015 380 0 0  64 WebHome
 47 Praticas0809
 30 0607
 25 Projectos0708
 23 0809
 19 MaterialApoio
 17 Sumarios0708
 15 Programa0809
 11 MFES0809
  9 Praticas0708
  9 WebSearch
 
Feb 2015 502 0 0  65 WebHome
 59 Praticas0809
 25 Sumarios0708
 24 0607
 21 WebPreferences
 19 0809
 17 Programa0809
 17 WebStatistics
 16 Praticas0708
 15 MaterialApoio
 14 0506
 
Jan 2015 579 0 0  78 0809
 77 WebHome
 70 Praticas0809
 29 0607
 26 ELP2-0405
 22 WebStatistics
 20 MaterialApoio
 19 Sumarios0708
 16 Programa0809
 15 Praticas0708
 15 Projectos0809
 
Dec 2014 1481 0 0 252 Praticas0809
152 0809
118 WebHome
 82 ELP2-0405
 59 WebStatistics
 58 0607
 42 0708
 42 Notas0607
 40 WebPreferences
 40 WebChanges
 36 MaterialApoio
 
Nov 2014 939 0 0 115 0809
101 ELP2-0405
 92 WebHome
 75 Praticas0809
 44 0607
 35 Programa0809
 34 Notas0607
 30 ELP1-0405
 29 0708
 29 MaterialApoio
 28 Sumarios0708
 
Oct 2014 654 0 0  68 WebHome
 60 Praticas0809
 36 ELP2-0405
 34 0607
 31 MaterialApoio
 24 WebPreferences
 24 0809
 23 Sumarios0607
 21 Programa0809
 20 Praticas0708
 20 WebStatistics
 
Sep 2014 1718 0 0 225 ELP2-0405
210 Notas0607
128 WebHome
122 WebStatistics
 92 WebPreferences
 90 0607
 62 Praticas0809
 62 0809
 57 0708
 42 WebChanges
 41 ELP1-0405
 
Aug 2014 2227 0 0 211 WebHome
189 ELP2-0405
181 WebStatistics
175 0809
171 WebPreferences
116 0607
114 0708
 76 Praticas0809
 70 Notas0607
 51 WebChanges
 49 0506
 
Jul 2014 862 0 0  85 WebStatistics
 68 ELP2-0405
 66 0809
 61 Praticas0809
 54 Notas0607
 44 WebHome
 40 0708
 34 0607
 28 Praticas0708
 23 WebPreferences
 23 MaterialApoio
 
Jun 2014 293 0 0  34 WebHome
 23 Praticas0809
 19 0809
 17 WebStatistics
 13 Notas0607
 13 0607
 11 MFES0809
 10 Sumarios0607
  9 ELP1-0405
  8 Sumarios0708
  7 Programa0708
 
May 2014 165 0 0  16 WebHome
 15 Praticas0809
 12 0809
 12 0607
 11 WebStatistics
 10 Praticas0708
  8 WebChanges
  7 Praticas0607
  5 Programa0809
  5 ProgDetalhado0809
  5 Sumarios0708
 
Apr 2014 137 0 0  15 WebHome
 14 Praticas0809
 11 WebChanges
 10 Praticas0708
  8 0607
  7 WebStatistics
  6 Projectos0809
  6 0506
  6 MaterialApoio
  5 Calendario
  4 Programa0809
 
Mar 2014 1864 0 0 450 ELP2-0405
374 Notas0607
183 0809
169 WebPreferences
113 0708
 77 WebHome
 62 0607
 41 Sumarios0708
 33 Praticas0809
 26 Programa0809
 23 WebStatistics
 
Feb 2014 1110 0 0 139 ELP2-0405
 90 WebHome
 81 Notas0607
 73 WebPreferences
 57 Praticas0809
 55 WebStatistics
 52 0607
 48 0708
 41 Sumarios0708
 39 0809
 27 WebSideBar
 
Jan 2014 1006 0 0  76 WebStatistics
 75 0506
 71 WebHome
 65 WebPreferences
 64 Praticas0809
 49 ELP2-0405
 47 0607
 38 Praticas0708
 30 Notas0607
 28 WebChanges
 28 Sumarios0708
 
Dec 2013 833 0 0  77 WebHome
 73 Praticas0809
 54 WebStatistics
 45 0809
 35 0607
 29 WebChanges
 28 Praticas0708
 24 Programa0809
 22 0708
 21 Avisos0607
 20 MaterialApoio
 
Nov 2013 802 0 0  86 WebHome
 79 Praticas0809
 68 WebStatistics
 60 0809
 58 Notas0607
 43 0607
 29 ELP2-0405
 28 0708
 24 WebPreferences
 20 MaterialApoio
 18 Sumarios0708
 
Oct 2013 654 0 0  81 Praticas0809
 71 WebStatistics
 64 WebHome
 56 0809
 39 0607
 36 Notas0607
 28 ELP1-0405
 23 MaterialApoio
 22 Programa0809
 20 Sumarios0708
 17 Sumarios0607
 
Sep 2013 455 0 0  55 WebHome
 53 Praticas0809
 25 WebStatistics
 23 0607
 18 Programa0809
 18 MaterialApoio
 17 0809
 16 MFES0809
 15 ELP1-0405
 13 WebChanges
 12 Praticas0708
 
Aug 2013 416 0 0  53 WebHome
 49 WebStatistics
 26 Praticas0809
 25 0607
 17 0809
 16 Sumarios0708
 14 Programa0809
 14 ELP1-0405
 14 MaterialApoio
 12 ELP1News0405
 11 Praticas0708
 
Jul 2013 950 0 0 131 WebStatistics
 92 WebHome
 88 Praticas0809
 36 Sumarios0708
 34 0607
 30 MaterialApoio
 28 ELP1-0405
 24 Programa0809
 24 0809
 22 Avisos0607
 20 Praticas0708
 
Jun 2013 768 0 0 120 WebHome
 97 Praticas0809
 93 WebStatistics
 37 MaterialApoio
 36 Programa0809
 31 0607
 26 Sumarios0708
 23 0809
 21 0708
 18 Sumarios0607
 18 ELP1-0405
 
May 2013 804 0 0 121 Praticas0809
 72 WebHome
 43 Sumarios0708
 38 0607
 36 0809
 33 Programa0809
 27 MaterialApoio
 25 WebStatistics
 23 Sumarios0607
 23 Notas0607
 23 WebChanges
 
Apr 2013 737 0 0  98 Praticas0809
 90 Notas0607
 75 WebStatistics
 72 WebHome
 28 Programa0809
 28 0506
 28 0607
 23 Sumarios0708
 23 MaterialApoio
 22 0809
 21 Praticas0708
 
Mar 2013 830 0 0 225 WebStatistics
 96 WebHome
 73 Praticas0809
 36 Sumarios0708
 31 0607
 27 Notas0607
 26 MaterialApoio
 24 Programa0809
 24 WebPreferences
 23 ELP1-0405
 23 0809
 
Feb 2013 2573 0 0 600 Notas0607
470 ELP2-0405
304 0809
303 WebHome
210 0708
164 0607
 68 ELP1-0405
 61 0506
 42 MaterialApoio
 41 Praticas0809
 37 WebStatistics
 
Jan 2013 337 0 0  42 WebHome
 38 Praticas0809
 25 WebStatistics
 24 0809
 20 Programa0809
 20 0607
 17 MaterialApoio
 14 ELP1-0405
 12 Praticas0708
 12 Sumarios0708
 11 Praticas0607
 
Dec 2012 582 0 0  97 Praticas0809
 59 WebStatistics
 44 WebHome
 34 0607
 25 0809
 24 Sumarios0708
 20 WebChanges
 18 Notas0607
 18 MaterialApoio
 17 WebIndex
 17 0506
 
Nov 2012 755 0 0 124 WebStatistics
 83 Praticas0809
 39 WebHome
 38 Notas0607
 36 0607
 34 MaterialApoio
 29 ELP1-0405
 24 0809
 23 Sumarios0708
 22 Praticas0708
 20 WebChanges
 
Oct 2012 678 0 0  94 Praticas0809
 64 WebHome
 58 0809
 51 ELP2-0405
 46 WebStatistics
 31 0607
 23 ELP1-0405
 20 WebChanges
 20 MaterialApoio
 17 Praticas0708
 16 Programa0809
 
Sep 2012 732 0 0 172 WebStatistics
 61 Praticas0809
 43 WebHome
 40 WebChanges
 35 0607
 29 WebIndex
 23 Sumarios0708
 21 0809
 20 Programa0809
 19 Sumarios0607
 18 MaterialApoio
 
Aug 2012 302 0 0  47 WebStatistics
 33 WebHome
 29 Praticas0809
 20 0607
 12 WebIndex
 11 ELP1-0405
 11 WebChanges
 11 MaterialApoio
 10 Sumarios0708
  9 Sumarios0607
  8 Notas0607
 
Jul 2012 635 0 0  75 Praticas0809
 43 WebHome
 40 WebChanges
 39 WebStatistics
 39 0607
 37 MaterialApoio
 26 ELP1-0405
 25 WebIndex
 24 Praticas0708
 19 Programa0809
 19 0708
 
Jun 2012 619 0 0  73 Praticas0809
 66 WebHome
 57 WebStatistics
 45 MaterialApoio
 33 0607
 30 Programa0809
 28 Praticas0708
 27 0809
 25 Calendario
 20 Praticas0607
 20 Sumarios0708
 
May 2012 480 0 0  52 Praticas0809
 47 ELP2-0405
 33 0607
 31 WebStatistics
 29 WebHome
 27 Praticas0708
 24 0809
 19 Sumarios0708
 18 Sumarios0607
 18 ELP1-0405
 16 0506
 
Apr 2012 1125 0 0 263 WebStatistics
 94 Praticas0809
 84 0809
 67 0708
 59 WebHome
 57 MaterialApoio
 53 0607
 46 ELP1-0405
 37 ELP2-0405
 34 Sumarios0708
 21 Praticas0607
 
Mar 2012 523 0 0  77 Praticas0809
 65 WebStatistics
 56 WebHome
 41 MaterialApoio
 25 0607
 20 0809
 19 Praticas0708
 18 WebChanges
 17 Programa0809
 17 ELP1-0405
 16 Praticas0607
 
Feb 2012 469 0 0  63 WebHome
 59 WebStatistics
 30 ELP2-0405
 28 0607
 26 ELP1-0405
 21 Praticas0809
 18 Programa0809
 18 0809
 17 WebPreferences
 15 WebChanges
 14 0708
 
Jan 2012 567 0 0  42 Praticas0809
 40 WebChanges
 38 ELP2-0405
 38 0809
 35 WebHome
 24 0708
 20 WebIndex
 20 WebStatistics
 20 0506
 20 0607
 19 ELP1-0405
 
Dec 2011 1076 0 0 218 ELP2-0405
100 0809
 73 Notas0607
 63 0708
 47 WebHome
 43 Praticas0809
 42 0607
 40 WebChanges
 33 MaterialApoio
 32 ELP1-0405
 29 WebPreferences
 
Nov 2011 2143 0 0 542 ELP2-0405
281 0809
159 0708
103 0607
 92 WebPreferences
 91 Notas0607
 70 ELP1-0405
 67 WebHome
 61 Praticas0809
 60 WebStatistics
 50 WebChanges
 
Oct 2011 865 0 0 262 WebStatistics
 57 WebHome
 38 Praticas0809
 36 0809
 34 ELP1-0405
 34 Sumarios0708
 32 WebChanges
 22 WebPreferences
 22 0708
 22 MaterialApoio
 20 Sumarios0607
 
Sep 2011 702 0 0  55 WebHome
 52 0809
 39 0708
 37 Praticas0809
 32 WebPreferences
 31 WebStatistics
 29 MaterialApoio
 24 ELP2-0405
 24 Sumarios0708
 23 0506
 21 ELP1-0405
 
Aug 2011 1643 0 0 162 0809
152 0708
141 0506
 99 WebHome
 81 Notas0607
 68 Praticas0809
 63 WebPreferences
 57 ELP2-0405
 57 ELP1-0405
 52 MaterialApoio
 52 0607
 
Jul 2011 1320 0 0 187 WebStatistics
159 0809
 93 0708
 90 WebHome
 77 MaterialApoio
 68 Praticas0809
 50 ELP1-0405
 48 Sumarios0708
 42 Praticas0708
 38 0607
 36 Sumarios0607
 
Jun 2011 1541 0 0 254 0809
193 WebHome
137 Praticas0809
103 WebStatistics
 86 0506
 77 MaterialApoio
 64 0607
 56 0708
 49 Programa0809
 47 Notas0607
 41 Sumarios0708
 
May 2011 1334 0 0 181 Notas0607
123 0809
104 Praticas0809
103 WebHome
 92 0607
 76 0708
 61 ELP2-0405
 48 ELP1-0405
 39 Sumarios0708
 38 MaterialApoio
 35 Sumarios0607
 
Apr 2011 1229 0 0  93 WebHome
 84 Praticas0809
 64 ELP1-0405
 52 MaterialApoio
 49 0809
 46 Sumarios0708
 39 0708
 39 Notas0607
 38 WebPreferences
 38 0607
 37 Avisos0708
 
Mar 2011 1154 0 0 144 0708
 97 Praticas0809
 89 0809
 84 ELP1-0405
 78 WebHome
 67 MaterialApoio
 46 0607
 40 WebStatistics
 36 Notas0607
 36 Sumarios0708
 33 0506
 
Feb 2011 552 0 0  62 WebHome
 61 WebStatistics
 35 0809
 31 MaterialApoio
 29 Praticas0809
 26 Topicos0809
 17 Sumarios0809
 16 Sumarios0708
 15 Programa0809
 15 ELP1-0405
 14 Calendario
 
Jan 2011 724 0 0 146 WebStatistics
 53 WebHome
 41 Praticas0809
 39 0809
 25 Sumarios0708
 23 ELP1-0405
 23 Sumarios0809
 22 Programa0506
 21 Programa0809
 21 MaterialApoio
 20 Calendario
 
Dec 2010 735 0 0 146 WebStatistics
 41 WebHome
 39 Programa0809
 32 Praticas0809
 32 MaterialApoio
 30 Sumarios0708
 22 Avisos0708
 22 Projectos0708
 21 WebIndex
 19 0809
 17 WebChanges
 
Nov 2010 700 0 0  96 WebStatistics
 70 WebHome
 56 Sumarios0708
 39 Praticas0809
 29 Praticas0708
 25 MaterialApoio
 23 Praticas0607
 22 0607
 21 0809
 19 ELP1-0405
 15 Projectos0809
 
Oct 2010 408 0 0  65 WebStatistics
 49 Praticas0809
 38 WebHome
 34 Sumarios0708
 31 MaterialApoio
 18 0809
 14 Programa0809
 12 Calendario
 12 Notas0607
  9 Projectos0809
  9 Sumarios0607
 
Sep 2010 1510 0 0 477 0708
243 WebStatistics
163 ELP2-0405
 87 WebHome
 65 Praticas0809
 54 0809
 50 WebPreferences
 39 Sumarios0708
 32 MaterialApoio
 30 Programa0809
 20 MFES0809
 
Aug 2010 1737 0 0 455 0809
224 0607
167 0708
120 ELP2-0405
 87 Notas0607
 69 WebHome
 66 ELP1-0405
 52 WebStatistics
 36 Praticas0809
 36 MaterialApoio
 31 Praticas0708
 
Jul 2010 194 0 0  85 0809
 25 WebHome
 20 WebStatistics
  9 MaterialApoio
  7 Programa0809
  5 Avisos0607
  5 Calendario
  5 Praticas0809
  3 ELP1-0405
  3 Sumarios0708
  3 ProgDetalhado0809
 
Jun 2010 2356 0 0 490 WebHome
322 0809
309 WebStatistics
171 0708
142 MaterialApoio
 74 ELP1-0405
 66 Praticas0809
 66 0607
 64 Sumarios0708
 54 WebPreferences
 52 Notas0607
 
May 2010 2470 0 0 372 WebHome
362 0708
270 ELP2-0405
242 MaterialApoio
139 WebStatistics
 96 0809
 73 Praticas0809
 73 ELP1-0405
 68 0506
 67 0607
 59 Programa0809
 
Apr 2010 2021 0 0 332 WebHome
205 MaterialApoio
165 0809
124 ELP1-0405
121 Praticas0809
119 0708
109 0506
 93 0607
 76 Avisos0708
 61 Programa0809
 59 Sumarios0708
 
Mar 2010 1966 0 0 391 WebHome
222 MaterialApoio
183 0708
171 0809
169 ELP2-0405
156 Praticas0809
 75 Programa0809
 57 WebStatistics
 44 Sumarios0708
 42 Calendario
 37 0506
 
Feb 2010 1433 3 0 205 WebHome
182 0809
 87 MaterialApoio
 72 Sumarios0708
 63 Programa0809
 55 WebStatistics
 54 ELP1-0405
 48 Notas0607
 47 0708
 45 Praticas0809
 43 0506
  3 OlgaPacheco
Jan 2010 1389 0 0 141 WebHome
 80 0809
 70 WebStatistics
 64 Sumarios0708
 62 0506
 58 Programa0809
 58 MaterialApoio
 57 Praticas0809
 57 0708
 54 0607
 50 MFES0809
 
Dec 2009 1203 0 0 324 0809
 85 Sumarios0708
 80 WebHome
 68 Praticas0809
 61 MaterialApoio
 49 WebStatistics
 39 Programa0809
 38 MFES0809
 33 Projectos0809
 32 0708
 27 WebPreferences
 
Nov 2009 1638 0 0 165 0708
 98 Sumarios0708
 91 0506
 88 WebHome
 79 Praticas0809
 69 0809
 66 MaterialApoio
 60 WebStatistics
 59 ELP1-0405
 49 Programa0809
 44 MFES0809
 
Oct 2009 1322 0 0 111 WebHome
 88 0506
 75 0809
 74 Sumarios0708
 66 Praticas0809
 51 Programa0809
 50 WebStatistics
 48 Sumarios0607
 44 ELP2-0405
 42 MaterialApoio
 41 0708
 
Sep 2009 1536 0 0 146 0506
130 WebHome
101 0809
 74 Sumarios0708
 70 Praticas0809
 66 MaterialApoio
 53 ELP1-0405
 45 WebStatistics
 41 Praticas0607
 40 WebIndex
 40 Programa0809
 
Aug 2009 2033 0 0 235 0506
112 WebHome
 95 0809
 80 ELP1-0405
 68 Sumarios0708
 68 MaterialApoio
 60 Programa0809
 56 WebStatistics
 54 WebChanges
 53 WebIndex
 52 0708
 
Jul 2009 5634 4 0 3018 0809
765 WebHome
241 MaterialApoio
230 0506
116 Programa0809
 79 Calendario
 75 Sumarios0607
 73 Praticas0809
 56 ELP1-0405
 49 Sumarios0708
 45 WebStatistics
  4 JoseBacelarAlmeida
Jun 2009 4951 10 0 1212 0809
1159 WebHome
624 MaterialApoio
455 Programa0809
211 Praticas0809
 99 0708
 93 Sumarios0708
 77 0506
 76 Calendario
 69 WebStatistics
 57 Praticas0607
 10 JoseBacelarAlmeida
May 2009 2826 13 0 445 0809
435 MaterialApoio
371 Programa0809
321 WebHome
233 Praticas0809
 92 0506
 91 Sumarios0708
 65 Projectos0809
 48 Praticas0708
 46 ELP1-0405
 45 Calendario
 13 JoseBacelarAlmeida
Apr 2009 3189 5 0 478 MaterialApoio
435 0809
375 Programa0809
358 WebHome
244 Praticas0809
216 0506
 94 Sumarios0708
 82 ELP1-0405
 65 Praticas0708
 59 Calendario
 51 Praticas0607
  5 JoseBacelarAlmeida
Mar 2009 4843 8 0 904 0809
670 MaterialApoio
609 WebHome
485 Programa0809
297 Praticas0809
220 ELP2-0405
174 0708
165 0506
127 Calendario
102 0607
100 ELP1-0405
  8 JoseBacelarAlmeida
Feb 2009 1621 13 0 222 WebHome
133 MaterialApoio
110 0809
102 Programa0809
 71 Sumarios0708
 70 0708
 62 Praticas0708
 57 0506
 47 ELP2-0405
 46 WebStatistics
 45 Calendario
 13 JoseBacelarAlmeida
Jan 2009 906 0 0 119 WebHome
 59 Sumarios0708
 56 0506
 47 MaterialApoio
 41 Praticas0708
 40 Programa0708
 39 0607
 37 WebStatistics
 36 ELP2-0405
 31 0708
 30 MFES0809
 
Dec 2008 975 4 0 115 WebHome
 66 Sumarios0708
 61 MFES0809
 61 WebStatistics
 60 MaterialApoio
 50 Praticas0708
 47 Programa0708
 44 Projectos0708
 43 Avisos0708
 43 ELP2-0405
 37 Praticas0607
  4 JoseBacelarAlmeida
Nov 2008 733 1 0 113 WebHome
106 Sumarios0708
 72 Praticas0708
 57 MaterialApoio
 46 Programa0708
 43 Praticas0607
 38 Sumarios0607
 31 0708
 20 ELP2-0405
 19 Notas0607
 17 Projectos0708
  1 JoseBacelarAlmeida
Oct 2008 1011 0 0 128 WebHome
112 Sumarios0708
 74 Praticas0708
 72 MaterialApoio
 64 Programa0708
 61 0708
 48 Praticas0607
 36 Projectos0708
 33 Sumarios0607
 30 0607
 29 Avisos0708
 
Sep 2008 1224 2 0 251 WebHome
 97 MaterialApoio
 94 Praticas0708
 94 Sumarios0708
 79 0506
 56 Programa0708
 55 Praticas0607
 54 0708
 46 WebPreferences
 36 Sumarios0607
 31 Avisos0708
  2 JoseBacelarAlmeida
Aug 2008 803 0 0 143 WebHome
 89 Sumarios0708
 61 Praticas0607
 57 0708
 50 MaterialApoio
 46 Praticas0708
 46 Programa0708
 43 Sumarios0607
 27 Avisos0708
 27 Projectos0708
 23 WebStatistics
 
Jul 2008 3503 13 5 1485 WebHome
644 0708
320 MaterialApoio
219 Sumarios0708
148 Programa0708
 86 Praticas0708
 70 0607
 64 Praticas0607
 61 Notas0607
 57 0506
 52 ELP2-0405
 18 JoseBacelarAlmeida
Jun 2008 2889 27 8 898 WebHome
327 0708
313 Sumarios0708
289 MaterialApoio
153 Programa0708
148 Praticas0708
117 Praticas0607
 81 Sumarios0607
 61 Projectos0708
 53 WebStatistics
 47 ELP2-0405
 35 JoseBacelarAlmeida
May 2008 3168 19 0 961 WebHome
345 Sumarios0708
321 0708
279 MaterialApoio
258 Praticas0708
135 Programa0708
130 Projectos0708
129 Praticas0607
101 WebStatistics
 71 Sumarios0607
 45 Avisos0708
 19 JoseBacelarAlmeida
Apr 2008 3355 29 2 813 WebHome
456 MaterialApoio
414 Praticas0708
366 Sumarios0708
193 0708
166 Programa0708
117 0506
102 Praticas0607
 97 WebStatistics
 84 Sumarios0607
 78 0607
 31 JoseBacelarAlmeida
Mar 2008 2592 14 0 643 WebHome
282 MaterialApoio
192 0708
190 Sumarios0708
163 Programa0708
114 Praticas0708
101 WebStatistics
 93 Sumarios0607
 82 0607
 81 Praticas0607
 75 Notas0607
 14 JoseBacelarAlmeida
Feb 2008 1461 11 0 424 WebHome
136 MaterialApoio
 89 0708
 83 0607
 76 Programa0708
 67 WebStatistics
 61 Sumarios0607
 51 Praticas0607
 43 Notas0607
 41 Programa0607
 38 0506
 11 JoseBacelarAlmeida
Jan 2008 958 0 0 195 WebHome
 95 WebStatistics
 78 Sumarios0607
 54 0607
 52 MaterialApoio
 49 Praticas0607
 47 Programa0607
 42 Notas0607
 34 ELP2-0405
 30 0506
 26 ELP1-0405
 
Dec 2007 958 0 0 217 WebHome
 88 Sumarios0607
 70 0607
 63 Praticas0607
 58 MaterialApoio
 57 Programa0607
 40 Notas0607
 38 WebStatistics
 30 Avisos0607
 29 ELP2-0405
 23 0506
 
Nov 2007 754 0 0 112 WebHome
 88 Praticas0607
 85 Sumarios0607
 63 0506
 50 MaterialApoio
 48 0607
 47 Programa0607
 37 WebStatistics
 32 Notas0607
 26 ELP2-0405
 22 ELP1-0405
 
Oct 2007 1531 0 0 313 ELP2-0405
199 WebHome
162 Notas0607
107 Sumarios0607
103 Praticas0607
 83 WebStatistics
 83 0607
 79 MaterialApoio
 48 Programa0607
 44 ELP1-0405
 42 0506
 
Sep 2007 1591 4 1 456 WebHome
184 Notas0607
125 0607
110 WebStatistics
106 MaterialApoio
100 Praticas0607
 85 ELP2-0405
 77 Sumarios0607
 68 Programa0607
 53 ELP1-0405
 38 0506
  5 JoseBacelarAlmeida
Aug 2007 2180 10 1 446 WebHome
337 Notas0607
214 ELP2-0405
199 0607
109 WebStatistics
 94 MaterialApoio
 88 Praticas0607
 79 Sumarios0607
 69 WebPreferences
 60 ELP1-0405
 56 Programa0607
  6 JoseBacelarAlmeida
  5 OlgaPacheco
Jul 2007 5315 30 1 2344 WebHome
840 0607
364 MaterialApoio
329 Notas0607
181 0506
162 Sumarios0607
128 Praticas0607
115 Programa0607
111 ELP2-0405
 72 Programa0506
 60 WebPreferences
 29 JoseBacelarAlmeida
  2 OlgaPacheco
Jun 2007 2422 27 4 718 WebHome
379 MaterialApoio
254 Sumarios0607
195 0607
173 Notas0607
151 Praticas0607
118 Programa?
 89 0506
 46 ELP2-0405
 43 ELP1-0405
 30 WebPreferences
 24 JoseBacelarAlmeida
  7 OlgaPacheco
May 2007 3149 41 0 639 WebHome
626 ELP2-0405
392 MaterialApoio
310 Sumarios0607
255 0607
239 Praticas0607
165 0506
136 Programa?
107 Notas0607
 92 ELP1-0405
 15 WebStatistics
 39 JoseBacelarAlmeida
  2 OlgaPacheco
Apr 2007 1719 11 1 398 WebHome
272 MaterialApoio
217 Sumarios0607
169 0607
132 0506
123 Praticas0607
112 Programa?
 71 ELP1-0405
 60 ELP2-0405
 19 WebPreferences
 18 ELP1News0405
 12 JoseBacelarAlmeida
Mar 2007 2815 20 1 606 MaterialApoio
595 WebHome
334 0607
325 0506
284 Sumarios0607
218 Programa?
135 Praticas0607
 89 ELP2-0405
 84 ELP1-0405
 15 0405
 10 ELP1News0405
 19 JoseBacelarAlmeida
  2 OlgaPacheco
Feb 2007 757 73 0 132 ELP2?
122 0506
105 ELP1?
 70 WebSideBar
 59 WebHome
 38 0607
 29 MaterialApoio
 28 WebPreferences
 20 Programa?
 15 ELP1News0405
 14 Avisos0506
 73 JoseBacelarAlmeida

Notes:

  • Do not edit this topic, it is updated automatically. (You can also force an update)
  • TWikiDocumentation tells you how to enable the automatic updates of the statistics.
  • Suggestion: You could archive this topic once a year and delete the previous year's statistics from the table.
WebTopBar 13 Feb 2007 - 14:43 - NEW AlcinoCunha
WebTopicActions 21 May 2007 - 23:43 - r2 JoseBacelarAlmeida
WebTopicCreator 15 Nov 2006 - 19:43 - r2 TWikiContributor

Create New Topic in Education/LC Web

Topic name:


It's usually best to choose a WikiWord for the new topic name, otherwise automatic linking may not work. Characters not allowed in topic names, such as spaces will automatically be removed.

Topic parent:

Use template:

View templates


info Once you have created the topic, consider adding links in related topics to the new topic so that there are more ways people can discover it.
WebTopicList 15 Nov 2006 - 19:43 - r3 TWikiContributor

See also the verbose WebIndex.

Found 54 topics.

  Simple search | Help
TIP: to search for all topics that contain "SOAP", "WSDL", a literal "web service", but not "shampoo", write: soap wsdl "web service" -shampoo
Search where:


(otherwise search Education/LC Web only)
Sort results by:


Make search:
(semicolon ; for and) about regular expression search
Don't show:

Do show: about BookView
Limit results to: (all to show all topics)

Other search options:
WebSideBar 03 Jul 2007 - 21:54 - r7 JoseBacelarAlmeida

Tópicos

Avisos

22/07/2009: Disponíveis notas da época de recurso.

07/05/2009: Disponível enunciado do projecto prático.

06/03/2009: Já disponível o guião da primeira aula prática (aqui).

WebStatistics 30 Oct 2020 - 14:39 - r2239 TWikiGuest

Statistics for Education/LC Web

Month: Topic
views:
Topic
saves:
File
uploads:
Most popular
topic views:
Top contributors for
topic save and uploads:
Oct 2020 4031 0 0 1768 0607
814 0708
310 WebPreferences
119 0809
 85 WebStatistics
 64 MaterialApoio
 62 ELP2-0405
 59 ELP1-0405
 57 Praticas0708
 51 Praticas0809
 47 Sumarios0708
 
Sep 2020 2578 0 0 1040 0607
482 0708
210 WebPreferences
 55 WebStatistics
 53 Praticas0708
 47 Praticas0809
 45 MaterialApoio
 44 ELP1-0405
 41 ELP2-0405
 40 Sumarios0708
 39 0809
 
Aug 2020 2509 0 0 748 0607
336 0708
187 WebPreferences
169 Praticas0809
 79 Praticas0708
 66 MaterialApoio
 64 WebStatistics
 50 ELP1-0405
 50 Notas0607
 45 0809
 43 0506
 
Jul 2020 2372 0 0 678 0607
328 0708
184 WebPreferences
108 Praticas0809
101 Praticas0708
 94 MaterialApoio
 54 0506
 52 ELP1-0405
 42 Sumarios0708
 40 Avisos0708
 40 WebStatistics
 
Jun 2020 2381 0 0 657 0607
304 0708
178 Praticas0809
148 0809
111 0506
104 WebPreferences
 79 WebHome
 70 MaterialApoio
 69 ELP2-0405
 49 Praticas0708
 45 Avisos0708
 
May 2020 1535 0 0 551 0607
241 0708
130 WebHome
 78 WebPreferences
 66 0506
 47 Praticas0809
 39 MaterialApoio
 34 ELP2-0405
 31 Programa0809
 29 0809
 28 Sumarios0708
 
Apr 2020 1479 0 0 570 0607
251 0708
 89 WebHome
 75 WebPreferences
 70 Praticas0809
 60 0506
 30 Praticas0708
 28 ELP2-0405
 25 0809
 22 MaterialApoio
 21 Sumarios0708
 
Mar 2020 1351 0 0 466 0607
238 0708
126 WebHome
 76 WebPreferences
 66 Praticas0809
 40 0506
 32 Praticas0708
 26 Sumarios0708
 26 MaterialApoio
 22 0809
 18 ELP1-0405
 
Feb 2020 1487 0 0 503 0607
247 0708
106 WebHome
 84 WebPreferences
 76 0809
 51 ELP2-0405
 47 Praticas0809
 38 0506
 29 Avisos0708
 29 Sumarios0708
 28 ELP1-0405
 
Jan 2020 1120 0 0 487 0607
219 0708
 60 WebPreferences
 45 WebHome
 38 Praticas0809
 27 MaterialApoio
 22 ELP1-0405
 17 0506
 15 Sumarios0708
 14 Praticas0708
 11 0809
 
Dec 2019 1298 0 0 497 0607
260 0708
 75 WebPreferences
 74 Praticas0809
 51 WebHome
 40 0506
 31 Praticas0708
 31 MaterialApoio
 22 ELP2-0405
 16 Programa0809
 16 ELP1-0405
 
Nov 2019 1230 0 0 483 0607
212 0708
 67 Praticas0809
 53 WebHome
 53 WebPreferences
 28 0809
 27 0506
 24 Praticas0708
 24 ELP1-0405
 21 Sumarios0708
 20 Programa0809
 
Oct 2019 1321 0 0 633 0607
291 0708
 91 WebPreferences
 58 WebHome
 41 Praticas0809
 22 0809
 20 MaterialApoio
 12 0506
 11 Programa0809
  8 Praticas0708
  8 Avisos0607
 
Sep 2019 2537 0 0 1171 ELP2-0405
410 0607
263 0809
213 0708
150 WebPreferences
 51 Praticas0809
 37 WebHome
 31 Praticas0708
 23 ELP1-0405
 18 Sumarios0708
 14 Programa0809
 
Aug 2019 9439 0 0 5707 ELP2-0405
1084 0607
954 0809
642 0708
501 WebPreferences
 58 WebStatistics
 42 Notas0607
 41 Praticas0809
 41 ELP1-0405
 41 0506
 34 WebHome
 
Jul 2019 1815 0 0 714 0607
339 0708
138 Notas0607
112 WebPreferences
 76 WebStatistics
 75 ELP2-0405
 54 Praticas0809
 47 WebHome
 38 0809
 30 ELP1-0405
 20 0506
 
Jun 2019 1260 0 0 597 0607
273 0708
 75 WebPreferences
 53 WebHome
 46 Praticas0809
 21 0809
 20 WebStatistics
 19 Notas0607
 15 Programa0809
 13 MFES0809
 12 MaterialApoio
 
May 2019 1728 0 0 953 0607
438 0708
118 WebPreferences
 60 Praticas0809
 25 WebHome
 21 ELP2-0405
 10 Praticas0708
  8 Sumarios0607
  8 0506
  7 Programa0809
  7 Sumarios0708
 
Apr 2019 141 0 0  83 0607
 34 0708
 12 WebPreferences
  2 Praticas0809
  2 ELP1-0405
  2 Praticas0607
  1 Sumarios0708
  1 WebHome
  1 Praticas0708
  1 ProgDetalhado0708
  1 Calendario
 
Mar 2019 1684 0 0 919 0607
467 0708
106 WebPreferences
 39 Praticas0809
 36 WebHome
 24 Praticas0708
 20 ELP1-0405
  9 Sumarios0708
  8 0506
  6 0809
  5 MFES0809
 
Feb 2019 2172 0 0 1315 0607
568 0708
153 WebPreferences
 18 WebHome
 13 Praticas0708
 13 Praticas0809
  7 0506
  6 Sumarios0708
  6 MaterialApoio
  5 Projectos0809
  5 Calendario
 
Jan 2019 6122 0 0 3873 0607
1457 0708
433 WebPreferences
 50 WebHome
 38 Praticas0809
 27 Praticas0708
 20 MaterialApoio
 18 Notas0607
 16 0506
 15 Sumarios0708
 13 0809
 
Dec 2018 7019 0 0 4581 0607
1559 0708
496 WebPreferences
 63 Praticas0809
 44 WebHome
 29 Praticas0708
 18 0506
 15 ELP2-0405
 15 Sumarios0708
 12 Programa0809
 12 ELP1-0405
 
Nov 2018 10098 0 0 6660 0607
2282 0708
716 WebPreferences
 88 Praticas0809
 79 WebHome
 37 Praticas0708
 36 0506
 22 Sumarios0708
 20 Notas0607
 18 ELP2-0405
 17 ELP1-0405
 
Oct 2018 10866 0 0 7301 0607
2386 0708
785 WebPreferences
 71 WebHome
 50 Praticas0809
 40 0506
 37 ELP2-0405
 34 Praticas0708
 20 Programa0809
 14 Sumarios0607
 14 Sumarios0708
 
Aug 2018 8417 0 0 6015 0607
1451 0708
654 WebPreferences
 63 WebHome
 38 Praticas0809
 33 0506
 15 ELP1-0405
 14 Praticas0708
  9 Notas0607
  8 Programa0809
  8 MFES0809
 
Jul 2018 5929 0 0 4257 0607
970 0708
479 WebPreferences
 28 WebHome
 21 Praticas0809
 15 Praticas0708
 15 ELP1-0405
 15 0506
 11 Programa0809
  9 MaterialApoio
  8 0809
 
Jun 2018 3398 0 0 2447 0607
603 0708
234 WebPreferences
 27 WebHome
 14 Praticas0809
  7 Praticas0708
  6 Avisos0607
  6 ELP1-0405
  5 MaterialApoio
  4 Projectos0809
  4 0809
 
May 2018 6176 0 0 4321 0607
990 0708
563 WebPreferences
 44 WebHome
 36 ELP1-0405
 34 0506
 21 Praticas0809
 14 Praticas0708
  9 0809
  9 MaterialApoio
  9 ELP1News0405
 
Apr 2018 9984 0 0 6983 0607
1404 0708
1159 WebPreferences
 88 WebHome
 60 Praticas0809
 45 0506
 31 ELP1-0405
 18 Praticas0708
 18 0809
 18 Sumarios0708
 14 Programa0809
 
Mar 2018 14262 0 0 9968 0607
1882 WebPreferences
1450 0708
146 0506
145 WebHome
 75 0809
 63 Praticas0809
 47 ELP1-0405
 44 Programa0809
 36 MaterialApoio
 29 Praticas0708
 
Feb 2018 5485 0 0 3544 0607
724 WebPreferences
317 0708
310 0506
203 ELP1-0405
 45 WebHome
 38 Praticas0708
 29 Praticas0607
 29 Sumarios0708
 25 Programa0809
 17 MFES0809
 
Jan 2018 3149 0 0 1453 0607
341 0506
340 WebPreferences
189 ELP1-0405
 98 Praticas0708
 67 0708
 56 Sumarios0708
 50 WebHome
 43 Notas0607
 41 Programa0809
 41 WebChanges
 
Dec 2017 1310 0 0 201 0607
113 0506
 77 ELP1-0405
 76 Praticas0708
 75 Notas0607
 69 WebHome
 62 ELP2-0405
 62 0809
 55 0708
 55 WebChanges
 51 Praticas0809
 
Nov 2017 187 0 0  34 WebHome
 21 Praticas0809
 15 Programa0809
 15 ELP1-0405
 11 0809
 11 MaterialApoio
  8 Sumarios0708
  5 Projectos0809
  5 Sumarios0607
  5 0708
  4 Praticas0708
 
Oct 2017 397 0 0  67 0809
 49 WebHome
 35 Notas0607
 27 Praticas0809
 14 Programa0809
 14 MaterialApoio
 13 Praticas0708
 12 Sumarios0607
 10 0607
  9 Programa0708
  7 WebIndex
 
Sep 2017 624 0 0 102 WebHome
101 Notas0607
 96 0809
 38 Praticas0809
 20 MaterialApoio
 19 Programa0809
 17 ELP1-0405
 16 0708
 14 WebPreferences
 14 Sumarios0708
 11 Calendario
 
Aug 2017 542 0 0  94 WebHome
 92 0809
 84 Notas0607
 29 Praticas0809
 18 Programa0809
 14 MaterialApoio
 11 ELP1-0405
 10 Praticas0708
 10 WebPreferences
  9 ELP2-0405
  9 Avisos0809
 
Jul 2017 476 0 0 135 Notas0607
 90 0809
 53 WebHome
 18 Praticas0809
 14 0607
 12 MaterialApoio
 11 WebStatistics
  9 WebPreferences
  9 Sumarios0708
  8 Praticas0708
  7 Programa0809
 
Jun 2017 679 0 0 143 0809
 90 Notas0607
 65 WebHome
 54 Praticas0809
 25 MaterialApoio
 16 Sumarios0607
 14 Calendario
 14 Programa0809
 14 ELP2-0405
 14 0607
 13 WebPreferences
 
May 2017 546 0 0 124 0809
 87 Notas0607
 63 WebHome
 35 Praticas0809
 18 MaterialApoio
 14 Calendario
 13 Programa0809
 13 MFES0809
 12 ELP1-0405
 10 Praticas0708
  9 ELP2-0405
 
Apr 2017 263 0 0  51 WebHome
 28 Praticas0809
 17 0809
 14 MaterialApoio
 10 Calendario
  8 MFES0809
  8 0607
  6 Projectos0809
  6 WebSearch
  5 WebPreferences
  5 Programa0809
 
Mar 2017 377 0 0  70 WebHome
 55 Praticas0809
 46 0809
 31 MaterialApoio
 17 Calendario
 16 Programa0809
 12 Praticas0708
 12 WebPreferences
 11 Projectos0809
 10 Sumarios0708
  9 MFES0809
 
Feb 2017 379 0 0  58 WebHome
 40 0809
 22 0708
 20 WebPreferences
 17 WebStatistics
 14 Calendario
 14 Programa0809
 12 MaterialApoio
 11 ELP1-0405
 10 Praticas0809
 10 MFES0809
 
Jan 2017 281 0 0  44 WebHome
 35 Praticas0809
 20 MaterialApoio
 14 ELP1-0405
 13 0506
 10 Praticas0708
 10 Sumarios0708
  9 Calendario
  9 0809
  8 Programa0809
  7 Projectos0809
 
Dec 2016 348 0 0  37 Praticas0809
 35 WebHome
 21 Praticas0708
 13 Sumarios0708
 12 Sumarios0607
 12 ELP1-0405
 12 0607
 10 WebPreferences
 10 ELP2-0405
 10 WebStatistics
 10 Avisos0506
 
Nov 2016 273 0 0  68 WebHome
 32 Praticas0809
 16 Programa0809
 15 MaterialApoio
 14 Praticas0708
 13 ELP1-0405
  9 Projectos0809
  9 0809
  9 0506
  7 Calendario
  7 Sumarios0607
 
Oct 2016 366 0 0  81 Praticas0809
 59 WebHome
 24 Praticas0708
 21 MaterialApoio
 20 WebPreferences
 18 Sumarios0607
 14 ELP1-0405
 12 0809
 11 Sumarios0708
 10 Programa0809
 10 0506
 
Sep 2016 119 0 0  25 WebHome
 11 Praticas0809
  8 Programa0809
  7 MaterialApoio
  6 WebPreferences
  6 ELP1-0405
  6 0809
  5 Praticas0708
  5 Sumarios0708
  5 0607
  4 0506
 
Aug 2016 271 0 0  73 WebHome
 27 Praticas0809
 21 0809
 15 0607
 12 MaterialApoio
 11 Programa0809
  8 Notas0607
  8 0506
  6 Sumarios0708
  5 Avisos0607
  5 WebStatistics
 
Jul 2016 265 0 0  43 WebHome
 39 Praticas0809
 20 Praticas0708
 14 MaterialApoio
 13 Praticas0607
 12 ELP1-0405
 10 Sumarios0607
 10 0809
  9 Sumarios0708
  8 Calendario
  7 Projectos0809
 
Jun 2016 347 0 0  62 WebHome
 62 Praticas0809
 24 Praticas0708
 13 MFES0809
 13 Sumarios0607
 12 Programa0809
 12 WebPreferences
 12 WebStatistics
 12 MaterialApoio
 11 0809
 11 0506
 
May 2016 355 0 0  57 Praticas0809
 47 WebHome
 26 0506
 21 0809
 16 Praticas0708
 16 Programa0809
 15 ELP2-0405
 13 Sumarios0708
 11 Notas0607
 11 MaterialApoio
  8 MFES0809
 
Apr 2016 281 0 0  39 WebHome
 29 Praticas0809
 15 0809
 14 ELP2-0405
 12 WebStatistics
 11 Programa0809
 11 Avisos0809
 10 Sumarios0607
 10 MaterialApoio
  8 Avisos0607
  8 Sumarios0708
 
Mar 2016 271 0 0  76 WebHome
 34 Praticas0809
 27 Programa0809
 14 Praticas0708
 14 0809
  9 MaterialApoio
  8 Sumarios0708
  7 Sumarios0607
  6 Calendario
  5 Projectos0809
  5 Programa0607
 
Feb 2016 408 0 0  97 WebHome
 45 Praticas0809
 32 Praticas0708
 18 MaterialApoio
 17 0809
 16 Programa0809
 15 Avisos0708
 15 WebPreferences
 10 Sumarios0607
 10 WebSideBar
  9 WebNotify
 
Jan 2016 321 0 0  40 Praticas0809
 31 WebHome
 28 Praticas0708
 25 Sumarios0708
 19 0809
 15 WebPreferences
 15 MaterialApoio
  8 MFES0809
  8 Programa0506
  8 ELP1-0405
  8 Topicos0809
 
Dec 2015 344 0 0  69 WebHome
 52 Praticas0809
 23 0809
 19 MaterialApoio
 16 Sumarios0607
 15 Praticas0708
 13 Programa0809
 10 ELP1-0405
  7 WebTopicList
  7 WebSearch
  7 WebPreferences
 
Nov 2015 279 0 0  43 WebHome
 35 Praticas0809
 22 Sumarios0607
 22 ELP1-0405
 15 Sumarios0708
 14 MaterialApoio
 11 Notas0607
 11 0809
  9 Praticas0708
  6 MFES0809
  5 WebPreferences
 
Oct 2015 323 0 0  52 WebHome
 39 Praticas0809
 34 0809
 14 MaterialApoio
 11 ELP1-0405
 10 Sumarios0708
  9 Praticas0708
  9 WebStatistics
  7 WebPreferences
  7 Programa0809
  7 Sumarios0607
 
Sep 2015 334 0 0  48 Praticas0809
 43 WebHome
 28 0809
 24 Praticas0708
 17 WebStatistics
 14 MaterialApoio
 11 Sumarios0607
 10 Programa0809
 10 WebChanges
  9 Notas0607
  7 ELP1-0405
 
Aug 2015 1131 0 0 191 Notas0607
186 ELP2-0405
119 WebStatistics
100 0809
 66 0708
 61 WebHome
 55 WebPreferences
 30 0607
 25 Praticas0809
 22 Sumarios0708
 20 Praticas0708
 
Jul 2015 464 0 0  60 WebHome
 48 0809
 38 Praticas0809
 28 Praticas0708
 23 WebStatistics
 16 Programa0809
 13 WebPreferences
 10 MFES0809
 10 Topicos0809
 10 MaterialApoio
  9 Projectos0809
 
Jun 2015 635 0 0 119 Praticas0809
116 WebHome
 37 0809
 33 WebStatistics
 31 Praticas0708
 22 Programa0809
 17 WebPreferences
 15 Projectos0809
 13 MFES0809
 13 Sumarios0607
 13 Sumarios0708
 
May 2015 650 0 0  84 Praticas0809
 81 WebHome
 71 Praticas0708
 50 0809
 23 Programa0809
 21 Avisos0708
 20 Sumarios0708
 19 WebStatistics
 16 Praticas0607
 16 Sumarios0809
 14 WebChanges
 
Apr 2015 438 0 0  80 Praticas0809
 60 Praticas0708
 42 WebHome
 28 0607
 21 MaterialApoio
 19 Sumarios0708
 14 0809
 13 WebStatistics
 13 ELP1-0405
 12 Programa0809
 12 Sumarios0607
 
Mar 2015 380 0 0  64 WebHome
 47 Praticas0809
 30 0607
 25 Projectos0708
 23 0809
 19 MaterialApoio
 17 Sumarios0708
 15 Programa0809
 11 MFES0809
  9 Praticas0708
  9 WebSearch
 
Feb 2015 502 0 0  65 WebHome
 59 Praticas0809
 25 Sumarios0708
 24 0607
 21 WebPreferences
 19 0809
 17 Programa0809
 17 WebStatistics
 16 Praticas0708
 15 MaterialApoio
 14 0506
 
Jan 2015 579 0 0  78 0809
 77 WebHome
 70 Praticas0809
 29 0607
 26 ELP2-0405
 22 WebStatistics
 20 MaterialApoio
 19 Sumarios0708
 16 Programa0809
 15 Praticas0708
 15 Projectos0809
 
Dec 2014 1481 0 0 252 Praticas0809
152 0809
118 WebHome
 82 ELP2-0405
 59 WebStatistics
 58 0607
 42 0708
 42 Notas0607
 40 WebPreferences
 40 WebChanges
 36 MaterialApoio
 
Nov 2014 939 0 0 115 0809
101 ELP2-0405
 92 WebHome
 75 Praticas0809
 44 0607
 35 Programa0809
 34 Notas0607
 30 ELP1-0405
 29 0708
 29 MaterialApoio
 28 Sumarios0708
 
Oct 2014 654 0 0  68 WebHome
 60 Praticas0809
 36 ELP2-0405
 34 0607
 31 MaterialApoio
 24 WebPreferences
 24 0809
 23 Sumarios0607
 21 Programa0809
 20 Praticas0708
 20 WebStatistics
 
Sep 2014 1718 0 0 225 ELP2-0405
210 Notas0607
128 WebHome
122 WebStatistics
 92 WebPreferences
 90 0607
 62 Praticas0809
 62 0809
 57 0708
 42 WebChanges
 41 ELP1-0405
 
Aug 2014 2227 0 0 211 WebHome
189 ELP2-0405
181 WebStatistics
175 0809
171 WebPreferences
116 0607
114 0708
 76 Praticas0809
 70 Notas0607
 51 WebChanges
 49 0506
 
Jul 2014 862 0 0  85 WebStatistics
 68 ELP2-0405
 66 0809
 61 Praticas0809
 54 Notas0607
 44 WebHome
 40 0708
 34 0607
 28 Praticas0708
 23 WebPreferences
 23 MaterialApoio
 
Jun 2014 293 0 0  34 WebHome
 23 Praticas0809
 19 0809
 17 WebStatistics
 13 Notas0607
 13 0607
 11 MFES0809
 10 Sumarios0607
  9 ELP1-0405
  8 Sumarios0708
  7 Programa0708
 
May 2014 165 0 0  16 WebHome
 15 Praticas0809
 12 0809
 12 0607
 11 WebStatistics
 10 Praticas0708
  8 WebChanges
  7 Praticas0607
  5 Programa0809
  5 ProgDetalhado0809
  5 Sumarios0708
 
Apr 2014 137 0 0  15 WebHome
 14 Praticas0809
 11 WebChanges
 10 Praticas0708
  8 0607
  7 WebStatistics
  6 Projectos0809
  6 0506
  6 MaterialApoio
  5 Calendario
  4 Programa0809
 
Mar 2014 1864 0 0 450 ELP2-0405
374 Notas0607
183 0809
169 WebPreferences
113 0708
 77 WebHome
 62 0607
 41 Sumarios0708
 33 Praticas0809
 26 Programa0809
 23 WebStatistics
 
Feb 2014 1110 0 0 139 ELP2-0405
 90 WebHome
 81 Notas0607
 73 WebPreferences
 57 Praticas0809
 55 WebStatistics
 52 0607
 48 0708
 41 Sumarios0708
 39 0809
 27 WebSideBar
 
Jan 2014 1006 0 0  76 WebStatistics
 75 0506
 71 WebHome
 65 WebPreferences
 64 Praticas0809
 49 ELP2-0405
 47 0607
 38 Praticas0708
 30 Notas0607
 28 WebChanges
 28 Sumarios0708
 
Dec 2013 833 0 0  77 WebHome
 73 Praticas0809
 54 WebStatistics
 45 0809
 35 0607
 29 WebChanges
 28 Praticas0708
 24 Programa0809
 22 0708
 21 Avisos0607
 20 MaterialApoio
 
Nov 2013 802 0 0  86 WebHome
 79 Praticas0809
 68 WebStatistics
 60 0809
 58 Notas0607
 43 0607
 29 ELP2-0405
 28 0708
 24 WebPreferences
 20 MaterialApoio
 18 Sumarios0708
 
Oct 2013 654 0 0  81 Praticas0809
 71 WebStatistics
 64 WebHome
 56 0809
 39 0607
 36 Notas0607
 28 ELP1-0405
 23 MaterialApoio
 22 Programa0809
 20 Sumarios0708
 17 Sumarios0607
 
Sep 2013 455 0 0  55 WebHome
 53 Praticas0809
 25 WebStatistics
 23 0607
 18 Programa0809
 18 MaterialApoio
 17 0809
 16 MFES0809
 15 ELP1-0405
 13 WebChanges
 12 Praticas0708
 
Aug 2013 416 0 0  53 WebHome
 49 WebStatistics
 26 Praticas0809
 25 0607
 17 0809
 16 Sumarios0708
 14 Programa0809
 14 ELP1-0405
 14 MaterialApoio
 12 ELP1News0405
 11 Praticas0708
 
Jul 2013 950 0 0 131 WebStatistics
 92 WebHome
 88 Praticas0809
 36 Sumarios0708
 34 0607
 30 MaterialApoio
 28 ELP1-0405
 24 Programa0809
 24 0809
 22 Avisos0607
 20 Praticas0708
 
Jun 2013 768 0 0 120 WebHome
 97 Praticas0809
 93 WebStatistics
 37 MaterialApoio
 36 Programa0809
 31 0607
 26 Sumarios0708
 23 0809
 21 0708
 18 Sumarios0607
 18 ELP1-0405
 
May 2013 804 0 0 121 Praticas0809
 72 WebHome
 43 Sumarios0708
 38 0607
 36 0809
 33 Programa0809
 27 MaterialApoio
 25 WebStatistics
 23 Sumarios0607
 23 Notas0607
 23 WebChanges
 
Apr 2013 737 0 0  98 Praticas0809
 90 Notas0607
 75 WebStatistics
 72 WebHome
 28 Programa0809
 28 0506
 28 0607
 23 Sumarios0708
 23 MaterialApoio
 22 0809
 21 Praticas0708
 
Mar 2013 830 0 0 225 WebStatistics
 96 WebHome
 73 Praticas0809
 36 Sumarios0708
 31 0607
 27 Notas0607
 26 MaterialApoio
 24 Programa0809
 24 WebPreferences
 23 ELP1-0405
 23 0809
 
Feb 2013 2573 0 0 600 Notas0607
470 ELP2-0405
304 0809
303 WebHome
210 0708
164 0607
 68 ELP1-0405
 61 0506
 42 MaterialApoio
 41 Praticas0809
 37 WebStatistics
 
Jan 2013 337 0 0  42 WebHome
 38 Praticas0809
 25 WebStatistics
 24 0809
 20 Programa0809
 20 0607
 17 MaterialApoio
 14 ELP1-0405
 12 Praticas0708
 12 Sumarios0708
 11 Praticas0607
 
Dec 2012 582 0 0  97 Praticas0809
 59 WebStatistics
 44 WebHome
 34 0607
 25 0809
 24 Sumarios0708
 20 WebChanges
 18 Notas0607
 18 MaterialApoio
 17 WebIndex
 17 0506
 
Nov 2012 755 0 0 124 WebStatistics
 83 Praticas0809
 39 WebHome
 38 Notas0607
 36 0607
 34 MaterialApoio
 29 ELP1-0405
 24 0809
 23 Sumarios0708
 22 Praticas0708
 20 WebChanges
 
Oct 2012 678 0 0  94 Praticas0809
 64 WebHome
 58 0809
 51 ELP2-0405
 46 WebStatistics
 31 0607
 23 ELP1-0405
 20 WebChanges
 20 MaterialApoio
 17 Praticas0708
 16 Programa0809
 
Sep 2012 732 0 0 172 WebStatistics
 61 Praticas0809
 43 WebHome
 40 WebChanges
 35 0607
 29 WebIndex
 23 Sumarios0708
 21 0809
 20 Programa0809
 19 Sumarios0607
 18 MaterialApoio
 
Aug 2012 302 0 0  47 WebStatistics
 33 WebHome
 29 Praticas0809
 20 0607
 12 WebIndex
 11 ELP1-0405
 11 WebChanges
 11 MaterialApoio
 10 Sumarios0708
  9 Sumarios0607
  8 Notas0607
 
Jul 2012 635 0 0  75 Praticas0809
 43 WebHome
 40 WebChanges
 39 WebStatistics
 39 0607
 37 MaterialApoio
 26 ELP1-0405
 25 WebIndex
 24 Praticas0708
 19 Programa0809
 19 0708
 
Jun 2012 619 0 0  73 Praticas0809
 66 WebHome
 57 WebStatistics
 45 MaterialApoio
 33 0607
 30 Programa0809
 28 Praticas0708
 27 0809
 25 Calendario
 20 Praticas0607
 20 Sumarios0708
 
May 2012 480 0 0  52 Praticas0809
 47 ELP2-0405
 33 0607
 31 WebStatistics
 29 WebHome
 27 Praticas0708
 24 0809
 19 Sumarios0708
 18 Sumarios0607
 18 ELP1-0405
 16 0506
 
Apr 2012 1125 0 0 263 WebStatistics
 94 Praticas0809
 84 0809
 67 0708
 59 WebHome
 57 MaterialApoio
 53 0607
 46 ELP1-0405
 37 ELP2-0405
 34 Sumarios0708
 21 Praticas0607
 
Mar 2012 523 0 0  77 Praticas0809
 65 WebStatistics
 56 WebHome
 41 MaterialApoio
 25 0607
 20 0809
 19 Praticas0708
 18 WebChanges
 17 Programa0809
 17 ELP1-0405
 16 Praticas0607
 
Feb 2012 469 0 0  63 WebHome
 59 WebStatistics
 30 ELP2-0405
 28 0607
 26 ELP1-0405
 21 Praticas0809
 18 Programa0809
 18 0809
 17 WebPreferences
 15 WebChanges
 14 0708
 
Jan 2012 567 0 0  42 Praticas0809
 40 WebChanges
 38 ELP2-0405
 38 0809
 35 WebHome
 24 0708
 20 WebIndex
 20 WebStatistics
 20 0506
 20 0607
 19 ELP1-0405
 
Dec 2011 1076 0 0 218 ELP2-0405
100 0809
 73 Notas0607
 63 0708
 47 WebHome
 43 Praticas0809
 42 0607
 40 WebChanges
 33 MaterialApoio
 32 ELP1-0405
 29 WebPreferences
 
Nov 2011 2143 0 0 542 ELP2-0405
281 0809
159 0708
103 0607
 92 WebPreferences
 91 Notas0607
 70 ELP1-0405
 67 WebHome
 61 Praticas0809
 60 WebStatistics
 50 WebChanges
 
Oct 2011 865 0 0 262 WebStatistics
 57 WebHome
 38 Praticas0809
 36 0809
 34 ELP1-0405
 34 Sumarios0708
 32 WebChanges
 22 WebPreferences
 22 0708
 22 MaterialApoio
 20 Sumarios0607
 
Sep 2011 702 0 0  55 WebHome
 52 0809
 39 0708
 37 Praticas0809
 32 WebPreferences
 31 WebStatistics
 29 MaterialApoio
 24 ELP2-0405
 24 Sumarios0708
 23 0506
 21 ELP1-0405
 
Aug 2011 1643 0 0 162 0809
152 0708
141 0506
 99 WebHome
 81 Notas0607
 68 Praticas0809
 63 WebPreferences
 57 ELP2-0405
 57 ELP1-0405
 52 MaterialApoio
 52 0607
 
Jul 2011 1320 0 0 187 WebStatistics
159 0809
 93 0708
 90 WebHome
 77 MaterialApoio
 68 Praticas0809
 50 ELP1-0405
 48 Sumarios0708
 42 Praticas0708
 38 0607
 36 Sumarios0607
 
Jun 2011 1541 0 0 254 0809
193 WebHome
137 Praticas0809
103 WebStatistics
 86 0506
 77 MaterialApoio
 64 0607
 56 0708
 49 Programa0809
 47 Notas0607
 41 Sumarios0708
 
May 2011 1334 0 0 181 Notas0607
123 0809
104 Praticas0809
103 WebHome
 92 0607
 76 0708
 61 ELP2-0405
 48 ELP1-0405
 39 Sumarios0708
 38 MaterialApoio
 35 Sumarios0607
 
Apr 2011 1229 0 0  93 WebHome
 84 Praticas0809
 64 ELP1-0405
 52 MaterialApoio
 49 0809
 46 Sumarios0708
 39 0708
 39 Notas0607
 38 WebPreferences
 38 0607
 37 Avisos0708
 
Mar 2011 1154 0 0 144 0708
 97 Praticas0809
 89 0809
 84 ELP1-0405
 78 WebHome
 67 MaterialApoio
 46 0607
 40 WebStatistics
 36 Notas0607
 36 Sumarios0708
 33 0506
 
Feb 2011 552 0 0  62 WebHome
 61 WebStatistics
 35 0809
 31 MaterialApoio
 29 Praticas0809
 26 Topicos0809
 17 Sumarios0809
 16 Sumarios0708
 15 Programa0809
 15 ELP1-0405
 14 Calendario
 
Jan 2011 724 0 0 146 WebStatistics
 53 WebHome
 41 Praticas0809
 39 0809
 25 Sumarios0708
 23 ELP1-0405
 23 Sumarios0809
 22 Programa0506
 21 Programa0809
 21 MaterialApoio
 20 Calendario
 
Dec 2010 735 0 0 146 WebStatistics
 41 WebHome
 39 Programa0809
 32 Praticas0809
 32 MaterialApoio
 30 Sumarios0708
 22 Avisos0708
 22 Projectos0708
 21 WebIndex
 19 0809
 17 WebChanges
 
Nov 2010 700 0 0  96 WebStatistics
 70 WebHome
 56 Sumarios0708
 39 Praticas0809
 29 Praticas0708
 25 MaterialApoio
 23 Praticas0607
 22 0607
 21 0809
 19 ELP1-0405
 15 Projectos0809
 
Oct 2010 408 0 0  65 WebStatistics
 49 Praticas0809
 38 WebHome
 34 Sumarios0708
 31 MaterialApoio
 18 0809
 14 Programa0809
 12 Calendario
 12 Notas0607
  9 Projectos0809
  9 Sumarios0607
 
Sep 2010 1510 0 0 477 0708
243 WebStatistics
163 ELP2-0405
 87 WebHome
 65 Praticas0809
 54 0809
 50 WebPreferences
 39 Sumarios0708
 32 MaterialApoio
 30 Programa0809
 20 MFES0809
 
Aug 2010 1737 0 0 455 0809
224 0607
167 0708
120 ELP2-0405
 87 Notas0607
 69 WebHome
 66 ELP1-0405
 52 WebStatistics
 36 Praticas0809
 36 MaterialApoio
 31 Praticas0708
 
Jul 2010 194 0 0  85 0809
 25 WebHome
 20 WebStatistics
  9 MaterialApoio
  7 Programa0809
  5 Avisos0607
  5 Calendario
  5 Praticas0809
  3 ELP1-0405
  3 Sumarios0708
  3 ProgDetalhado0809
 
Jun 2010 2356 0 0 490 WebHome
322 0809
309 WebStatistics
171 0708
142 MaterialApoio
 74 ELP1-0405
 66 Praticas0809
 66 0607
 64 Sumarios0708
 54 WebPreferences
 52 Notas0607
 
May 2010 2470 0 0 372 WebHome
362 0708
270 ELP2-0405
242 MaterialApoio
139 WebStatistics
 96 0809
 73 Praticas0809
 73 ELP1-0405
 68 0506
 67 0607
 59 Programa0809
 
Apr 2010 2021 0 0 332 WebHome
205 MaterialApoio
165 0809
124 ELP1-0405
121 Praticas0809
119 0708
109 0506
 93 0607
 76 Avisos0708
 61 Programa0809
 59 Sumarios0708
 
Mar 2010 1966 0 0 391 WebHome
222 MaterialApoio
183 0708
171 0809
169 ELP2-0405
156 Praticas0809
 75 Programa0809
 57 WebStatistics
 44 Sumarios0708
 42 Calendario
 37 0506
 
Feb 2010 1433 3 0 205 WebHome
182 0809
 87 MaterialApoio
 72 Sumarios0708
 63 Programa0809
 55 WebStatistics
 54 ELP1-0405
 48 Notas0607
 47 0708
 45 Praticas0809
 43 0506
  3 OlgaPacheco
Jan 2010 1389 0 0 141 WebHome
 80 0809
 70 WebStatistics
 64 Sumarios0708
 62 0506
 58 Programa0809
 58 MaterialApoio
 57 Praticas0809
 57 0708
 54 0607
 50 MFES0809
 
Dec 2009 1203 0 0 324 0809
 85 Sumarios0708
 80 WebHome
 68 Praticas0809
 61 MaterialApoio
 49 WebStatistics
 39 Programa0809
 38 MFES0809
 33 Projectos0809
 32 0708
 27 WebPreferences
 
Nov 2009 1638 0 0 165 0708
 98 Sumarios0708
 91 0506
 88 WebHome
 79 Praticas0809
 69 0809
 66 MaterialApoio
 60 WebStatistics
 59 ELP1-0405
 49 Programa0809
 44 MFES0809
 
Oct 2009 1322 0 0 111 WebHome
 88 0506
 75 0809
 74 Sumarios0708
 66 Praticas0809
 51 Programa0809
 50 WebStatistics
 48 Sumarios0607
 44 ELP2-0405
 42 MaterialApoio
 41 0708
 
Sep 2009 1536 0 0 146 0506
130 WebHome
101 0809
 74 Sumarios0708
 70 Praticas0809
 66 MaterialApoio
 53 ELP1-0405
 45 WebStatistics
 41 Praticas0607
 40 WebIndex
 40 Programa0809
 
Aug 2009 2033 0 0 235 0506
112 WebHome
 95 0809
 80 ELP1-0405
 68 Sumarios0708
 68 MaterialApoio
 60 Programa0809
 56 WebStatistics
 54 WebChanges
 53 WebIndex
 52 0708
 
Jul 2009 5634 4 0 3018 0809
765 WebHome
241 MaterialApoio
230 0506
116 Programa0809
 79 Calendario
 75 Sumarios0607
 73 Praticas0809
 56 ELP1-0405
 49 Sumarios0708
 45 WebStatistics
  4 JoseBacelarAlmeida
Jun 2009 4951 10 0 1212 0809
1159 WebHome
624 MaterialApoio
455 Programa0809
211 Praticas0809
 99 0708
 93 Sumarios0708
 77 0506
 76 Calendario
 69 WebStatistics
 57 Praticas0607
 10 JoseBacelarAlmeida
May 2009 2826 13 0 445 0809
435 MaterialApoio
371 Programa0809
321 WebHome
233 Praticas0809
 92 0506
 91 Sumarios0708
 65 Projectos0809
 48 Praticas0708
 46 ELP1-0405
 45 Calendario
 13 JoseBacelarAlmeida
Apr 2009 3189 5 0 478 MaterialApoio
435 0809
375 Programa0809
358 WebHome
244 Praticas0809
216 0506
 94 Sumarios0708
 82 ELP1-0405
 65 Praticas0708
 59 Calendario
 51 Praticas0607
  5 JoseBacelarAlmeida
Mar 2009 4843 8 0 904 0809
670 MaterialApoio
609 WebHome
485 Programa0809
297 Praticas0809
220 ELP2-0405
174 0708
165 0506
127 Calendario
102 0607
100 ELP1-0405
  8 JoseBacelarAlmeida
Feb 2009 1621 13 0 222 WebHome
133 MaterialApoio
110 0809
102 Programa0809
 71 Sumarios0708
 70 0708
 62 Praticas0708
 57 0506
 47 ELP2-0405
 46 WebStatistics
 45 Calendario
 13 JoseBacelarAlmeida
Jan 2009 906 0 0 119 WebHome
 59 Sumarios0708
 56 0506
 47 MaterialApoio
 41 Praticas0708
 40 Programa0708
 39 0607
 37 WebStatistics
 36 ELP2-0405
 31 0708
 30 MFES0809
 
Dec 2008 975 4 0 115 WebHome
 66 Sumarios0708
 61 MFES0809
 61 WebStatistics
 60 MaterialApoio
 50 Praticas0708
 47 Programa0708
 44 Projectos0708
 43 Avisos0708
 43 ELP2-0405
 37 Praticas0607
  4 JoseBacelarAlmeida
Nov 2008 733 1 0 113 WebHome
106 Sumarios0708
 72 Praticas0708
 57 MaterialApoio
 46 Programa0708
 43 Praticas0607
 38 Sumarios0607
 31 0708
 20 ELP2-0405
 19 Notas0607
 17 Projectos0708
  1 JoseBacelarAlmeida
Oct 2008 1011 0 0 128 WebHome
112 Sumarios0708
 74 Praticas0708
 72 MaterialApoio
 64 Programa0708
 61 0708
 48 Praticas0607
 36 Projectos0708
 33 Sumarios0607
 30 0607
 29 Avisos0708
 
Sep 2008 1224 2 0 251 WebHome
 97 MaterialApoio
 94 Praticas0708
 94 Sumarios0708
 79 0506
 56 Programa0708
 55 Praticas0607
 54 0708
 46 WebPreferences
 36 Sumarios0607
 31 Avisos0708
  2 JoseBacelarAlmeida
Aug 2008 803 0 0 143 WebHome
 89 Sumarios0708
 61 Praticas0607
 57 0708
 50 MaterialApoio
 46 Praticas0708
 46 Programa0708
 43 Sumarios0607
 27 Avisos0708
 27 Projectos0708
 23 WebStatistics
 
Jul 2008 3503 13 5 1485 WebHome
644 0708
320 MaterialApoio
219 Sumarios0708
148 Programa0708
 86 Praticas0708
 70 0607
 64 Praticas0607
 61 Notas0607
 57 0506
 52 ELP2-0405
 18 JoseBacelarAlmeida
Jun 2008 2889 27 8 898 WebHome
327 0708
313 Sumarios0708
289 MaterialApoio
153 Programa0708
148 Praticas0708
117 Praticas0607
 81 Sumarios0607
 61 Projectos0708
 53 WebStatistics
 47 ELP2-0405
 35 JoseBacelarAlmeida
May 2008 3168 19 0 961 WebHome
345 Sumarios0708
321 0708
279 MaterialApoio
258 Praticas0708
135 Programa0708
130 Projectos0708
129 Praticas0607
101 WebStatistics
 71 Sumarios0607
 45 Avisos0708
 19 JoseBacelarAlmeida
Apr 2008 3355 29 2 813 WebHome
456 MaterialApoio
414 Praticas0708
366 Sumarios0708
193 0708
166 Programa0708
117 0506
102 Praticas0607
 97 WebStatistics
 84 Sumarios0607
 78 0607
 31 JoseBacelarAlmeida
Mar 2008 2592 14 0 643 WebHome
282 MaterialApoio
192 0708
190 Sumarios0708
163 Programa0708
114 Praticas0708
101 WebStatistics
 93 Sumarios0607
 82 0607
 81 Praticas0607
 75 Notas0607
 14 JoseBacelarAlmeida
Feb 2008 1461 11 0 424 WebHome
136 MaterialApoio
 89 0708
 83 0607
 76 Programa0708
 67 WebStatistics
 61 Sumarios0607
 51 Praticas0607
 43 Notas0607
 41 Programa0607
 38 0506
 11 JoseBacelarAlmeida
Jan 2008 958 0 0 195 WebHome
 95 WebStatistics
 78 Sumarios0607
 54 0607
 52 MaterialApoio
 49 Praticas0607
 47 Programa0607
 42 Notas0607
 34 ELP2-0405
 30 0506
 26 ELP1-0405
 
Dec 2007 958 0 0 217 WebHome
 88 Sumarios0607
 70 0607
 63 Praticas0607
 58 MaterialApoio
 57 Programa0607
 40 Notas0607
 38 WebStatistics
 30 Avisos0607
 29 ELP2-0405
 23 0506
 
Nov 2007 754 0 0 112 WebHome
 88 Praticas0607
 85 Sumarios0607
 63 0506
 50 MaterialApoio
 48 0607
 47 Programa0607
 37 WebStatistics
 32 Notas0607
 26 ELP2-0405
 22 ELP1-0405
 
Oct 2007 1531 0 0 313 ELP2-0405
199 WebHome
162 Notas0607
107 Sumarios0607
103 Praticas0607
 83 WebStatistics
 83 0607
 79 MaterialApoio
 48 Programa0607
 44 ELP1-0405
 42 0506
 
Sep 2007 1591 4 1 456 WebHome
184 Notas0607
125 0607
110 WebStatistics
106 MaterialApoio
100 Praticas0607
 85 ELP2-0405
 77 Sumarios0607
 68 Programa0607
 53 ELP1-0405
 38 0506
  5 JoseBacelarAlmeida
Aug 2007 2180 10 1 446 WebHome
337 Notas0607
214 ELP2-0405
199 0607
109 WebStatistics
 94 MaterialApoio
 88 Praticas0607
 79 Sumarios0607
 69 WebPreferences
 60 ELP1-0405
 56 Programa0607
  6 JoseBacelarAlmeida
  5 OlgaPacheco
Jul 2007 5315 30 1 2344 WebHome
840 0607
364 MaterialApoio
329 Notas0607
181 0506
162 Sumarios0607
128 Praticas0607
115 Programa0607
111 ELP2-0405
 72 Programa0506
 60 WebPreferences
 29 JoseBacelarAlmeida
  2 OlgaPacheco
Jun 2007 2422 27 4 718 WebHome
379 MaterialApoio
254 Sumarios0607
195 0607
173 Notas0607
151 Praticas0607
118 Programa?
 89 0506
 46 ELP2-0405
 43 ELP1-0405
 30 WebPreferences
 24 JoseBacelarAlmeida
  7 OlgaPacheco
May 2007 3149 41 0 639 WebHome
626 ELP2-0405
392 MaterialApoio
310 Sumarios0607
255 0607
239 Praticas0607
165 0506
136 Programa?
107 Notas0607
 92 ELP1-0405
 15 WebStatistics
 39 JoseBacelarAlmeida
  2 OlgaPacheco
Apr 2007 1719 11 1 398 WebHome
272 MaterialApoio
217 Sumarios0607
169 0607
132 0506
123 Praticas0607
112 Programa?
 71 ELP1-0405
 60 ELP2-0405
 19 WebPreferences
 18 ELP1News0405
 12 JoseBacelarAlmeida
Mar 2007 2815 20 1 606 MaterialApoio
595 WebHome
334 0607
325 0506
284 Sumarios0607
218 Programa?
135 Praticas0607
 89 ELP2-0405
 84 ELP1-0405
 15 0405
 10 ELP1News0405
 19 JoseBacelarAlmeida
  2 OlgaPacheco
Feb 2007 757 73 0 132 ELP2?
122 0506
105 ELP1?
 70 WebSideBar
 59 WebHome
 38 0607
 29 MaterialApoio
 28 WebPreferences
 20 Programa?
 15 ELP1News0405
 14 Avisos0506
 73 JoseBacelarAlmeida

Notes:

  • Do not edit this topic, it is updated automatically. (You can also force an update)
  • TWikiDocumentation tells you how to enable the automatic updates of the statistics.
  • Suggestion: You could archive this topic once a year and delete the previous year's statistics from the table.
WebTopBar 13 Feb 2007 - 14:43 - NEW AlcinoCunha
WebTopicActions 21 May 2007 - 23:43 - r2 JoseBacelarAlmeida
WebTopicCreator 15 Nov 2006 - 19:43 - r2 TWikiContributor

Create New Topic in Education/LC Web

Topic name:


It's usually best to choose a WikiWord for the new topic name, otherwise automatic linking may not work. Characters not allowed in topic names, such as spaces will automatically be removed.

Topic parent:

Use template:

View templates


info Once you have created the topic, consider adding links in related topics to the new topic so that there are more ways people can discover it.
WebTopicList 15 Nov 2006 - 19:43 - r3 TWikiContributor

See also the verbose WebIndex.

Found 54 topics.
This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. Ideas, requests, problems? Send feedback.
Syndicate this site RSSATOM