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.