====== Principles for Software Composition ====== {{:magistraleinformatica:psc:psc.png?250 | }} **PSC 2019/20 (375AA, 9 CFU)** Lecturer: **Roberto Bruni**\\ [[http://www.di.unipi.it/~bruni|web]] - [[mailto:bruni@di.unipi.it|email]] - phone 050 2212785 - fax 050 2212726 Office hours: **Tuesday 15:00-17:00 or by appointment** ---- ==== Objectives ==== 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. ---- ==== Prerequisites ==== 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. ---- ==== Textbook(s) ==== Main text: * Roberto Bruni, Ugo Montanari, "[[http://www.springer.com/978-3-319-42898-7|Models of Computation]]", Springer Texts in Computer Science, 2017. Other readings: * Graham Hutton, "[[http://www.cs.nott.ac.uk/~pszgmh/pih.html|Programming in Haskell]]", 2nd edition, Cambridge University Press (2016). Chapters: 1-8, 14, 15. * Joe Armstrong, [[https://pragprog.com/book/jaerlang2/programming-erlang|Programming Erlang]], 2nd edition. The Pragmatic Bookshelf (2013). Chapters: 1-5, 8, 10-12. * Caleb Doxsey, [[http://shop.oreilly.com/product/0636920046516.do|Introducing Go]], O'Reilly Media (2016). Chapters: 1-4, 6-7, 10. * Robin Milner, "[[https://books.google.it/books/about/Communication_and_Concurrency.html?id=QPyyQgAACAAJ&redir_esc=y|Communication and Concurrency]]", Prentice Hall (1989). Chapters: 1-7, 10. * Luca Aceto, et al, "[[https://www.cambridge.org/core/books/reactive-systems/9B91FFD3996FC77D7AF0C309F8EE4CF7#|Reactive Systems]]", Cambridge University Press (2011). Chapters: 1-7. * Jane Hillston, [[http://www.dcs.ed.ac.uk/pepa/book.pdf|A Compositional Approach to Performance Modelling]], Cambridge University Press (1996). Chapters 1-3. External resources: * [[https://www.haskell.org/|Haskell]] * [[http://www.erlang.org/|Erlang]] * [[http://golang.org/|Google Go]] * [[http://caal.cs.aau.dk/|CAAL]] * [[http://www.dcs.ed.ac.uk/pepa/|PEPA]] ---- ==== Exams ==== 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. Registration to exams (mandatory): [[https://esami.unipi.it/esami/|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 ==== ^ Date ^^ Time ^ Name ^ Place ^ | **Thursady** | **10/09** | 12:00 | Lorenzo Gazzella | [[https://teams.microsoft.com/l/meetup-join/19%3aa05eda073a9f4bf4bfbf02f3a301169d%40thread.tacv2/1599636197768?context=%7b%22Tid%22%3a%22c7456b31-a220-47f5-be52-473828670aa1%22%2c%22Oid%22%3a%225dbef49a-16b4-4863-9a6c-9e378eb9813c%22%7d|Microsoft Teams]] | ---- ==== Announcements ==== * Due to the covid-19 emergency situation, there will be no **mid-term exams** * **The lectures of March 5th and 6th are canceled** due to the decree that suspends all University lectures until March 15th * as the course starts:\\ Each student should send an email to the professor from his/her favourite email account with subject **PSC19-20** and the following data\\ (by doing so, the account will be included in the class mailing-list, where important announcements can be sent): - **first name** and **last name** (please clarify which is which, to avoid ambiguities) - **enrolment number** (numero di matricola) - bachelor degree (**course of study** and **university**) - your favourite topics in computer science (optional) ---- ==== Lectures (1st part) ==== ^ N ^ Date ^^ Time ^ Room ^ Lecture notes ^ Links ^ | 1 | Wed | 19/02 | 14:00-16:00 | L1 | Introduction to the course | | | 2 | Thu | 20/02 | 14:00-16:00 | N1 | Preliminaries:\\ //formal semantics, normalisation, determinacy, consistency, equivalence,\\ signatures, unification problem,// | | | 3 | Fri | 21/02 | 14:00-16:00 | N1 | Preliminaries:\\ //logical systems, derivations, logic programs, goal-oriented derivations// | | | 4 | Wed | 26/02 | 14:00-16:00 | L1 | Exercises:\\ //unification, goal-oriented derivations//\\ \\ Induction and recursion:\\ //well-founded relations, well-founded induction, mathematical induction// | | | 5 | Thu | 27/02 | 14:00-16:00 | N1 | Induction and recursion:\\ //proof of induction principle, structural induction,\\ termination of arithmetic expressions, determinacy of arithmetic expressions// | | | 6 | Fri | 28/02 | 14:00-16:00 | N1 | Induction and recursion:\\ //structural induction over many-sorted signatures, termination of boolean expressions,\\ operational semantics of commands, divergence\\ induction on derivations// | | | 7 | Wed | 04/03 | 14:00-16:00 | L1 | Induction and recursion:\\ //rule induction, determinacy of commands, well-founded recursion,\\ denotational semantics of arithmetic expressions,\\ consistency of operational and denotational semantics for arithmetic expressions\\ lexicographic precedence relation, Ackermann function, fixpoint equations// | | | - | Thu | 05/03 | 14:00-16:00 | N1 | **Lecture canceled** due to covid-19 countermeasures | | | - | Fri | 06/03 | 14:00-16:00 | N1 | **Lecture canceled** due to covid-19 countermeasures | | | 8 | Wed | 11/03 | 14:00-16:00 | Google Meet | Exercises:\\ //induction and recursion, termination, determinacy, divergence//\\ \\ Partial orders and fixpoints:\\ //partial orders, Hasse diagrams, chains, least element, minimal element,\\ bottom element, upper bounds, least upper bound, chains, limits// | | | 9 | Thu | 12/03 | 14:00-16:00 | Google Meet | Partial orders and fixpoints:\\ //complete partial orders, powerset completeness,\\ CPO of partial functions, monotonicity, continuity, Kleene's fixpoint theorem// | | | 10 | Fri | 13/03 | 14:00-16:00 | Google Meet | Partial orders and fixpoints:\\ //immediate consequences operator, denotational semantics of commands,\\ fixpoint computation, semantic equivalence, consistency of commands\\ correctness// | | | 11 | Wed | 18/03 | 14:00-16:00 | Google Meet | Exercises:\\ //well-founded recursion, posets, semantics//\\ \\ Partial orders and fixpoints:\\ //consistency of commands, completeness// | | | 12 | Thu | 19/03 | 14:00-16:00 | Google Meet | Lambda-notation:\\ //free variables, capture-avoiding substitutions//\\ \\ Haskell:\\ //an overview//\\ {{ :magistraleinformatica:psc:ghci-session1-2020.txt.zip |ghci session 1}} | [[https://www.haskell.org/|Haskell]] | | 13 | Fri | 20/03 | 14:00-16:00 | Google Meet | Haskell:\\ //lambda, guards, pattern matching, recursion, exercises//\\ {{ :magistraleinformatica:psc:ghci-session2-2020.txt.zip |ghci session 2}} | | | 14 | Wed | 25/03 | 14:00-16:00 | Google Meet | Haskell:\\ //recursive definitions, folds, application, function composition//\\ {{ :magistraleinformatica:psc:ghci-session3-2020.txt.zip |ghci session 3}} | | | 15 | Thu | 26/03 | 14:00-16:00 | Google Meet | Haskell:\\ //data types, type classes, recursive data structures, derived instances//\\ {{ :magistraleinformatica:psc:ghci-session4-2020.txt.zip |ghci session 4}}\\ \\ Exercises:\\ //Haskell// | | | 16 | Fri | 27/03 | 14:00-16:00 | Google Meet | Exercises:\\ //Haskell//\\ {{ :magistraleinformatica:psc:ghci-session5-2020.txt.zip |ghci session 5}}\\ \\ HOFL:\\ //syntax, type system, type checking, type inference, principal type// | | | 17 | Wed | 01/04 | 14:00-16:00 | Google Meet | HOFL:\\ //canonical forms, operational semantics, lazy vs eager evaluation//\\ \\ Domain theory:\\ //Integers with bottom, cartesian product, projections// | | | - | Thu | 02/04 | 14:00-16:00 | | **canceled** for preparation to self-assessment test | | | 18 | Fri | 03/04 | 14:00-16:00 | Google Meet | {{ :magistraleinformatica:psc:extra.pdf |Self-assessment test}} | | ==== Lectures (2nd part) ==== ^ N ^ Date ^^ Time ^ Room ^ Lecture notes ^ Links ^ | 19 | Wed | 08/04 | 14:00-16:00 | Google Meet | Correction of self-assessment test | | | - | Thu | 09/04 | 14:00-16:00 | | **canceled** | | | 20 | Wed | 15/04 | 14:00-16:00 | Google Meet | Domain theory:\\ //switching lemma, functional domains, lifting// | | | 21 | Thu | 16/04 | 14:00-16:00 | Google Meet | Domain theory:\\ //continuity theorems, apply, fix, let notation//\\ \\ Denotational semantics of HOFL:\\ //definition and examples, type consistency// | | | 22 | Fri | 17/04 | 14:00-16:00 | Google Meet | Denotational semantics of HOFL:\\ //substitution lemma, compositionality and other properties//\\ \\ Consistency of HOFL:\\ //Counterexample to completeness, correctness of the operational semantics,\\ operational convergence, denotational convergence,\\ operational convergence implies denotational convergence,\\ denotational convergence implies operational convergence (optional),\\ operational and denotational equivalence, correspondence for type int,\\ unlifted semantics// | | | 23 | Wed | 22/04 | 14:00-16:00 | Google Meet | Exercises:\\ //HOFL, domains// | | | 24 | Thu | 23/04 | 14:00-16:00 | Google Meet | Erlang:\\ //an overview//\\ {{ :magistraleinformatica:psc:erl_2020.zip |erl session}} | [[http://www.erlang.org/|Erlang]] | | 25 | Fri | 24/04 | 14:00-16:00 | Google Meet | CCS:\\ //Syntax, operational semantics, finitely branching processes,\\ guarded processes, value passing, abstract semantics, graph isomorphism// | | | 26 | Wed | 29/04 | 14:00-16:00 | Google Meet | CCS:\\ //trace equivalence, bisimulation game, strong bisimulation,\\ strong bisimilarity, strong bisimilarity is an equivalence,\\ strong bisimilarity as a fixpoint// | | | 27 | Thu | 30/04 | 14:00-16:00 | Google Meet | CCS:\\ //strong bisimilarity as a fixpoint, Knaster-Tarski's fixpoint theorem,\\ strong bisimilarity is a congruence, some laws for strong bisimilarity,\\ Hennessy-Milner logic// | | | 28 | Wed | 06/05 | 14:00-16:00 | Google Meet | CCS:\\ //weak bisimulation, weak bisimilarity, weak observational congruence,\\ Milner's tau-laws, modelling with CCS// | | | 29 | Thu | 07/05 | 14:00-16:00 | Google Meet | CCS:\\ //modelling and playing with CCS (using CAAL)//\\ {{ :magistraleinformatica:psc:caal-session-2020.zip |CAAL session}} (copy the text and paste it in the Edit panel) | [[http://caal.cs.aau.dk/|CAAL]] | | 30 | Fri | 08/05 | 14:00-16:00 | Google Meet | Exercises:\\ //Erlang, CCS//\\ \\ Temporal and modal logics:\\ //linear temporal logic (LTL)// | | | 31 | Wed | 13/05 | 14:00-16:00 | Google Meet | Temporal and modal logics:\\ //computational tree logic (CTL* and CTL), mu-calculus// | | | 32 | Thu | 14/05 | 14:00-16:00 | Google Meet | GoogleGo:\\ //an overview//\\ {{ :magistraleinformatica:psc:go-session-2020.zip |go-session}} | [[http://golang.org/|Google Go]] | | 33 | Fri | 15/05 | 14:00-16:00 | Google Meet | Pi-calculus:\\ //syntax and operational semantics, examples// | | | 34 | Wed | 20/05 | 14:00-16:00 | Google Meet | Exercises:\\ //logics, GoogleGo, pi-calculus//\\ \\ Pi-calculus:\\ //early and late bisimilarities, weak bisimilarities// | | | 35 | Thu | 21/05 | 14:00-16:00 | Google Meet | Measure theory and Markov chains:\\ //probability space, random variables, stochastic processes,\\ homogeneous Markov chains, DTMC, DTMC as matrices, DTMC as PTS,\\ next state probability, finite path probability, ergodic DTMC,\\ steady state distribution, negative exponential distribution// | | | 36 | Fri | 22/05 | 14:00-16:00 | Google Meet | Measure theory and Markov chains:\\ //CTMC, embedded DTMC, infinitesimal generator matrix,\\ CTMC stationary distribution, bisimilarity revisited, reachability predicate,\\ CTMC bisimilarity, DTMC bisimilarity//\\ \\ Markov chains with actions:\\ //reactive systems, bisimilarity for reactive systems, Larsen-Skou logic//\\ \\ PEPA:\\ //motivation, basic ideas, PEPA workflow// | | | 37 | Wed | 27/05 | 14:00-16:00 | Google Meet | PEPA:\\ //PEPA syntax, apparent rate, PEPA operational semantics,\\ performance analysis//\\ \\ Exercises:\\ //probabilistic systems// | [[http://www.dcs.ed.ac.uk/pepa/|PEPA]] | | End | | | | | | | | - | | 12/06 | | Microsoft Teams | Oral Exam\\ [[https://esami.unipi.it/esami/|Exams registration system]] | | | - | | 03/07 | | Microsoft Teams | Oral Exam\\ [[https://esami.unipi.it/esami/|Exams registration system]] | | | - | | 24/07 | | Microsoft Teams | Oral Exam\\ [[https://esami.unipi.it/esami/|Exams registration system]] | | | - | | 04/09 | | Microsoft Teams | Oral Exam\\ [[https://esami.unipi.it/esami/|Exams registration system]] | | | - | | 21/01 | | Microsoft Teams | Oral Exam\\ [[https://esami.unipi.it/esami/|Exams registration system]] | | | - | | 11/02 | | Microsoft Teams | Oral Exam\\ [[https://esami.unipi.it/esami/|Exams registration system]] | | ---- ==== Past courses ==== * [[magistraleinformatica:psc:2018-19:|A.A. 2018/19]] * [[magistraleinformatica:psc:2017-18:|A.A. 2017/18]] * [[magistraleinformatica:mod:|MOD (A.A. 2016/17)]] * [[magistraleinformatica:mod:2015-16:|MOD (A.A. 2015/16)]] * [[magistraleinformatica:mod:2014-15:|MOD (A.A. 2014/15)]] * [[magistraleinformatica:mod:2013-14:|MOD (A.A. 2013/14)]] ----