Modelli computazionali e macchine astratte

Slides:



Advertisements
Presentazioni simili
…da von Neumann al computer quantistico
Advertisements

…da von Neumann al computer quantistico architettura dellelaboratore.
Teoria e Tecniche del Riconoscimento
Sistemi dinamici discreti e computabilità intrinseca
Macchine di Turing e ricorsività generale
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità E1 Dallanalisi del problema alla definizione dellalgoritmo.
Capitolo 8 Sistemi lineari.
Algoritmi e Programmazione
Precorsi di Informatica Dott. Antonio Cisternino Settembre 2003
Deduzione naturale + Logica & Calcolabilità
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
MACCHINE DI TURING Le macchine di Turing sono dispositivi astratti per la manipolazione di simboli, ideati nel 1936 dal matematico e logico britannico.
Analisi e Sintesi di circuiti sequenziali
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Funzioni, Rappresentazioni e Coscienza
Access: Query semplici
Modelli simulativi per le Scienze Cognitive Paolo Bouquet (Università di Trento) Marco Casarotti (Università di Padova)
Modelli simulativi per le Scienze Cognitive
Analisi e Sintesi di circuiti sequenziali. Definizione Una macchina sequenziale é un sistema nel quale, detto I(t) l'insieme degli ingressi in t, O(t)
Il Linguaggio Macchina
MACCHINE DI TURING e ALGORITMI
Corso di Laurea in Ingegneria per lAmbiente e il Territorio Informatica per lAmbiente e il Territorio Docente: Giandomenico Spezzano Tutor: Alfredo Cuzzocrea.
Fondamenti di Informatica Algoritmi
Gli algoritmi.
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
PROBLEMI RISOLUBILI E COMPUTABILITÀ
L’AUTOMA ESECUTORE Un automa capace di ricevere dall’esterno una descrizione dello algoritmo richiesto cioè capace di interpretare un linguaggio (linguaggio.
Dall’algoritmo al programma.
RAPPRESENTAZIONE DELL'INFORMAZIONE
Logica Matematica Seconda lezione.
Elementi di Informatica di base
Algoritmi e Programmazione strutturata
L’inventore del calcolatore odierno
Automi LAVORO SVOLTO DA MARIO GERMAN O
Antonio Cisternino La Macchina di Turing.
CHI ERA ALAN TURING? Turing fece parte del team di matematici che, a partire dalla base di Bletchley Park, decodificarono i messaggi scritti dalle macchine.
LA MACCHINA DI TURING Nel 1936 il matematico inglese A. M. Turing propose una definizione del concetto di algoritmo tramite un modello matematico di macchina.
Linguaggi per COMUNICARE
Programma di Informatica Classi Prime
Informatica Lezione 4 Scienze e tecniche psicologiche dello sviluppo e dell'educazione Anno accademico:
Complessità di un algoritmo
ESTENSIONI SEMPLICI e TEOREMA DELL’ELEMENTO PRIMITIVO
Università degli studi di Lecce
IO E LA MATEMATICA PROCEDURALE
Dall’analisi del problema alla definizione dell’algoritmo
Gli Algoritmi L’algoritmo è un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si.
La rappresentazione delle informazioni in un computer Seconda parte.
Galois gioca con il cubo di Rubik
Introduzione: informatica 18/2/2013 Informatica applicata alla comunicazione multimediale Cristina Bosco.
Prof. Giuseppe Boncoddo
ORGANIZZAZIONE DI UN SISTEMA DI ELABORAZIONE
Rappresentazione dell’informazione nel calcolatore.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
Informatica 3 V anno.
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Terza giornata: principali classi di complessità computazionale dei problemi Guido Proietti.
Microsoft Access Chiavi, struttura delle tabelle.
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 3 - Modelli di fase d’analisi Ernesto Damiani Università degli Studi.
Algoritmi.
Automi temporizzati.
Problemi, algoritmi e programmazione
Indecidibilità Limiti della calcolabilità Pigreco-day 14 marzo 2014 Matematica e Incertezza Prof. Antonio Iarlori Mathesis Lanciano-Ortona.
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
…da von Neumann al computer quantistico L’archittettura dell’elaboratore.
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
Sistemi di equazioni lineari. Sistemi di primo grado di due equazioni a due incognite Risolvere un sistema significa trovare la coppia di valori x e y.
Ancora sulle equazioni di secondo grado….. Equazione di secondo grado completa Relazione tra le soluzioni di un'equazione di secondo grado.
Dal problema al programma – ciclo di sviluppo del software La scrittura del programma è solo una delle fasi del processo di sviluppo di un'applicazione.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Transcript della presentazione:

Modelli computazionali e macchine astratte

Problemi, algoritmi e modelli computazionali Vediamo la relazione che esiste tra problema, algoritmo, esecutore. Formulazione di un problema Individuazione di un algoritmo Metodo risolutivo (progetto) esecutore dati (input) Scelta del formalismo per la codifica dell’algoritmo Bontà di un algoritmo (complessità computazionale) Scelta dell’esecutore più adatto risultati (output) L’esecutore non deve essere pensato necessariamente come una macchina fisica, ad esempio, l’attuale computer. L’esecutore deve essere pensato come un modello computazionale in grado di eseguire algoritmi. Cioè deve descrivere come deve essere rappresentato l’input, interpretato l’output e implementato il procedimento risolutivo.

L’esecutore Un esecutore può essere realizzato: mediante un modello matematico : logico (Godel) basato sulla logica matematica funzionale (Church, Kleene,…) basato sul calcolo delle funzioni sistemi di riscrittura (Post, Markov…) basati sulla manipolazione di stringhe di caratteri operazionale (Turing) basato su una macchina con un nastro e una testina di lettura e scrittura (Macchina di Turing) mediante congegni meccanici macchina aritmetica (Pascal) macchina analitica (Babbage)

I modelli matematici I modelli matematici servono a svincolarci da una determinata macchina fisica. Una macchina fisica, infatti, potrebbe essere “migliore” di un’altra e risolvere un problema che l’altra non riesce a risolvere. Ma se neanche la macchina “più potente” risolve un problema, questo potrebbe essere non risolvibile. Tra questi modelli matematici il più famoso è quello delle Macchine di Turing (MdT), Un’astrazione matematica che rappresenta un potente strumento logico-concettuale per capire cosa si intende per elaborazione. Le MdT infatti: hanno posto le basi per i moderni computer e sono essenziali per lo studio di un’altra importante disciplina in informatica: la teoria della computabilità, disciplina che studia il calcolo algoritmico, ossia il calcolo eseguibile in modo meccanico. sono alla base della programmazione imperativa introducendo concetti essenziali quali: locazione di memoria, assegnamento, stato, iterazione. hanno fornito i concetti chiave per poter introdurre una definizione di macchina astratta così come vedremo nel seguito di questa unità. In realtà esiste una gerarchia di esecutori-modelli che (semplificando) possiamo chiamare macchine. Li elenchiamo dal più specifico al più generico (ovvero a quello che risolve una classe di problemi più ampia):

Un modello computazionale: La macchina di Turing Nel 1936 il matematico inglese A. M. Turing propose una definizione del concetto di algoritmo tramite un modello matematico di macchina in grado di eseguire una computazione. Tale modello prese il suo nome diventando la famosa macchina di Turing (MdT). La macchina di Turing fu introdotta una decina di anni prima che fosse realizzato il primo prototipo di elaboratore a “programma memorizzato”, ed è stata considerata un modello, con una struttura molto semplice e facile da percepire, che tiene conto di tutte le proprietà logiche di una macchina reale capace di eseguire un qualunque algoritmo. La macchina di Turing assume un ruolo molto importante nella teoria della computabilità.Questa si occupa dell’analisi degli algoritmi per decidere sulla loro computabilità cioè sul fatto che siano o meno risolvibili indipendentemente dalla macchina fisica su cui saranno eseguiti. L’attuale struttura del computer (macchina di Von Neuman) deriva dal formalismo della macchina di Turing.

L’idea alla base della MdT La macchina di Turing rappresenta un prototipo astratto di macchina calcolatrice, costruito in modo da riprodurre ciò che vi è di essenziale nel comportamento computistico dell’uomo. Osserviamo che un computo eseguito da parte di un uomo avviene mediante un numero finito di operazioni su un numero finito si simboli. Così, ad esempio, se si effettua la moltiplicazione 31 x 17: 31 x 17 = ------ 217 31 527 si scrivono successivamente dei simboli su un foglio di carta, muovendosi in due dimensioni. Una prima semplificazione sta nell’osservare che per eseguire un calcolo è sufficiente disporre i simboli in una sola dimensione su di una striscia di carta. Così l’operazione precedente potrebbe essere scritta nel seguente modo: 31, 17; 217, 31; 527 Se consideriamo che nell’eseguire un’operazione l’uomo osserva solo un numero finito di simboli alla volta, si può effettuare una ulteriore semplificazione osservando un solo simbolo per volta. Questa è realmente l’idea essenziale nel concetto di macchina di Turing: la sua condotta è influenzata solo dall’ informazione locale e non globale. Poiché, infine, la memoria dell’uomo sembra essere finita, si assume che la macchina di Turing abbia un numero finito di stati interni.

Le componenti di una MdT (1) Da un punto di vista informale, una macchina di Turing è costituita da: un nastro; una testina di lettura/scrittura; un’unità di memoria interna; un’unità di calcolo; un’unità di controllo; un’unità logica. Unità di Controllo TLS Memoria di controllo Unità logica interna

Le componenti di una MdT (2) Il nastro è lo strumento che contiene le informazioni. Questo dispositivo, teoricamente illimitato, è diviso in celle, ciascuna delle quali può contenere un solo simbolo appartenente ad un certo insieme finito X = {x0, x1, x2, ... , xn} chiamato alfabeto di lavoro, oppure essere vuota. Il nastro, quindi, contiene le informazioni che devono essere elaborate ed i risultati intermedi e finali. Abbiamo detto che il nastro è teoricamente infinito: questo non significa che non termina mai, bensì che è sempre possibile aggiungerne dell’altro sia a destra che a sinistra. La testina di lettura/scrittura (TLS) è un meccanismo che, opportunamente posizionato su una casella del nastro e governato da un’unità di controllo, può leggere il simbolo che vi è contenuto e scrivervene uno appartenente all’alfabeto di lavoro, in modo da sostituire quello che eventualmente ci fosse stato prima, e spostarsi a destra o a sinistra di una cella o restare ferma.. Unità di Controllo TLS

Le componenti di una MdT (3) La sequenza di simboli da esaminare è delimitata, a sinistra e a destra, da un carattere speciale, ad esempio “”. In ogni istante, quindi, la testina della macchina di Turing si trova in una cella contenente il simbolo xi (individuando, così, la sottosequenza sinistra e la sottosequenza destra dei caratteri presenti sul nastro) e nella memoria interna è registrato lo stato qi . Per impartire i comandi alla TLS, la MdT è provvista di un’unità di controllo che inoltra i seguenti ordini: F = Fermo; S = Spostati a sinistra e analizza la cella; D = Spostati a destra e analizza la cella; Questi tre elementi costituiscono l’insieme: M = {F, S, D} detto insieme dei simboli di movimento. Questo insieme, unito con l’insieme Q degli stati della macchina, forma l’alfabeto interno della MdT.  a1 a2 a3 a4 a5 a6 ai,qi

Il comportamento di una MdT L’unità logica è preposta alla decisione dei passi che la macchina deve compiere. Per prendere tale decisione, ossia per fornire l’istruzione corrispondente al successivo passo da eseguire, l’unità logica necessita di due ingressi: il simbolo ai corrispondente al contenuto della cella sulla quale è posizionata in quell’istante la TLS; il simbolo qi corrispondente allo stato della macchina in quell’istante. Le varie combinazione di questi due valori (ai,qi) definiscono univocamente il comportamento della MdT. Infatti, dopo l’introduzione della coppia, l’unità logica fornisce una terna di valori che corrispondono all’istruzione da eseguire. In particolare: il simbolo aj che deve essere scritto nella cella su cui è posizionata la TLS; il simbolo qj stato qj in cui deve passare la macchina; il simbolo mj che rappresenta la direzione in cui si deve muovere la TLS. Possiamo concludere che la MdT è definita dalla seguente funzione logica f: ai,qi aj,qj,mj f

Definizione formale di una MdT Una macchina di Turing (MdT) è una sestupla MdT = (Q, X, Y, f, q0, F) dove: Q è l’insieme finito non vuoto degli stati della macchina; X è l’insieme finito di simboli (alfabeto di lavoro comprende tutti i simboli utilizzati sia in ingresso sia in uscita). Tale alfabeto comprende anche il simbolo speciale “”, precedentemente definito, che indica la cella vuota; Y (sottoinsieme di X) è l’insieme finito e non vuoto di simboli detto alfabeto di ingresso. f è una funzione, detta funzione di transizione che mostra come evolvono stato e uscite : Q * Y Q * X * {Destra, Sinistra, Fermo} q0  Q è lo stato iniziale della macchina; F (sottoinsieme di Q) è l’insieme degli stati finali della macchina. f

Un esempio di MdT Costruiamo una MdT che, su una stringa costruita sull’alfabeto {a,b,c}, scambia ciascun a con b, ciascun b con c, ciascun c con a. MdT = (Q, X, Y, f, q0, F) dove: Q = {q0=scambia, q1=fine} stati X = { , a, b, c} alfabeto di lavoro Y = { , a, b, c} alfabeto di ingresso q0 = stato iniziale F = {q1} f (funzione di transizione) è così definita dalle seguenti quintuple: 1. q0 a b q0 D nello stato q0 se leggo a scrivo b resto nello stato q0 e sposto a destra la TLS 2. q0 b c q0 D nello stato q0 se leggo b scrivo c resto nello stato q0 e sposto a destra la TLS 3. q0 c a q0 D nello stato q0 se leggo c scrivo a resto nello stato q0 e sposto a destra la TLS 4. q0   q1 F nello stato q0 se leggo  scrivo  vado nello stato q1 (stato finale) e sto fermo!

La computazione di una MdT Supponiamo, ad esempio, di avere la situazione iniziale: La computazione avviene come segue: applicando la quintupla n° 2 applicando la quintupla n° 1 applicando la quintupla n° 3 applicando la quintupla n° 4  b a C b q0  c a C a q0  c a C a q0  c a C a q0  c a C a q0  c a C a q0

Una MdT per l’addizione di due numeri naturali Definiamo una MdT che esegua l’addizione di due numeri naturali. Rappresentazione dell’input: I numeri sono rappresentati sul nastro da una sequenza di barre “|”. Al numero 0 viene fatta corrispondere una barra, al numero 1 due barre al numero 5 sei barre e cosi’ via. Due numeri sono rappresentati da due sequenze di barre separate dalla cella vuota. Computazione: Per effettuare la somma la MdT riempie con una barra la cella vuota che separa i due numeri e cancella le due barre finali del secondo numero. Rappresentazione dell’output La situazione di arrivo o fine computazione consisterà in una unica sequenza di barre: MdT = (Q, X, Y, f, q0, F) dove: Q = { q0=”mi sposto sul primo numero” , q1=”mi sposto sul secondo numero”, q2= “cancello la prima barra”, q3=”cancello la seconda barra”, q4=finale} X = { , | } alfabeto di lavoro Y = { , | } alfabeto di ingresso Stato iniziale = q0 F = {q4} f (funzione di transizione) è così definita dalle quintuple mostrate a lato: 1. q0 | | q0 D 2. q0  | q1 D 3. q1 | | q1 D 4. q1   q2 S 5. q2 |  q3 S 6. q3 |  q4 F

Dettaglio delle quintuple in q0 se leggo | rimango in q0 cioè nello stato che mi fa spostare sul primo numero q0 | | q0 D 2. q0  | q1 D 3. q1 | | q1 D 4. q1   q2 S 5. q2 |  q3 S 6. q3 |  q4 F in q0 se leggo  scrivo | e vado in q1 cioè nello stato che mi dice che ho letto il primo numero in q1 se leggo | rimango in q1 cioè nello stato che mi fa spostare sul secondo numero in q1 se leggo  vuol dire che ho finito di leggere il secondo numero e quindi vado in q2 cioè nello stato che mi dice che devo cancellare una barra in q2 se leggo | scrivo  per cancellare la prima barraa e vado nello stato q3 per cancellare la seconda barra in q3 se leggo | cancello la seconda barra vado nello stato finale q4 e mi fermo

Rappresentazione della funzione di transizione di una MdT (1) Le quintuple che descrivono il comportamento di una MdT possono essere rappresentate: in forma tabellare con una tabella di transizione (o matrice funzionale) in forma grafica con i diagrammi di stato (che vedremo a breve). Rappresentazione con tabella di transizione In una matrice funzionale le colonne indicano i possibili input che possono essere letti e le righe i differenti stati in cui può trovarsi la macchina. In ogni cella è contenuto il nuovo simbolo da scrivere, il nuovo stato e il tipo di movimento da effettuare. La tabella di transizione per la MdT che scambia ciascun a con b, ciascun b con c, ciascun c con a (analizzata nelle diapositive precedenti) è: Ingressi Stati A b C  Q0 q1 b,qo,D Stop c,q0,D a,q0,D ,q1,F

Rappresentazione della funzione di transizione di una MdT (2) Rappresentazione con diagrammi di stato La funzione di transizione può essere rappresentata graficamente con i diagrammi di stato. In questa rappresentazione indicheremo: con qi gli stati con le transizioni su cui scriveremo ai , qj , mi con lo stato iniziale con lo stato finale c,a,D q1 q0 b,c,D , ,F La MdT che scambia ciascun a con b, ciascun b con c, ciascun c con a, può essere rappresentata nel seguente modo: a,b,D

La funzione di transizione della MdT per l’addizione di due numeri naturali Consideriamo la MdT che esegue l’addizione di due numeri naturali rappresentandoli come sequenza di barre. Vediamo tabella di transizione e diagramma di stato. |  q0 q1 q2 q3 |, q1, D ,q3, S , q4, F |, q0, D , q2, S null Ingressi Configurazioni non previste. Infatti non ci sono transizioni per gli ingressi  negli stati q2 e q3 Stati |, |, D q0 q4 , , S q1 , |, D | , | , D q2 q3 | , , S | , , F Anche il diagramma di stato è un diagramma non completo. Infatti negli stati q2 e q3 non sono previste transizioni per gli ingressi 

Macchina di Turing Universale Dato uno specifico algoritmo, è possibile ricorrere ad una macchina di Turing per risolverlo. Turing definì anche una macchina universale detta Macchina di Turing Universale (MdTU), ovvero una macchina capace di simulare il comportamento di una qualsiasi altra macchina di Turing. Per far questo la MdTU ha come ingressi due stringhe: la prima corrisponde all’insieme di quintuple che definiscono la particolare Macchina di Turing da simulare; la seconda corrisponde all’input della Macchina di Turing da simulare. Stringa che rappresenta l’insieme delle quintuple della macchina di Turing M da simulare Stringa che rappresenta l’input I della macchina M { {  ..

La MdTU come macchina programmabile Le azioni di una MdTU consisteranno nello spostarsi continuamente dalla stringa che rappresenta le quintuple alla stringa che rappresenta i dati, in modo da effettuare l’elaborazione. Le sue azioni, descritte dalla propria lista di quintuple, consisteranno nello scandire la stringa che rappresenta le quintuple, cercare la quintupla corrispondente, interpretarne le specifiche e spostarsi opportunamente sulla stringa di input, eventualmente modificandola, secondo quanto indicato. Una MdTU è una macchina programmabile in grado, cioè, di memorizzare la descrizione di una qualsiasi macchina di Turing e di simularne il comportamento (in pratica una macchina di Turing capace d’interpretare un’altra macchina di Turing). Mentre una “normale” MdT esegue un unico algoritmo quello che è “incorporato” nella tabella di transizione, una MTU (macchina programmabile) può eseguire un qualsiasi algoritmo..

Tesi di Church Dato un problema possiamo enunciare la seguente definizione. Un problema si dice risolubile o computabile o calcolabile se, dati in ingresso certi valori, è possibile determinare una funzione che metta in relazione tali dati con un risultato. Ed ora, una semplice domanda: ma qual è il metodo che stabilisce se un problema è calcolabile? Secondo la tesi di A. Church (un matematico che nel 1936 si occupò per primo della calcolabilità di un problema), uno dei metodi sarebbe quello di trovare la MdT corrispondente, in quanto, passo dopo passo, attraverso stati intermedi, si trasformano i valori iniziali sino ad ottenere quelli finali. O meglio, secondo Church, un qualsiasi problema è calcolabile se è Turing-calcolabile, cioè se si riesce a costruire una MdT applicabile al procedimento. Esiste una MdT che lo risolve Problema calcolabile

Problemi calcolabili e non calcolabili La tesi di Church presuppone, quindi, che non esista alcun formalismo capace di risolvere una classe di problemi più ampia di quelli risolti da una Macchina di Turing. Ovviamente potremmo trovarci di fronte a problemi calcolabili o non calcolabili. La risoluzione di un’equazione di secondo grado, pur ammettendo più soluzioni, è un problema decisamente calcolabile, mentre un teorema matematico che ancora non abbia trovato una sua esatta dimostrazione, sarebbe un classico esempio di problema non calcolabile. Concludendo, possiamo dire che l’elaboratore è un automa, ma i problemi che esso ci aiuta a risolvere, non possono certamente essere altro che computabili.