modelli computazionali e macchine astratte. problemi, algoritmi e modelli computazionali...

22
QuickTime™ e un decompressore sono necessari per visualizzare quest'immagine. Modelli computazionali e macchine astratte

Upload: carlotta-quarta

Post on 02-May-2015

229 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

QuickTime™ e undecompressore

sono necessari per visualizzare quest'immagine.

Modelli computazionali e macchine astratte

Page 2: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

Problemi, algoritmi e modelli computazionali

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.

Formulazione di un problema

Individuazione di un algoritmo

Metodo risolutivo (progetto)

esecutoredati

(input)

Scelta del formalismo per la codifica dell’algoritmo

Bontà di un algoritmo (complessità

computazionale)

Scelta dell’esecutore più adatto

risultati (output)

Vediamo la relazione che esiste tra problema, algoritmo, esecutore.

Page 3: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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)

Page 4: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

I modelli matematiciI 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):

Page 5: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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.

Page 6: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

L’idea alla base della MdTLa 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; 527Se 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.

Page 7: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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à diControllo

TLS

Memoriadi controllo

Unità logica

Memoriainterna

Page 8: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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 finitoX = {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à diControllo

TLS

Page 9: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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.

ai,qi

a1 a2 a3 a4 a5 a6

Page 10: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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:

f

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

Page 11: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

Definizione formale di una MdT

Una macchina di Turing (MdT) è una sestuplaMdT = (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

Page 12: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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 TLS2. q0 b c q0 D nello stato q0 se leggo b scrivo c resto nello

stato q0 e sposto a destra la TLS3. q0 c a q0 D nello stato q0 se leggo c scrivo a resto nello

stato q0 e sposto a destra la TLS4. q0 q1 F nello stato q0 se leggo scrivo vado nello

stato q1 (stato finale) e sto fermo!

Page 13: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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° 1

applicando la quintupla n° 3

applicando la quintupla n° 4

b q0

b

a

a C

a q0

c a

a C

a q0

c a

a C

a q0

c a

a C

a q0

c a

a C

a q0

c a

a C

Page 14: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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 lavoroY = { , | } alfabeto di ingressoStato iniziale = q0F = {q4}f (funzione di transizione) è così definita dalle quintuple mostrate a lato:

1. q0 | | q0 D2. q0 | q1 D3. q1 | | q1 D4. q1 q2 S5. q2 | q3 S6. q3 | q4 F

Page 15: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

Dettaglio delle quintuple

in q3 se leggo | cancello la seconda barra vado nello stato finale q4 e mi fermo

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 q0 se leggo | rimango in q0 cioè nello stato che mi fa spostare sul primo numero

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

1. q0 | | q0 D

2. q0 | q1 D

3. q1 | | q1 D

4. q1 q2 S

5. q2 | q3 S

6. q3 | q4 F

Page 16: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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

Q0q1

b,qo,DStop

c,q0,DStop

a,q0,DStop

,q1,FStop

Page 17: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

Rappresentazione della funzione di transizione di una MdT (2)

Rappresentazione con diagrammi di statoLa 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

Page 18: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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.

Configurazioni non previste. Infatti non ci sono transizioni per gli ingressi negli stati q2 e q3

|

q0q1q2q3

|, q1, D,q3, S, q4, F|, q0, D

|, q1, D, q2, Snullnull

Stati

Ingressi

|, |, D

q0

q4

, , S

q1, |, D

| , | , D

q2q3

| , , S | , , F

Anche il diagramma di stato è un diagramma non completo. Infatti negli stati q2 e q3 non sono previste transizioni per gli ingressi

Page 19: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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

Page 20: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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..

Page 21: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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

Page 22: Modelli computazionali e macchine astratte. Problemi, algoritmi e modelli computazionali L’esecutore non deve essere pensato necessariamente come una

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.