Strumenti Utente

Strumenti Sito


Principles for Software Composition

PSC 2020/21 (375AA, 9 CFU)

Lecturer: Roberto Bruni
web - email - Microsoft Teams channel

Office hours: Tuesday 15:00-17:00 or by appointment


The objective of the course is to present:

  • different models of computation,
  • their programming paradigms,
  • their mathematical descriptions, both concrete and abstract,
  • some intellectual tools/techniques for reasoning on models.

The course will cover the basic techniques for assigning meaning to programs with higher-order, concurrent and probabilistic features (e.g., domain theory, logical systems, well-founded induction, structural recursion, labelled transition systems, Markov chains, probabilistic reactive systems, stochastic process algebras) and for proving their fundamental properties, such as termination, normalisation, determinacy, behavioural equivalence and logical equivalence. Temporal and modal logics will also be studied for the specification and analysis of programs. In particular, some emphasis will be posed on modularity and compositionality, in the sense of guaranteeing some property of the whole by proving simpler properties of its parts.


There are no prerequisites, but the students are expected to have some familiarity with discrete mathematics, first-order logic, context-free grammars, and code fragments in imperative and functional style.


Main text:

Other readings:

External resources:


Normally, the evaluation would have been based on written and oral exams.

Due to the covid-19 countermeasures, for the current period, the evaluation will be solely based on oral exams. As an alternative to the assignment of exercises during the oral exam, students can develop a small project before the exam (contact the teacher if interested).

Registration to exams (mandatory): Exams registration system

During the oral exam the student must demonstrate

  • knowledge: his/her knowledge of the course material, and
  • problem solving: the ability to solve some simple exercises, and
  • understanding: the ability to discuss the reading matter thoughtfully and with propriety of expression.

Oral Exams: schedule

See the channel Exams in the Microsoft Teams platform


  • Due to the covid-19 emergency situation, there will be no mid-term exams
  • as the course starts:
    Each student must subscribe the Microsoft Teams channel of the course and then send an email to the professor from his/her favourite email account with subject PSC20-21 and the following data
    (by doing so, the account will be included in the class mailing-list, where important announcements can be sent):
    1. first name and last name (please clarify which is which, to avoid ambiguities)
    2. enrolment number (numero di matricola)
    3. bachelor degree (course of study and university)
    4. your favourite topics in computer science (optional)

Lectures (1st part)

Virtual classroom: To join a lecture enter the course team on Microsoft Teams, go to the Lectures channel and click on the scheduled lecture.

N Date Time Room Lecture notes Links
1 Mon 15/02 16:00-18:00 Teams 01 - Introduction to the course Lecture 01
2 Wed 17/02 14:00-16:00 Teams 02 - Preliminaries:
from syntax to semantics, the role of formal semantics, SOS approach, small-step operational semantics, big-step operational semantics
Lecture 02
3 Fri 21/02 14:00-16:00 Teams 02 - Preliminaries (ctd.):
denotational semantics, compositionality principle, normalisation, determinacy, consistency, equivalence, congruence, signatures

03 - Unification:
inference process, signatures, substitutions,unification problem, unification algorithm
Lecture 03
4 Mon 22/02 16:00-18:00 Teams 04 - Logical systems:
logical systems, derivations, logic programs, goal-oriented derivations
Lecture 04
5 Wed 24/02 14:00-16:00 Teams 05 - Induction:
precedence relation, infinite descending chains, well-founded relations, well-founded induction, mathematical induction, proof of induction principle, structural induction, termination of arithmetic expressions, determinacy of arithmetic expressions
Lecture 05a
6 Fri 26/02 14:00-16:00 Teams 05 - Induction (ctd.):
termination of arithmetic expressions

unification, goal-oriented derivations
Exercises 01
7 Mon 01/03 16:00-18:00 Teams 05 - Induction (ctd.):
determinacy of arithmetic expressions, structural induction over many-sorted signatures, termination of boolean expressions, memories, update operation, operational semantics of commands, divergence
Lecture 05b
8 Wed 03/03 14:00-16:00 Teams 05 - Induction (ctd.):
rule for divergence, limits of structural induction, induction on derivations, rule induction, determinacy of commands
Lecture 05c
9 Fri 05/03 14:00-16:00 Teams Exercises:
induction, termination, determinacy, divergence

06 - Equivalence:
operational equivalence, concrete equivalences, parametric equivalences, equivalence and divergence
Exercises 02

Lecture 06
10 Mon 08/03 16:00-18:00 Teams 07 - Induction and recursion:
well-founded recursion, denotational semantics of arithmetic expressions, consistency of operational and denotational semantics for arithmetic expressions, lexicographic precedence relation, Ackermann function, fixpoint equations
Lecture 07
11 Wed 10/03 14:00-16:00 Teams Exercises:
x++, arithmetic expressions with side-effects

08 - Partial orders and fixpoints:
partial orders, Hasse diagrams, chains, least element, minimal element, bottom element, upper bounds, least upper bound, chains, limits, complete partial orders, powerset completeness
Lecture 08a
12 Fri 12/03 14:00-16:00 Teams 08 - Partial orders and fixpoints (ctd.):
prefix independence, CPO of partial functions, monotonicity, continuity, Kleene's fixpoint theorem
Lecture 08b
13 Mon 15/03 16:00-18:00 Teams 08 - Partial orders and fixpoints (ctd.):
recursive definitions of partial functions as logical systems, immediate consequences operator, set of theorems as fixpoint

09 - Denotational semantics:
lambda-notation, free variables, capture-avoiding substitutions, alpha-conversion, beta rule, conditionals
Lecture 08c

Lecture 09
14 Wed 17/03 14:00-16:00 Teams 09 - Denotational semantics (ctd.):
denotational semantics of commands, fixpoint computation

10 - Consistency:
denotational equivalence, congruence, compositionality principle, consistency of commands, correctness, completeness

well-founded recursion, posets, semantics
Lecture 10

Exercises 03
15 Fri 19/03 14:00-16:00 Teams 10 - Consistency (ctd.):

well-founded recursion, rule induction

11 - Haskell:
an overview
Lecture 11
16 Mon 22/03 16:00-18:00 Teams Haskell ghci:
basics, lambda, tuples, lists, list comprehension, guards, pattern matching, partial application, recursive definitions, zip, exercises
ghci session 01
17 Wed 24/03 14:00-16:00 Teams Haskell ghci (ctd.):
costrutto let-in, costrutto where, map, filter, fixpoint operator, exercises
ghci session 02
18 Fri 26/03 14:00-16:00 Teams Haskell ghci (ctd.):
tail recursion, folds, application, function composition, data types, type classes, recursive data structures, derived instances, exercises
ghci session 03
19 Mon 29/03 16:00-18:00 Teams Exercises:

12 - HOFL:
syntax, type system, type checking
Exercises 04
Lecture 12a
20 Wed 31/03 14:00-16:00 Teams 12 - HOFL (ctd.):
type inference, principal type, canonical forms, operational semantics, lazy vs eager evaluation
Lecture 12b

Lectures (2nd part)

Virtual classroom: To join a lecture enter the course team on Microsoft Teams, go to the Lectures channel and click on the scheduled lecture.

N Date Time Room Lecture notes Links
21 Wed 07/04 14:00-16:00 Teams 13 - Domain theory:
Integers with bottom, cartesian product, projections, switching lemma, functional domains
Lecture 13a
Lecture 13b
22 Fri 09/04 14:00-16:00 Teams 13 - Domain theory (ctd.):
functional domains, lifting, continuity theorems, apply, fix, let notation
Lecture 13c
23 Mon 12/04 16:00-18:00 Teams 14 - Denotational semantics of HOFL:
definition and examples, type consistency, substitution lemma, compositionality and other properties
Lecture 14
24 Wed 14/04 14:00-16:00 Teams 15 - Consistency of HOFL:
Counterexample to completeness, correctness of the operational semantics, operational convergence, denotational convergence, operational convergence implies denotational convergence (and vice versa), operational and denotational equivalence, correspondence for type int, unlifted semantics

HOFL, domains
Lecture 15
Exercises 05
25 Fri 16/04 14:00-16:00 Teams Exercises:

16 - Erlang:
an overview
Lecture 16
26 Mon 19/04 16:00-18:00 Teams Erlang erl:
numbers, atoms, tuples, lists, terms, variables, term comparison, pattern matching, list comprehension, modules, functions, guards, higher order, recursion, pids, spawn, self, send, receive, examples
erl session
27 Wed 21/04 14:00-16:00 Teams 17 - CCS:
Syntax, operational semantics
Lecture 17a
28 Fri 23/04 14:00-16:00 Teams 17 - CCS:
value passing, finitely branching processes, guarded processes (proofs about properties of guarded processes are optional)

18 - Bisimulation:
abstract semantics, graph isomorphism, trace equivalence, bisimulation game, strong bisimulation
Lecture 17b
Lecture 18a
Lecture 18b
29 Mon 26/04 16:00-18:00 Teams 18 - Bisimulation:
strong bisimilarity, strong bisimilarity is an equivalence, strong bisimilarity is a bisimulation, strong bisimilarity is the coarsest strong bisimulation, strong bisimilarity is a congruence, some laws for strong bisimilarity, strong bisimilarity as a fixpoint
Lecture 18c
30 Wed 28/04 14:00-16:00 Teams 18 - Bisimulation:
strong bisimilarity as a fixpoint, Phi operator, Phi is monotone, Phi is continuous (on finitely branching processes), Knaster-Tarski's fixpoint theorem

