Nome insegnamento: INFORMATICA TEORICA E LINGUAGGI FORMALI
Articolazione in moduli: INFORMATICA TEORICA (6CFU) + LINGUAGGI FORMALI (6CFU)
Settore Scientifico Disciplinare: ING-INF/05
Docente responsabile
Scarcello Francesco
Informatica teorica:
Crediti formativi universitari
6
Informatica teorica:
Docente responsabile
Saccà Domenico
Linguaggi formali:
Crediti formativi universitari
6
Linguaggi formali:
Numero ore lezioni: 32
Numero ore riservate attività didattiche assistite
Numero ore esercitazioni: 19
Informatica teorica: 51
Numero ore attività di laboratorio:
Numero ore lezioni: 32
Numero ore riservate attività didattiche assistite
Numero ore esercitazioni: 19
Linguaggi formali: 51
Numero ore attività di laboratorio:
Tipologia di attività formativa (TAF): Attività Caratterizzante
Lingua di insegnamento: Italiano
Anno di corso e Periodo didattico di erogazione: I ANNO I SEMESTRE
Insegnamento/i Propedeutico/i:
Risultati d’apprendimento previsti e competenze da acquisire – modulo Informatica teorica:
Il corso si propone di fornire le conoscenze di base dell'Informatica Teorica con particolare
attenzione alla teoria della calcolabilità ed alla teoria della complessità.
Competenze da acquisire:
 comprensione dei concetti di base dell’informatica teorica
 capacità di comprendere teoremi e dimostrazioni
 abilità di applicare i risultati teorici studiati per distinguere problemi decidibili ed indecidibili
 abilità di applicare i risultati teorici studiati per distinguere problemi trattabili e problemi
intrattabili dal punto di vista della complessità computazione (assumendo che la classe P sia
diversa da NP)
abilità nel comunicare nozioni e risultati formali utilizzando il linguaggio della logica e della
matematica
Argomenti delle lezioni – modulo Informatica teorica:
 Introduzione al corso, testi consigliati, svolgimento dell’esame. Dagli algoritmi ai problemi.
Ciò che si può risolvere e ciò che non si può risolvere (Calcolabilità) Ciò che si può risolvere:
a che costo? (Complessità)
 La tecnica della diagonalizzazione. Applicazione al Power Set dei numeri naturali
 Introduzione ai linguaggi. Linguaggi e problemi di decisione
 Indecidibilità del problema HELLO-WORLD e riducibilità tra problemi
 Introduzione alla macchina di Turing
 Macchine di Turing multitraccia e multinastro e simulazione di una macchina multinastro
con una mononastro e costi di esecuzione
 Introduzione alle macchine di Turing non deterministiche

Linguaggi ricorsivamente enumerabili, linguaggi ricorsivi. Teoremi sul complemento dei
linguaggi. Il linguaggio Ld ed il linguaggio Lu
 Ancora sulla indecidibilità: il Teorema di Rice
 Valutazione dei costi di esecuzione in termini di tempo e di spazio. Una gerarchia di classi di
complessità
 Problemi Polinomiali e problemi NP
 Concetto di riduzione polinomiale tra problemi. Problemi NP-ardui e NP-completi
 Il teorema di Cook
 Altre classi di complessità. La classe co-NP. Problemi nell’intersezione tra NP e co-NP
 Classi di complessità all'interno di P (problemi parallelizzabili)
 La gerarchia polinomiale e la classe PSPACE
Argomenti delle esercitazioni - modulo Informatica teorica:
Esercitazione sulle riduzioni tra problemi.
Esercitazione sulle macchine di Turing (es.: riconoscere i linguaggi ww^r e wcw).
Esercitazione sulle macchine di Turing non deterministiche: data una coppia di stringhe, decidere
se la prima è una sottostringa della seconda; colorabilità di un grafo.
Esempi di modellazione di problemi e di calcolo della loro complessità.
Esercitazione sulle riduzioni tra problemi.
Modalità di erogazione della didattica – modulo Informatica teorica:
Lezioni frontali, con metodologie tradizionali
Testi di riferimento e materiale didattico utilizzato e consigliato – modulo Informatica teorica:
Materiale didattico messo a disposizione del docente sulla piattaforma on-line.
http://icampus.dimes.unical.it
Testi di riferimento:
Hopcroft, Rajeev, Ullman. Automi, linguaggi e calcolabilità. Addison-Wseley (Pearson
Education Italia), 2003. (Disponibile in biblioteca (BTS))
Testi consigliati:
Papadimitriou. Computational complexity. Addison-Wesley, 1994. (Disponibile in biblioteca (BTS))
Sanjeev Arora and Boaz Barak. Computational Complexity: A Modern Approach,Cambridge
University Press, 2009. Lewis, Papadimitriou. Elements of the Theory of Computation. Prentice
Hall, 2nd edition, 1997. (Disponibile in biblioteca (BTS))
Mandrioli, Ghezzi. Informatica teorica. Clup, 1989. (Disponibile in biblioteca (BTS))
Toffalori, Corradini, Leonesi, Mancini. Teoria della computabilità e della complessità. McGraw-Hill,
2005. (Disponibile in biblioteca (BTS))
Bovet, Crescenzi. Teoria della complessità computazionale. Franco Angeli, 1991.
(Disponibile in biblioteca (BTS))
Risultati d’apprendimento previsti e competenze da acquisire – modulo Linguaggi formali:
Il corso ha due obiettivi fondamentali:
1. fornire modelli e strumenti formali per la definizione di linguaggi di programmazione e per
la loro analisi sintattica e semantica metodi, in particolare grammatiche e vari tipologie di
automi
2. introdurre paradigmi di programmazione di tipo dichiarativo, alternativi alla
programmazione imperativa, in particolare la programmazione logica (attraverso il
linguaggio Prolog) e la programmazione funzionale (attraverso un apposito linguaggio
didattico chiamato CalcuList)
Al termine del corso, gli studenti saranno in grado di:
 classificare i linguaggi semidecidibili sulla base delle grammatiche che li definiscono

