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: