Corso di Linguaggi di Programmazione

Documenti analoghi
Le parole dell informatica: algoritmo e decidibilità

Scaletta. Cenni di computabilità. Cosa fa un programma? Definizioni (1/2) Definizioni (2/2) Problemi e domande. Stefano Mizzaro 1

Sommario Codifica dei dati Macchina Astratta Definizioni Esempi

Teoria della Calcolabilità!

Alcune Tracce dei Precedenti Esami del Dottorato di Siena in Logica Matematica ed Informatica Teorica

Principio di composizione delle MT

La tesi di Church-Turing

Note del corso di Calcolabilità e Linguaggi Formali - Lezione 8

Concetti di base sugli automi e sui linguaggi formali

Problemi, algoritmi, calcolatore

Appunti del corso di Informatica 1 (IN110 Fondamenti) 3 Modelli di calcolo

Struttura del calcolatore

Sistemi di Elaborazione delle Informazioni

Parte I.5 Cenni alla computazione

Il concetto di calcolatore e di algoritmo

Ma il programma in Fig. 8.2 del libro? Stampa hello, world, dato un input n se e solo se l equazione

Il linguaggio di programmazione Python

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

Problemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04)

Algoritmi e Linguaggi

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come

Il calcolatore universale, origini e nuovi paradigmi

Teoria della Calcolabilità!

Linguaggi e Ambienti di Programmazione

Marta Capiluppi Dipartimento di Informatica Università di Verona

Il Software programmabili programma algoritmo

Parole note, nuovi significati: linguaggio, determinismo e infinito

Teoria della computazione

Problemi senza soluzione

Università degli Studi di Udine. 1 Automi e Linguaggi. Prova Scritta di Fondamenti dell Informatica II Alcune Soluzioni

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

Teoria dell Informazione

LINGUAGGI DI ALTO LIVELLO

Capitolo 6: Modelli di calcolo per linguaggi imperativi e funzionali

Aniello Murano Problemi non decidibili e riducibilità

Informatica teorica Lez. n 7 Macchine di Turing. Macchine di Turing. Prof. Giorgio Ausiello Università di Roma La Sapienza

Informatica Teorica. Appunti della lezione su tesi di Church-Turing e problemi indecidibili

Cosa è l Informatica?

Macchine di TURING. Alan Mathison Turing ( )

La suddivisione lezione/esercitazione è orientativa Martedì Lezione Aula A4 Martedi Esercitazione Aula A2 Mercoledì Laboratorio

Appunti di informatica. Lezione 7 anno accademico Mario Verdicchio

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

Cos'e un linguaggio di programmazione?

FONDAMENTI DI INFORMATICA

Fondamenti Teorici e Programmazione Modulo A: Elementi di Programmazione Corso di Laurea in Informatica Umanistica a.a. 2013/2014

Capitolo 1 Linguaggi e Macchine Astratte

Algoritmi e programmi

Studio degli algoritmi

401 PREDICATI RICORSIVI PRIMITIVI

Informatica 3. Informatica 3. Lezione 1- Modulo 1. LEZIONE 1: Introduzione. Concetti di linguaggi di programmazione. Introduzione

Elementi di programmazione

Equivalenza di Espressioni Algebriche

Concetti di base dell ICT

Macchine astratte, linguaggi, interpretazione, compilazione

Le Macchine di Turing

Modelli e complessità di calcolo

Introduzione. Fondamenti di Informatica 1. Dispensa 1 Gennaio Contenuti. Alfonso Miola. K Corso di Fondamenti di Informatica 1

Informatica Teorica. Sezione Cremona + Como. Appello del 20 Luglio 2004

Algoritmi e Strutture Dati

Corso di Laurea Ingegneria Informatica

Argomenti diagonali. Gianluigi Bellin

Programmazione C Massimo Callisto De Donato

FONDAMENTI DI INFORMATICA

MODULO 07 LA MACCHINA DI TURING

LINGUAGGI DI ALTO LIVELLO

Turing cercò di fornire una risposta matematica al problema CHE COSA SIGNIFICA CALCOLARE?

Cosa è un programma. Informatica di Base -- R.Gaeta 18

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Proposte di approfondimenti

Linguaggi di programmazione

Fondamenti di programmazione e Laboratorio di introduzione alla programmazione (modulo 1)

Logica e Informatica: cosa i calcolatori possono e non possono fare. Simone Martini

Unità di apprendimento 6. Il software: dal linguaggio alla applicazione

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

CAPITOLO 1 CENNI STORICI

Università degli Studi di Verona. Algoritmie Diagrammidiflusso. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Fondamenti di Informatica. Definizione di Algoritmo. Algoritmo Euclideo. Prof.V.L.Plantamura Informatica e Comunicazione Digitale a.a.

Linguaggi Regolari e Linguaggi Liberi

Programmazione di INFORMATICA e Laboratorio

