AUTOMI A STATI FINITI I linguaggi regolari godono di interessanti
Transcript
AUTOMI A STATI FINITI I linguaggi regolari godono di interessanti
AUTOMI A STATI FINITI I linguaggi regolari godono di interessanti proprietà algebriche: • Sono defnibili con le espressioni regolari • Sono generati da grammatiche di Chomsky di tipo 3. • Sono riconoscibili con automi a stati fniti L’automa a stati fniti è il più semplice modello di calcolo. Per ogni modello di calcolo occorre specifcare: - le operazioni elementari, cioè le istruzioni per scrivere un programma quanto grande è la memoria e come la si usa come entra l’input come si determina l’output AUTOMA A STATI FINITI (ASF) • • Dispositivi che leggono la stringa di input da un nastro unidirezionale e la elaborano usando una memoria limitata. Ad ogni passo: lettura di un carattere, spostamento a destra della testina, aggiornamento dello stato della memoria. Es.1 di automa che riconosce il linguaggio : L = {w ∈ ∑bool* | |w| è pari} definito dall'esp. regolare (00+01+10+11)* Es.2 di automa che riconosce il linguaggio: L = {w ∈ ∑bool* | è pari il numero di zeri oppure di uni} definito dall'esp. regolare (0*10*10*)*+(1*01*01*)* La defnizione formale di automa segue uno schema generale che viene usato anche per defnire modelli più generali. Def. Automa a stati fniti (ASF): A = < Σ , K , q0 , F , δ > Σ = {σ1,...,σn } K = {q0,...,qm} q0 ∈ K F ⊆K δ:K×Σ→K alfabeto di input insieme fnito non vuoto di stati stato iniziale insieme di stati fnali o accettanti funzione di transizione, funzione totale che determina lo stato successivo La funzione di transizione δ può essere rappresentata mediante: • matrice (tabella) di transizione • diagramma degli stati La funzione di transizione può essere estesa alle stringhe: δ : K × Σ* → K Brevemente δ(q,x) defnisce lo stato nel quale l’automa si viene a trovare dopo aver letto tutta la stringa x, a partire dallo stato q. δ(q, ε) = q δ(q, xa) = δ(δ(q,x), a) con a ∈ Σ e x ∈ Σ* Def. Una parola x ∈Σ* è accettata dall’automa se δ(q0, x) ∈F. Def. Linguaggio di un automa A (riconosciuto da A) è: L(A) = { x∈Σ* | δ(q0, x) ∈F } Dimostrare che l’automa dell' es. 1 riconosce il linguaggio: L = {w ∈ ∑bool* | |w| è pari}. Es. Il linguaggio {anb | n ≥ 0} generato da S → aS | b, e rappresentato dal'espressione regolare a*b è riconosciuto dall'automa A = <{a, b}, {q 0, q1, q2,}, δ, q0, {q1}> con funzione di transizione rappresentata dal diagramma degli stati: δ q0 q1 q2 N.B. Il vincolo di totalità della funzione di transizione ridurre l’espressività del modello di calcolo. oppure rappresentata dalla tabella a b q0 q1 q2 q2 q2 q2 può essere rilassato senza Gli automi consentono di rappresentare in generale sistemi di transizione in un insieme fnito di stati: • • • un ascensore un distributore di biglietti dell'autobus il sistema elettrico di un automobile Esercizi • Realizzare un ASF che riconosce gli identifcatori defniti dall'espressione regolare (a+b+...z)+ (a+b+...z+0+...+9)* • Realizzare un ASF che riconosce il linguaggio: a3k+2b5h+3 per k, h ≥ 0 • Realizzare un automa che riconosce tutte le sequenze di monete da 100, 200, 500 che consentono di raggiungere il costo di un biglietto dell'autobus (1500 lire). Nello stato iniziale la somma disponibile è 0. La macchina non dà resto. • Realizzare un automa che riconosce il linguaggio: L={w∈{0, 1}* | |w|0 = 3 e (|w|1 ≥ 2 o |w|1 = 0)} • Realizzare gli ASF che riconoscono i linguaggi rappresentati dalle seguenti espressioni regolari: i. (a + b)* ba (prima non-det poi det) ii. (a+b)* a+a (prima non-det poi det) iii. (a +b)*b (a+b)2 (solo non-det) AUTOMI A STATI FINITI NONDETERMINISTICI (ASFND) Def. Automa a stati fniti non deterministico: AN = < Σ , K , q0 , F , δN > Σ , K , q0 , F δN : K × Σ → P(K) defniti come per ASF funzione di transizione, funzione che determina l’insieme (eventualmente vuoto) degli stati successivi La funzione di transizione δN può essere estesa alle stringhe: δN : K × Σ∗ → P(K) Brevemente δN(q, x) è l’insieme, eventualmente vuoto, degli stati nei quali l’automa si può trovare dopo aver letto tutta la stringa x, a partire da uno stato q. δN (q, ε) = {q} δN (q, xa) = ∪p ∈δ Ν (q,x) δ (p, a) Ν con x ∈ Σ* , a ∈ Σ p ∈ δ (q,x) Ν Def. Una parola x∈Σ* è accettata dall’automa se δ (q0, x) ∩ F ≠ ∅. Def. Linguaggio di un ASFND AN (riconosciuto da AN ): Ν L(A ) = { x∈Σ* | δ (q0, x) ∩ F ≠ ∅} Ν Ν Defnizioni valide per i due modelli Confgurazione : < q, x > con q ∈ K stato interno e x ∈ Σ* stringa ancora da leggere Una confgurazione < q, x > : e': iniziale se q = q0 fnale se x = ε accettante se x = ε e q ∈ F Step o transizione in un sol passo (indicata con il simbolo |–) è relazione binaria sulle confgurazioni che indica l’applicazione della funzione di transizione ad una confgurazione: - di un ASF : < q, x > |– < q', x' > ⇔ x = ax' ∧ δ(q, a) = q' - di un ASFND: < q, x > |– < q', x' > ⇔ x = ax' ∧ q' ∈ δN(q,a) Step ripetuto o transizione (indicata con il simbolo |–*) è relazione binaria sulle confgurazioni che indica che esiste una “computazione” che porta da una confgurazione all’altra, dove: Computazione e’ una sequenza di confgurazioni c , c .... , c , , tali che per ogni i = 0,..., n-1, ci |– ci+1 , oppure è una confgurazione. Computazione su una stringa x è una computazione c0, c1,..., cn con c0 = <q0, x> Computazione accettante su una stringa x è una computazione c0, c1,..., cn su x con cn confgurazione accettante. 0 1 n Nei linguaggi formali la relazione ⇒* tra due stringhe indica che esiste una “derivazione” che porta da una stringa all’altra. Invece negli automi la relazione |–* tra due confgurazioni indica che esiste una “computazione” che porta da una confgurazione all’altra. Def. (alternativa) Linguaggio (riconosciuto da) ASF A o ASFND A : L(A) = { x ∈ Σ* | < q0, x > |– * < q, ε > , q ∈ F } Oss. Una computazione non accettante su una stringa x può terminare per un ASFND senza aver letto tutto l’input. Sulle computazioni nel modello deterministico e non deterministico. Vediamo che mentre un automa deterministico associa ad una stringa di input una computazione avente struttura lineare, un automa non deterministico associa sia una struttura lineare che una non lineare, detta “albero delle computazioni”. Es. L'ASF dell'es.2 riconosce le stringhe con un numero pari di 0 oppure di 1. La computazione accettante sulla stringa 10011 è: < q0, 10011 > |– < q1, 0011 > |– < q3, 011 > |– < q1, 11 > |– < q0, 1 > |– < q1, ε > . Es. L'ASFND riconosce le stringhe che contengono due uni consecutivi. Una computazione accettante per la stringa 10110 è: < q0, 10110 > |– < q0, 0110 > |– < q0, 110 > |– < q1, 10 > |– < q2, 0 > |– < q2, ε > Osservare che l’automa associa alla stringa di input 10110 sia l’albero delle computazioni: che la sequenza di insiemi di stati: Allora se chiamiamo 'stato nondeterministico' un insieme di stati deterministici, possiamo rappresentare tutte le “computazione non-deterministiche” come: • un albero nello spazio degli stati deterministici. • una traiettoria nello spazio degli stati nondeterministici, Sono computazionalmente piu' potenti gli ASF o gli ASFND? In altre parole, se con L(ASF) indichiamo la classe dei linguaggi riconosciuti da un ASF e con L(ASFND) indichiamo la classe dei linguaggi riconosciuti da un ASFND, che relazione c'e' tra L(ASF) e L(ASFND)? Teorema. L(ASFND) = L(ASF). Dim. i) L(ASFND) ⊇ L(ASF) La simulazione di un ASF con un ASFND e' banale, i due automi sostanzialmente coincidono. ii) L(ASF) ⊇ L(ASFND) La simulazione di un ASFND con un ASF sfrutta la fnitezza di P(K). Dato un ASFND costruiamo un ASF A N = < Σ, K, q 0 , F, δN > A' = < Σ', K', q 0', F', δ' > come segue: Σ' = Σ K' = {[qi1,....,qik] | {qi1,....,qik} ∈ 2K} cioè K' e' in corrispondenza 1-1 con i sottoinsiemi di K q0' = [q0] δ'([qi1,....,qik], a) = [qj1,...., qjh] ⇔ δ N(qi1, a) ∪....∪ δ N(qik,a) = {qj1,....,qjh} F' = {[qi1,....,qik] | {qi1,....,qik} ∈ 2 K ∧ {qi1,....,qik}∩F ≠ ∅ cioè F' corrisponde all' insieme dei sottoinsiemi di K che contengono almeno un elemento di F. Basta dimostrare che: δ'(q0', x) = [qj1,....,qjh] ⇔ δ N(q0, x) = {qj1,....,qjh} e quindi, in particolare, che: δ'(q0', x) ∈ F' ⇔ δ N(q0, x) ∩ F ≠ ∅ Cio' e' vero per costruzione. Dimostriamolo per induzione sulla lunghezza della stringa x. N.B. Con il metodo di costruzione introdotto dal teorema precedente l'ASF può avere un numero esponenziale di stati rispetto all'ASFND di partenza. Talvolta la crescita esponenziale del numero degli stati nel modello deterministico è inevitabile. Ad esempio il linguaggio L k= {x1y | x∈{0,1}* , y∈{0,1}k-1, k ≥ 1} , le cui parole hanno un 1 prima degli ultimi k -1 caratteri è regolare per ogni k ≥ 1 ma ogni automa fnito deterministico che lo accetta ha almeno 2 k stati, mentre il seguente automa non deterministico ne ha solo k+1. Dim. Sia Bk un automa ASF che riconosce Lk. Sia Sk = {0,1}k. Dimostriamo che gli stati raggiunti dall'automa dopo la lettura di tutte le parole di Sk devono essere diifferenti (e quindi concludiamo che gli stati devono essere almeno 2k). Se per assurdo si avesse che : δ(q0,x) = δ(q0,y) con x, y ∈{0,1}k, x ≠ y potrebbe essere x= α 0 β y= α 1 γ |x| = |y| = k con α, β , γ ∈{0,1}* e |β| = |γ| Ovviamente le parole: xx= α 0 β α yy= α 1 γ α hanno gli ultimi k-1 caratteri preceduti da 0 in una, da 1 nell'altra; entrambe verrebbero accettate o rifutate dall'automa, mentre solo una dovrebbe essere accettata. N.B. Gli ASFND sono ugualmente espressivi ma più succinti degli ASF.