Lezioni: II Semestre
Docenti
Maurizio Gabbrielli e
Davide
Sangiorgi
Obiettivi del corso
Questo corso si propone di introdurre le nozioni di base di alcuni linguaggi di programmazione avanzati quali i inguaggi logici, i linguaggi con vincoli e i linguaggi concorrenti, tre aree importanti, sia per la ricerca che per le applicazioni pratiche, che nei corsi del triennio non vengono studiate adeguatamente.
Descrizione degli argomenti del corso
La programmazione logica, basata sull'uso esplicito della logica come strumento di programmazione, e' usata principalmente in intelligenza artificiale, mentre la programmazione (logica) con vincoli e' una estensione che permette di manipolare esplicitamente vincoli (cioe' relazioni) su opportuni domini sia simbolici che numerici e trova numerose applicazioni pratiche negli ambiti piu' diversi (ad esempio bio-informatica, ottimizzazione, analisi finanziaria ecc.).
La programmazione concorrente invece si occupa della programmazione
di sistemi concorrenti, ovvero di quei sistemi formati da piu' processi
che eseguono le proprie attivita' contemporaneamente e che cosí
facendo possono interagire fra di loro. Grazie alle macchine con processori
multipli e sopratutto ai sistemi distribuiti costituiti da macchine collegate
in rete, la programmazione concorrente e' sempre piu' importante (si pensi
per esempio alle applet e ai thread di Java). La programmazione concorrente
e' piu' delicata della programmazione sequenziale standard, e per essere
realizzata efficacemente richiede costrutti e concetti nuovi.
Programma del Corso
Programmazione logica: nozioni di base; la risoluzione; l'unificazione;
cenni al Prolog.
Vincoli: la nozione di vincolo e valutazione; vincoli su alcuni domini
specifici sia numerici che simbolici; vincoli su domini finiti; risolutori
di vincoli.Programmazione logica con vincoli: nozioni di base; semantica
operazionale; controllo della ricerca; efficienza. Modellizazione: esempi
pratici di problemi modellati con vincoli; uso di strutture dati; labelling.
Programmazione concorrente: costrutti di base della programmazione concorrente;
come creare attivita' concorrenti e come sincronizzarle; meccanismi per
la composizione di processi semplici; meccanimsi per risolvere problemi
piu' complessi; esempi in Java.
Bibliografia
K. Marriott e Peter Stuckey. Programming with constraints. MIT Press
I lucidi usati a lezione (di K. Marriott, leggermente modificati):
Chapter
1: Constraints
Chapter
2: Simplification, Optimization and Implication
Chapter
3: Finite Domain Constraints
Chapter
4: Constraint Logic Programs
Chapter
5: Modeling
Chapter
6: Data Structures
Chapter
7: Controling search
Chapter
8: Finite Domains
Un survey su CLP:
J. Jaffar and M.J. Maher. Constrain Logic Programming: a survey.
Lucidi su concorrenza: