Aula 1/2 3/03
Objectivos da disciplina e tópicos do programa. Métodos de avaliação. Bibliografia recomendada.
Breve introdução aos métodos formais para o desenvolvimento de sistemas informáticos.
Verificação de programas baseado em sistemas dedutivos. Lógicas de Floyd-Hoare baseadas em pré e pós condições. Correcção parcial e correcção total. Uma linguagem imperativa simples. Asserções e linguagem das condições. Sistema dedutivo para a correcção parcial.

Brief introduction to formal methods.
Deductive program verification. Floyd-Hoare logic based on pre and post conditions. Assertions and logic of conditions. Parcial an d total correctness. A while imperative language. Deductive system of partial correctness.
Bibliografia: Cap. 1 e 2 RSD, Slides,
LICS Cap 4.1-4.3.2 , RSD cap 5.1-5.4
Regras da Lógica de Hoare/ Hoare logic rules
Exercícios: Hoare Logic
Aula 3/4 10/03
Pre-condições fracas para o cálculo de correcção parcial. Tableaux para o sistema dedutivo para a correcção parcial. Invariantes de ciclo. Uma semântica operacional para a linguagem While. Integridade do sistema de correcção parcial. Cálculo de correção total. Variantes estritamente decrescentes. Regra para o comando while.

Weakest preconditions (wp). Tableaux for the partial correctness calculus using wp. A natural semantics for the while language. Soundness of the partial correctness calculus. Total correctness calculus. Variants. Rule for the while statement.
Bibliografia:LICS Cap 4.1-4.3.2 , RSD cap 5.1-5.6
Regras da Lógica de Hoare
Exercícios: Hoare Logic
Aula 5/6 17/03
O problema a adaptação de tripos de Hoare. Mecanização do calculo de correção parcial.
O cálculo sem regra da consequência (H_g) e o cálculo das pré-condições mais fracas. Equivalência do cálculo H e do cálculo H_g. Algoritmo de geração de condições de verificação (VCGen). Adequação do algoritmo VCGen ao cálculo H_g. Exemplos

The Adaptation problem for Hoare logic. Mechanisation of the partial correctness calculus. Calculus without cons: H_g. Equivalence of H and H_g. Weakest preconditions (wp). Verification condition generator: VCGen. Correctness of VCGem. Examples.
Bibliografia: RSD cap 5.7, 6
Regras da Lógica de Hoare
Exercícios: VCGen
Aula 7/8 24/03
Propriedades de segurança. Semântica operacional com erro e programas seguros: Asserções safe(E). Arrays com indices limitados: programas seguros e geração de condições de verificação. Procedimentos sem parâmetros e recursão.

Safety properties: error semantics and safe programs. Bounded arrays : safe programs and verification condition generator. Procedures without parameter and recursion.
Bibliografia: RSD cap 7, 8.1
Regras da Lógica de Hoare
Exercícios:
Aula 9/10 31/03

