Planeamento
Aulas Teóricas
Lecture 01: Introduction to the course
Introduction to the course. General considerations about programming languages. Brief historical remarks about programming languages.
Lecture 02: Basic Functional Programming in Coq
Lecture 03: Working with structured data. Polymorphism.
Lecture 04: Polymorphism and Higher-Order Functions
Lecture 05: Higher-Order Functions and Proving in Coq
Lecture 06: Proving in Coq
Proofs by Rewriting. Proofs by Induction.
Lecture 07: Programming Language Syntax
Lecture 08: Abstract Syntax Trees
Lecture 09: Abstract Syntax Trees, Variables, Bindings, and Scopes
Lecture 10: Semantics via Interpreters
Introduction to formal semantics.
Lecture 11: Semantics via Interpreters (continued)
Lecture 12: Computational vs Relational Evaluation
Lecture 13: Relational Evaluation of Imperative Programs + Intro to Hoare Logic
Lecture 14: Consolidation and Revision
Discussion and solution of the model/previous tests.
Consolidation and revision for the first test.
Lecture 15: Invited Lecture
TBA
Lecture 16: Hoare Logic (continued)
Lecture 17: Hoare Logic (continued)
Lecture 18: Small-step Semantics
Lecture 19: Small-step Semantics / Introduction to Types
Small-step semantics (continuation).
Lecture 20: Types + Introduction to Lambda Calculus
Types and Typing Relations (continuation).
Lecture 21: Lambda Calculus / Simply Typed Lambda Calculus
Untyped Lambda Calculus: bound variables, free variables, substitution, reduction.
Lecture 22: Encoding the Simply Typed Lambda Calculus (Part 1)
Encoding in Coq of the Simply Typed Lambda Calculus (Part 1)
Lecture 23: Encoding the Simply Types Lambda Calculus (Part 2, continuation of Lecture 22)
Encoding in Coq of the Simply Typed Lambda Calculus (Part 2, continuation of Lecture 22)
Lecture 24: Typechecking + Subtyping
Exercises on typechecking.
Encoding of a typechecking algorithm.
Lecture 25: Discussion and solutions of the model test. Consolidation.
Discussion and solutions of the model test. Consolidation.
Lecture 26: Project Presentation. Discussion and solutions of the model test. Conclusion.
Students presente their projects.
Aulas Laboratoriais
No lab sessions during first week.
No lab sessions during first week.
Practical session 1: Basic Functional Programming in Coq
Functional Programming in Coq: data and functions.
Practical Session 2: Polymorphic lists, Higher-order functions, Basic Proving
Practical Session 3: Polymorphic trees, Maps
Practical Session 4: Abstract Syntax Trees / Syntax
Practical Session 5: Semantics of a simple imperative language
Practical Session 6: Relational Evaluation
Implementation of semantics in Coq as a relation.
Practical Session 7: Step-Indexed Evaluation
Implementation of a step-indexed evaluation for an imperative language with unbounded loops.
Practical Session 8: Hoare Logic
Exercises on Hoare Logic
Practical Session 9: Hoare Logic (continuation)
Exercises on Hoare Logic (Part 2)
Practical Session 10: Small-step semantics / Typing rules
Definition and encoding of a small-step semantics for a tiny imperative language.
Practical Session 11: Lambda Calculus
Exercises on the Untyped Lambda Calculus.
Practical Session 12: Simply Typed Lambda Calculus
Encoding of the Simply Typed Lambda Calculus and some extensions (such as let bindings).