MACCHINE DI TURING e ALGORITMI *) definizione, relazione tra MdT e algoritmi, - esempi nella prima parte : 1) la MdT che non fa nulla 2) riempi nastro 3) cerca uno 4) incrementa un numero di uno (n+1) 5) cerca uno, 6) riempi nastro simmetrica 7) controllo parita' su un dato di zeri e uni
Macchina di Turing (attenzione: la Macchina di Turing NON e' una macchina (non e' Hardware, non ha un' unita' centrale come tutti i calcolatori di oggi) NON e' un oggetto ... e' un formalismo - ovvero un sistema formale - molto semplice per descrivere algoritmi
e' un formalismo per descrivere algoritmi Macchina di Turing La Macchina di Turing e' un formalismo per descrivere algoritmi Fu definita da Alan Turing, matematico inglese, nel 1935 A.M.Turing, “ On Computable numbers with an application to the entscheidungsproblem ” (*) Proc. London Math. Soc. 2:42, 1936, pp.230-265 presentato qui perche' e' un .. esempio di automa modello teorico dei calcolatori “convenzionali” (VonNeumann) buona introduzione ad alcuni algoritmi formalismo usabile per dimostrare un teorema importante (*) problema della decisione
calcolo automatico alcuni calcoli possono essere eseguiti seguendo delle istruzioni in maniera del tutto meccanica; negli anni trenta il matematico inglese Alan Turing si e' occupato dei limiti dei procedimenti di calcolo e a tal fine ha definito un formalismo per ridurre un procedimento di calcolo a sequenze di azioni molto semplici
cosa e’ necessario per fare calcoli? devo avere a disposizione un po' di carta per scrivere i dati di partenza, intermedi e i risultati finali : cioe', semplificando, tanti foglietti di carta (quanto basta), messi in fila, che leggo o scrivo uno alla volta (tenendo un "dito" sul "foglietto corrente"); da qualche parte ho una lista di istruzioni che mi dice cosa fare ad ogni passo: il repertorio di istruzioni e' il piu' semplice possibile, le azioni richieste sono molto semplici... --- Proposta di Turing: cosa diventa un generico processo di calcolo ridotto alla forma piu' semplice...
una lista di istruzioni molto semplici calcolo automatico la macchina di T e' un formalismo per un procedimento meccanico automatico di "fare conti", dove si immagina di avere a disposizione una lista di istruzioni molto semplici (scritta su una memoria accessibile all’esecutore, che deve essere (solo) letta dallo stesso, oggi si dice una ROM) un insieme di dati iniziali scritti su una “memoria” accessibile all’esecutore (diversa dalla precedente memoria per le istruzioni, perche’ destinata anche a contenere i dati intermedi e i risultati -> deve essere riscrivibile) una memoria per ricordarsi a che punto siamo, cioe' per memorizzare lo stato corrente della computazione vediamo meglio...
cosa fa una macchina di Turing Le azioni semplici richieste dalla "macchina di Turing": *) dato un simbolo letto "S" da un foglio (foglio corrente, individuato da un “dito” o posizione corrente pc ), *) dato "Q", stato del processo [ anzi dell’ esecutore - e’ lo stato interno dell' elaboratore o esecutore, memorizzato da qualche parte, in una memoria "interna", e' un simbolo ], *) si (ri)scrive sullo stesso foglietto un nuovo simbolo "S1" e si passa (l’esecutore!) nello stato nuovo "Q1", *) si puo' quindi cambiare il "foglio corrente", passando a esaminare il foglietto adiacente a destra oppure a sinistra (specifico una direzione) -> cambia posizione corrente pc
un’ istruzione della macchina di Turing un’istruzione per la macchina di Turing dice: se hai letto dal foglietto il simbolo S e se sei nello stato Q (la computazione e’ nello stato Q) allora ti dico quale simbolo nuovo S1 scrivere su quel foglietto, quale stato nuovo Q1 assumi ora (cioe’ la computazione), e quale foglietto esaminare (a sinistra, a destra, o lo stesso -> Direzione) per la prossima istruzione: un' istruzione della macchina di Turing e' una quintupla : (Q, S, Q1, S1, Direz) l'insieme delle quintuple ("memorizzate a sola lettura" nella macchina di Turing) e' la descrizione del procedimento di calcolo che questa macchina realizza (detta matrice funzionale)
Alcune osservazioni sulla macchina di Turing Cosa scrivo sui foglietti? Che simboli uso? c’ e' un numero finito di simboli S "esterni", l’insieme (finito) di questi simboli e’ detto alfabeto esterno Nota: il numero di simboli utilizzabili sui fogli di carta della memoria esterna deve essere finito - con un numero infinito di simboli non sarei piu' in grado di distinguerli uno dall'altro- avrei un insieme continuo di simboli! (si noti che la dimensione dei fogli di carta e' fissa). c’e’ ancora una ragione per avere un insieme finito di S, che e’ la stessa per Q - vediamo
limite per gli stati interni Q il procedimento di calcolo e' specificato dall' insieme delle "istruzioni" cioe’ delle quintuple (Q, S, Q1, S1, Direz) Le istruzioni sono individuate dai dati correnti per ogni istruzione, che sono S (simbolo letto dal foglietto) e Q (stato della macchina) quindi la coppia S,Q individua l’istruzione, ovvero determina cosa fare al passo corrente. il numero delle istruzioni deve essere finito, quindi anche il numero di S e di Q distinti deve essere finito - e: il numero di simboli S "esterni" e' finito il numero degli stati interni "Q" e' finito nota che durante una computazione (un processo di calcolo di elaborazione) ad ogni passo del processo abbiamo uno stato Q ben determinato (uno solo in ogni istante) - questo stato puo' cambiare di passo in passo.
l’esecutore (l’unita’ di elaborazione) ? nell' unita' di elaborazione : 1) c’e una memoria dove e’ memorizzato il procedimento di calcolo (congelato, fisssato in modo “indelebile”) (= la matrice funzionale = le quintuple); la memoria dove sono memorizzate le istruzioni e’ finita; 2) c’e’ una memoria interna (“riscrivibile”) in cui e' memorizzato lo stato corrente della macchina Q; anche questa memoria e’ finita, ... l' unita' di elaborazione e' finita ( questo vale anche per un esecutore umano? la memoria di una persona e’ finita? )
l’esecutore (l’unita’ di elaborazione) ? l' "unita' di elaborazione" della Macchina di Turing ha: 1) una memoria con le quintuple della matrice funzionale (dove sono memorizzate le istruzioni), finita, a sola lettura 2) una memoria interna (“riscrivibile”) con lo stato corrente della macchina Q, anche finita, 3) una "testina di registrazione" con cui si "legge" dal nastro, 4) una unita' di "controllo" che data la coppia S,Q "trova" la quintupla corrispondente, e quindi i nuovi S1, Q1, Direz, e poi “riscrive” S1 nella cella corrente su nastro, “sposta” la testina di lett/scritt come da Direz, e infine “cambia stato” da Q a Q1 .
e i foglietti? i foglietti sono la memoria di lavoro del procedimento di calcolo “alla Macchina di Turing”, sono la memoria esterna (in contrasto con le memorie interne per lo stato corrente Q e per le quintuple) per evitare problemi di limiti della memoria di lavoro: supponiamo di avere un numero di fogli grande quanto basta - ovvero illimitato: la memoria esterna e' illimitata, ==>> una macchina di Turing e' piu' "potente" di un calcolatore reale ... ma la memoria esterna (il nastro) e' formata da celle adiacenti accessibili in modo strettamente sequenziale; una cella corrisponde al ( e’ il ) foglietto
come si esegue un’istruzione della m.d.T: Passo generico della macchina (o algoritmo di esecuzione): 1) leggi dal nastro il simbolo s ( = valore contenuto nella cella corrente) 2) dati s e q (s= simbolo letto dal nastro, q= stato corrente della macchina) determina, in base alla matrice funzionale MF, una terna di simboli s1, q1, d1 (nuovo simbolo esterno s1, nuovo stato della macchina q1 e direzione di spostamento della testina d1) [cioe’si cerca, nell’insieme delle quintuple (q,s, q1,s1,d1) quella che ha q,s coincidenti ] 3) scrivi s1 al posto di s, 4) memorizza q1 al posto di q (stato nuovo della macchina) 5) sposta la testina in direzione d1 6) ripeti da 1).
notazione piu’ breve: Useremo la seguente notazione piu' concisa per specificare lo stato corrente di un processo di calcolo con la MdT: ... 0 0 0 0 0 * 1 1 1 0 0 0 0 ... a dove si specifica quanto basta: il nastro (= memoria esterna) lo stato corrente di valore a (stato indicato con il simbolo Q) la posizione corrente e' indicata dalla posizione dello stato corrente, qui il simbolo corrente e' * (simbolo letto dalla cella corrente, che e’ quella marcata dallo stato corrente)
1) esempio, M.d.T che non fa nulla, stato di arresto la macchina piu' semplice non fa nulla, cioe’ rimane nello stato di fermo o di arresto “z” fin dal primo passo; stato “z” significa: qualunque cosa leggi dalla cella corrente del nastro riscrivila uguale, rimani nello stesso stato e non spostare la testina. ipotesi: insieme simboli esterni: S = { 0,1 } insieme degli stati : Q = { z } devo dare: situaz. iniziale e insieme istruzioni: ... 0 1 0 0 1 1 1 0 ... questa macchina ha z due istruzioni: ( z 0 z 0 0 ) ... se sei nello stato z e se hai letto 0 dalla cella corrente allora riscrivi 0 e non spostare la testina ( z 1 z 1 0 ) ... sei nello stato z, hai letto 1, allora riscrivi 1 e non spostare la testina
2) una m.di T. riempi nastro: per descrivere una computazione (“un conto”) devo fornire: la situazione iniziale e le istruzioni cioe’le quintuple ( q, s, q1, s1, d1 ) ... 1) situazione di partenza: a) un nastro (mem.esterna) vuoto, b) stato iniziale = a [il nome e’ arbitrario, uso “a” per brevita’] ... schematicamente: ... 0 0 0 0 0 0 0 0 ... a 2) le istruzioni: qui ho un' unica quintupla, composta da: ( q s q1 s1 d1 ) se sei nello stato a e leggi da nastro 0, ( a 0 a 1 -> ) allora scrivi su nastro un 1 al posto di 0 sposta la testina a destra e infine vai nello stato a : fine del 1.o passo ... 0 0 1 0 0 0 0 0 ... situaz. dopo il 1.o passo a =situaz.all’iniz. 2.o passo
2) una m.di T. riempi nastro: unica istruzione: ( a,0, a,1,-> ) situazione iniziale: ... 0 0 0 0 0 0 0 0 ... a al 2.o passo: ( dopo il 1.o, prima del 2.o passo,) : ... 0 0 1 0 0 0 0 0 ... al 3.o passo: ... 0 0 1 1 0 0 0 0 ... al 4.o passo: ... 0 0 1 1 1 0 0 0 ... al 5.o passo: ... 0 0 1 1 1 1 0 0 eccetera .... ma ... non si ferma mai !! 1) situazione di partenza: ... 0 0 0 0 0 0 0 0 ... a 2) le istruzioni: un' unica quintupla, composta da: ( q s q1 s1 d1 ) ( a 0 a 1 -> ) se sei in stato a e leggi da nastro 0, allora scrivi su nastro un 1 al posto di 0, sposta la testina a destra e vai nello stato a : fine del 1.o passo ... 0 0 1 0 0 0 0 0 ... a =situaz. dopo il 1.o passo =situaz.all’iniz. 2.o passo
cont. es. nr. 2 “riempi nastro” attenzione allo stop: lo stato di stop “h” di norma non viene esplicitamente descritto; si intende che nello stato di stop “h” la macchina qualunque cosa legga riscrive lo stesso simbolo e rimane nello stesso stato e non sposta la testina: ( h $ h $ 0 ) la macchina appena vista, fatta partire su un nastro pieno di zeri da’ luogo ad un processo di calcolo che non si ferma mai ... lo stato di arresto non si raggiunge mai (anzi, non e’ stato neanche definito) vedremo ancora qualche esempio di macchine di questo tipo
3) una macchina “cerca uno” 1).. 0 0 0 0 0 1 .. a 2).. 0 0 0 0 0 1 .. 3).. 0 0 0 0 0 1 .. 4).. 0 0 0 0 0 1 .. 5).. 0 0 0 0 0 1 .. 6).. 0 0 0 0 0 1 .. 7).. 0 0 0 0 0 1 .. h modifichiamo un po’: il nastro inizialmente non e’ tutto vuoto, nastro e posiz. iniziale: .. 0 0 0 0 0 1 .. a due istruzioni (quintuple) : ( a 0 a 0 -> ) ( a 1 h 1 0 ) al passo 6 la macchina va nello stato h e si ferma - passo 7 a fianco
3) una macchina “cerca uno” ( a 0 a 1 -> ) ( a 1 h 1 -> ) 1)..1 0 0 0 0 0 1 .. 2)..1 0 0 0 0 0 1 .. a a 3)..1 0 0 0 0 0 1 .. 6)..0 0 0 0 0 0 1 .. a a e si ferma ... ma se l’uno appare dopo 1.0 E +500 celle, allora il numero di passi eseguiti prima di fermarsi sara’ molto piu’ grande... ma lo stesso finito; se invece l’uno a destra non c’e’, la macchina non si fermera’ mai ...
4)esempio: MdT per il calcolo del numero successore a n n1 =succ(n) = n+1; ipotesi: rappresentiamo n in unario, ovvero: rappresento il numero uno con 1 rappresento il numero due con 11 rappresento il numero tre con 111, rappresento il numero quattro con 1111 rappresento il numero cinque con 11111 ecc rappresento il numero dodici con 111111111111 che e’ la rappresentazione piu’ antica: il sistema “unario”
continua 4.o es. di m.di T.: calcolo di N+1 situazione iniziale: (scelta mia!) sul nastro rappresento N, numero intero positivo, con codifica piu' semplice unaria : scrivo N in unario ovvero rappresento il numero n riportando n volte un 1 (ipotesi: l’ insieme dei simboli su nastro esterno e’ S = { 0,1 }. per cui per passare da N (scritto con N simboli 1) a N+1 basta aggiungere un 1: situazione iniz. nastro (N=2) .. 0 0 1 1 0 0 0.. situazione finale nastro (N=3) .. 0 0 1 1 1 0 0.. stato iniziale a stato finale (halting state) h
continua 4.o es. di m.di T.: calcolo di N+1 per passare da N a N+1 devo aggiungere un 1: quindi dalla situazione iniziale (la posiz. iniz. testina e’ una mia scelta): ... 0 0 1 1 0 0 0 0 ... a passo alla situazione finale: ... 0 0 1 1 1 0 0 0 ... h (indico con h lo stato finale) non vi sara’ difficile immaginare le istruzioni: se leggi 1 e se sei nello stato a ? ...
continua 4.o es. di m.di T.: calcolo di N+1 per calcolare N+1 devo aggiungere un 1: quindi da .. 0 0 1 1 0 0 0 0 ... a devo arrivare alla situazione finale: (h = lo stato finale) ... 0 0 1 1 1 0 0 0 ... h le istruzioni: se leggi 1 e se sei nello stato a allora scrivi 1 (cioe’ lascia l’uno senza cambiarlo) e sposta la testina a destra,e ripeti (finche’ non leggi uno zero) se leggi 0 e sei nello stato a, allora scrivi 1 (appunto il +1 !) e hai finito - passa nello stato di fine o di arresto ... quindi: (a 1, a 1 +) indico con + uno spostamento a destra (a 0, h 1 0) indico movimento zero se la testina non si sposta
continua 4.o es. di m.di T.: calcolo di N+1 (a 1, a 1 + ) (a 0, z 1 0 ) (z 1, z 1 0 ) (provare a leggere le istruzioni!) situazione inziale (posiz. iniz. testina e’una mia scelta): ... 0 0 1 1 0 0 0 0 ... a applico (a 1, a 1 ->) passo due: a applico (a 1, a 1 ->) passo tre: a applico (a 0, z 1 0) situazione finale: ... 0 0 1 1 1 0 0 0 ... z applico (z 1, z 1 0) a questo punto abbiamo finito (situazione di fermo, dove la posizione testina non cambia e lo stato interno non cambia)
scrivere una m.di T. che calcola n+2 -> provare ora ! esercizio: scrivere una m.di T. che calcola n+2 -> provare ora !
una m.di T. che calcola n+2: n codificato in unario, tutto il esercizio : inizio: ... 0 0 1 1 1 0 0 0 ... a fine scorrimento: +1 ... 0 0 1 1 1 1 0 0 ... b e ancora +1, ... 0 0 1 1 1 1 1 0 ... h e ho finito una m.di T. che calcola n+2: n codificato in unario, tutto il resto del nastro e' a zero; la macchina, posizionata all' inizio sull'uno a sinistra, scorre gli uni verso destra come prima; arrivata allo zero a destra deve aggiungere due uni: quindi da stato a, leggo zero, scrivo 1 e passo nello stato b (lo stato b "ricorda" che ho gia' aggiunto un uno e che devo aggiungere ancora uno) e vado a destra, in stato b leggo 0, scrivo 1 e ho finito ...
macchina = automa con termini piu’ precisi: la macchina di Turing e' un automa a stati finiti dotato di memoria esterna illimitata ... vedremo tra poco uno schema grafico del modello della "macchina" la m.d.t. puo' essere costruita con un po' di circuiti elettronici (tranne il nastro illimitato) esistono molti programmi (disponibili su rete) per simulare una macchina di Turing ...
ricorda i componenti della macchina di Turing: * una memoria esterna per i simboli S (testina lett/scritt) * una memoria interna dove tenere lo "stato" Q * un' unita' di elaborazione dove e'memorizzata (fisssata) la funzione di trasformazione (la matrice funzionale -le quintuple) e che esegue ciclicamente un’istruzione, cioe’: il ciclo di esecuzione di un'istruzione di una M.di T.: * leggi un simbolo s dalla posizione corrente su nastro * dati s (dal nastro) e q (stato corrente) determina dalle quintuple date una terna di simboli s1, q1, d1 * scrivi s1 al posto di s, * memorizza q1 al posto di q q1 = nuovo stato della macchina * sposta la testina in direzione d1 ripeti dall'inizo, da “leggi s dal nastro ”
m.di T. - schema: ... (ri-) vediamo in dettaglio le singole parti ...
ipotesi sugli insiemi di simboli usati insieme dei simboli su nastro (varia da macchina a macchina) S = { a, b, c, d, ... } es.: S = { 0, 1, * } insieme degli stati: Q = { x, y, z, w, p, q, .. } Q = { a, b, c, h }
la memoria esterna : testina di lettura/scrittura * una memoria esterna = un insieme di celle ciascuna delle quali contiene uno (e uno solo) dato s (scelto dall’ alfabeto di simboli esterni finito S); la memoria esterna e' accessibile una cella alla volta mediante una "testina" di lettura e di scrittura; la testina di accesso puo' spostarsi di una cella per volta rispetto la posizione corrente. In ogni istante e' individuata la cella corrente (dove sta la testina), e inoltre sono individuate le celle a sinistra e a destra, accessibili (alla fine di ogni ciclo di esecuzione) con un comando "sposta la testina sulla cella a destra" oppure "sulla cella a sinistra". le celle NON sono numerate <=== ATTENZIONE : le celle sono senza indirizzo! il numero di celle non e' limitato <=== ATTENZIONE la MdT ha una memoria di lavoro illimitata
memoria interna e unita’ di elaborazione una memoria interna -- dove tenere lo stato interno del processo di calcolo, individuato da un simbolo "q" scelto da un insieme finito di simboli Q (stati interni possibili), (serve per ricordare “sto facendo questo, ho fatto quello” ) un' unita' di elaborazione -- dove e'memorizzata (fisssata) la funzione di trasformazione (l’insieme delle quintuple detto anche la matrice funzionale, il "programma" della MdT l'insieme delle quintuple che descrive la sequenza delle azioni da fare che e' l'algoritmo in notazione come richiesto dalle MdT si chiama anche "MATRICE FUNZIONALE": se metto le quintuple in colonna ho una matrice dove una riga e' una quintupla, e dove una quintupla e' individuata dai primi due valori (Q,S) e mi da' con i tre valori successivi i nuovi simboli (Q1, S1, Direz)
la MdT esegue ciclicamente le seguenti cose (ripetiamo) : ciclo di un' istruzione la MdT esegue ciclicamente le seguenti cose (ripetiamo) : il ciclo di esecuzione di un'istruzione di una M.di T.: * leggi un simbolo s dalla posizione corrente su nastro * dati s (dal nastro) e q (stato corrente) determina dalle quintuple della MdT una terna di simboli s1, q1, d1 * scrivi s1 al posto di s, s1 sostituisce s nella cella del nastro esterno * memorizza q1 al posto di q q1 = nuovo stato della macchina * sposta la testina in direzione d1 alla fine, dopo avere riscritto la cella con s1 ripeti dall'inizo, da “leggi s dal nastro ”
la matrice funzionale: ( a, 1, a , 1, + ) vai a destra finche' trovo 1 la MdT cha fa n+2 : la matrice funzionale: ( a, 1, a , 1, + ) vai a destra finche' trovo 1 ( a, 0, b, 1, +) se trovo 0 cambia in 1 (n+1) ( b, 0, h, 1, 0) secondo zero cambia in 1 (n+2) ( h, $, h, $, 0) halt: qual.que cosa leggi non cambiare ( b,1, b, 1, ??) quintupla non possibile ... inizio: ... 0 0 1 1 1 0 0 0 ... a fine scorrimento: +1 ... 0 0 1 1 1 1 0 0 ... b e ancora +1, ho finito: ... 0 0 1 1 1 1 1 0 ... h
definizione di applicabilita’ Se una MdT fatta partire da una situazione iniziale [nastro, posizione testina, quintuple] si ferma dopo un numero finito n di passi allora diremo che tale MdT e' applicabile ai dati iniziali; se invece una MdT fatta partire con certi dati iniziali non si ferma mai allora diremo che la MdT non e' applicabile a tali dati. Si noti che in generale "e' difficile" determinare QUANDO si fermera' una MdT, e anzi SE si fermera'. Ritorneremo in seguito su questo punto.
fine parte introduttiva alle M. di T fine parte introduttiva alle M.di T. segue la rappresentazione grafica della matrice delle quintuple
rappresentazione grafica della macchina di Turing la quintupla (q,s, q1,s1,direz) si puo'rappresenta graficamente: s s1 q q1 direz n.b.: la direzione di spostamento della testina e’ riportata nello stato di arrivo. e il nastro? cioe’ la memoria esterna ? ... separatamente !
rappresentazione grafica della 4.a macchina di Turing la 4.a M.di T. che calcola n+1, ovvero la matrice funzionale con le quintuple: (a 1, a 1 + ) (a 0, z 1 0 ) (z 1, z 1 0 ) a z START 1 due stati: a (scorri a destra) e z (arresto)
esercizio (5.o esempio di M.di T.) dato il nastro esterno: ... 0 0 0 0 0 0 0 0 0 ... a con tutte le celle con simbolo zero, e date le istruz.: 1 che quintuple sono ? e cosa fa questa macchina se fatta partire con il nastro riportato qui sopra? 1 1 1 a h start
cont. esercizio (5.a MdT) : la domanda era: cosa fa la macchina di Turing seguente? ... 0 0 0 0 0 0 0 0 0 ... a nastro esterno = tutte le celle con simbolo zero 1 dal grafo a sinistra: ( a, 0, a, 0, + ) ( a, 1, h, 1, 0 ) se sei nello stato a e se leggi zero, allora lascia 0 e vai a destra, se sei in stato a, e trovi uno allora scrivi 1 e fermati 1 1 1 a h start questa macchina cerca sul nastro un 1 per fermarsi ->
se sei nello stato a e se leggi zero, allora lascia 0 e vai a destra, risposta a “cosa fa la macchina di Turing seguente (5.a) ”? ... 0 0 0 0 0 0 0 0 0 ... il nastro esterno ha tutte le a celle con simbolo zero 1 ( a, 0, a, 0, + ) ( a, 1, h, 1, 0 ) se sei nello stato a e se leggi zero, allora lascia 0 e vai a destra, se sei in stato a, e trovi uno allora scrivi 1 e fermati 1 1 1 a h start questa macchina cerca sul nastro un 1 per fermarsi, ma sul nastro ci sono solo zeri: la macchina non si fermera’mai!
relazione tra M.di T. e algoritmi: una macchina di Turing che si ferma dopo un numero finito di passi e' un algoritmo una macchina di Turing che non si ferma mai NON e’ un algoritmo !!
ancora un esercizio: cosa fa la m.d.T seguente (6.a MdT) : data la situazione iniziale su nastro (inizialmente tutto a 0): ... 0 0 0 0 0 0 0 0 0 ... a e date le quintuple: a 1 a 1 + a 0 b 1 - b 1 b 1 - b 0 a 1 + (+ indica spostamento a destra, - indica spostamento a sinistra, 0 indica un non spostamento) leggi: se nello stato a trovo 1 riscrivo 1, resto nello stato a e vado a destra (+) se in a trovo 0 riscrivo 1 e cambio stato, vado nello stato b, e mi sposto a sinis. (-) se in b trovo 1 riscrivo 1, resto in stato b e vado a sinistra se in stato b trovo 0 scrivo 1 vado in stato a e a destra...
cont. il secondo esercizio (6.a MdT) data situazione iniziale su nastro: ... 0 0 0 0 0 0 0 0 0 ... a (nastro inizialmente tutto a zero) e le quintuple a fianco : a 1 a 1 + a 0 b 1 - b 1 b 1 - b 0 a 1 + a e’ lo stato di scorrimento a destra fino alla cella con uno zero; questo zero viene cambiato in uno, poi si va in b: lo stato b e’ uno stato di scorrimento a sinistra , fino alla prima cella con uno zero, che viene cambiato in un 1 e poi si ritorna nello stato a... quindi...
cont. il secondo esercizio (6.a MdT) dati nastro: e quintuple: a 1 a 1 + ... 0 0 0 0 0 0 0 0 ... a 0 b 1 - (tutto a zero) b 1 b 1 - b 0 a 1 + stato a = scorri a destra, fino a 0; riscrivi 1, vai in stato b: stato b = scorri a sinistra, fino 0; riscrivi 1, ritorna in st. a: questa macchina riempie il nastro di uni: appende un 1 ad ogni ciclo di esecuzione (formato da uno o piu’ passi); situazione iniziale ... 0 0 0 0 0 0 0 0 0 ... a dopo il 1.o passo: ... 0 0 0 0 1 0 0 0 0 ... b dopo il 2.o passo: ... 0 0 0 1 1 0 0 0 0 ... dopo il 3.o passo: ... 0 0 0 1 1 0 0 0 ... dopo il 4.o passo: ... 0 0 0 1 1 1 0 0 ...
cont. il secondo esercizio (6.a MdT) 0).. 0 0 0 0 0 0 0 0 .. a 1 a 1 + a a 0 b 1 - b 1 b 1 - 1).. 0 0 0 0 1 0 0 0 .. b 0 a 1 + b 2).. 0 0 0 1 1 0 0 0 .. 6).. 0 0 0 1 1 1 0 0 .. a b 3).. 0 0 0 1 1 0 0 0 .. 7).. 0 0 1 1 1 1 0 0 .. a a 4).. 0 0 0 1 1 1 0 0 .. 10)..0 0 1 1 1 1 0 0 .. b a 5).. 0 0 0 1 1 1 0 0 .. 11)..0 0 1 1 1 1 1 0 .. b b
cont. il secondo esercizio (6.a MdT) dati nastro: e quintuple: a 1 a 1 + 0)... 0 0 0 0 0 0 0 0 ... a 0 b 1 - a b 1 b 1 - al passo undici lo stato e’: b 0 a 1 + 11)..0 0 1 1 1 1 1 0 .. b quindi questa m.d.T. fatta partire su un nastro vuoto lo riempie di uni, simmetricamente a destra e a sinistra ... per ipotesi il nastro e’ illimitato -> la m.d.T. non si fermera’ mai... ( disegnare per esercizio la versione grafica delle quintuple )
7.o es. di m.di T: “controllo parita’ ” problema: costruire una m.d.T. che risponde alla domanda: data una sequenza di zeri e uni, delimitati da una x, determinare se il numero degli uni presenti e’ pari. es. con il dato: .. x 0 0 1 1 x .. la risposta e’ si’ es. con il dato: .. x 1 1 1 0 x .. la risposta e’ no ancora: con il dato: .. x 1 0 1 0 1 0 1 0 0 x .. es. con il dato: .. x 1 1 1 0 0 1 1 1 1 x ..
7.o es. di m.di T: “controllo parita’ ” ipotesi sugli insiemi di simboli usati: S = { 0, 1, x, D, P } Q = { p, d, ...? , h } suppongo di fornire la risposta nella cella dove mi fermo, scrivendo P se il numero degli 1 era pari, D se era dispari. non so ancora quanti stati mi servono; procedimento: esamino a partire dal primo tutti i dati da sinistra a destra, e ad ogni uno letto sul nastro cambio stato: stato “pari” sara’ “p” , stato dispari sara’ “d”; inizialmente mi metto nello stato pari (zero uni incontrati):
7.o es. di m.di T: “controllo parita’ ” S = { 0, 1, x, D, P } Q = { p, d, ...? , h } situazione iniziale: ... x 1 1 1 0 0 x .. p leggo i dati da sinist a dest, ad ogni 1 cambio stato: stato “p” pari , stato “d” dispari; stato iniziale “p”; per lo stato pari: ( p 0 p 0 + ) ; se nello stato p leggo zero rimango in p, ; riscrivo zero e vado a destra ( p 1 d 1 + ) ; se in p leggo un 1 -> riscrivo 1,vado ; in stato dispari e mi sposto a destra per lo stato dispari: ( d 0 d 0 + ) ; in d ho 0 -> riscrivo 0, resto in d, a destra ( d 1 p 1 + ) ; in d ho 1 -> riscrivo 1, vado in p, a destra
7.o es. di m.di T: “controllo parita’ ” situazione iniziale: ... x 1 1 1 0 0 x .. p ( p 0 p 0 + ); in p leggo 0, riscrivi 0 ,resto in p, dest. ( p 1 d 1 + ); in p leggo 1; vado in d; scrivo 1; a dest ( d 0 d 0 + ); in d ho 0; riscrivo 0; resto in d, a dest; ( d 1 p 1 + ); in d ho 1; riscrivo 1; vado in p; a dest. segue la “traccia di esecuzione” : al passo iniziale 1) stato p, sono sulla cella a sinistra (la prima dopo delimitatore x); qui trovo 1: quintupla p,1 1)..x 1 1 1 0 0 x .. p 2)..x 1 1 1 0 0 x .. d 3)..x 1 1 1 0 0 x .. 4)..x 1 1 1 0 0 x .. 5)..x 1 1 1 0 0 x .. d 6)..x 1 1 1 0 0 x .. 7)..x 1 1 1 0 0 D .. h e basta: risposta “D”
7.o es. di m.di T: “controllo parita’ ” mancano ancora le quintuple per le due situazioni finali: 6).. x 1 1 1 0 0 x .. d (e quella simmetrica dove arrivo alla cella limite x in stato p) quindi oltre alle gia’ viste: ( p 0 p 0 + ) ; in p leggo 0, riscrivi 0 ,resto in p, destra. ( p 1 d 1 + ) ; in p leggo 1; vado in d; scrivo 1; a destra ( d 0 d 0 + ) ; in d ho 0; riscrivo 0; resto in d, a destra; ( d 1 p 1 + ) ; in d ho 1; riscrivo 1; vado in p; a destra. aggiungo: ( d x h D 0 ) ; in d ho x; scrivo risultato D e mi fermo ( p x h P 0 ) ; in p ho x: scrivo risultato P e mi fermo
7.a m.di T: “controllo parita’-vers.grafica ” ( p 0 p 0 + ) ( p 1 d 1 + ) * ( d 0 d 0 + ) ( d 1 p 1 + ) @ ( d x h D 0 ) ( p x h P 0 ) ... rappresentazione grafica delle stesse quintuple: (nota: nel grafo degli stati [sotto] sono marcate due quintuple, * e @ ) + start p halt d x 1 P D * @
7.a m.di T: “controllo parita’ - vers.grafica” nota: non riporto le transizioni di stato che lasciano lo stato immutato e che riscrivono lo stesso simbolo (transizioni (p,0, ...), (d,0, ... ) ( p 0 p 0 + ) ( p 1 d 1 + ) * ( d 0 d 0 + ) ( d 1 p 1 + ) @ ( d x h D 0 ) ( p x h P 0 ) + start p halt d x 1 P D * @
7.o es., m.d.T. <<controllo di parita’ >>, nota: la variante dara’: 1).. x 1 1 1 0 0 x .. p 2).. x 0 1 1 0 0 x .. d 3).. x 0 0 1 0 0 x .. 4).. x 0 0 0 0 0 x .. ... 6).. x 0 0 0 0 0 x .. 7).. x 0 0 0 0 0 D .. h una variante dell’es.6: ( p 0 p 0 + ) ( p 1 d 0 + ) * ( d 0 d 0 + ) ( d 1 p 0 + ) @ ( d x h D 0 ) ( p x h P 0 ) sono cambiate le istr. * @ erano (p,1,d,1 ,+) (d,1,p,1 ,+) ho lo stesso risultato, ma cancello i dati; si provi a scrivere la traccia di esec. con (p,1,d,A,+),(d,1,p,B,+)
- fine prima parte delle MdT