FUNCTIONAL AND CONCURRENT PROGRAMMING PRINCIPLES

Academic Year 2025/2026 - Teacher: Franco BARBANERA

Expected Learning Outcomes

Knowledge and Understanding: 
The goal of the course is to introduce students to some fundamental aspects of functional and concurrent programming, both theoretically and practically. Particular attention will be given, for both functional and concurrent programming, to type theory, understood as a useful tool for partially verifying program correctness. 
Applying Knowledge and Understanding: 
The theoretical study referred to in the previous point will be combined with practical programming in languages ​​based on these theories. These languages ​​may be purely functional languages, such as Haskell, or concurrency languages ​​for industrial development, such as Erlang for the actor-based model for concurrency, or educational/experimental languages, such as SePi, based on Pi-calculus and Session Types Theory. 
Making judgments: 
Students will be encouraged to independently apply what they have learned in the formal context of the foundational theories presented in the course to practical, yet practical, programming examples. They will also be encouraged to place any previous knowledge acquired regarding functional and concurrent programming within the formal context of the course.
 Communication skills: 
The acquired communication skills involve the ability to clearly and correctly explain concepts, definitions, and proofs, using appropriate language. In other words, students will be able to argue logically, be understood even by non-experts, and discuss theoretical problems in an orderly and precise manner.
Learning skills: 
Students will be able to independently approach the study of functional and concurrent languages, learning to recognize and isolate their fundamental characteristics.
Risultati di traduzione disponibili 

Course Structure

Teaching is delivered through lectures and laboratory/exercise activities. Lectures will introduce theoretical concepts, while the laboratory will allow for practical application through exercises and case studies. If teaching is taught in a blended or distance learning mode, necessary changes may be made to the previously stated curriculum, in order to adhere to the planned program outlined in the syllabus.

Required Prerequisites

Basic notions of mathematical logic, computational models, automata theory and formal languages. Fundamentals of concurrent programming.

Attendance of Lessons

For a thorough understanding of the topics covered and the methodologies presented, regular class attendance is strongly recommended.

Detailed Course Content

The Functional and Concurrent Programming Principles course provides a solid foundation in functional and concurrent programming paradigms, exploring theoretical and practical concepts through advanced languages ​​and computational models. The course begins with an introduction to functional programming, presenting the main concepts of this paradigm. Students will learn the basics of programming in Haskell, one of the most widely used functional programming languages, with a focus on simple type theory and its application to the language, which is useful for ensuring code correctness and security. Concurrent programming will then be introduced, focusing on the basic concepts and models used in this field. The actor model, a paradigm that allows communication between concurrent processes without sharing state, will be explored in depth. Students will explore concurrent programming in non-imperative languages, with a focus on Erlang, a functional language designed to support large-scale concurrency. The course also introduces the Pi-calculus, a computational model for concurrent computation via message-passing, with mobility. This model will be used as a foundation for understanding session type theory. Experimental languages ​​such as SePi, which combine Pi-calculus and session types to manage concurrency in a safer and more structured way, will be examined. This is complemented by an introduction to choreographies and multiparty session types, which model communication between multiple processes in a concurrent system. During the discussion of multiparty session types, we will briefly discuss the trace semantics of concurrent systems and the notions of coinduction and bisimulation. The course includes a discussion of the fixed-point theorem, fundamental for defining notions relevant to concurrent systems, and an overview of temporal logic and model checking, techniques used to formally verify the properties of concurrent systems. Abstract definitions of safety and liveness properties for concurrent systems will also be explored.

 

Textbook Information

All reference texts for the course are available and downloadable in electronic format from the page

 https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html


Course Planning

 SubjectsText References
1Introduction to Functional Programming; [FB], [B3]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
2Introduction to Haskell and Haskell types. Notes on monads; [B2], [HPF], [JN]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
3 Overview of lambda-calculus; [FBb] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
4Simple type theory for lambda calculus and applications to Haskell; [FBb]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
5The Actor model of concurrent programmin; [AS], [FB5]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
6Programming in Erlang; [JAetal1], [AAVV]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
7Introduction to pi-calculus; [PS]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
8Introduction to Session Types; [FB7]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
9Introduction to SePi [FV] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
10Programming in SePi; [FVM]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
11Elements of choreography formalisms; [BdL]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
12MultiParty Session Types, Simple MultiParty Sessions and their comparison; [BdL]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
13 The notion of subtyping: [FB] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
14Introduction to Linear Temporal Logic and Branching Time; [AA], [TB]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
15 Introduction to Model Checking; [MF] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
16Knaster-Tarski fixpoint theorem; [JM]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
17 Elements of coinduction; [BdL] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
18Elements of trace semantics of concurrent systems and bisimulation; [BdL]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
19 Safety and liveness properties of concurrent systems; [ASb], [ASM] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html

Learning Assessment

Learning Assessment Procedures

The exam consists of a written test. The written test will include questions related to the theoretical part of the course; students will also be asked to develop small programs in the programming languages ​​covered in the course. Part of the written test may be replaced by small projects proposed during the course. This possibility, however, is dependent on the number of students attending. These tests may be conducted online, if conditions require. The oral exam may be held on the same day as the written test or a few days after it. The following criteria will generally be used to assign the final grade:

 - Not passed: The student has not mastered the basic concepts and is unable to complete the exercises. 

- 18-23: The student demonstrates minimal mastery of the basic concepts, their ability to present and connect content is modest, and they can solve simple exercises.

 - 24-27: The student demonstrates a good command of the course content, good presentation and connection skills, and completes the exercises with few errors. 

- 28-30 with honors: The student has mastered all the course content and is able to present it thoroughly and connect it critically; he or she completes the exercises completely and error-free.

 Students with disabilities and/or learning disabilities (LD) must contact the instructor, the DMI CInAP representative (Prof. Daniele), and CInAP well in advance of the exam date to communicate their intention to take the exam with appropriate compensatory measures.

Examples of frequently asked questions and / or exercises

The webpage 

https://www.dmi.unict.it/barba/PRINC-FUN-CONC/ESERCIZI/index.html 

contains exercises related to the topics covered in the course. These exercises are representative of the types of questions asked in the written exam. Please note that these questions are purely indicative: the actual questions asked in the exam may differ, even significantly, from those listed here. 

During lectures, exercises similar to those students will complete in their final exam will be completed. Additional exercises will be made available during lectures.

VERSIONE IN ITALIANO