Insegnamento PROGRAMMAZIONE DICHIARATIVA

Nome del corso di laurea Informatica
Codice insegnamento 55026206
Curriculum Modelli e sistemi dell'elaborazione dell'informazione
Docente responsabile Stefano Bistarelli
Docenti
  • Stefano Bistarelli
  • Andrea Formisano (Codocenza)
Ore
  • 10 Ore - Stefano Bistarelli
  • 32 Ore (Codocenza) - Andrea Formisano
CFU 6
Regolamento Coorte 2018
Erogato Erogato nel 2019/20
Erogato altro regolamento
Informazioni sull'attività didattica
Attività Caratterizzante
Ambito Discipline informatiche
Settore INF/01
Anno 2
Periodo Primo Semestre
Tipo insegnamento Opzionale (Optional)
Tipo attività Attività formativa monodisciplinare
Lingua insegnamento ITALIANO
Contenuti Temi affrontati durante il corso:
Fondamenti della logica computazionale (proposizionale e predicativa).
Programmazione logica. Prolog.
Tecniche avanzate di programmazione dichiarativa: Constraint Logic Programming, Answer Set Programming.
Approccio dichiarativo alla modellazione e soluzione di problemi computazionalmente difficili.
Applicazioni a problemi di ottimizzazione e decisionali: problemi combinatorici, planning e scheduling,
problemi su grafi, problemi tipici di bioinformatica, giochi, ecc.
Testi di riferimento Dispense del corso fornite dal docente e durante il corso delle lezioni e disponibili in formato elettronico on-line. (On request, English books can be provided by the teacher.)

Fonti alternative sono:

K. R. Apt. Principles of Constraint Programming. Cambridge, 2003.
C. Baral. Knowledge representation, reasoning and declarative problem solving. Cambridge University Press, 2004.
M. Gelfond. Answer sets. Cap.7 di Handbook of knowledge representation. Elsevier. 2007.
J. W. Lloyd. Foundations of Logic Programming. Springer-Verlag, 2nd edition, 1987.
E. Mendelson. Introduction to Mathematical Logic. Van Nostrand, New York, second edition, 1979.
D. Poole, A. Mackworth, and R. Goebel. Computational Intelligence: A Logical Approach. Oxford University Press, Oxford, 1998.
L. Sterling and E. Shapiro. The Art of Prolog. The MIT Press, 2nd edition, 1997.
A. Pettorossi, M. Proietti. First Order Predicate Calculus and Logic Programming. Aracne Ed. ISBN: 978-88-548-9298-9.
Obiettivi formativi Il corso si propone di fornire le basi della logica computazionale e della programmazione dichiarativa trattandone in modo rigoroso sia i fondamenti logico-semantici che gli aspetti pratici ed applicativi. Lo studente acquisirà la capacità sia di interpretare, modellare e risolvere problemi tipici, dell'informatica in generale e dell'intelligenza artificiale in particolare, tramite un approccio dichiarativo, sfruttando proficuamente i moderni strumenti e tecniche della programmazione dichiarativa.
Prerequisiti Per una più efficace comprensione degli argomenti del corso, sono richieste nozioni elementari di logica proposizionale.
Metodi didattici Lezioni frontali in aula sugli argomenti del programma.
Altre informazioni Si veda http://www.informatica.unipg.it
Modalità di verifica dell'apprendimento La prova d'esame prevede una parte scritta e una orale.

La prova scritta, della durata indicativa di 90 minuti, può comprendere domande a risposta multipla, domande con risposta aperta, e svolgimento di esercizi. Scopo della prova è verificare l'acquisizione di competenze ed evidenziare le capacità risolutive di problemi pratico-teorici inerenti argomenti compresi nel programma svolto. Opzionalmente, lo studente può scegliere di sostituire la prova scritta con una prova pratica progettuale. Il tema della prova progettuale deve essere concordato con il docente.

La prova orale consiste in un colloquio della durata massima indicativa di 1 ora, mira a verificare le competenze e le capacità acquisite dal candidato ed l contempo la sua abiliità nell'applicare in modo adeguato le tecniche risolutive e le nozioni teoriche nell'affrontare, modellare e risolvere problemi pratici.

Per informazioni sui servizi di supporto agli studenti con disabilità e/o DSA visita la pagina http://www.unipg.it/disabilita-e-dsa
Programma esteso Il corso si propone di fornire le basi della logica computazionale e della programmazione dichiarativa trattandone in modo rigoroso sia i fondamenti logico-semantici che gli aspetti pratici ed applicativi. Lo studente acquisirà la capacità di interpretare, modellare e risolvere problemi tipici dell'informatica tramite un approccio logico-dichiarativo (nel corso si adotterà il linguaggio della logica matematica).

L'approccio tradizionale, algoritmico, o "imperativo", alla programmazione prevede che il programmatore descriva tutti i passi di un algoritmo. Il calcolatore esegue questi passi per trasformare dei dati di input nel risultato desiderato. Nella programmazione dichiarativa il programmatore si limita a specificare le proprietà del problema che vuole risolvere e della soluzione che desidera ottenere. Non descrive alcun algoritmo risolutivo (che potrebbe anche essere ignoto), ma si limita a indicare "cosa vuole" piuttosto che "come fare" per ottenere il risultato. Il compito di determinare il "come fare" è delegato al calcolatore. L'approccio richiede quindi che il programmatore analizzi il problema che vuole risolvere, ne comprenda le caratteristiche rilevanti e le descriva formalmente. Acquisire le capacità di capire il problema prima di affrontarne la soluzione è ovviamente importante in generale. Anche per un programmatore tradizionale, come passo preliminare alla formulazione di un algoritmo risolutivo.
Condividi su