FUNCTIONAL AND CONCURRENT PROGRAMMING PRINCIPLES

Academic Year 2023/2024 - Teacher: Franco BARBANERA

Expected Learning Outcomes

Knowledge and understanding: The course aims  to make the students aquainted with some of the fundamental aspects of functional and concurrent programming.  Students will learn to recognize the "core" and relevant parts common to all functional and concurrent  programming languages, as well as to isolate their characterizing parts, As a relevant tool for the formal partial verification of programs, Type Theory will play a relevant role in the course.

Applying knowledge and understanding: The study of  foundational aspects will be paired with programming activities on different actual languages, such as Haskell for funcltional programming and  Erlang (based on the actor concurrency model) for functional/concurrent programming. Didactic/sperimental languages will also be dealt with in order to actually apply principles of Session Types.

Making judgements: The students will be encouraged to autonomously applying - on simple but actual programming examples - what learned in the general context of the foundational theories. They will be also encouraged to frame their past functional/concurrent programming experiences in the more formal part of the course..

Communication skills: The students will acquire the necessary communication skills and expressive ability in order to express in a formal and non-ambiguous way topics and  arguments related to distributed and concurrent programming.

Learning skills: The students will be anabled to autonomously facing the study of functional and concurrent languages, as well as to recognize and isolate their characterizing foundational aspects.

Course Structure

The course site contains a remarkable set of exercises, and students are invited to tackle them during self-study. 
Those in which the students encountered difficulties are addressed in the first part of the lesson, at the students' request.
Also in the first part, the teacher invites the students to communicate any difficulties encountered in tackling the study of the topics
of the previous lessons, so that we can discuss them together. In the second part of the lesson, new topics are addressed and exercises relating to them are often indicated, among those present on the course
exercises page or new ones (which will eventually increase the set of available exercises). As in the previous year, we will try to organize numerous ongoing tests, the evaluation of which will allow you to be exempted from taking part of the final exam.

Should teaching be carried out in mixed mode or remotely, it may be necessary to introduce changes with respect to previous statements, in line with the programme planned and outlined in the syllabus.

Learning assessment may also be carried out on line, should the conditions require it.

Required Prerequisites

Base notions of Logic and programming.

Attendance of Lessons

Non compulsory.

Detailed Course Content

  • Introduction to Functional Programming and main functional-programming concepts.
  • Programming in Haskell.
  • Theory of simple types and its application in Haskell.
  • Introduction to oncurrent  programming.
  • The actors model of concurrent programming.
  •  Concurrent programming in non-imperative programming paradigms: Erlang.
  • Concurrent Programming in Erlang
  • Process calculi: Introduction to the Pi-calculus;.
  • The Theory of Session Types.
  • Sperimental concurrent languages based on Pi-calcuus and session types: the language SePi
  •  Introduction to Choreographies and Multiparty Session Types.

Textbook Information

Course Planning

 SubjectsText References
1Introduction to Functional programminghttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
2Introduction to Haskell and types in Haskell.Overview of lambda-calculus.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
3Theory of simple types and ita application to Haskellhttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
4Haskell programminghttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
5The Actor model of cuncurrent programming https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
6Programming in Erlanghttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
7Introduction to pi-calcolo. https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
8Introduction to Session Types.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
9Introduzione a SePihttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
10Programming in SePi. https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
11The delegation mechanism in  . SePi examples.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
12Coreographies: global protocols, local protocols.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
13Multiparty session types.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html

Learning Assessment

Learning Assessment Procedures

In the written test, questions relating to the theoretical part of the course will be asked; the student will also be asked to develop small programs in the programming languages ​​covered in the course.

Verification of learning can also be carried out electronically, should conditions require it.

Examples of frequently asked questions and / or exercises

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