Regularitet & Automater Eksamensnotater

Relaterede dokumenter
Regularitet og Automater. Tobias Brixen Q4-2012

Ja! det beviste vi uge 16+17

Regulære udtryk og endelige automater. Ugens emner

Noter til DM517 Beregnelighed

Regulære udtryk og endelige automater

En karakteristik af de regulære sprog. Ugens emner. FA minimering [ ] MyHill-Nerode-sætningen en algoritme til minimering af FA er

1. Seminar EVU RegAut

Regularitet og Automater

Skriftlig Eksamen Beregnelighed (DM517)

Seminar 1 Regularitet og Automater 28/1-2012

1 Beregnelighed. 1.1 Disposition. 1.2 Præsentation. Def. TM. Def. RE/R. Def. 5 egenskaber for RE/R. Def. NSA. Bevis. NSA!RE. Def. SA. Bevis. SA!

1. Seminar EVU RegAut

Ugens emner. Regulære sprog og digitale billeder. Adressering af områder. Et alfabet. Dette billede: kan repræsenteres af en FA med 832 tilstande

Eksamensopgaver i DM17, Januar 2003

DM517:Supplerende noter om uafgørlighedsbeviser:

Bevisteknikker. Bevisteknikker (relevant både ved design og verifikation) Matematisk induktion. Matematisk induktion uformel beskrivelse

Oversættere Skriftlig eksamen onsdag d. 24. januar 2007

It og informationssøgning Forelæsning november 2006 Nils Andersen. Regulære udtryk og formelle sprog

Bevisteknikker (relevant både ved design og verifikation)

Matematisk induktion

GEOMETRI-TØ, UGE 8. X = U xi = {x i } = {x 1,..., x n }, U α, U α = α. (X \ U α )

Oversættere, ugeopgave 3

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005

Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 24. januar 2007

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

DATALOGI 1E. Skriftlig eksamen fredag den 7. juni 2002

Nogle grundlæggende begreber

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims

Om at løse problemer En opgave-workshop Beregnelighed og kompleksitet

Skriftlig Eksamen Automatteori og Beregnelighed (DM17)

Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum

Matematiske metoder - Opgavesæt

83 - Karakterisation af intervaller

Oversættere Skriftlig eksamen onsdag d. 20. april 2005

Introduktion til prædikatlogik

Affine rum. a 1 u 1 + a 2 u 2 + a 3 u 3 = a 1 u 1 + (1 a 1 )( u 2 + a 3. + a 3. u 3 ) 1 a 1. Da a 2

= λ([ x, y)) + λ((y, x]) = ( y ( x)) + (x y) = 2(x y).

Primtal - hvor mange, hvordan og hvorfor?

Archimedes Princip. Frank Nasser. 12. april 2011

K 7 - og K 4,4 -minors i grafer

Noter til Perspektiver i Matematikken

Kalkulus 2 - Grænseovergange, Kontinuitet og Følger

Skriftlig Eksamen Beregnelighed (DM517)

6.1 Reelle Indre Produkter

Oversættere Skriftlig eksamen onsdag d. 19. april 2006

Implikationer og Negationer

Chomsky hierarkiet af sprogklasser

Gult Foredrag Om Net

Vinkelrette linjer. Frank Villa. 4. november 2014

Elementær Matematik. Mængder og udsagn

GEOMETRI-TØ, UGE 6. . x 1 x 1. = x 1 x 2. x 2. k f

Polynomiumsbrøker og asymptoter

Sammenhængskomponenter i grafer

Banach-Tarski Paradokset

GEOMETRI-TØ, UGE 12. A σ (R) = A f σ (f(r))

8 Regulære flader i R 3

Vi indleder med at minde om at ( a) = a gælder i enhver gruppe.

Eksempel på den aksiomatisk deduktive metode

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Baggrundsnote om logiske operatorer

Fejlkorligerende køder Fejlkorrigerende koder

Taylors formel. Kapitel Klassiske sætninger i en dimension

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

Ordbog over Symboler

Orienterede grafer. Orienterede grafer. Orienterede grafer. Orienterede grafer

Divide-and-Conquer algoritmer

1 Sætninger om hovedidealområder (PID) og faktorielle

De rigtige reelle tal

Divide-and-Conquer algoritmer

Henrik Bulskov Styltsvig

3 Algebraisk Specifikation af Abstrakte Datatyper.

Analyse 2. Gennemgå bevis for Sætning Supplerende opgave 1. Øvelser. Sætning 1. For alle mængder X gælder #X < #P(X).

Omskrivningsregler. Frank Nasser. 10. december 2011

Algebra - Teori og problemløsning

Grundlæggende Matematik

Grafer og graf-gennemløb

Orienterede grafer. Introduktion Repræsentation Søgning Topologisk sortering og DAGs Stærke sammenhængskomponenter Implicitte grafer.

t a l e n t c a m p d k Talteori Anne Ryelund Anders Friis 16. juli 2014 Slide 1/36

16. december. Resume sidste gang

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning)

Polynomier. Indhold. Georg Mohr-Konkurrencen. 1 Polynomier 2. 2 Polynomiumsdivision 4. 3 Algebraens fundamentalsætning og rødder 6

DM13-1. Obligatorisk opgave E.05. Jacob Aae Mikkelsen

Normale tal. Outline. Hvad er tilfældighed? Uafhængighed. Matematiklærerdag Simon Kristensen. Aarhus Universitet, 24/03/2017

Grafer og graf-gennemløb

Grafer og graf-gennemløb

Momenter som deskriptive størrelser. Hvad vi mangler fra onsdag. Momenter for sandsynlighedsmål

Hvad vi mangler fra onsdag. Vi starter med at gennemgå slides fra onsdag.

Skriftlig eksamen, Programmer som Data Onsdag 6. januar Spørgsmål 1 (20 %): Regulære udtryk og automater

Spilstrategier. 1 Vindermængde og tabermængde

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42

Udvalgsaksiomet. Onsdag den 18. november 2009

Jeg foretager her en kort indføring af polynomier over såvel de reelle som

Divide-and-Conquer algoritmer

13.1 Matrixpotenser og den spektrale radius

Tal. Vi mener, vi kender og kan bruge følgende talmængder: N : de positive hele tal, Z : de hele tal, Q: de rationale tal.

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006

Hjerner i et kar - Hilary Putnam. noter af Mogens Lilleør, 1996

Transkript:

Regularitet & Automater Eksamensnotater Michael Lind Mortensen, 20071202, DAT4 10. juni 2008

Indhold 1 Regulære udtryk (1.5 & 3.1) 4 1.1 Disposition............................ 4 1.2 Noter............................... 4 1.2.1 Definer regulære udtryk................. 4 1.2.2 Endelige automater................... 5 1.2.3 Definer automater.................... 6 1.2.4 Kleene sætning del 1................... 6 2 Endelige automater (3.2-3.5) 10 2.1 Disposition............................ 10 2.2 Noter............................... 10 2.2.1 Endelige automater................... 10 2.2.2 Definer automater.................... 11 2.2.3 Determinering...................... 11 2.2.4 Produktkonstruktionen................. 14 3 Lukkethedsegenskaber (5.3-5.5) 15 3.1 Disposition............................ 15 3.2 Noter............................... 15 3.2.1 Definer regulære udtryk................. 15 3.2.2 Produktkonstruktionen................. 17 3.2.3 Lukkethedsegenskaber.................. 18 3.2.4 Kontekstfrie grammatiker................ 20 4 Nondeterministiske automater (4) 25 4.1 Disposition............................ 25 4.2 Noter............................... 26 4.2.1 NFA er.......................... 26 4.2.2 Definer automater.................... 27 4.2.3 Determinering...................... 28 4.2.4 NFA-Λ........................... 30 4.2.5 Kleene 1.......................... 31 4.2.6 Λ-eliminering....................... 31 5 Minimering af automater (5.1-5.2) 32 5.1 Disposition............................ 32 5.2 Noter............................... 32 5.2.1 Endelige automater................... 32 5.2.2 Eksempel på minimering af en FA........... 34 5.2.3 Skelnelighed........................ 35 5.2.4 MyHill-Nerode...................... 37 2

