Verificação Dedutiva de Programas – 2016.1


MENU: [ Avisos | Informações Gerais | Regras | Plano de Atividades ]


Avisos


Informações Gerais

AVISO: infelizmente, esta disciplina foi interrompida por falta de alunos oficialmente matriculados. :-( Meus sinceros agradecimentos aos 3 alunos ouvintes pela participação de qualidade até o fim das aulas. Aos alunos interessados nesta disciplina: até 2017.1!

Nesta disciplina nós aprendemos a demonstrar matematicamente a corretude de algoritmos e programas estruturados. A chamada da disciplina possui um resumo do conteúdo, a regulamentação oficial contém informações importantes como justificativa, objetivos, ementa e bibliografia.

O nosso livro de referência é este

Krzysztof R. Apt, Frank S. de Boer, Ernst-Rüdiger Olderog. Verification of Sequential and Concurrent Programs, Third Edition. Springer, 2010. ISBN-13: 978-1-84882-744-8, 978-1- 4471-2513-6. [editora] [pdf]
mas ele é teórico demais para ser seguido linearmente nesta disciplina introdutória de graduação, além de não abordar todo o conteúdo desejado. Por isso, a principal fonte de conteúdo serão as aulas e os materiais nelas sugeridos.

Todas as atividades da disciplina já têm data estimada no plano de atividades, que também descreve as 3 partes da disciplina.

A minha sugestão para a obtenção de um bom desempenho na disciplina é participar das aulas e, aula-a-aula, estudar o conteúdo ministrado, fazer os exercícios e tirar as dúvidas. Caso você possua uma dúvida no horário da aula, o ideal é tirá-la na própria ocasião, para que os demais alunos também se beneficiem das explicações. Esteja, porém, à vontade para me contactar fora do horário de aula.


Regras


Plano de Atividades

A disciplina está dividida em 3 partes, as duas primeiras terminadas com provas escritas tradicionais e a última com um projeto prático de verificação:
  1. Recursos Básicos de Verificação Dedutiva: assim como em CAnA vários problemas são postos e resolvidos, utilizando as técnicas apresentadas na disciplina, nesta parte da disciplina nós fazemos a verificação de uma série de algoritmos e programas, sucessivamente mais elaborados. Nas aulas teóricas, apresentamos os recursos que nos permitem demonstrar matematicamente a corretude de um algoritmo. Nas aulas práticas, utilizamos esses recursos na verificação de programas reais, provavelmente usando a plataforma Frama-C.

  2. Formalismos para a Verificação de Programas: são apresentados dois formalismos lógicos para a verificação de programas, a Lógica de Hoare e as Weakest Preconditions de Dijkstra. É certamente a parte mais teórica da disciplina (não haverão aulas práticas), e, para ex-alunos de Lógica, talvez pareça uma versão aplicada de aulas de Dedução Natural, pelo uso de regras de inferência e etc.

  3. Recursos mais Elaborados de Verificação: são apresentados recursos para casos mais elaborados de verificação, como código fantasma e funções-lema, e em particular recursos para a verificação de manipulação de memória, como Dynamic Frames (aulas práticas usando Dafny).

Abaixo estão as atividades e datas previstas para a disciplina (clique no número da aula para acessar os detalhes dela) (atenção: esta disciplina está sendo ministrada pela primeira vez, então, apesar do esforço de planejamento, mudanças são possíveis, principalmente na parte 3):
Aula Data Descrição
01 14/03 Introdução à Verificação Dedutiva de Programas
02 16/03 Pré- e Pós-Condições; Estrutura de Seleção; Invariantes e Variantes de Laço.
03 21/03 Aula Prática (requires, ensures, assigns, loop invariant / variant / assigns)
04 23/03 Prova de Variantes e Invariantes de Laços "Enquanto" e "Para"
05 28/03 Aula Prática (busca binária)
06 30/03 Laços com "Break"; Operadores ([], ÷, etc)
07 04/04 Aula Prática
08 06/04 Chamadas de Funções; Recursão; Terminação.
09 11/04 Aula Prática
10 13/04 Exercícios de Verificação
11 18/04 Aula Prática
* 20/04 Avaliação Parcial 1
12 25/04 Correção da AP1
13 27/04 Lógica de Hoare: Atribuição, Sequência, Teste, Laço, Consequência.
14 02/05 Lógica de Hoare: Atribuição "para a Frente"; Exercícios.
15 04/05 Lógica de Hoare: Vetores.
16 09/05 Lógica de Hoare: Corretude Total como Corretude Parcial + Terminação.
17 11/05 Lógica de Hoare: Funções, usos simples.
18 16/05 Lógica de Hoare: Funções, usos mais elaborados.
19 18/05 Weakest Preconditions de Dijkstra
20 23/05 Mais Weakest Preconditions
* 25/05 Avaliação Parcial 2
21 30/05 Correção da AP2.
22 01/06 Funções-Lema
23 06/06 Aula Prática
24 07/06 (AULA EXTRA – Decidir Horário)
Código Fantasma
08/06 Sem Aula (Compromisso Pessoal do Professor)
25 13/06 Aula Prática
26 15/06 Ponteiros
27 20/06 Aula Prática
28 22/06 Tipos Indutivos e Verificação de Estruturas de Dados
29 27/06 Aula Prática
30 29/06 Verificação de Estruturas de Dados
31 04/07 Aula Prática
* 06/07 Acompanhamento dos Projetos de Verificação
* 11/07 Acompanhamento dos Projetos de Verificação
* 13/07 Apresentações dos Projetos de Verificação
* 18/07 AF
* 20/07 Notas Finais da Disciplina.

Aulas: Conteúdos e Exercícios