ELEMENTI DI PROGRAMMAZIONE a.a. 2012/13 MACCHINE, ALGORITMI, PROGRAMMI

Introduzione alla programmazione

Introduzione Problemi e codifiche Classe P e linguaggi Da NP a NP-C Il mondo NP-C Conclusioni. NP-Completezza

Appunti di informatica. Lezione 5 anno accademico Mario Verdicchio

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

Appunti su Indipendenza Lineare di Vettori

ALGORITMI: PROPRIETÀ FONDAMENTALI

Elementi di programmazione

Capitolo 8: Teoria della complessitá

Fondamenti di Informatica per la Sicurezza a.a. 2008/09. Automi. Stefano Ferrari. Unautomaastatifinitièunmodellomatematico caratterizzato da:

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati

TEORIE E TECNICHE PER LA COMUNICAZIONE DIGITALE

Laurea triennale - Comunicazione&DAMS - UNICAL. Dr. Annamaria Bria 1

Matematica e Statistica per Scienze Ambientali

Linguaggi formali e compilazione

Linguaggi di alto livello, compilatori e interpreti

Macchine di Turing. Francesco Paoli. Istituzioni di logica, Francesco Paoli (Istituzioni di logica, ) Macchine di Turing 1 / 29

Programmazione dinamica

Transcript:

Corso di Linguaggi di Programmazione Lezione 2 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 09 Marzo 2010 Controlli automatici di correttezza dei programmi Il punto di vista imperativo Calcolabilità e funzioni

Controlli automatici di correttezza dei programmi Obiettivo chiave dei LdP: fornire costrutti che riducano la probabilità di lasciare bug nei programmi... ovvero: il programma implementa effettivamente l algoritmo per cui è progettato. Perchè non costruire verificatori automatici della correttezza dei programmi, e poi utilizzare il linguaggio che preferiamo? Ci sono risultati teorici che dimostrano che non è possibile costruire verificatori perfetti. Verificatore della terminazione di programmi C supponiamo di avere un programma term (alla lavagna...) in ogni caso, term si comporta diversamente dalle specifiche. infatti, term non può essere realizzato!.

Programma per il controllo dell utilizzo degli indici negli array (alla lavagna) Riassumendo E impossibile verificare in modo consistente e completo qualsiasi proprietà di un programma che dipenda dall esito della computazione Si possono condurre controlli consistenti, ma incompleti (es. errori in compilazione) Si possono condurre controlli completi, ma inconsistenti (es. warning) es. si possono individuare alcuni segmenti di codice non raggiungibile (ma mai garantire di individuare tutto e solo il codice irraggiungibile in qualsiasi programma) es. si può controllare il matching dei tipi nel passaggio di parametri a procedura, ma la chiamata potrebbe non avvenire si possono condurre controlli a run-time (ma l errore è già avvenuto)

Linguaggi di programmazione general purpose Abbiamo dimostrato che non esiste nessun programma C che in ambiente UNIX verifichi la terminazione di un programma (system, exit...) Domanda: dato un linguaggio di programmazione ed un problema calcolabile posso sempre scrivere un programma in quel linguaggio che risolva il problema? Linguaggi di programmazione con questa caratteristica vengono definiti general purpose es. C, C++, Java, LISP, ML, Prolog... ma NON SQL Per caratterizzare i linguaggi general purpose abbiamo bisogno di formalità e generalità. Modelli di calcolo astratti Come dimostrare qualcosa che valga indipendentemente dal linguaggio utilizzato?... con modelli di calcolo astratti es. macchina RAM, macchina di Turing

La macchina di Turing La macchina di Turing oggetto matematico, definito in modo completo, formale e molto compatto rudimentale, ma potente almeno quanto gli attuali computer (nastro infinito) i programmi delle MdT non hanno dettagli inutili: il loro comportamento non è ambiguo il comportamento del processore è definito matematicamente, come i programmi

La macchina di Turing La macchina di Turing

La macchina di Turing Overview: la MdT è una n-upla (S, Σ, I, P, s 0, e +, e ) S è l insieme di possibili stati in cui si può trovare una macchina Σ è l alfabeto di lavoro della macchina I Σ è l alfabeto di input della macchina s 0 è lo stato iniziale della macchina e + è lo stato finale successo della macchina e è lo stato finale fallimento della macchina P è il programma della macchina

Programmi per MdT Un programma P per una MdT è un insieme finito di tuple (s, σ, m i, σ, m w, s) s è lo stato in cui si deve trovare la MdT, σ il carattere sul nastro di input m i la direzione in cui spostare la testina del nastro di input, m w la direzione in cui spostare la testina del nastro di lavoro (m i, m w M = {l, r, h}) σ il carattere da scrivere sul nastro di lavoro, s lo stato al termine dell istruzione in altri termini: P : S I M Σ M S Come dimostrare la Turing-equivalenza? dato un linguaggio di programmazione realizzare un simulatore di MdT in quel linguaggio progettare una MdT interprete per quel linguaggio anche con traduzioni intermedie... semplice, dato che i compilatori producono linguaggio macchina una MdT può calcolare tutto quello che sappiamo calcolare (e solo quello). def. linguaggio general purpose: è un linguaggio Turing equivalente N.B. diverso dall equivalenza polinomiale (legata alla complessità dei problemi)