6 Begrænsninger af regulære sprog (5.3) 39 6.1 Disposition............................ 39 6.2 Noter............................... 39 6.2.1 Definer regulære udtryk................. 39 6.2.2 Skelnelighed........................ 40 6.2.3 MyHill-Nerode...................... 43 6.2.4 Pumping lemmaet for regulære sprog.......... 44 7 Kontekstfri grammatikker (6-8) 46 7.1 Disposition............................ 46 7.2 Noter............................... 47 7.2.1 Kontekstfrie grammatiker................ 47 7.2.2 Lukkethedsegenskaber.................. 52 7.2.3 Pumping Lemma for CFL................ 54 3

1 Regulære udtryk (1.5 & 3.1) 1.1 Disposition 1. RegExp 2. RegExp vs. Automater 3. Kleene 1 1.2 Noter 1.2.1 Definer regulære udtryk Regulære udtryk er en formalisme vi bruger til at beskrive de regulære sprog - således er de defineret. L( ) = L(Λ) = Λ L(a) = a, (a Σ) L(r 1 + r 2 ) = L(r 1 ) L(r 2 ) L(r 1 r 2 ) = L(r 1 )L(r 2 ) L(r ) = (L(r)) Et sprog S er derved kun regulært såfremt der eksisterer et regulært udtryk således at L(r) = S. Operationer Man kan så udføre en række operationer med disse regulære sprog, heriblandt foreningsoperationer (også kaldet union): L 1 L 2 = {x Σ x L 1 x L 2 } Union forklaret: Giver et sprog der indeholder alle strenge som mindst et af sprogene indeholder. Eller konkateneringsoperationen som giver et sprog der indeholder alle strenge der består af et prefix af det ene sprog efterfulgt af en streng fra det andet sprog: L 1 L 2 = {xy Σ x L 1 y L 2 } 4

Og så Kleenoperatoren der giver et sprog der indeholder alle strenge, der består af den tomme streng efterfulgt af et vilkårligt antal strenge: L = L i, L k = LL L, L 0 = {Λ} i=0 Præcedens: Kleene stjerne, Konkatenering, Forening Regulære udtryk er en mekanisme til at beskrive et sprog. Endelige automater tester hvorvidt en given streng er indeholdt i sproget. 1.2.2 Endelige automater Endelige automater (FA er) abstrakte maskiner designet til at teste hvorvidt en given streng er med i et sprog. Eksempel En FA består af en endelig mængde tilstande Q og har så til format at løse membership beslutningsproblemer for regulære sprog. Et eksempel på en FA ses herunder, men alfabetet Σ = {0, 1}. Denne genkender strenge med ulige antal 1 ere: En FA er defineret som en 5-tuppel: M = (Q, Σ, q 0, A, δ), hvor Q er en endelig mængde af tilstande, Σ er et alfabet bestående af en endelig mængde symboler, q 0 er den initielle tilstand, A er et subset af Q (A Q) hvor disse tilstande er accepttilstande og δ er en transitionsfunktion på formen Q Σ Q. 5

Sproget for en FA Sproget for en FA er et regulært sprog, da regulære sprog og FA er har samme udtrykskraft og en FA kan oversættes til et regulært udtryk (vha. Kleene s sætning del 2). Uden et sprog har en FA ingen funktion. Sproget for en FA er defineret som: L(M) = {x Σ δ (q 0, x) A} Altså indeholder sproget de strenge x for hvilket den udvidede transitionsfunktion fra initialtilstanden på strengen x går til en accepttilstand. Den udvidede transitionsfunktion For q Q og x Σ er δ : Q Σ Q defineret som { δ q hvis x = Λ (q, x) = δ(δ (q, y), a) hvis x = ya hvor y Σ og a Σ 1.2.3 Definer automater Som sagt har regulære udtryk samme udtrykskraft som endelige automater (og omvendt), men hvordan konverterer man så imellem de to? Jo det gør man ved at lave et regulært udtryk om til en NFA-Λ, videre til en NFA vha. Λ-eliminering og så til sidst til en FA vha. determinisering. Ligeledes kan en FA laves om til et regulært udtryk vha. Kleene 2, eller en FA kan laves om til en NFA og videre til en NFA-Λ. Alt dette er vist forneden: 1.2.4 Kleene sætning del 1 My way Kleene 1 bruges til at oversætte et regulært udtryk til en NFA-Λ. Dette vil vi bevise ved at lave et strukturalt induktionsbevis i strukturen af det regulære udtryk r: Basis 6

Induktionshypotesen Der eksisterer NFA-Λ er M 1 og M 2 hvor L(M 1 ) = L(r 1 ) og L(M 2 ) = L(r 2 ). Induktionsskridtet Det ses at sproget er det samme ved r = r 1 + r 2 da man blot følger Λ transitioner og hvert x L(M 1 ) vil derfor stadig blive genkendt af M 1. Det 7

samme gælder for konkatinering og Kleenes stjerne. Formel definition og bevis Kleene s sætning (1). Ethvert regulært sprog kan genkendes af en endelig automat (NFA-Λ). Bevis. Vi har allerede en sætning der siger at disse tre udsagn er ækvivalente L kan genkendes af en FA L kan genkendes af en NFA L kan genkendes af en NFA-Λ Det er derfor nok at vise at ethvert regulært sprog kan genkendes af en af dem, her en NFA-Λ. Dette bevises vha. strukturel induktion., {Λ}, {a}(a Σ) De tre basistilfælde kan genkendes af hhv. automaten med kun den initielle tilstand som ikke er en accepttilstand, automaten med kun den initielle tilstand som også er en acceptilstand og automaten med en initiel tilstand samt en transition δ(q 0, a) = p, hvor p er en accepttilstand. M u : L 1 L 2 Som induktionshypotese antages at automaterne M 1 og M 2 er accepteret af en NFA-Λ. Vi definerer M u = (Q u, Σ, q u, A u, δ u ) Q u = Q 1 Q 2 {q u } A u = A 1 A 2, hvor q u er en ny tilstand der hverken tilhører Q 1 eller Q 2. Transitionsfunktionen er triviel; { δ1 (q, a) if q Q δ u (q, a) = 1, δ 2 (q, a) if q Q 2 men indeholder ydermere transitioner for den nye initielle tilstand, sådan så lambdalukningen for q u tillader at vi både bevæger os ind i M 1 og M 2. δ u (q u, Λ) = {q 1, q 2 } δ u (q u, a) = for every a Σ 8

M c : L 1 L 2 Samme induktionshypotese som før. Vi definerer M c = (Q c, Σ, q c, A c, δ c ) Q c = Q 1 Q 2 A c = A 2 Transitionsfunktionen er triviel for alle tilstande der ikke tilhører A 1. For α Σ {Λ}: { δ1 (q, a) if q Q δ c (q, α) = 1 A 1 δ 2 (q, a) if q Q 2 Hos de resterende tilstande bliver lambdalukningen udvidet til den initielle tilstand hos L 2. For alle q A 1 : δ c (q, a) = δ 1 (q, a) for every a Σ δ c (q, Λ) = δ 1 (q, Λ) {q 2 } M k : L 1 Samme induktionshypotese om L 1. Vi definerer M k = (Q k, Σ, q k, A k, δ k ) Q k = Q 1 {q k } A k = {q k }, hvor q k er en ny tilstand der ikke tilhører Q 1. Transitionsfunktionen er kun triviel i disse tilfælde. For q Q 1 og α Σ {Λ}: δ k (q, α) = δ 1 (q, α), med mindre q A 1 og α = Λ. I dette tilfælde definerer vi for q A 1 For den nye tilstand definerer vi δ k (q, Λ) = δ 1 (q, Λ) {q k }. δ k (q k, Λ) = {q 1 } δ k (q k, a) = for a Σ På den måde udvides lambdalukningen fra hver tidligere accepttilstand så vi kan begynde forfra et vilkårligt antal gange. 9

2 Endelige automater (3.2-3.5) 2.1 Disposition 1. RegExp & Automater 2. FA er 3. Produktkonstruktion 4. Determinering 2.2 Noter 2.2.1 Endelige automater Endelige automater (FA er) abstrakte maskiner designet til at teste hvorvidt en given streng er med i et sprog. Eksempel En FA består af en endelig mængde tilstande Q og har så til format at løse membership beslutningsproblemer for regulære sprog. Et eksempel på en FA ses herunder, men alfabetet Σ = {0, 1}. Denne genkender strenge med ulige antal 1 ere: En FA er defineret som en 5-tuppel: M = (Q, Σ, q 0, A, δ), hvor Q er en endelig mængde af tilstande, Σ er et alfabet bestående af en endelig mængde symboler, q 0 er den initielle tilstand, A er et subset af Q (A Q) hvor disse tilstande er accepttilstande og δ er en transitionsfunktion på formen Q Σ Q. 10

Sproget for en FA Sproget for en FA er et regulært sprog, da regulære sprog og FA er har samme udtrykskraft og en FA kan oversættes til et regulært udtryk (vha. Kleene s sætning del 2). Uden et sprog har en FA ingen funktion. Sproget for en FA er defineret som: L(M) = {x Σ δ (q 0, x) A} Altså indeholder sproget de strenge x for hvilket den udvidede transitionsfunktion fra initialtilstanden på strengen x går til en accepttilstand. Den udvidede transitionsfunktion For q Q og x Σ er δ : Q Σ Q defineret som { δ q hvis x = Λ (q, x) = δ(δ (q, y), a) hvis x = ya hvor y Σ og a Σ 2.2.2 Definer automater Som sagt har regulære udtryk samme udtrykskraft som endelige automater (og omvendt), men hvordan konverterer man så imellem de to? Jo det gør man ved at lave et regulært udtryk om til en NFA-Λ, videre til en NFA vha. Λ-eliminering og så til sidst til en FA vha. determinisering. Ligeledes kan en FA laves om til et regulært udtryk vha. Kleene 2, eller en FA kan laves om til en NFA og videre til en NFA-Λ. Alt dette er vist forneden: 2.2.3 Determinering Kort forklaret med eksempel Enhver NFA kan oversættes til en FA, hvilket gøres vha. Determinisering eller delmængdekonstruktion (hvad end man har lyst til at kalde det). Vi har en NFA M = (Q, Σ, q 0, A, δ) og vil nu lave denne om til en FA M 1 = (Q 1, Σ, q 1, A 1, δ 1 ) hvor Q 1 bliver til Q 1 = 2 Q, da hver tilstand i FA en bliver en mængde af tilstande i NFA en. q 1 bliver til q 1 = {q 0 }. Accepttilstandende for FA en bliver til A 1 = {q Q 1 q A }, altså blot de q i 11

vores nye Q hvor disse var accepttilstande i NFA en (hvilket vil sige at alle i en mængde bliver accept hvis en given q er en mængde af tilstande fra NFA en). Sidst men ikke mindst bliver transitionsfunktionen omdefineret til: δ 1 (q, a) = r q δ(r, a) Nu gælder det så at L(M 1 ) = L(M). Hele denne proces ses i eksemplet herunder: Som vi kan se bliver tilstandende i NFA en lavet om til mængder af tilstande i FA en, hvor 1 transitionerne fra q 0 bliver til mængden {3, 2}, som så bliver en accepttilstand fordi tilstand 2 var en accepttilstand i NFA en og accepttilstandende er defineret som: A 1 = {q Q 1 q A }. Formel definition NB: Også kaldet delmængdeproduktion. 12

Givet en NFA M definer en FA M 1 : M = (Q, Σ, q 0, A, δ) M 1 = (Q 1, Σ, q 1, A 1, δ 1 ) Q 1 = 2 Q q 1 = {q 0 } A 1 = {q Q 1 q A } δ 1 (q, a) = δ(r, a) r q Der gælder nu L(M 1 ) = L(M). Bevis. Definitionen af A 1 er sand da en streng accepteres hvis M fra q 0 ender op med en mængde tilstande hvor mindst en er et element i A. Det følger da fra nedenstående lemma at L(M) = L(M 1 ). En streng x accepteres af M 1 hvis δ 1 (q 1, x) A. Dette er sandt hvis og kun hvis δ (q 0 ), x) A 1. Fra definitionen af A 1 ser vi at dette er sand hvis og kun hvis δ (q 0, x) A. Altså accepteres x af M 1 hvis og kun hvis x accepteres af M. Lemma 1. x Σ : δ 1(q 1, x) = δ (q 0, x) Bevis. Ved induktion i strukturen af x. Basis: Hvis x = Λ, δ 1(q 1, x) = δ 1(q 1, Λ) = q 1 = {q 0 } = δ (q 0, Λ) = δ (q 0, x) Induktionsskridt: Vi antager at δ 1 (q 1, x) = δ (q 0, x) δ1(q 1, xa) = δ 1 (δ1(q 1, x), a) = δ 1 (δ (q 0, x), a) = δ(r, a) r δ (q 0,x) = δ(δ (q 0, x), a) = δ (q 0, xa) 13

2.2.4 Produktkonstruktionen En spændende egenskab ved automater er at vi kan lave forenings-, snit- og differens-operationer på dem. Ved hver af disse operationer definerer vi en FA M ud fra de to input FA er M 1 = (Q 1, Σ, q 1, A 1, δ 1 ) og M 2 = (Q 2, Σ, q 2, A 2, δ 2 ) - således at: M = (Q, Σ, q 0, A, δ) Q = Q 1 Q 2 q 0 = (q 1, q 2 ) δ((p, q), a) = (δ 1 (p, a), δ 2 (q, a)), hvor p Q 1, q Q 2 og a Σ. Hver tilstand er altså nu repræsenteret ved en tuppel. Vi kan nu definere A på følgende måder for at opnå en af de tre operationer: L 1 L 2 : A = {(p, q) p A 1 q A 2 } L 1 L 2 : A = {(p, q) p A 1 q A 2 } L 1 L 2 : A = {(p, q) p A 1 q / A 2 } Illustration ved eksempel M 1 og M 2. Nedenfor ses et eksempel på union af to FA er Som det ses så har vi to FA er: M 1 = (Q 1, Σ, q 1, A 1, δ 1 ) M 2 = (Q 2, Σ, q 2, A 2, δ 2 ) 14

Hvorefter vi definerer en ny FA. Normalt vil man fjerne alle tilstande som ikke er uopnåelige fra starttilstanden, men da der ingen af dem er her ignorerer vi det.: Der gælder nu: M = (Q, Σ, q 0, A, δ) Q = Q 1 Q 2 q 0 = (q 1, q 2 ) A = {(p, q) p A 1 q A 2 } δ((p, q), a) = (δ 1 (p, a), δ 2 (q, a)) L(M) = L(M 1 ) L(M 2 ) Hvordan ved vi så sproget stadig er regulært? - Det ved vi fordi vi kan lave en FA og det derfor helt naturligt må være regulært, da FA er og regulære udtryk har samme udtrykskraft og kan konverteres imellem vha. Kleene 1 og 2. Det vigtige er så at være sikker på automaten accepterer det rigtige sprog. At det er regulært er intuitivt, da vi ellers ikke ville kunne konstruere en FA. Dette ved vi så dog ud fra lukkethedsegenskaberne for regulære sprog, da disse gør at regulære sprog er lukket under Kleene stjerne, konkatinering, union, intersection, division og en række andre ting. 3 Lukkethedsegenskaber (5.3-5.5) 3.1 Disposition 1. RegExp 2. Produktkonstruktion 3. Kontraponering 4. CFG lukkethed 3.2 Noter 3.2.1 Definer regulære udtryk Regulære udtryk er en formalisme vi bruger til at beskrive de regulære sprog - således er de defineret. 15

L( ) = L(Λ) = Λ L(a) = a, (a Σ) L(r 1 + r 2 ) = L(r 1 ) L(r 2 ) L(r 1 r 2 ) = L(r 1 )L(r 2 ) L(r ) = (L(r)) Et sprog S er derved kun regulært såfremt der eksisterer et regulært udtryk således at L(r) = S. Operationer Man kan så udføre en række operationer med disse regulære sprog, heriblandt foreningsoperationer (også kaldet union): L 1 L 2 = {x Σ x L 1 x L 2 } Union forklaret: Giver et sprog der indeholder alle strenge som mindst et af sprogene indeholder. Eller konkateneringsoperationen som giver et sprog der indeholder alle strenge der består af et prefix af det ene sprog efterfulgt af en streng fra det andet sprog: L 1 L 2 = {xy Σ x L 1 y L 2 } Og så Kleenoperatoren der giver et sprog der indeholder alle strenge, der består af den tomme streng efterfulgt af et vilkårligt antal strenge: L = L i, L k = LL L, L 0 = {Λ} i=0 Præcedens: Kleene stjerne, Konkatenering, Forening Regulære udtryk er en mekanisme til at beskrive et sprog. Endelige automater tester hvorvidt en given streng er indeholdt i sproget. 16

3.2.2 Produktkonstruktionen En spændende egenskab ved automater er at vi kan lave forenings-, snit- og differens-operationer på dem. Ved hver af disse operationer definerer vi en FA M ud fra de to input FA er M 1 = (Q 1, Σ, q 1, A 1, δ 1 ) og M 2 = (Q 2, Σ, q 2, A 2, δ 2 ) - således at: M = (Q, Σ, q 0, A, δ) Q = Q 1 Q 2 q 0 = (q 1, q 2 ) δ((p, q), a) = (δ 1 (p, a), δ 2 (q, a)), hvor p Q 1, q Q 2 og a Σ. Hver tilstand er altså nu repræsenteret ved en tuppel. Vi kan nu definere A på følgende måder for at opnå en af de tre operationer: L 1 L 2 : A = {(p, q) p A 1 q A 2 } L 1 L 2 : A = {(p, q) p A 1 q A 2 } L 1 L 2 : A = {(p, q) p A 1 q / A 2 } Illustration ved eksempel M 1 og M 2. Nedenfor ses et eksempel på union af to FA er Som det ses så har vi to FA er: M 1 = (Q 1, Σ, q 1, A 1, δ 1 ) M 2 = (Q 2, Σ, q 2, A 2, δ 2 ) 17

Hvorefter vi definerer en ny FA. Normalt vil man fjerne alle tilstande som ikke er uopnåelige fra starttilstanden, men da der ingen af dem er her ignorerer vi det.: Der gælder nu: M = (Q, Σ, q 0, A, δ) Q = Q 1 Q 2 q 0 = (q 1, q 2 ) A = {(p, q) p A 1 q A 2 } δ((p, q), a) = (δ 1 (p, a), δ 2 (q, a)) L(M) = L(M 1 ) L(M 2 ) Hvordan ved vi så sproget stadig er regulært? - Det ved vi fordi vi kan lave en FA og det derfor helt naturligt må være regulært, da FA er og regulære udtryk har samme udtrykskraft og kan konverteres imellem vha. Kleene 1 og 2. Det vigtige er så at være sikker på automaten accepterer det rigtige sprog. At det er regulært er intuitivt, da vi ellers ikke ville kunne konstruere en FA. Dette ved vi så dog ud fra lukkethedsegenskaberne for regulære sprog, da disse gør at regulære sprog er lukket under Kleene stjerne, konkatinering, union, intersection, division og en række andre ting. 3.2.3 Lukkethedsegenskaber Regulære sprog har en række pæne egenskaber, heriblandt at de er lukkede under en mængde operationer såsom: forening, snit og differens (produktkonstruktionen) komplement: L 1 = Σ, L 2 = R R = L 1 L 2 konkatenering og kleene Eksempel: Vis produktkonstruktion og argumenter for sproget er korrekt. 18

Kontraponering Lukkethedsegenskaber bruges bl.a. til at vise at et givent sprog ikke er regulært. Eksempelvis, så hvis vi antager vi allerede har bevist at S ikke er regulært, så hvis: S = P R og R er regulær, så kan P ikke være regulær. Homomorfi Homorforfi består i al sin enkelhed i at man tager alfabetet fra den ene og ændrer konsistent til den andens alfabet. F.eks. hvis man ville ændre Σ = [a z] til Σ = [A Z]. Regulære sprog er lukkede under homomorfi. g : Σ 1 Σ 2 { Λ hvis x = Λ h(x) = h(y)g(a) hvis x = ya, y Σ 1, a Σ 1 hvis L er regulært, er h(l) = {h(x) x L} det også. (eks. palindromer) Bevis. Strukturel induktion i regulære udtryk, erstat hver a Σ 1 i udtrykket med h(a). Omvendt: Bevis. Givet M definer M 1. M = (Q, Σ 2, q 0, A, δ) M 1 = (Q, Σ 1, q 0, A, δ 1 ), hvor δ 1 (q, a) = δ (q, h(a)) Påstand: L(M 1 ) = h 1 (L) (bevises ved induktion) Lukkethed for CFG er Hvor regulære udtryk er lukket under stortset hvad som helst, så er CFG er knap så tilgivende. Lukket for forening, konkatenering og kleene, men ikke for snit (eks.) og komplement (modstrid: (L 1 L 2 ) = L 1 L 2 ). 19

CFG er snit Hvordan ses det så CFG er ikke er lukket for snit? Hvis vi antager CFG er er lukket under snit, så gælder det blot om at finde et modstridende eksempel, så vi ser på følgende sprog L: L = {a i b j c k i < j i < k} L er ikke kontekstfrit! Hvis vi så kigger på sprogene: L 1 = {a i b j c k i < j} L 2 = {a i b j c k i < k} Så er disse faktisk kontekstfrie. Hvis vi så forsøger at lave snittet af disse, så viser det sig: L = L 1 L 2 Altså at snittet af L 1 og L 2 faktisk er lig L, som vi jo ved ikke er kontekstfri. Altså er klassen af kontekstfrie sprog ikke lukket under snit. CFG er komplement At CFG er ikke er lukket under komplement ses nemt, da vi blot kan finde et eksempel som dette: (L 1 L 2) = L 1 L 2 Altså hvor komplementet af L 1 s komplement forenet med L 2 s komplement resulterer i snittet mellem L 1 og L 2. Og siden vi allerede har bevist CFG er ikke er lukket under snit, så er de logisk nok heller ikke lukket under komplement. 3.2.4 Kontekstfrie grammatiker Ligesom et regulært udtryk beskriver et givent regulært sprog, så genererer en kontekstfri grammatik (CFG) et kontekstfrit sprog (CFL). En kontekstfri grammatik er derved en udtryksmekanisme ligesom FA er, RegExp er osv., men blot med lidt andre muligheder. Desuden skal det siges 20

at alle regulære udtryk rent faktisk er indeholdt i de kontekstfrie sprog, sådan at ethvert regulært udtryk rent faktisk kan oversættes til et kontekstfrit sprog - men mere om det senere. En kontekstfri grammatik er defineret som en 4-tuple: G = {V, Σ, S, P } Hvor V er en endelig mængde af nonterminal-symboler, Σ er et alfabet af terminal-symboler (hvor V Σ = ), S V er et start-symbol og en del af nonterminalerne og sidst men ikke mindst P er en endelig mængde af produktioner på form A α hvor A V og α (V Σ). Kontekstfrie grammatikker bruges bl.a. til beskrivelse af syntaks for programmeringssprog og er en af hjørnestenene i compilers (specifikt til parsing af kode). Derivationer En derivation er en erstatning af et nonterminal-symbol ifølge en given produktion P. Et derivationstrin skrives som og er en relation over mængden (V Σ). Hvis a 1, a 2 (V Σ) og (A γ) P, så gælder der: a 1 Aa 2 a 1 γa 2 Relationen defineres så som den refleksive transititve luking af, hvor α β hvis og kun hvis α...... β (altså at α går til β ved 0 eller flere derivationstrin). 21

Hvorfor navnet kontekstfrit så? Fordi man kan substituere nonterminalen A for γ uafhængigt af konteksten. Eksempel: algebraiske udtryk algebraiske udtryk, således at: Vi har en CFG G = (V, Σ, S, P ) for V = {S} Σ = {+,,, /, (, ), x, y, z} P = S S + S S S S S S/S (S) x y z Vi vil nu vise at strengen x y + z er i L(G), hvilket vi gør ved at følge en sekvens af derivationer S... x y + z. Vi har 3 derivationer af strengen x y + z: 1) S S + S S S + S x S + S x y + S x y + z 2) S S + S S + z S S + z S y + z x y + z 3) S S S S S + S x S + S x y + S x y + z Vi har altså 3 måder at nå frem til strengen på. Når en given CFG har dette siges det at den er tvetydig: En CFG G er tvetydig hvis der eksisterer en streng x L(G) med mere end et derivationstræ. Derivationstræer Et derivationstræ er blot en måde at strukturere forskellige derivationer på. Vores algebraiske udtryk har f.eks. derivationstræerne: 22

En parser bruger netop disse typer derivationstræer når den læser en given streng. Sproget for en CFG Sproget for en CFG er et kontekstfrit sprog hvis og kun hvis der findes en CFG G hvor L(G) = L, hvor L Σ. L er således defineret som: L(G) = {x Σ S x} Altså hvis man igennem at bruge produktionerne i CFG en kan finde x, så er x i sproget. Eksempel på en CFG Vi har en CFG G = (V, Σ, S, P ) der beskriver sproget A = {a n b n n 0}. G har således: V = {S} Σ = {a, b} P = {S asb, S λ} OBS: P kan også skrives som P = {S asb λ} CFG en for Palindromer Sproget pal = {x {0, 1} x = reverse(x)} kan beskrives af en CFG G = (V, Σ, S, P ) hvor: V = {S} Σ = {0, 1} P = {S λ, S 0, S 1, S 0S0, S 1S1} Så er pal kontekstfrit, men ikke regulært. OBS: Igen kan P i stedet skrives som P = {S λ 0 1 OS0 1S1}. 23

Højrelineære CFG er En CFG siges at være højrelineær, hvis alle dens produktioner er på formen: A ab.. eller A λ Hvor A, B V og a Σ. Eksempler kunne være: S 0S 1A A 0A 1S λ At CFG en G gør den nemmere at arbejde med, da det betyder L(G) faktisk er regulært, hvorved det eksempelvis kan oversættes til en NFA-Λ vha. Kleene 1. Dette faktum betyder også, at ethvert regulært sprog L kan laves om til en højre-lineær grammatik G så L(G) = L. OBS: L(G) kan godt være regulært uden at CFG en er højre-lineær.. det er blot altid regulært hvis CFG en ER højre-lineær. Bevis. Strukturel induktion i r Basis: r = vlg V = {S}, P = r = λ vlg V = {S}, P = {S λ} r = a Σ vlg V = {S}, P = {S a} Induktionsskridt: r = r 1 + r 2 : Vi har en induktionshypotese der giver os: G 1 = (V 1, Σ, S 1, P 1 ), L(G 1 ) = L(r 1 ) G 2 = (V 2, Σ, S 2, P 2 ), L(G 2 ) = L(r 2 ) Vi omdøber lige nonterminalsymbolerne således at V 1 V 2 =, hvorefter vi vælger: 24

V = V 1 V 2 {S} S / V 1 V 2 P = P 1 P 2 {S S 1, S S 2 } r = r 1 r 2 : Som vi havde det ved r = r 1 + r 2, men: P = P 1 P 2 {S S 1 S 2 } r = r 1 : igen som ved r = r 1 + r 2, men: V = V 1 {S} P = P 1 {S S 1 S, S λ} Oversættelse fra RegExp til CFG Ethvert regulært udtryk r over et alfabet Σ kan oversættes til en CFG G = {V, Σ, S, P } hvor L(G) = L(r). Fremgansmåde: 1. Start med at Eksempel på oversættelse af RegExp til CFG Hvis vi har det regulære udtryk r = a + b, så oversættes det til en CFG således: 4 Nondeterministiske automater (4) 4.1 Disposition 1. NFA er 2. Determinisering 3. Kleene 1 4. NFA-Λ 5. Λ-eliminering 25

4.2 Noter 4.2.1 NFA er Hvordan laver man en automat, der svarer til det regulære udtryk (11 + 110) 0? Det gør man vha. en NFA - denne her for at være præcis: Der er ikke altid præcis en udgående transition pr. alfabetsymbol for hver tilstand Automaten accepterer en streng, hvis det er muligt at gætte en vej til accept Som det kan ses bliver eksempelvis strengen 110110 godkendt af automaten ovenfor. Formel definition NFA er er i høj grad ligesom FA er, dog med et ekstra lille hint af ubestemmelighed (hence the name). En NFA bestemmes, ligesom en FA, af en 5-tuple som beskrevet herunder. M = (Q, Σ, q 0, A, δ) δ : Q Σ 2 Q { {q} hvis x = Λ δ (q, x) = r δ (q,y) δ(r, a) hvis x = ya, hvor y Σ og a Σ Så altså ligesom en FA bortset fra de tilstande den går til nu er mængder af tilstande, sproget for en NFA er anderledes og derved så er transitionsfunktionen for en NFA anderledes. 26

Sproget for en NFA M accepterer en streng x hvis og kun hvis δ (q 0, x) A. L(M) = {x Σ δ (q 0, x) A } En streng er altså accepteret hvis der eksisterer en sti igennem tilstandende hvortil den givne streng kan slutte i en accepttilstand. Fra FA til NFA: δ giver singleton-mængder. Størrelsen af en NFA NFA er er ofte mindre end FA er, da en FA der genkender sproget L 42 = {x {0, 1} x 42 og det 42. symbol fra højre i x er et 1 }, har mindst hele 2 42 tilstande, da dette er mængden af ækvivalensklasser, så har en NFA der genkender L 42 kun 43 tilstande: 4.2.2 Definer automater Som sagt har regulære udtryk samme udtrykskraft som endelige automater (og omvendt), men hvordan konverterer man så imellem de to? Jo det gør man ved at lave et regulært udtryk om til en NFA-Λ, videre til en NFA vha. Λ-eliminering og så til sidst til en FA vha. determinisering. Ligeledes kan en FA laves om til et regulært udtryk vha. Kleene 2, eller en FA kan laves om til en NFA og videre til en NFA-Λ. Alt dette er vist forneden: 27

4.2.3 Determinering Kort forklaret med eksempel Enhver NFA kan oversættes til en FA, hvilket gøres vha. Determinisering eller delmængdekonstruktion (hvad end man har lyst til at kalde det). Vi har en NFA M = (Q, Σ, q 0, A, δ) og vil nu lave denne om til en FA M 1 = (Q 1, Σ, q 1, A 1, δ 1 ) hvor Q 1 bliver til Q 1 = 2 Q, da hver tilstand i FA en bliver en mængde af tilstande i NFA en. q 1 bliver til q 1 = {q 0 }. Accepttilstandende for FA en bliver til A 1 = {q Q 1 q A }, altså blot de q i vores nye Q hvor disse var accepttilstande i NFA en (hvilket vil sige at alle i en mængde bliver accept hvis en given q er en mængde af tilstande fra NFA en). Sidst men ikke mindst bliver transitionsfunktionen omdefineret til: δ 1 (q, a) = r q δ(r, a) Nu gælder det så at L(M 1 ) = L(M). Hele denne proces ses i eksemplet herunder: Som vi kan se bliver tilstandende i NFA en lavet om til mængder af tilstande i FA en, hvor 1 transitionerne fra q 0 bliver til mængden {3, 2}, som så bliver en accepttilstand fordi tilstand 2 var en accepttilstand i NFA en og accepttilstandende er defineret som: A 1 = {q Q 1 q A }. 28

Formel definition NB: Også kaldet delmængdeproduktion. Givet en NFA M definer en FA M 1 : M = (Q, Σ, q 0, A, δ) M 1 = (Q 1, Σ, q 1, A 1, δ 1 ) Q 1 = 2 Q q 1 = {q 0 } A 1 = {q Q 1 q A } δ 1 (q, a) = r q δ(r, a) Der gælder nu L(M 1 ) = L(M). Bevis. Definitionen af A 1 er sand da en streng accepteres hvis M fra q 0 ender op med en mængde tilstande hvor mindst en er et element i A. Det følger da fra nedenstående lemma at L(M) = L(M 1 ). En streng x accepteres af M 1 hvis δ 1 (q 1, x) A. Dette er sandt hvis og kun hvis δ (q 0 ), x) A 1. Fra definitionen af A 1 ser vi at dette er sand hvis og kun hvis δ (q 0, x) A. Altså accepteres x af M 1 hvis og kun hvis x accepteres af M. Lemma 2. x Σ : δ 1(q 1, x) = δ (q 0, x) Bevis. Ved induktion i strukturen af x. Basis: Hvis x = Λ, δ 1(q 1, x) = δ 1(q 1, Λ) = q 1 = {q 0 } = δ (q 0, Λ) = δ (q 0, x) Induktionsskridt: Vi antager at δ 1 (q 1, x) = δ (q 0, x) 29

δ1(q 1, xa) = δ 1 (δ1(q 1, x), a) = δ 1 (δ (q 0, x), a) = δ(r, a) r δ (q 0,x) = δ(δ (q 0, x), a) = δ (q 0, xa) 4.2.4 NFA-Λ For nemt at kunne bruge Kleene 1 til at oversætte et regulært udtryk til en NFA, så har vi indført NFA-Λ, som er en særlig form for NFA der gør brug af den tomme streng til at få lidt mere generalitet. En Λ-transition i en automat læser ikke et tegn fra inputstrengen, det er blot en vej en automat kan vælge at benytte eller lade være. Eksempel på en NFA-Λ NFA-Λ en herunder gør det muligt for strengen 001 at blive godkendt: Formel definition M = (Q, Σ, q 0, A, δ) δ : Q (Σ {Λ}) 2 Q Lambda-lukningen af S, Λ(S) er den mindste mængde er opfylder flg. S Λ(S) q Λ(S) : δ(q, Λ) Λ(S) 30

Ud fra det defineres den udvidede transitionsfunktion: { Λ ({q}) hvis x = Λ δ (q, x) = ( ) Λ r δ (q,y) δ(r, a) hvis x = ya, hvor y Σ og a Σ Beskrivelsen af sproget L(M) er identisk med beskrivelsen hos NFA en. Oversættelse fra NFA-Λ til NFA: δ(q, Λ) =. Lambda-Lukningen Lambda-lukningen er intuitivt set blot: Hvor kan vi komme hen hvis vi følger streng y og tillader Λ undervejs, følger transition a og sidst følger eventuelle Λ-transitioner igen? 4.2.5 Kleene 1 Kig i emne 1. 4.2.6 Λ-eliminering Eksempel OBS: Acceptstadier opnåelige vha Λ-transitioner skal fjernes og kilden skal gøres til accept (altså tilstanden Λ-transitionen kom fra). 31

Formel definition Givet en NFA-Λ M definer en NFA M 1 : M = (Q, Σ, q 0, A, δ) M 1 = (Q, Σ, q 0, A 1, δ 1 ) δ 1 (q, a) = δ (q, a) { A {q0 } hvis Λ({q A 1 = 0 } A A ellers ( ) Bemærk: δ (q, a) = Λ r=λ({q}) δ(r, a) Der gælder nu at L(M 1 ) = L(M). Bevis. Vi skal vise: x Σ : x L(M 1 ) x L(M) x = Λ: Brug definition af A 1 og Λ-lukning. x Λ: Lemma: x Σ, x Λ : δ (q 0, x) = δ 1(q 0, x) 5 Minimering af automater (5.1-5.2) 5.1 Disposition 1. FA er 2. Eksempel på minimering af en FA 3. Skelnelighed 4. MyHill-Nerode/Partitionering 5.2 Noter 5.2.1 Endelige automater Endelige automater (FA er) abstrakte maskiner designet til at teste hvorvidt en given streng er med i et sprog. 32

Eksempel En FA består af en endelig mængde tilstande Q og har så til format at løse membership beslutningsproblemer for regulære sprog. Et eksempel på en FA ses herunder, men alfabetet Σ = {0, 1}. Denne genkender strenge med ulige antal 1 ere: En FA er defineret som en 5-tuppel: M = (Q, Σ, q 0, A, δ), hvor Q er en endelig mængde af tilstande, Σ er et alfabet bestående af en endelig mængde symboler, q 0 er den initielle tilstand, A er et subset af Q (A Q) hvor disse tilstande er accepttilstande og δ er en transitionsfunktion på formen Q Σ Q. Sproget for en FA Sproget for en FA er et regulært sprog, da regulære sprog og FA er har samme udtrykskraft og en FA kan oversættes til et regulært udtryk (vha. Kleene s sætning del 2). Uden et sprog har en FA ingen funktion. Sproget for en FA er defineret som: L(M) = {x Σ δ (q 0, x) A} Altså indeholder sproget de strenge x for hvilket den udvidede transitionsfunktion fra initialtilstanden på strengen x går til en accepttilstand. Den udvidede transitionsfunktion For q Q og x Σ er δ : Q Σ Q defineret som { δ q hvis x = Λ (q, x) = δ(δ (q, y), a) hvis x = ya hvor y Σ og a Σ 33

5.2.2 Eksempel på minimering af en FA Ud fra MyHill-Nerode-sætningen kan vi udlede en algoritme der, givet en vilkårlig FA M = (Q, Σ, q 0, A, δ) finder en minimal FA M 1 hvor L(M) = L(M 1 ). Fremgansmåde Fjern uopnåelige tilstande Marker alle par af transitioner hvor en er en accepttilstand. Følg transitioner parvist Lav ny FA Som vi kan se bliver alle bortset fra 3, 4 markeret hvorved vi kan konkludere disse er i samme ækvivalensklasse og vi bør derfor fjerne den ene, hvilket vi har gjort i FA en ved siden af. 34

5.2.3 Skelnelighed Intuitivt set er der kun behov for at skelne mellem to strenge x og y såfremt de ender i forskellige tilstande. x og y er skelnelige mht. L hvis eller hvis L/x L/y, hvor z Σ : (xz L) (yz / L) (xz / L) (yz L). L/x = {z Σ xz L}, Uskelnelighedsrelationen I L er defineret som x I L y x og y er uskelnelige mht. L Ækvivalensrelation 35

Eksempel: Skelnelighed Hvis: L = {s {0, 1} s ender med 10} x = 00 y = 01 Så er x og y skelnelige mht. L, da z = 0 skelner x og y. Eksempel på at finde ækvivalensklasser Vi har et sprog L = {0, 1} {10}. Det er nu så nemt at se der skal skelnes imellem strenge der slutter med 00, strenge der slutter med 1 og strenge der slutter med 10. Derved har vi følgnede ækvivalensklasser: X : {Λ, 0} {0, 1} {00} Y : {0, 1} {1} Z : {0, 1} {10} Ækvivalensklasserne får tilmed en repræsentant som i ovenstående tilfælde er henholdsvis: [Λ], [1] og [10]. Dette leder så til en partitionering over alle strenge i alfabetet, således at en streng kun er i en specifik ækvivalensklasse: 36

Mindste antal tilstande Givet n skelnelige strenge mht. et sprog L, må en FA der accepterer L have mindst n tilstande. Denne sætning er vigtig ifht. udtrykskraften af regulære sprog: Der eksisterer ingen FA der kan acceptere et sprog, med hensyn til hvilket der eksisterer et uendeligt antal skelnelige strenge. Denne egenskab kan bruges til at vise at visse sprog ikke er regulære. 5.2.4 MyHill-Nerode MyHill-Nerode s første sætning siger: s Hvis I L har uendeligt mange ækvivalensklasser, så er L ikke regulært. MyHill-Nerode s anden sætning siger: Givet n skelnelige strenge mht. et sprog L, må en FA der accepterer L have mindst n tilstande. MyHill-Nerode sætningen kan bruges til at skabe minimale FA er. Den bygger på uskelnelighed ved først at finde ækvivalensklasserne i et givent regulært udtryk og derved skabe en partitionering af disse således: 37

Hver streng over alfabetet ligger så præcis 1 sted i denne partitionering. Vha. denne partitionering kan man så skabe en FA der er den minimale mulig, da dens tilstande består udelukkende af de ækvivalensklasser der eksisterer for sproget - hvilket er præcis hvad det minimale antal tilstande er: Givet n skelnelige strenge mht. et sprog L, må en FA der accepterer L have mindst n tilstande. Formel definition Eksempel på fremstilling af minimal FA Hvis vi antager ækvivalensklasserne for I L er: X = {x {0, 1} n 1 () i x er lige} Y = {x {0, 1} n 1 () i x er ulige} 38

og 111 L. Så har vi denne partitionering og minimal FA: 6 Begrænsninger af regulære sprog (5.3) 6.1 Disposition 1. Definer regulære sprog 2. Skelnelighed 3. MyHill-Nerode/Partitionering 4. Pumping lemma 6.2 Noter 6.2.1 Definer regulære udtryk Regulære udtryk er en formalisme vi bruger til at beskrive de regulære sprog - således er de defineret. L( ) = L(Λ) = Λ L(a) = a, (a Σ) L(r 1 + r 2 ) = L(r 1 ) L(r 2 ) L(r 1 r 2 ) = L(r 1 )L(r 2 ) L(r ) = (L(r)) Et sprog S er derved kun regulært såfremt der eksisterer et regulært udtryk således at L(r) = S. 39

Operationer Man kan så udføre en række operationer med disse regulære sprog, heriblandt foreningsoperationer (også kaldet union): L 1 L 2 = {x Σ x L 1 x L 2 } Union forklaret: Giver et sprog der indeholder alle strenge som mindst et af sprogene indeholder. Eller konkateneringsoperationen som giver et sprog der indeholder alle strenge der består af et prefix af det ene sprog efterfulgt af en streng fra det andet sprog: L 1 L 2 = {xy Σ x L 1 y L 2 } Og så Kleenoperatoren der giver et sprog der indeholder alle strenge, der består af den tomme streng efterfulgt af et vilkårligt antal strenge: L = L i, L k = LL L, L 0 = {Λ} i=0 Præcedens: Kleene stjerne, Konkatenering, Forening Regulære udtryk er en mekanisme til at beskrive et sprog. Endelige automater tester hvorvidt en given streng er indeholdt i sproget. 6.2.2 Skelnelighed Intuitivt set er der kun behov for at skelne mellem to strenge x og y såfremt de ender i forskellige tilstande. x og y er skelnelige mht. L hvis eller hvis L/x L/y, hvor z Σ : (xz L) (yz / L) (xz / L) (yz L). L/x = {z Σ xz L}, Uskelnelighedsrelationen I L er defineret som x I L y x og y er uskelnelige mht. L 40

Ækvivalensrelation Eksempel: Skelnelighed Hvis: L = {s {0, 1} s ender med 10} x = 00 41

y = 01 Så er x og y skelnelige mht. L, da z = 0 skelner x og y. Eksempel på at finde ækvivalensklasser Vi har et sprog L = {0, 1} {10}. Det er nu så nemt at se der skal skelnes imellem strenge der slutter med 00, strenge der slutter med 1 og strenge der slutter med 10. Derved har vi følgnede ækvivalensklasser: X : {Λ, 0} {0, 1} {00} Y : {0, 1} {1} Z : {0, 1} {10} Ækvivalensklasserne får tilmed en repræsentant som i ovenstående tilfælde er henholdsvis: [Λ], [1] og [10]. Dette leder så til en partitionering over alle strenge i alfabetet, således at en streng kun er i en specifik ækvivalensklasse: Mindste antal tilstande Givet n skelnelige strenge mht. et sprog L, må en FA der accepterer L have mindst n tilstande. Denne sætning er vigtig ifht. udtrykskraften af regulære sprog: Der eksisterer ingen FA der kan acceptere et sprog, med hensyn til hvilket der eksisterer et uendeligt antal skelnelige strenge. Denne egenskab kan bruges til at vise at visse sprog ikke er regulære. 42

6.2.3 MyHill-Nerode MyHill-Nerode s første sætning siger: s Hvis I L har uendeligt mange ækvivalensklasser, så er L ikke regulært. MyHill-Nerode s anden sætning siger: Givet n skelnelige strenge mht. et sprog L, må en FA der accepterer L have mindst n tilstande. MyHill-Nerode sætningen kan bruges til at skabe minimale FA er. Den bygger på uskelnelighed ved først at finde ækvivalensklasserne i et givent regulært udtryk og derved skabe en partitionering af disse således: Hver streng over alfabetet ligger så præcis 1 sted i denne partitionering. Vha. denne partitionering kan man så skabe en FA der er den minimale mulig, da dens tilstande består udelukkende af de ækvivalensklasser der eksisterer for sproget - hvilket er præcis hvad det minimale antal tilstande er: Givet n skelnelige strenge mht. et sprog L, må en FA der accepterer L have mindst n tilstande. Formel definition 43

Eksempel på fremstilling af minimal FA Hvis vi antager ækvivalensklasserne for I L er: X = {x {0, 1} n 1 () i x er lige} Y = {x {0, 1} n 1 () i x er ulige} og 111 L. Så har vi denne partitionering og minimal FA: 6.2.4 Pumping lemmaet for regulære sprog Hvis vi forestiller os vi har en FA M = (Q, Σ, q 0, A, δ), så har denne et sprog med en given mængde strenge. Hvis vi så forestiller os M har n tilstande, så for en streng x n hvor x L så vil der igennem genkendelsen af denne streng nød til at være en loop, altså en transition fra en given tilstand der placerer os i samme tilstand igen. Hvis vi ser på denne streng x som bestående af 3 delstrenge u, v og w, så kan situationen illustreres således: 44

Altså vil det sige, at en arbitrær streng x L vil, antaget den er tilstrækkelig lang, få en midt substring v pumped up og derved introducere adskillige nye elementer af L. Disse nye elementer skal så overholde en række bestemmelser efter denne pumping for at sproget virkelig er regulært. Dette bringer os så til definitionen: Pumping -lemmaet. Hvis L er et regulært sprog så gælder flg.: n > 0 : x L hvor x n : u, v, w Σ : x = uvw uv n v > 0 m 0 : uv m w L Det vil altså sige, at hvis vi skal modbevise at et givent sprog er regulært, så skal vi vise at det pågældende sprog ikke overholder de regler beskrevet i definitionen ovenfor. Dette gør vi ved at antage reglerne er overholdt og så finde frem til en modsigelse. Udtryksformen ovenfor lyder Der findes et n som for ethvert x L med x n..., så vi antager derfor vi har et sådant n, selvom vi ikke selv ved hvad det er, og vi prøver så at finde en streng x med x n sådan at udsagene om x i teoremet leder til en modsigelse. Derfor må vi sige at for ethvert n, kan vi finde et x L med x n sådan at udsagnene om x i teoremet leder til en modsigelse. Vi kan frit vælge x, så længe x n, men siden vi ikke ved hvad n er, så må valget af x involverer n. Når vi har valgt x kan vi ikke frit vælge u, v og w, som teoremet siger x bliver opdelt i. Vi ved blot at der er en eller anden måde at opdele x i 45

strengene u, v og w sådan at reglerne er sande. Siden vi skal bevise sproget IKKE er regulært, må vi vise at for ethvert valg af u, v og w der overholder reglerne, så kan vi finde en modsigelse. Skrevet fint og matematisk bliver dette: Pumping -lemmaet - Modbevis. Hvis n > 0 : Så er L IKKE regulært. x L hvor x n : u, v, w Σ : x = uvw uv n v > 0 m 0 : uv m w / L Eksempel Lad L = {0 i 1 i i 0}. Vi vil nu vha. pumping-lemmaet vise at L ikke er regulært. Vi vil benytte os af kvantor-spil tankegangen: Fjenden vælger et n > 0 Vi vælger x = 0 n 1 n som opfylder x L og som klart opfylder x n Fjenden vælger så u, v og w, så x = uvw hvor uv n og v > 0 Vi vælger herefter antal loops, altså m til 2 - m = 2. Da x = uvw = 0 n 1 n, hvor uv n og v > 0 så gælder der at v = 0 k for et k > 0. Da uv n ved vi at v kun kan bestå af 0 er, da vi allerede ved 0 n delen af x har længden n. Det vil altså sige at uv m w = uv 2 w = 0 n+k 1 n / L. Altså er L ikke regulært. 7 Kontekstfri grammatikker (6-8) 7.1 Disposition 1. CFG 46

2. Derivationer 3. Tvetydighed 4. Lukkethed 5. Pumping lemma 7.2 Noter 7.2.1 Kontekstfrie grammatiker Ligesom et regulært udtryk beskriver et givent regulært sprog, så genererer en kontekstfri grammatik (CFG) et kontekstfrit sprog (CFL). En kontekstfri grammatik er derved en udtryksmekanisme ligesom FA er, RegExp er osv., men blot med lidt andre muligheder. Desuden skal det siges at alle regulære udtryk rent faktisk er indeholdt i de kontekstfrie sprog, sådan at ethvert regulært udtryk rent faktisk kan oversættes til et kontekstfrit sprog - men mere om det senere. En kontekstfri grammatik er defineret som en 4-tuple: G = {V, Σ, S, P } Hvor V er en endelig mængde af nonterminal-symboler, Σ er et alfabet af terminal-symboler (hvor V Σ = ), S V er et start-symbol og en del af nonterminalerne og sidst men ikke mindst P er en endelig mængde af produktioner på form A α hvor A V og α (V Σ). Kontekstfrie grammatikker bruges bl.a. til beskrivelse af syntaks for programmeringssprog og er en af hjørnestenene i compilers (specifikt til parsing af kode). 47

Derivationer En derivation er en erstatning af et nonterminal-symbol ifølge en given produktion P. Et derivationstrin skrives som og er en relation over mængden (V Σ). Hvis a 1, a 2 (V Σ) og (A γ) P, så gælder der: a 1 Aa 2 a 1 γa 2 Relationen defineres så som den refleksive transititve luking af, hvor α β hvis og kun hvis α...... β (altså at α går til β ved 0 eller flere derivationstrin). Hvorfor navnet kontekstfrit så? Fordi man kan substituere nonterminalen A for γ uafhængigt af konteksten. Eksempel: algebraiske udtryk algebraiske udtryk, således at: Vi har en CFG G = (V, Σ, S, P ) for V = {S} Σ = {+,,, /, (, ), x, y, z} P = S S + S S S S S S/S (S) x y z Vi vil nu vise at strengen x y + z er i L(G), hvilket vi gør ved at følge en sekvens af derivationer S... x y + z. Vi har 3 derivationer af strengen x y + z: 1) S S + S S S + S x S + S x y + S x y + z 2) S S + S S + z S S + z S y + z x y + z 3) S S S S S + S x S + S x y + S x y + z Vi har altså 3 måder at nå frem til strengen på. Når en given CFG har dette siges det at den er tvetydig: En CFG G er tvetydig hvis der eksisterer en streng x L(G) med mere end et derivationstræ. 48

Derivationstræer Et derivationstræ er blot en måde at strukturere forskellige derivationer på. Vores algebraiske udtryk har f.eks. derivationstræerne: En parser bruger netop disse typer derivationstræer når den læser en given streng. Sproget for en CFG Sproget for en CFG er et kontekstfrit sprog hvis og kun hvis der findes en CFG G hvor L(G) = L, hvor L Σ. L er således defineret som: L(G) = {x Σ S x} Altså hvis man igennem at bruge produktionerne i CFG en kan finde x, så er x i sproget. Eksempel på en CFG Vi har en CFG G = (V, Σ, S, P ) der beskriver sproget A = {a n b n n 0}. G har således: V = {S} Σ = {a, b} P = {S asb, S λ} OBS: P kan også skrives som P = {S asb λ} 49

CFG en for Palindromer Sproget pal = {x {0, 1} x = reverse(x)} kan beskrives af en CFG G = (V, Σ, S, P ) hvor: V = {S} Σ = {0, 1} P = {S λ, S 0, S 1, S 0S0, S 1S1} Så er pal kontekstfrit, men ikke regulært. OBS: Igen kan P i stedet skrives som P = {S λ 0 1 OS0 1S1}. Højrelineære CFG er En CFG siges at være højrelineær, hvis alle dens produktioner er på formen: A ab.. eller A λ Hvor A, B V og a Σ. Eksempler kunne være: S 0S 1A A 0A 1S λ At CFG en G gør den nemmere at arbejde med, da det betyder L(G) faktisk er regulært, hvorved det eksempelvis kan oversættes til en NFA-Λ vha. Kleene 1. Dette faktum betyder også, at ethvert regulært sprog L kan laves om til en højre-lineær grammatik G så L(G) = L. OBS: L(G) kan godt være regulært uden at CFG en er højre-lineær.. det er blot altid regulært hvis CFG en ER højre-lineær. Bevis. Strukturel induktion i r Basis: r = vlg V = {S}, P = r = λ vlg V = {S}, P = {S λ} r = a Σ vlg V = {S}, P = {S a} 50

Induktionsskridt: r = r 1 + r 2 : Vi har en induktionshypotese der giver os: G 1 = (V 1, Σ, S 1, P 1 ), L(G 1 ) = L(r 1 ) G 2 = (V 2, Σ, S 2, P 2 ), L(G 2 ) = L(r 2 ) Vi omdøber lige nonterminalsymbolerne således at V 1 V 2 =, hvorefter vi vælger: V = V 1 V 2 {S} S / V 1 V 2 P = P 1 P 2 {S S 1, S S 2 } r = r 1 r 2 : Som vi havde det ved r = r 1 + r 2, men: P = P 1 P 2 {S S 1 S 2 } r = r 1 : igen som ved r = r 1 + r 2, men: V = V 1 {S} P = P 1 {S S 1 S, S λ} Oversættelse fra RegExp til CFG Ethvert regulært udtryk r over et alfabet Σ kan oversættes til en CFG G = {V, Σ, S, P } hvor L(G) = L(r). Fremgansmåde: 1. Start med at Eksempel på oversættelse af RegExp til CFG Hvis vi har det regulære udtryk r = a + b, så oversættes det til en CFG således: 51

7.2.2 Lukkethedsegenskaber Regulære sprog har en række pæne egenskaber, heriblandt at de er lukkede under en mængde operationer såsom: forening, snit og differens (produktkonstruktionen) komplement: konkatenering og kleene L 1 = Σ, L 2 = R R = L 1 L 2 Eksempel: Vis produktkonstruktion og argumenter for sproget er korrekt. Kontraponering Lukkethedsegenskaber bruges bl.a. til at vise at et givent sprog ikke er regulært. Eksempelvis, så hvis vi antager vi allerede har bevist at S ikke er regulært, så hvis: S = P R og R er regulær, så kan P ikke være regulær. Homomorfi Homorforfi består i al sin enkelhed i at man tager alfabetet fra den ene og ændrer konsistent til den andens alfabet. F.eks. hvis man ville ændre Σ = [a z] til Σ = [A Z]. Regulære sprog er lukkede under homomorfi. g : Σ 1 Σ 2 { Λ hvis x = Λ h(x) = h(y)g(a) hvis x = ya, y Σ 1, a Σ 1 hvis L er regulært, er h(l) = {h(x) x L} det også. (eks. palindromer) Bevis. Strukturel induktion i regulære udtryk, erstat hver a Σ 1 i udtrykket med h(a). Omvendt: Bevis. Givet M definer M 1. M = (Q, Σ 2, q 0, A, δ) M 1 = (Q, Σ 1, q 0, A, δ 1 ), hvor δ 1 (q, a) = δ (q, h(a)) Påstand: L(M 1 ) = h 1 (L) (bevises ved induktion) 52

Lukkethed for CFG er Hvor regulære udtryk er lukket under stortset hvad som helst, så er CFG er knap så tilgivende. Lukket for forening, konkatenering og kleene, men ikke for snit (eks.) og komplement (modstrid: (L 1 L 2 ) = L 1 L 2 ). CFG er snit Hvordan ses det så CFG er ikke er lukket for snit? Hvis vi antager CFG er er lukket under snit, så gælder det blot om at finde et modstridende eksempel, så vi ser på følgende sprog L: L = {a i b j c k i < j i < k} L er ikke kontekstfrit! Hvis vi så kigger på sprogene: L 1 = {a i b j c k i < j} L 2 = {a i b j c k i < k} Så er disse faktisk kontekstfrie. Hvis vi så forsøger at lave snittet af disse, så viser det sig: L = L 1 L 2 Altså at snittet af L 1 og L 2 faktisk er lig L, som vi jo ved ikke er kontekstfri. Altså er klassen af kontekstfrie sprog ikke lukket under snit. 53

CFG er komplement At CFG er ikke er lukket under komplement ses nemt, da vi blot kan finde et eksempel som dette: (L 1 L 2) = L 1 L 2 Altså hvor komplementet af L 1 s komplement forenet med L 2 s komplement resulterer i snittet mellem L 1 og L 2. Og siden vi allerede har bevist CFG er ikke er lukket under snit, så er de logisk nok heller ikke lukket under komplement. 7.2.3 Pumping Lemma for CFL Pumping -lemmaet for CFG er. Hvis L er et kontekstfrit sprog så gælder flg.: n > 0 : u L hvor u n : v, w, x, y, z Σ : u = vwxyz wxy n wy > 0 m 0 : vw m xy m z L Bevis. Vælg n = 2 p+1, hvor p = V, udnyt egenskab... For at vise et givent sprog ikke er kontekstfrit skal vi i stedet finde for ethvert n > 0 et u L, hvor u n, hvor for alle valg af v, w, x, y, z Σ der eksisterer et m 0 for hvilket vw m xy m </ L. Pumping -lemmaet for CFG er - Modbevis. Hvis: n > 0 : u L hvor u n : v, w, x, y, z Σ : u = vwxyz wxy n wy > 0 m 0 : vw m xy m z / L Så er L ikke et kontekstfrit sprog. 54