Apresentação do primeiro trabalho prático.
Aula 11/12 7/04
Frameworks para a geração de condições de verificação.
I
ntrodução ao Dafny: paradigmas de programação e verificação estática de programas. Métodos. Funções e Predicados. Tipos de dados: básicos, arrays, coleções e classes. Tipos imutáveis e mutáveis (referências). Frames: acesso e modificação. Exemplos: recorrências de inteiros e pesquisa em arrays (linear e binária). Correção de algoritmos de ordenação. Coleções: conjuntos, sequências, multiconjuntos e mapas. Operações. Uso de lemas.
Aula 13/14 21/04
Design by Contract.: Classes com pré e pós condições. Invariante de classe: predicado Valid(). Herança. Abstração e variáveis e funções ghost. Exemplos: stacks, conjuntos e dequeues.
Aula 15/16 - 28/04
Continuação da aula anterior. Resolução de exercícios
Aula 17/18 - 12/05
Ferramentas de prova. Demonstradores automáticos de teorias decidíveis.
Resolutores SMT baseados em resolutores SAT. Algoritmo de David-Putman para a satisfazibilidade de fórmulas proposicionais. Resolutores DPLL baseados em CDCL (conflict driven clause learning). Grafo das implicações e análise de conflitos.
Teorias da lógica de primeira ordem. Teorias decidíveis. Integração com resolutores SAT. Introdução ao Z3 usando Z3py.
Bibliografia:
Decision Procedures (DP) (2nd Ed): Cap.1. 2.1, 2,2.1-2.2.4
The Calculus of Computation
SATLIVE
SAT association
SMT-LIB
Z3 : code
Exemplos
Z3py: pip install z3-solver
Exercícios:
Aula 19 (slides) - 19/05
Resolutores SMT usando SAT: DPLL(T) lazy usando algoritmos decidiveis para conjunção de fórmulas atómicas de de teorias T.
Lógica equacional e teoria das funções não interpretadas(EUF). Redução de fórmulas EUF à lógica equacional: método de Ackerman. Algoritmo para a decisão duma conjunção de igualdades e funções não interpretadas.
Teoria dos arrays. Redução à teoria das funções não interpretadas.
Bibliografia:
Decision Procedures (DP) (2nd Ed): Cap.3.1-3.3, 4.1-4.4, 7.1-7.3
The Calculus of Computation (axiomatizações de teorias e resolutores)
SATLIVE
SAT association
SMT-LIB
Z3 : code
Exemplos
Z3py:
pip install z3-solver
notebooks
Exercícios:
Aula 20 - 19/05
Apresentação do segundo trabalho prático.
Aula 21-22 (slides) - 26/05/2022
Dedução natural para a lógica proposicional usando sequentes. Noção de lógica intuicionistica. Fragmento implicacional da lógica proosicional intuicionista (IPC(->)). Revisão do lambda-calculus puro e sistema de tipos simples. Isomorfismo de Curry-Howard.
Introdução ao demonstrador interactivo Coq usando tipos simples IPC(->). Tipos: Prop e Set. Táticas: intro, apply e assumption.
O interface coqide.
Bibliografia:

Coq prover

Bibliografia:
Curry-Howard Isomorphism
Lectures on the Curry-Howard Isomorphism (M. Sorensen & P. Urzyczyn) )Cap 2-4
Interactive Theorem Proving: Cap 1-3.
Coq prover
Manual
Online
Exercícios:
Exemplos
Neste f
icheiro provar os teoremas removendo o Admitted sem usar a tática auto (usar intro, apply, cut).
Aula 23-24 - 02/06/2022
Dedução natural para a lógica primeira ordem (intuicionista) usando sequentes. Noção de tipos dependentes e Regra do produto. Isomorfismo de Curry-Howard para tipos dependentes e lógica de primeira ordem intuicionistica.
Tipos dependentes em Coq. Dedução natural de fórmulas de lógica de primeira ordem em Coq. Tácticas de introdução e eliminação de conectivas/quantificadores/=: intro, apply, split, right, left, exists, reflexivity e rewrite. Tipos indutivos: simples e recursivos. Princípios de indução. Conectivas lógicas como tipos indutivos. Naturais de Peano como tipos indutivos.

Bibliografia:
Lectures on the Curry-Howard Isomorphism (M. Sorensen & P. Urzyczyn) )Cap 9-10
Interactive Theorem Proving: Cap 4-6.
Coq prover
Manual
Online
Exemplos
Resumo de tácticas
Exercícios: Exercicios em Coq
Aula 25-26 - 09/06/2022
Tipos indutivos em Coq (cont). Tácticas: induction, pattern, elim, case e constructor. Pattern matching para definir funções por casos. Funções sobre tipos indutivos recursivos: Fixpoint. Tácticas discriminate, injection e inversion. Tipos indutivos polimórficos e dependentes: listas e árvores. Predicados indutivos. Exemplo da formalização e correção da ordenação por inserção numa lista. Extração de programas correctos para Haskell.

Bibliografia:
Interactive Theorem Proving: Cap 6-8
Exemplos.