• Non ci sono risultati.

AUTOMI A STATI FINITI

N/A
N/A
Protected

Academic year: 2021

Condividi "AUTOMI A STATI FINITI"

Copied!
45
0
0

Testo completo

(1)

AUTOMI A STATI FINITI

(2)

Stati

Un FSA (Finite State Automaton) ha un insieme finito di stati

Un sistema con un numero limitato di configurazioni (in italiano anche: AF)

Esempi

{On, Off}, {1,2,3,4, …,k}

{canali TV}

Gli stati sono rappresentati come segue:

On Off

(3)

Ingresso (input)

Un FSA è definito su un alfabeto

I simboli dell’alfabeto rappresentano l’ingresso del sistema

Esempi

{a, b, c}

{0, 1}

Ma anche nomi più complessi di simboli, se servono a rendere più comprensibile lo scenario rappresentato:

{switch_on, switch_off}

{incoming==0, 0<incoming<=10, incoming>10}

(4)

Transizioni tra stati

• Quando si riceve un ingresso, il sistema cambia il proprio stato

• Il passaggio da uno stato all’altro avviene tramite transizioni

• Una transizione è rappresentata mediante frecce:

On Off

(5)

Semplici esempi (flip-flop)

On Off

T

T

On Off

R

S

S R

(6)

FSA

• Gli FSA sono il più semplice modello di computazione

• Molti utili dispositivi possono essere modellati tramite FSA

… hanno però alcune limitazioni

(7)

Formalmente

• Un FSA è una tripla <Q, A, d>, dove

Q è un insieme finito di stati A è l’alfabeto di ingresso

δ è una funzione di transizione (che può essere parziale), data da d: Q × A → Q

• Nota

se la funzione è parziale, allora non tutte le transizioni da tutti i possibili stati per tutti i possibili elementi dell’alfabeto sono definite

(8)

Funzione di transizione parziale o totale

On Off

R

S

Un FSA con una funzione di transizione totale è detto completo

(9)

Funzione di transizione parziale o totale

R S

On Off

R

S

Un FSA con una funzione di transizione totale è detto completo

(10)

Riconoscimento di linguaggi

Per poter usare gli FSA per riconoscere linguaggi, è importante identificare:

Le condizioni iniziali del sistema Gli stati finali ammissibili

Esempio:

La luce dev’essere spenta all’inizio e alla fine

(11)

Elementi

• Gli elementi del modello sono

Stati

Transizioni Ingresso

e anche

Stato iniziale Stati finali

(12)

Rappresentazione grafica

• Stato iniziale

• Stato finale

Off

Off

(13)

Formalmente

• Un FSA è una tupla <Q, A, δ , q0, F>, dove

Q è un insieme finito di stati A è l’alfabeto di ingresso

δ è una funzione di transizione (parziale), data da d: Q × A → Q

q0Q è detto lo stato iniziale F⊆Q è l’insieme di stati finali

(14)

Sequenza di mosse

• Una sequenza di mosse inizia da uno stato

iniziale ed è di accettazione se raggiunge uno degli stati finali

On Off

S R

S

R

(15)

Formalmente

• Sequenza di mosse:

d*: Q × A* → Q

• δ* è definita induttivamente da d

δ*(q,e) = q

δ*(q,yi) = d(d*(q,y), i)

• Stato iniziale: q0 ∈ Q

• Stati finali (o di accettazione): F ⊆ Q

• ∀x (x ∈ L ↔ d* (q0,x) ∈ F)

(16)

Esempio pratico

• Riconoscimento degli identificatori del Pascal

q0 q1

<lettera>

<lettera>

<cifra>

(17)

Esempio pratico

• Riconoscimento degli identificatori del Pascal

q0 q1

<lettera>

<lettera>

<cifra>

qE

<cifra>

<cifra> <lettera>

(18)

TRASDUTTORI A STATI FINITI

(19)

Automi come traduttori di linguaggi

Un FST (finite state transducer) è un FSA che lavora su due nastri.

→ è una sorta di «macchina traduttrice».

Nastro di ingresso (input)

Nastro di uscita (output)

Dispositivo di controllo (a stati finiti)

(20)

L’idea

y = t(x)

x: stringa d’ingresso y: uscita

τ: funzione da L1 a L2

Esempi:

τ1 le occorrenze di “1” sono raddoppiate (1 --> 11) τ2 ‘a’ è scambiato con ‘b’ (a <---> b):

Ma anche

Compressione di file

Compilazione da linguaggi di alto livello a linguaggi oggetto Traduzione da inglese a italiano

(21)

Informalmente

• Transizioni con uscita

• Esempio: τ dimezza il numero di “0” e raddoppia il numero di “1”

q i/w q’

q0 q1

0/e

1/11 1/11

0/0

(22)

Formalmente

• Un trasduttore a stati finiti (FST) è una tupla T = <Q, I, d, q0, F, O, h>

<Q, I, d, q0, F>: esattamente come gli accettori O: alfabeto di uscita

h : Q × I → O*

• Nota: la condizione di accettazione resta la stessa degli accettori

La traduzione è eseguita solo su stringhe accettate

(23)

Traduzione di una stringa

• Come per la δ, definiamo η* induttivamente

η*(q,e) = e

η*(q,y.i) = h*(q,y).h(d* (q,y), i)

• Nota: η*: Q × I* → O*

∀x (τ(x) = h*(q0,x) iff d* (q0,x) ∈ F)

(24)

PUMPING LEMMA

(25)

Cicli

a

a

b

a

a b

b

b b

b

a

q1 q2

q3 q0

q4 q5

q6 q7

q9

q8

(26)

Cicli

C’è un ciclo: q1 ----aabab---> q1

a

a

b

a

a b

b

b b

b

a

q1 q2

q3 q0

q4 q5

q6 q7

q9

q8

Se si attraversa un ciclo una volta, lo si può attraversare anche 2, 3, …, n volte

(27)

Più formalmente

• Se x ∈ L e |x| ≥ |Q|, allora esistono uno stato q Q e una stringa w I+ tali che:

x = ywz

d* (q,w) = q

• Perciò vale anche quanto segue:

n ≥ 0 ywnz ∈ L

Questo è il Pumping Lemma (si può “pompare”

w)

(28)

Conseguenze del pumping lemma

• L = ∅? ∃x ∈ L ↔ ∃y ∈ L |y| < |Q|:

Basta “togliere tutti i cicli” dall’FSA che accetta x

• |L| = ∞? Verifica in modo analogo se

∃x ∈ L |Q| <= |x| < 2|Q|

Nota che in generale sapere come rispondere alla domanda “x ∈ L ?” per una generica x, non implica sapere come rispondere alle altre domande

Funziona per gli FSA, ma…

(29)

Impatto in pratica

• Ci interessa un linguaggio di programmazione che consiste di… 0 programmi corretti?

• Ci interessa un linguaggio di programmazione in cui si può solo scrivere un numero finito di programmi?

• ...

(30)

Una conseguenza negativa del pumping lemma

Il linguaggio L = {anbn | n > 0} è riconosciuto da qualche FSA?

Assumiamo che lo sia. Allora:

Consideriamo x = ambm, m > |Q| e applichiamo il P.L.

Casi possibili:

x = ywz, w = ak , k > 0 ====> am + r⋅kbm L, ∀r : NO x = ywz, w = bk , k > 0 ====> idem

x = ywz, w = ak bs , k, s > 0 ====> am-kakbs akbsbm-s L: NO

(31)

Intuitivamente

Per “contare” un numero n arbitrariamente grande, ci serve una memoria infinita!

A rigore, ogni computer è un FSA, ma… è un livello errato di astrazione: numero di stati intrattabile!

(è come studiare ogni singola molecola per descrivere il volo di un aereo)

Importanza di una nozione astratta di infinito

Dall’esempio giocattolo {anbn} ad altri casi concreti:

La verifica del buon bilanciamento delle parentesi (tipicamente usato nei linguaggi di programmazione) non si può fare con memoria finita

Ci servono quindi modelli più potenti

(32)

OPERAZIONI SUGLI FSA

(33)

Chiusura in matematica

Un insieme S è chiuso rispetto ad una operazione OP se, quando OP è applicata agli elementi di S, il

risultato è ancora un elemento di S

Esempi:

I numeri naturali sono chiusi rispetto alla somma (ma non rispetto alla sottrazione)

Gli interi sono chiusi rispetto a somma, sottrazione e moltiplicazione (ma non divisione)

Razionali…

Reali…

(34)

Chiusura per i linguaggi

L

= {Li}: famiglia di linguaggi

L

è chiuso rispetto all’operazione OP se e solo se, per ogni L1 , L2

L

, L1 OP L2

L

.

R

: linguaggi regolari (riconosciuti da FSA)

R

è chiuso rispetto alle operazioni

insiemistiche, alla concatenazione, a “*”, …

(35)

Intersezione

a a

b q1 q2

q0 q9

a a

b p1 p2 p9

A

B p0

(36)

Intersezione

L’“esecuzione parallela” di A e B può essere simulata “accoppiandoli”

a a

b q1 q2

q0 q9

a a

b p1 p2 p9

A

B p0

p0 b a a

q0

<A,B> q1 p1 q2 p2 q9 p9

(37)

37

Esempio

q0 q1 p0

a

a

a

q0 p0 a

a

q1 p0

A1: A2:

(38)

Formalmente

• Dati

A1 = <Q1, I, d1, q01, F1>

A2 = <Q2, I, d2, q02, F2>

< A1, A2 > = <Q1×Q2,I,d,<q01,q02>,F1× F2 >

δ(<q1,q2 >, i) = <d1(q1, i), d2(q2,i)>

• Si può mostrare (mediante semplice induzione) che

L(< A1,A2>) = L(A1) ∩ L( A2 )

• Si può fare lo stesso per l’unione?

(39)

Unione

• L’unione è costruita analogamente

• Dati

A1 = <Q1, I, d1, q01, F1>

A2 = <Q2, I, d2, q02, F2>

<A1, A2>= <Q1xQ2,I,δ,<q01,q02>,F1xQ2UQ1xF2>

δ(<q1,q2 >, i) = <d1(q1, i), d2(q2,i)>

(40)

Complemento (1)

• Idea di base Fc = Q-F

… ma in generale la funzione di transizione è parziale!

q0 q1

0 1 0

1

(41)

Complemento (2)

• Prima di scambiare stati finali e non finali è necessario completare l’FSA

q0 q1

0 1 0

(42)

Complemento (2)

• Prima di scambiare stati finali e non finali è necessario completare l’FSA

q0 q1

0 1 0

q0 q1

0 1 0

qE

0,1 1

(43)

Complemento (2)

• Prima di scambiare stati finali e non finali è necessario completare l’FSA

q0 q1

0 1 0

q0 q1

0 1 0

qE

q0 q1 0,1

0 1 0

qE 0,1

1

1

(44)

Ancora unione

• Un’altra possibilità è di esprimere l’unione in funzione della complementazione e

dell’intersezione, mediante le leggi di De Morgan:

A ∪ B = ¬(¬A ∩ ¬B)

(45)

Filosofia del complemento

• Se scandisco l’intera stringa d’ingresso, allora basta “scambiare il sì con il no” (F con Q-F)

• Se non raggiungo la fine della stringa, allora lo scambio di F con Q-F non funziona

• Nel caso di FSA c’è un trucco semplice (completare l’FSA)

• In generale, però, non possiamo considerare equivalenti la risposta negativa a una

domanda e la risposta positiva alla domanda opposta!

Riferimenti

Documenti correlati

Analizza le frasi O mi ascolti o te ne vai; Se ha fatto ciò, allora dovrà confessare... Definisci la creatività e la ricorsività.. La struttura soggiacente e la struttura

Using -semantics and assuming both bounded invariants and decidability for specification language, we have decidability of reachability problem for hybrid automata.

A C++ package for set-based analysis of dynamical and control systems, including reachability analysis, robust simulation and safety verification. Balluchi, Casagrande,

Nel caso di un automa di Mealy per ogni stato corrente possibile e per ogni combinazione degli ingressi viene indicato sia lo stato prossimo raggiunto dall’automa che

Automi: definizione, automi a stati finiti, funzioni di transizione e trasformazione negli automi a stati finiti, automi riconoscitori, rappresentazione degli automi a stati

Linguaggi regolari e automi a stati finiti.. 06

Quando JT=1 abbiamo 4 stati (pattern di luci), quando JT=0 abbiamo 6 stati ma non occorrono 10 stati (alcuni sono presenti sia nella configurazione a traffico

La teoria degli automi è alla base della descrizione e della modellazione dei linguaggi di programmazione, della costruzione dei loro riconoscitori e