Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Modelli computazionali e macchine astratte
2
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.
3
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)
4
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):
5
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.
6
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.
7
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
8
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
9
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
10
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
11
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
12
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!
13
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
14
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
15
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
16
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
17
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
18
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
19
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 { { ..
20
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..
21
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
22
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.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.