Questioni di cardinalità Th: qualsiasi sequenza di naturali può essere codificata con un singolo naturale. Dim: codifico per diagonali (alla lavagna) possiamo anche costruire una formula ( ) x + y + 1 x, y = + y 2 che è una bijezione (invertibile)... ed il gioco può essere ripetuto (per qualsiasi sequenza finita di naturali) il processo di assegnare un naturale (numero di Gödel) ad ogni elemento di un insieme numerabile è detto Gödelizzazione. Questioni di cardinalità Le MdT sono tante quanti i naturali (alla lavagna) I problemi sono più dei naturali (alla lavagna)... non posso avere corrispondenza 1 a 1 tra funzioni e MdT! Th. esiste una MdT universale u, che avendo sul nastro di input la descrizione di una qualsiasi MdT k (codificabile con un naturale) e l input per quella MdT (i) emula il comportamento di k su input i.

Funzioni ricorsive Quali sono le funzioni calcolabili? def. funzione f : X Y : una qualsiasi relazione che mette in corrispondenza ad ogni elemento x X uno ed un solo elemento y Y def. funzione parziale g : X Y : è una relazione che può essere non definita per qualche x X (in questo caso g(x) = ) possiamo immaginare che corrisponda a loop infinito in un programma (N.B. g() non è totale, quindi NON è una funzione!) per convenzione g( ) =. def. funzione parziale ricorsiva (FPR)... Funzioni parziali ricorsive La classe delle funzioni parziali ricorsive (FPR) è la più piccola classe di funzioni parziali da N n in N tale per cui 1. la funzione costante 0, successore s() e le proiezioni i-esime appartengono a FPR (descrizione tralasciata) π (n) i 2. applicando sostituzioni e minimalizzazione a FPR si ottengono FPR (descrizione tralasciata) 3. date due FPR g : N n 1 N e h : N n+1 N, la funzione parziale f () ottenuta tramite ricorsione primitiva f (0, x 2... x n ) = g(x 2... x n ) f (y + 1, x 2,... x n ) = h(f (y, x 2... x n ), x 2,..., x n, y) appartiene a FPR.

FPR ed indecidibilità algoritmica Risultato principale: si pu dimostrare che le FPR coincidono con le funzioni parziali calcolabili da MdT Ad ogni FPR posso assegnare un indice (quello della MdT che realizza il calcolo corrispondente): ϕ k () (ruolo dei filename) Esiste una MdT universale u, quindi esiste una FPR universale ϕ u () (ruolo di system ) FPR ed indecidibilità algoritmica Th. la funzione parziale inversione { 0 se ϕ u (x, x) = f (x) = altrimenti non è FPR (dim. alla lavagna) Th. la funzione d arresto { 0 se ϕ u (x, y) = h(x, y) = 1 altrimenti non è FPR (dim. alla lavagna)... non perdo nè guadagno nulla rinunciando al concetto di stato della MdT, o restringendomi all utilizzo della ricorsione!

La tesi di Church Infatti: tesi di Church Le funzioni calcolabili algoritmicamente sono le funzioni ricorsive. Le funzioni semi-calcolabili algoritmicamente sono le funzioni parziali ricorsive. N.B. La semi-calcolabilità è principalmente utile come concetto di carattere intuitivo. Riassumendo Riassumendo, alcuni dei principali compiti dei LdP sono: fornire strumenti per programmare senza errori (o per accorgersi di aver commesso errori già in fase di compilazione) fornire strutture adeguate a facilitare le fasi di testing... perchè non è possibile realizzare verificatori automatici universali e perfetti di correttezza dei programmi.

Riassumendo Abbiamo infatti mostrato come alcuni problemi quali la terminazione dei programmi siano indecidibili (indipendentemente dal paradigma di programmazione o dalle risorse di calcolo dedicate) costruendo particolari controesempi in C descrivendo le Macchine di Turing e caratterizzando in modo formale i linguaggi Turing equivalenti dimostrando che le funzioni, e quindi i problemi sono più delle Macchine di Turing caratterizzando le funzioni parziali e la classe delle funzioni parziali ricorsive, e mettendo in corrispondenza le funzioni parziali ricorsive con le Macchine di Turing dimostrando, ad esempio, che la funzione terminazione non è ricorsiva Riferimenti: Disponibili in rete: P. Bonatti (1999) Cenni informali di calcolabilità S. Vigna (2006) Dispense per il corso di informatica teorica