19 - Hennessy-Milner logic:
modalities, HML syntax, formula satisfaction, converse of a formula, HML equivalence

20 - Weak Semantics:
weak transitions, weak bisimulation
Lecture 19
Lecture 20
31 Fri 30/04 14:00-16:00 Teams 20 - Weak Semantics:
weak bisimilarity, weak bisimilarity is not a congruence, weak observational congruence, Milner's tau-laws

21 - CCS at work:
modelling imperative programs with CCS, playing with CCS (using CAAL)
CAAL session 01 (copy the text and paste it in the Edit panel)
Lecture 21
32 Mon 03/05 16:00-18:00 Teams 21 - CCS at work:
modelling and verification of mutual exclusion algorithms with CCS and CAAL
CAAL session 02 (copy the text and paste it in the Edit panel)
33 Wed 05/05 14:00-16:00 Teams Exercises:
CAAL, Erlang, CCS
Exercises 06
34 Fri 07/05 14:00-16:00 Teams Exercises:

22 - Temporal and modal logics:
linear temporal logic (LTL), linear structures models, shifting, LTL satisfaction, equivalence of formulas, automata-like models
Lecture 22a
35 Mon 10/05 16:00-18:00 Teams 22 - Temporal and modal logics:
computational tree logic (CTL* and CTL), infinite trees, infinite paths, branching structure, CTL* satisfaction, equivalence of formulas, CTL formulas, expressiveness comparison, mu-calculus, positive normal form, least and greatest fixpoints, invariant properties, possibly properties, mu-calculus with labels
Lecture 22b
36 Wed 12/05 14:00-16:00 Teams 23 - GoogleGo:
an overview

GoogleGo playground:
Go principles, variable declaration, type conversion, multiple assignments, type inference, imports, packages and public names, named return values, naked return, multiple results, conditionals and loops, pointers, struct, receiver arguments and methods, interfaces, goroutines, bidirectional channels, channel types, send, receive, asynchronous communication with buffering, close, select, communicating communication means
go session 01
Lecture 23
Google Go
37 Fri 14/05 14:00-16:00 Teams GoogleGo playground:
range, handling multiple senders, concurrent prime sieve
go session 02

24 - Pi-calculus:
name mobility, free names, bound names, syntax and operational semantics, scope extrusion, early and late bisimilarities, weak semantics
Lecture 24
38 Mon 17/05 16:00-18:00 Teams Exercises:
logics, GoogleGo, pi-calculus

25 - Measure theory and Markov chains:
probability space, random variables, stochastic processes
Exercises 07
Lecture 25a
39 Wed 19/05 14:00-16:00 Teams 25 - Measure theory and Markov chains:
homogeneous Markov chains, DTMC, DTMC as matrices, DTMC as PTS, next state probability, finite path probability, ergodic DTMC, steady state distribution, negative exponential distribution, CTMC, embedded DTMC, infinitesimal generator matrix, CTMC stationary distribution
Lecture 25b
40 Fri 21/05 14:00-16:00 Teams 26 - Probabilistic bisimilarities:
bisimilarity revisited, reachability predicate, CTMC bisimilarity, DTMC bisimilarity, Markov chains with actions, probabilistic reactive systems, bisimilarity for reactive systems, Larsen-Skou logic

27 - PEPA:
motivation, basic ideas, PEPA workflow, PEPA syntax, cooperation combinator, bounded capacity, apparent rate, PEPA operational semantics, performance analysis, reward structures

Markov chains, probabilistic systems, PEPA
Lecture 26
Lecture 27
Exercises 08

Exam sessions

Date Time Room Info
Fri 04/06 11:00 Teams Exam
The actual date of the oral exam will be agreed with the teacher
Fri 25/06 11:00 Teams Exam
The actual date of the oral exam will be agreed with the teacher
Fri 23/07 11:00 Teams Exam
The actual date of the oral exam will be agreed with the teacher
Fri 03/09 11:00 Teams Exam
The actual date of the oral exam will be agreed with the teacher
Fri 14/01 11:00 Teams Exam
The actual date of the oral exam will be agreed with the teacher
Tue 01/02 11:00 Teams Exam
The actual date of the oral exam will be agreed with the teacher

Past courses

magistraleinformatica/psc/2020-21/start.txt · Ultima modifica: 05/02/2022 alle 16:55 (16 mesi fa) da Roberto Bruni