Automaten & Complexiteit (X 401049)tcs/ac/ac-03_properties_regular.pdfAutomaten & Complexiteit (X...
Transcript of Automaten & Complexiteit (X 401049)tcs/ac/ac-03_properties_regular.pdfAutomaten & Complexiteit (X...
Automaten & Complexiteit (X 401049)Eigenschappen van reguliere talen
Jeroen [email protected]
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