effettuare l'analisi sintattica di linguaggi non-contestuali e estenderla al caso di linguaggi
contestuali attraverso apposite azioni di semantica statica
 utilizzare grammatiche ad attributi per l'analisi di semantica statica (in particolare type
checking) e per la produzione del codice oggetto (per linguaggi compilati) o l'esecuzione
diretta dei comandi (per linguaggi interpretati)
 comprendere il funzionamento del supporto a tempo per l'esecuzione di un programma
interpretato o compilato
 studiare e sperimentare la definizione e realizzazione di un linguaggio pseudo-funzionale,
CalcuList, dall'analisi sintattica a quella semantica con utilizzo di un'apposita macchina
virtuale
 comprendere i principi (sintassi e semantica) della programmazione logica e utilizzare il
linguaggio Prolog
 comprendere i principi della programmazione funzionale e utilizzare il linguaggo CalcuList
 confrontare i diversi stili di programmazione nella risoluzione di problemi basati sull'utilizzo
di liste
Argomenti delle lezioni – modulo Linguaggi formali
 Introduzione a CalcuList e relativa Macchina Virtuale CLVM
 Macchina Virtuale CLVM: architettura, linguaggio macchina e linguaggio Assembler,
interprete di CLVM
 Linguaggi e Grammatiche
 Linguaggi e grammatiche regolari, espressioni regolari e automi a stato finito per il
riconsocimento di linguaggi regolari
 Sintassi e Riconoscitore din un linguaggio regolare: l'Assembler di CalcuList
 Implementazione di Automi a Stati Finiti in CalcuList
 Linguaggi e Grammatiche non-contestuali e notazione EBNF
 Grammatica EBNF dell'estensione non-contestuale di CalcuList
 Grammatiche LL(1) e analisi ricorsiva discendente
 Analisi ricorsiva discendente di CalcuList
 Grammatiche con attributi e azioni semantiche
 Azioni di semantica statica per CalcuList
 Azione di semantica statica per la traduzione e interpretazione di CalcuList
 Traduzione, Corelazione delle funzione e caricamento dell'eseguibile in CalcuList
 Introduzione alla Logica del primo ordine
 Calcolo dei predicati e programmazione logica
 Semantica a modelli e con punto fisso della programmazione logica
 La negazione stratificata
 Il Linguaggio Prolog e cenni su DATALOG
 Interrogazione su liste in Prolog e in CalcuList
 Confronto tra paradigmi di programmazione
Argomenti delle esercitazioni– modulo Linguaggi formali:
Esercizi su automi a stati finiti
Esercizi su analisi discendenti di linguaggi per espressioni aritmetiche
Esercizi su utilizzo di CalcuList per l'implementazione di automi a stati finiti
Esercizi su utilizzo dell'Assembler di CalcuList
Esecrcizi sull'utilizzo di CalcuList
Esercizi sull'utilizzo di Prolog
Modalità di erogazione della didattica- modulo Linguaggi formali:
attraverso diapositive, usando PC e videoproiettore
Metodi di valutazione – modulo Linguaggi formali:
Prova scritta e successiva prova orale
Testi di riferimento e materiale didattico utilizzato e consigliato– modulo Linguaggi formali:
(1) Dispense del docente pubblicate sul sito: http://corsi.deis.unical.it
(2) J Console L., Lamma E., Mello P., Milano M., Programmazione logica e Prolog, Libreria UTET
1997
Criteri di valutazione dell’apprendimento:
La prova scritta è progettata in modo da valutare la capacità degli studenti di distinguere problemi
decidibili ed indecidibili e problemi trattabili ed intrattabili, in base alle principali classificazioni
nell’ambito della teoria della calcolabilità e della complessità. La prova orale permetterà di
completare la valutazione dei risultati attesi, verificando anche la comprensione dei concetti di
base e delle prove formali, nonché l’abilità nell’esporre nozioni e dimostrazioni formali.
Valutazione della conoscenza dei principi di funzionamento di compilatori e di interpreti di
linguaggi di programmazione
Valutazione delle conoscenze di paradigmi di programmazione non imperativa, in particolare
funzionale e logica
Criteri di misurazione dell’apprendimento:
Voto in trentesimi con due decimali di valutazione dell'apprendimento del modulo
Criteri di attribuzione del voto finale:
Voto in trentesimi ottenuto come media dei voti riportati nei due moduli
Orario e aule lezioni:
http://www.dimes.unical.it/index.php/didattica
Calendario prove valutazione: