Automaten & Complexiteit (X 401049)tcs/ac/ac-03_properties_regular.pdfAutomaten & Complexiteit (X...

Post on 22-Jul-2019

217 views 0 download

Transcript of Automaten & Complexiteit (X 401049)tcs/ac/ac-03_properties_regular.pdfAutomaten & Complexiteit (X...

Automaten & Complexiteit (X 401049)Eigenschappen van reguliere talen

Jeroen Keirenj.j.a.keiren@vu.nl

VU University Amsterdam

9 Februari 2015

Reguliere talen

Vorig college:

De volgende beweringen zijn equivalent:

I er is een dfa M met L(M) = L

I er is een nfa M met L(M) = L

I er is een rechts-lineaire grammatica G met L(G ) = L

I er is een links-lineaire grammatica G met L(G ) = L

I er is een reguliere expressie r met L(r) = L

2 / 32

Outline

College 3Elementaire eigenschappen van reguliere talenString matchingMinimale dfa’sLexicale analyseNiet reguliere talen en de pompstellingAfronding

3 / 32

Elementaire eigenschappen voor reguliere talen

Stelling

Als L1, L2, L reguliere talen zijn, dan zijn L1 ∪ L2, L1 ∩ L2, L1L2, L,L1\L2, L∗, LR ook regulier.

Bewijs.

L(r1) = L1, L(r2) = L2, L(r) = L voor reguliere expressies r1, r2, r .

I L1 ∪ L2 = L(r1 + r2) is regulier

I L1L2 = L(r1 · r2) is regulier

I L∗ = L(r∗) is regulier

I L wordt geaccepteerd door een dfa (Q,Σ, δ, q0,F ).L = L(Q,Σ, δ, q0,Q\F ) is regulier

I L1 ∩ L2 = L1 ∪ L2 is regulier

I L1\L2 = L1 ∩ L2 is regulier

5 / 32

LR is regulierConstructie

Voor reguliere expressies r is de reguliere expressie rev(r) inductiefgedefinieerd door:

rev(∅) = ∅rev(λ) = λrev(a) = a (a ∈ Σ)rev(r1 + r2) = rev(r1) + rev(r2)rev(r1 · r2) = rev(r2) · rev(r1)rev(r∗) = rev(r)∗

Met inductie naar de structuur van r kan bewezen worden dat

L(rev(r)) = L(r)R

Kies een reguliere expressie r met L(r) = L.

LR = L(r)R = L(rev(r)) is regulier.

6 / 32

Elementaire eigenschappen van reguliere talenBeslisbaarheid string matching

Stelling

Het is beslisbaar of een string u in een reguliere taal L zit.

Bewijs.

1. Representeer L in de vorm van een dfa.

2. Bepaal of u door de dfa wordt geaccepteerd.

On-the-fly generatie van de dfa (t.o.v. u) voorkomt toestandsexplosie.

7 / 32

Elementaire eigenschappen van reguliere talenBeslisbaarheid taal equivalentie

Stelling

Het is beslisbaar of twee reguliere talen L1 en L2 gelijk zijn.

Bewijs.

I Laat L3 = (L1 ∩ L2) ∪ (L1 ∩ L2).

I Construeer een dfa M met L(M) = L3.

I Bepaal of er een pad is in M van de starttoestand naar eeneindtoestand.

I Zoja, dan L1 6= L2; zonee, dan L1 = L2.

8 / 32

String matching (Thompson, 1968)

Het volgende algoritme (bijv. voor grep in Unix) zoekt of string ueen substring bevat die in L(r) zit.

1. Beschrijf de reguliere expressie Σ∗ · r als een nfa.

2. Genereer “on-the-fly ” het pad van u in de bijbehorende dfa.

3. Termineer als een eindtoestand wordt bereikt.

Worst-case time complexity: O(|r |·|u|)

Bouwen van de hele dfa zou exponentieel veel tijd/geheugenkosten (in |r |).

Java, Perl, PHP, Python gebruiken een string matching algoritmemet backtracking dat exponentieel veel tijd kan kosten (in |u|).

10 / 32

String matching

Voorbeeldr = a(aa∗b + bb∗a)b leidt tot de nfa

q0λ

q1 q2a

q3

q4b

b

a

a

q6q5

a

b

a

b

b

We matchen r ten opzichte van u = aaababbb.

01a

012 0123 0145 0125 0146a b a b

a

a a a b a b b bq0 q0 q2 q4 q5 q6 11 / 32

Ken Thompson

Dit string matching algoritme werd ontwikkeld door Ken Thompson.

Samen met Dennis Ritchie won hij in 1983 de Turing award voorhet operating systeem Unix.

Ken Thompson (geb. 1943) ontwikkelde ook een database voorschaakeindspelen met max. zes stukken.

Dennis Ritchie (1941-2011) ontwikkelde ook de programmeertaal C.

12 / 32

Minimale dfa’s (Hopcroft, 1971)

Gegeven een dfa M = (Q,Σ, δ, q0,F ), construeren we de (unieke)dfa M met een minimaal aantal toestanden zo dat L(M) = L(M).

We nemen aan dat de onbereikbare toestanden uit M zijn verwijderd.

14 / 32

Minimale dfa’s (2)

q, q′ ∈ Q zijn onderscheidbaar als er een w ∈ Σ∗ is zo dat(q,w) `∗ (r , λ) en (q′,w) `∗ (s, λ) met r ∈ F en s 6∈ F , of vice versa.

Stap 1

Partitioneer Q in collecties niet onderscheidbare toestanden.

I De initiele partitie is Q\F , F .

I Als er R en S in de partitie van Q zijn zo dat voor zekerea ∈ Σ en r , r ′ ∈ R:

δ(r , a) ∈ S en δ(r ′, a) 6∈ S ,

dan splitsen we R in

{r ∈ R | δ(r , a) ∈ S} {r ∈ R | δ(r , a) 6∈ S}

We zijn klaar als er geen split meer kan worden uitgevoerd.

15 / 32

Minimale dfa’s (3)

Stap 2

Laat Q1, . . . ,Qn de uiteindelijke partitie van Q zijn.

Dit zijn de toestanden van de minimale dfa M, met als pijlen:

Qia→ Qj ⇔ δ(q, a) ∈ Qj voor q ∈ Qi .

De starttoestand is de verzameling die q0 bevat.

De eindtoestanden zijn de deelverzamelingen van F .

Worst-case time complexity: O(|Σ|·|Q|2).

Iedere split kost max. O(|Σ|·|Q|), en er zijn max. |Q| − 1 splits.

16 / 32

Vraag

Minimaliseer de dfa

q0 q4q2

a

q1

bb

a

q3a

bba

a b

17 / 32

Minimaliseren van nfa’s

Het minimaliseren van nfa’s is heel lastig.

Voorbeeld

a

b c

a

a

a

a

c c

a

bb

a

Stelling

Het minimaliseren van nfa’s is PSpace-compleet.

De definitie van PSpace-compleet volgt later.

18 / 32

Lexicale analyse

Lexicale analyse zet een rij karakters (bijv. van een programma)om in een rij tokens (a, b, ...).

Reguliere expressies geven patronen aan.

Bij iedere reguliere expressie hoort een token.

Lexicale analyse zoekt herhaaldelijk naar de langste prefix van deinput-string die correspondeert met een van de reguliere expressies.

Deze prefix wordt omgezet in het bijbehorende token.

20 / 32

Lexicale analyse

Laat reguliere expressies r1, . . . , rn de patronen aangeven.

r1 + · · ·+ rn wordt omgezet in een nfa.

Deze nfa wordt omgezet in een minimale dfa.

Als geen prefix met een reguliere expressie correspondeert,volgt een foutmelding.

Als de langste prefix correspondeert met meerdere reguliereexpressies, wordt er een gekozen.

21 / 32

Lexicale analyse

JavaCC en LEX genereren automatisch een lexicale analysator,vanuit de reguliere expressies, op basis van de bijbehorendeminimale dfa.

VoorbeeldFORTRAN beschrijft gehele getallen met de BNF grammatica

〈digit〉 ::= 0 | 1 | · · · | 9〈integer〉 ::= 〈digit〉+〈sign〉 ::= + | − | λ〈signed-integer〉 ::= 〈sign〉〈integer〉

22 / 32

Lexicale analyse

Voorbeeld (vervolg)De bijbehorende minimale dfa is

+ , −

0,...,90,...,9

0,...,9

Doordat gezocht wordt naar een langste prefix, wordt bijv. +52 nietgeınterpreteerd als losse patronen +5 en 2, maar als een patroon.

23 / 32

Niet-reguliere talen

Stelling

L = {anbn | n ≥ 0} is niet regulier.

Bewijs.

Stel dat M = (Q, {a, b}, δ, q0,F ) een dfa is met L(M) = L.

Omdat Q eindig is, geldt (q0, aj) `∗ (r , λ) en (q0, a

k) `∗ (r , λ),voor zekere j 6= k en r ∈ Q.

Dan geldt ook (q0, ajb j) `∗ (s, λ) en (q0, a

kb j) `∗ (s, λ), voorzekere s ∈ Q.

Echter, a jb j ∈ L en akb j 6∈ L.

Tegenspraak, dus L is niet regulier.

We generaliseren nu het idee van dit bewijs.

25 / 32

Pompstelling voor reguliere talen (1959)

Stelling

Zij L een reguliere taal. Er is een m > 0 zo dat voor elke w ∈ Lmet |w | ≥ m geldt:

w = xyz

met |xy | ≤ m en |y | ≥ 1, en xy iz ∈ L voor elke i ≥ 0.

Bewijs.

L = L(M) voor een dfa M, met m toestanden.

Iedere w ∈ L met |w | ≥ m doorloopt een cykel in M:

x

y

z

toestand die als eerste 2 maal wordt bezocht door w

|xy | ≤ m, |y | ≥ 1, en xy iz ∈ L voor elke i ≥ 0.

26 / 32

PompstellingVoorbeeld

De pompstelling kan gebruikt worden om te bewijzen dat een taalniet regulier is.

Stel dat L = {w ∈ {a, b}∗ | w = wR} regulier is.

Volgens de pompstelling is er een m > 0 met

ambam = xyz

waarbij |xy | ≤ m, |y | ≥ 1, en xy iz ∈ L voor elke i ≥ 0.

|xy | ≤ m en |y | ≥ 1, dus x = a j en y = ak met j ≥ 0 en k ≥ 1.

Dus xyyz = am+kbam 6∈ L.

Tegenspraak, dus L is niet regulier.

27 / 32

Pompstelling als spel

Pas op: Een contradictie van de pompstelling voor een specifiekewaarde van m, of van x , y , z , is niet afdoende !

¬(∃m > 0 ∀w ∈ L (|w | ≥ m) ∃x , y , z (w = xyz , |xy | ≤ m, |y | ≥ 1) ∀i ≥ 0 :xy iz ∈ L)

= ∀m > 0 ∃w ∈ L (|w | ≥ m) ∀x , y , z (w = xyz , |xy | ≤ m, |y | ≥ 1) ∃ i ≥ 0 :xy iz 6∈ L

De pompstelling als spel: Gegeven een taal L.

1. De tegenstander kiest m.

2. Wij kiezen een w ∈ L met |w | ≥ m.

3. De tegenstander kiest x , y , z met w = xyz , |xy | ≤ m en|y | ≥ 1.

4. Als wij een i ≥ 0 kunnen kiezen met xy iz 6∈ L, dan winnen wij.

L voldoet niet aan de pompstelling als wij altijd kunnen winnen.28 / 32

Vragen

Laat met de pompstelling zien dat de taal {anbn | n ≥ 0}niet regulier is.

Is {a2k | k ≥ 0} regulier ?

Waarom kan de tegenstander altijd winnen als L eindig is ?

29 / 32

Samengevat

I Als L1, L2, L regulier, dan L1 ∪ L2, L1 ∩ L2, L1L2, L, L1 \ L2,L∗, LR ook

I String matching: construeer dfa on-the-fly

I Minimale dfa’s m.b.v. Hopcroft’s algoritme

I Gebruik pompstelling om taal niet regulier te bewijzen

31 / 32

Vooruit kijken

Lees:

I Linz 2.4, 4.1–4.3

Maak:

I Linz 4.1: 17, 20, 26 (Let op! “regular” moet “right-linear”zijn, tweemaal)

I Linz 4.2: 5, 12

I Linz 2.4: 1, 4, 6

I Linz 4.3: 1, 3, 4ef

Volgend college:I Contextvrije talen:

I DefinitieI Transformaties en normaalvormenI Parseeralgoritmes

32 / 32