FUNCTIONAL AND CONCURRENT PROGRAMMING PRINCIPLES

Anno accademico 2025/2026 - Docente: FRANCO BARBANERA

Risultati di apprendimento attesi

Conoscenza e capacità di comprensione (knowledge and understanding):

L'obiettivo del corso e' quello di far entrare in contatto lo studente con alcuni aspetti fondamentali  la programmazione funzionale e concorrente sia dal punto di vista teorico che applicativo. Particolare attenzione verra' data, sia che per la programmazione funzionale che per qualla concorrenta, alla teoria dei tipi, intesa come utile strumento per la verifica parziale di correttezza dei programmi.

Capacità di applicare conoscenza e comprensione (applying knowledge and understanding):

Lo studio teorico di cui al punto precedente verra' accompagnato alla pratica di programmazione in linguaggi che su tali teorie si basano. Siano essi linguaggi puramente funzionali, come Haskell, oppure linguaggi per la concorrenza per lo sviluppo a livello industriale, come Erlang per al modello ad attori per la concorrenza, oppure linguaggi didattici/sperimentali, come SePi basati sul Pi-calcolo e la Teoria dei Session Types.

Autonomia di giudizio (making judgements):

Lo studente verra' stimolato ad applicare autonomamente ad esempi didattici, ma concreti di programmazione quanto imparato nel contesto formale delle teorie fondazionali presentate nel corso. Verra' inoltre stimolato a inquadrare nel contesto formale del corso le eventuali conoscenze  acquisite in passato relativamente alla programmazione funzionale e concorrente.

Abilità comunicative (communication skills):  -

Le abilità comunicative  acquisite riguardano la capacità di spiegare in modo chiaro e corretto concetti, definizioni e dimostrazioni, usando il linguaggio adatto. In altre parole, lo studente sapra’ argomentare con logica, farsi comprendere anche da chi non è esperto e discutere problemi teorici in modo ordinato e preciso.

Capacità di apprendimento (learning skills):

Lo studente sara' messo in condizione di poter affrontare autonomamente lo studio di linguaggi funzionali e concorrenti, imparandone a riconoscere ed isolare gli aspetti fondamentali che li caratterizzano.

Modalità di svolgimento dell'insegnamento

L’insegnamento si svolge attraverso lezioni frontali e attività di laboratorio/esercitazione. Le lezioni introdurranno i concetti teorici, mentre il laboratorio ne permetterà l’applicazione pratica tramite esercitazioni e casi studio.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.


Prerequisiti richiesti

Nozioni base di Logica Matematica, Modelli Computazionali, Teoria degli automi e dei Linguaggi Formali. Elementi di base di programmazione concorrente.


 

Frequenza lezioni

Per una comprensione approfondita degli argomenti trattati e delle metodologie presentate, si raccomanda vivamente la regolare partecipazione alle lezioni.

 


Contenuti del corso

Il corso di Functional and Concurrent Programming Principles fornisce una solida base per i paradigmi di programmazione funzionale e concorrente, esplorando concetti teorici e pratici attraverso linguaggi avanzati e modelli computazionali.

Il corso inizia con un'introduzione alla programmazione funzionale, dove vengono presentati i concetti principali di questo paradigma. Gli studenti impareranno le basi della programmazione in Haskell, uno dei linguaggi di programmazione funzionale più utilizzati, con particolare attenzione alla teoria dei tipi semplici e alla sua applicazione nel linguaggio, utile per garantire la correttezza e la sicurezza del codice.

Verra’ poi introdotta la programmazione concorrente, concentrandosi sui concetti di base e i modelli utilizzati in questo ambito. Viene approfondito il modello degli attori, un paradigma che consente la comunicazione tra processi concorrenti senza condividere lo stato. Gli studenti esploreranno la programmazione concorrente nei linguaggi non-imperativi, con un focus su Erlang, un linguaggio funzionale progettato per supportare la concorrenza su larga scala.

Il corso introduce inoltre il Pi-calculus, un modello computazionale per la computazione concorrente via message-passing, con mobilita'. Tale modello verra' utilizzato come base per la comprensione della teoria dei tipi sessione. Si esaminano linguaggi sperimentali come SePi, che combinano Pi-calculus e tipi sessione per gestire la concorrenza in modo più sicuro e strutturato. A ciò si affianca l'introduzione alle coreografie e ai tipi di sessione multiparty, che modellano la comunicazione tra più processi in un sistema concorrente. Durante la trattazione dei tipi sessione multiparty si prendera’ spunto per discutere brevemente della semantica a tracce dei sistemi concorrenti e delle nozioni di coinduzione e bisimulazione.

Il corso include una trattazione del teorema del punto fisso, fondamentale per la definizione di nozioni rilevanti per i sistemi concorrenti, e una panoramica sulla logica temporale e il model checking, tecniche utilizzate per verificare formalmente le proprietà di sistemi concorrenti. Saranno anche affrontate le definizioni astratte di proprieta’ di safety e di liveness per sistemi concorrenti.

 


Testi di riferimento

I testi di riferimento per il corso sono tutti reperibili e scaricabili in formato elettronico dalla pagina

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


Programmazione del corso

 ArgomentiRiferimenti testi
1 Introduzione alla Programmazione Funzionale; [FB], [B3] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
2 Introduzione ad Haskell e tipi in Haskell. Cenni sulle monadi; [B2], [HPF], [JN] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
3 Overview del lambda-calcolo; [FBb] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
4 Teoria dei tipi semplici per il lambda-calcolo ed applicazioni ad Haskell; [FBb] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
5Il modello di programmazione concorrente ad attori; [AS], [FB5]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
6Programmazione in Erlang; [JAetal1], [AAVV]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
7Introduzione al pi-calcolo; [PS]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
8Introduzione ai Session Types; [FB7]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
9Introduzione a SePi [FV] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
10Programmazione in SePi; [FVM]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
11Elementi di formalismi coreografici; [BdL]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
12 MultiParty Session Types, Simple MultiParty Sessions e loro confronto; [BdL] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
13 La nozione di subtyping: [FB] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
14Introduzione alle Logiche temporali Lineari e Branching time; [AA], [TB]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
15 Introduzione al Model Checking; [MF] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
16Teorema di Knaster-Tarski del punto fisso; [JM]https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
17 Basi di coinduzione; [BdL] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
18 Cenni di semantica a tracce dei sistemi concorrenti e bisimulazione; [BdL] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
19 Proprieta’ di safety e liveness dei sistemi concorrenti; [ASb], [ASM] https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

L'esame consiste in una prova scritta.  Nella prova scritta verranno proposti quesiti relativi alla parte teorica del corso; verra' altresi' richiesto di sviluppare piccoli programmi nei linguaggi di programmazione affrontati nel corso. Parte della prova scritta potra’ essere sostituita dallo svolgimento di piccoli progettini proposti durante lo svolgimento del corso. Tale possibilita’ e’ comunque da ritenersi dipendente dalla numerosita’ degli studenti frequentanti.

Tali prove potranno avere luogo per via telematica, qualora le condizioni lo dovessero richiedere. La prova orale potrà svolgersi il giorno stesso in cui è stata svolta la prova scritta o a distanza di pochi giorni da esso.

Per l'attribuzione del voto finale si seguiranno di norma i seguenti criteri:
- non approvato: lo studente non ha acquisito i concetti di base e non è in grado di svolgere gli esercizi.
- 18-23: lo studente dimostra una padronanza minima dei concetti di base, le sue capacità di esposizione e di collegamento dei contenuti sono modeste, riesce a risolvere semplici esercizi.
- 24-27:  lo studente dimostra una buona padronanza dei contenuti del corso, le sue capacità di esposizione e di collegamento dei contenuti sono buone,  risolve gli esercizi con pochi errori.
- 28-30 e lode: lo studente ha acquisito tutti i contenuti del corso ed è in grado di esporli compiutamente e di collegarli con spirito critico; risolve gli esercizi in modo completo e senza errori.

Gli studenti con disabilità e/o DSA dovranno contattare con sufficiente anticipo rispetto alla data dell'esame il docente, il referente CInAP del DMI (prof.ssa Daniele) e il CInAP per comunicare che intendono sostenere l'esame fruendo delle opportune misure compensative.

Esempi di domande e/o esercizi frequenti

Nella pagina web

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

sono presenti esercizi relativi agli argomenti trattati nel corso. Tali esercizi sono rappresentativi del tipo di domande proposte nell'esame scritto.

Si precisa che tali domande hanno carattere puramente indicativo: le domande effettivamente proposte in sede d’esame potranno divergere, anche in modo significativo, da quelle riportate in questa lista.

Durante le lezioni verranno svolti degli esercizi simili a quelli che gli studenti dovranno affrontare nel loro esame finale. Ulteriori esercizi verranno resi disponibili nel corso delle lezioni. 

ENGLISH VERSION