2023/24
Esta unidade curricular do 1º semestre do 1º ano do Mestrado em Engenharia Informática da Universidade do Minho tem por objectivo introduzir a utilização dos Métodos Formais na Engenharia de Software.
Os alunos interessados em aprofundar os conhecimentos adquiridos nesta unidade curricular podem optar por frequentar o perfil de Métodos Formais de Programação no 2º semestre.
Programa
- Lógicas para especificação formal
- Lógica proposicional (PL)
- Lógica de primeira ordem (FOL)
- Lógica relacional (RL)
- Lógica temporal linear (LTL)
- Técnicas de prova automática
- SAT solving para lógica proposicional
- SMT solving para lógica e teorias de primeira ordem
- Model-finding via SAT para lógica relacional
- Bounded model-checking via SAT para lógica temporal
- Concepção formal de software com Alloy
- Modelação estrutural
- Modelação comportamental
- Especificação e verificação de programas com Why3
- Linguagem lógica, teorias (biblioteca) e prova
- Linguagem de programas, especificação comportamental, e verificação de correcção
- Desenvolvimento de sistemas com estado
Docentes
- Maria João Frade (MJF)
- Alcino Cunha (MAC)
- Jorge Sousa Pinto (JSP)
Avaliação
- Exercícios de avaliação (20%)
- Teste individual (80%)
Os exercícios de avaliação serão propostos no final de algumas aulas teóricas e serão para submeter na plataforma de e-learning na 6ª feira seguinte.
As notas acima de 18 valores (quer na avaliação contínua quer no exame) terão que ser defendidas através da realização de um pequeno projecto.
Horário
| Tipo | Turno | Horário | Sala | Docente |
|---|---|---|---|---|
| Teórica | 2ª 9h-11h | CP2 0.01 | ||
| Teórico-prática | 1 | 2ª 15h-16h | CP2 2.04 | JSP |
| Teórico-prática | 2 | 2ª 12h-13h | CP1 2.20 | JSP |
| Teórico-prática | 3 | 2ª 12h-13h | CP1 1.25 | MAC |
| Teórico-prática | 4 | 2ª 15h-16h | CP1 2.14 | MAC |
| Teórico-prática | 5 | 2ª 12h-13h | CP1 1.17 | MJF |
Planificação
| # | Data | Docentes | Sumário |
|---|---|---|---|
| 1 | 11 Set | Apresentação da UC. | |
| 2 | 18 Set | MJF | Lógica proposicional. SAT solvers. Modelação em PL. |
| 3 | 25 Set | MJF | Lógica de 1ª ordem. Modelação em FOL. |
| 4 | 2 Out | MJF | Teorias de 1ª ordem. SMT solvers. Modelação em FOL com teorias de 1ª ordem. |
| 6 Out | Entrega do 1º exercício de avaliação. | ||
| 5 | 9 Out | MJF | Formalização de modelos de domínio em FOL. |
| 6 | 16 Out | MAC | Introdução à modelação estrutural em Alloy: assinaturas e relações, lógica relacional. Formalização de modelos de domínio em Alloy e RL. |
| 7 | 23 Out | MAC | Modelação estrutural em Alloy: relações de aridade superior, técnicas de validação, sistema de tipos, model finding para RL. |
| 27 Out | Entrega do 2º exercício de avaliação. | ||
| 8 | 30 Out | MAC | Introdução à modelação comportamental com Alloy: especificação de sistemas com estado, técnicas de validação. |
| 9 | 6 Nov | MAC | Modelação comportamental com Alloy: lógica temporal linear, especificação e verificação de requisitos comportamentais em LTL, bounded model-checking para LTL. |
| 10 Nov | Entrega do 3º exercício de avaliação. | ||
| 10 | 13 No | JSP | Introdução ao Why3. Linguagem lógica e verificação de programas funcionais. |
| 11 | 20 Nov | JSP | Verificação de programas imperativos com Why3. Desenvolvimento de módulos com estado. |
| 12 | 27 Nov | JSP | Desenvolvimento e verificação de “software concepts” em Why3: implementação baseada em conjuntos. |
| 13 | 4 Dez | JSP | Desenvolvimento e verificação de “software concepts” em Why3: implementação eficiente. |
| 8 Dec | Entrega do 4º exercício de avaliação. | ||
| 16 Dec | TESTE ( 9h00, salas: Edificio 2 - 0.01+1.05+1.07+2.02 ) | ||
| 20 Jan | EXAME |
Exercícios de avaliação
| # | Tópico | Deadline |
|---|---|---|
| 1 | Modelação em PL e FOL. | 6 Out |
| 2 | Modelação estrutural em Alloy. | 27 Out |
| 3 | Modelação comportamental em Alloy. | 10 Nov |
| 4 | Desenvolvimento e verificação de sistemas com estado em Why3. | 8 Dez |
Material
Slides
- Propositional Logic & SAT Solvers
- First-Order Logic
- First-Order Theories & SMT solvers
- Formalizing Domain Models in FOL
- Structural design with Alloy
- Mastering Alloy
- App design with Alloy
- Why3: Logic
- Why3: Verification of Functional Programs
- Why3: Verification of Imperative Programs
- Why3: State-based Development
- Why3: Implementation of Software Concepts
- Why3: Implementation of Software Concepts, continued
Exercícios
- Aula 1
- Aula 2
- Aula 3
- Aula 4
- Aulas 5 e 6
- Aula 7
- Specify the events and scenarios of the notification and reservation concepts.
- Aula 8
- Specify and verify the operational principles of the notification and reservation concepts.
- Aula 9
- Why3 logic exercises: Offices ; SSA Program
- Offices Solution
- Aula 10
- Why3 program verification exercises: Functional Mergesort; Imperative Selection Sort
- Soluções propostas: Mergesort; Selection sort
- Aula 11
- Aula 12
Exemplos
- SAT solving
- Ficheiros DIMCS CNF
- Colab notebooks: PySATexample-models, PySATPlaceGuests, PySATGraphColoring, Z3py-PL
- SMT solving
- Ficheiros SMT-LIB2
- Colab notebooks: sudoku-Z3-LIA, CodLogProg-Z3
- Alloy
- Why3
Testes
Bibliografia
- Logic in Computer Science: Modelling and Reasoning About Systems. Michael Huth & Mark Ryan. Cambridge University Press; 2nd edition (2004).
- The Calculus of Computation: Decision Procedures with Applications to Verification. Aaron R. Bradley & Zohar Manna. Springer (2007).
- Rigorous Software Development: An Introduction to Program Verification. J.B. Almeida & M.J. Frade & J.S. Pinto & S.M. de Sousa. Springer (2011).
- Software Abstractions: Logic, Language, and Analysis (revised edition). Daniel Jackson. MIT Press (2012).
- The Essence of Software: Why Concepts Matter for Great Design. Daniel Jackson. Princeton University Press (2021)
- Formal Software Design with Alloy 6. Julien Brunel, David Chemouil, Alcino Cunha, and Nuno Macedo (2021).
Outras leituras recomendadas
- D. Jackson. Alloy: a language and tool for exploring software designs. Commun. ACM 62(9): 66-76 (2019). Também existe um vídeo sobre este artigo que pode ser visto aqui.
- Leslie Lamport. If You’re Not Writing a Program, Don’t Use a Programming Language. Bulletin of the EATCS 125 (2018)
- Breve introdução ao Alloy
Ferramentas
- SAT solvers (SAT Live! - keep up to date with research on the satisfiability problem)
- SMT solvers (SMT-LIB - The Satisfiability Modulo Theories Library)
- Alloy
- Why3