INF2820 Datalingvistikk V2017 Forelesning 2, 23.1 Jan Tore Lønning
ENDELIGE TILSTANDSMASKINER OG REGULÆRE SPRÅK, DEL 2 19. januar 2017 2
Sist uke: FSA Brukes om hverandre: Finite state automaton - FSA Finite automaton FA Finite state machine - FSM Kan betraktes som Notasjoner for å beskrive språk Notasjon for en automat som leser en tape og skifter tilstand for hvert symbol den leser 1/19/2017 Speech and Language Processing - Jurafsky and Martin 3
Hva har vi lært? Definisjon av deterministiske endelige tilstandsautomater Hvordan disse definerer et språk Hvordan vi kan konstruere en DFA for komplementet til en språk definert av en DFA Algoritme for anerkjenning med DFA går i linjær tid 19. januar 2017 4
IKKE-DETERMINISTISKE AUTOMATER 19. januar 2017 5
Non-Determinism Speech and Language Processing - Jurafsky and Martin 6
Ikke-determinisme er nyttig Kari elsket sin hund. Kari elsket sin hund og venn. Kari elsket sin hund og beundret en venn. Kari elsket sin hund og Ola beundret en venn. Kari elsket sin hund og venn og beundret en venn og Ola beundret en hund og elsket sin venn. 7
Non-Determinism cont. Yet another technique Epsilon transitions Key point: these transitions do not examine or advance the tape during recognition Speech and Language Processing - Jurafsky and Martin 8
Yet Another View Gå til tilstand 2 eller gå til tilstand 3 The guts of FSAs can ultimately be represented as tables If you re in state 1 and you re looking at an a, go to state 2 b a! e 0 1 1 2 2 2,3 3 4 4 Speech and Language Processing - Jurafsky and Martin 9
Formell definisjon En ikkedeterministisk endelig maskin (NFA) består av 1. En endelig mengde av tilstander: Q= {q 0, q 1,, q N 1 } 2. Et endelig alfabet av symboler: 3. En begynnertilstand: q 0 Q 4. En mengde av sluttilstander F Q 5. En transisjonsfunksjon som til hver q Qog a { } gir en delmengde av Q (Denne kan være tom) (5) Kan også formuleres som at D er en relasjon på Q { } Q Sammenhengen er at D(q1, s, q2) hvis og bare hvis q2 (q1, s) 10 1/19/2017
NFA ikkedeterministisk endelig maskin Enhver DFA er også en NFA! forvirrende? Kanskje burde NFA hett FA? Men DFA (=FA) kom først Det finnes NFA-er som ikke er DFA-er Men hvis et språk kan beskrives av en NFA, så fins det også en DFA som beskriver språket. Ikke opplagt Trengs et bevis NFA DFA
Fra NFA til DFA for samme språk Oppskrift, (uformell) gitt DFA kalt M1 Lag en ny automat M2 med en tilstand for hver mengde av tilstander i M1. Her 8 stk:, {0}, {1}, {2}, {0,1}, {0,2}, {1,2}, {0,1,2} For hver ny tilstand Qi={q 1,, q n } og symbol a, lag kant til tilstanden Qj som består av alle tilstander q som det går kant til fra minst en av q 1,, q n merket med a. I praksis trenger vi ikke alltid å lage alle tilstandene (Vi lager kantene, og de tilstandene vi kan nå med en sti fra starten.) 12
Fra NFA til DFA for samme språk 13
Fra NFA til DFA for samme språk 14
Fra NFA til DFA for samme språk 15
Fra NFA til DFA for samme språk 16
Fra NFA til DFA for samme språk 17
Fra NFA til DFA uten -kanter Gitt en NFA uten -kanter: N= Q, q0,, F, Definer en DFA, D= Q D, Q 0D, D, F D, D ved: Q D = Pow(Q) = {Ø, {q0}, {q1}, {q0, q1}, } Q 0D = {q0} D = F D = { Qi Q Qi F } For en tilstand Qi={q1, q2, qk}, og symbol s : D (Qi,s) = (q1,s) (q2,s) (qk,s) (Hvis det ikke finnes noen sti fra Q 0D til Q i, kan vi fjerne Q i ). Observasjon: For et ord w=x 1 x 2 x m, vil D være i en (eller annen) tilstand Qi For samme w vil N kunne være i en tilstand q hvis og bare hvis q Qi Altså vil D og N anerkjenne de samme ordene. 18
-transisjoner og epsilontillukning For enhver tilstand q er epsilontillukningen, E(q), mengden av tilstander som nås fra q med transisjoner. Dette generaliserer til mengder av tilstander: E({q1, q2,, qi}) = E(q1) E(q2) E(qi) altså mengden av tilstander som kan nås fra minst en q1,, qn med transisjoner (Formelt er E(s) minste mengde s.a.: s E(s) Hvis t E(s) og u (t, ) så er u E(s) ) 19
Vis omforming til DFA 20
Fra NFA til DFA generelt Gitt en NFA: N= Q, q0,, F, Definer en DFA, D= Q D, Q0 D, D, F D, D ved: Q D = Pow(Q) = {Ø, {q0}, {q1}, {q0, q1}, } Q0 D = E( {q0}) D = F D = { Qi Q E(Qi) F } For en tilstand Qi={q1, q2, qk}, og symbol s : D (Qi,s) = E( (q1,s) (q2,s) (qk,s)) (Hvis det ikke finnes noen sti fra Q 0D til Q i, kan vi fjerne Q i ). Observasjon: For et ord w=x 1 x 2 x m, vil D være i en (eller annen) tilstand Qi For samme w vil N kunne være i en tilstand q hvis og bare hvis q Qi Altså vil D og N anerkjenne de samme ordene. 21
Fotnote: NFA en litt annen definisjon NFA, def. Pkt. 5 er en funksjon som til hver tilstand q Q og symbol s { } gir en delmengde (q,s) av Q. Vi vil bruke def.1 definisjon: i det formelle I Python impl. NFA, alternativ def, pkt. 5 er en funksjon som til hver tilstand q Q og symbolsekvens s * gir en delmengde (q,s) av Q. Alternativt D er en relasjon på Q * Q JFLAP bruker def 2. Strengt tatt gir def. 2 en større klasse av automater, men lett å vise at for ethvert språk definert av automat av def.2 finnes en automat av def. 1 (oppgave)
Hva har vi lært? Definisjon av ikkedeterministiske endelige tilstandsautomater (NFA) Hvordan disse definerer et språk Hvordan vi gitt en NFA kan konstruere en DFA for det samme språket 19. januar 2017 23
Formelle språk Et formelt språk består av: En endelig mengde A Ø En delmengde L A* Merk A* er alle mulige strenger over A er den tomme strengen (skrives også og ). Ø er det tomme språket Ø { } Eksempel 1 A = {a, b, c} A* = {, a, b, c, aa, ab, ac, ba,, cccc, } L ={x A* x inneholder nøyaktig to a er} Eksempel 2 A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} L ={x A* x begynner ikke med 0} {0} 19. januar 2017 24
Mengdeoperasjoner på språk Siden språk er mengder kan vi gjøre mengdeoperasjoner Hvis <A, L> og <A, M> er to språk, så er L M, unionen av L og M L M, snittet av L og M A* L, komplementet til L språk (Merk at L eller A* L, men ikke begge) Eksempel 6 A = {a, b, c,, æ, ø, å} L = mengden av norske ord. M = mengden av engelske ord. L M er ord som fins i begge språkene, = {i, ad, al, be, by,, cup, union, } A* L er alle bokstavsekvenser som ikke er norske ord= {bb, bbb, bbbb, } L M er alle bokstavsekvenser som er et ord i minst ett av de to språkene 19. januar 2017 25
Flere operasjoner Konkatenering Hvis s og t er to strenger skriver vi s t (eller bare st) for konkateneringen av dem Eks s= abc, t=ca, s t=abcca Hvis <A, L> og <A, M> er to språk, så er konkateneringen LM = {s t s L& t M} Kleene stjerne Hvis <A, L> er et språk, så er L* alle mulige konkateneringer av et endelig antall strenger fra L. Formelt: L* er minste mengde s.a.: L* Hvis s L* og t L så er s t L* 19. januar 2017 26
Regulære språk Definisjon av regulære språk 1. Språkene Ø { } { a } for alle a A er regulære 2. Hvis M og L er regulære, er L M LM L* regulære Regulære uttrykk Ø Beskriver språket L(Ø) = Ø L( ) = { } a, for alle a A L(a) = { a } Hvis R og S er regulære uttrykk: (R + S) L(R+S)=L(R) L(S) (R T) L(R T) = L(R)L(T) (R*) L(R*)=L(R)* Merk: R S, R S, R S brukes også for R+S og brukes også for Vi kan sløyfe ( og ) hvis det er entydig Vanlig med operatorpresedens: R* så RS så R+S 19. januar 2017 27
Observasjoner Alle endelige språk er regulære Eks L({abc, bb, ca}) = L(abc) L(bb) L(ca), og L(abc) = L(a)L(b)L(c), osv. Rett frem å se Hvis L og M er regulære, så er 1. L M 2. A* L regulære. Ikke trivielt. Trenger bevis 19. januar 2017 28
Regulære språk Følgende er ekvivalente: a) L kan beskrives med et regulært uttrykk. b) Det fins en NFA som anerkjenner L. c) Det fins en DFA som anerkjenner L. 1. Gjort ekvivalensen av (b) og (c). 2. Fra (a) til (b) forholdsvis greit å se. 3. Fra (b/c) til (a) er litt vanskeligere å vise Litt notasjon: Hvis R er et regulært uttrykk, er L(R) språket beskrevet av R. Hvis M er en FSA, så er L(M) språket anerkjent av M. 29
Lag automat for reg. uttrykk Eksempel: ((a+c)*b(a+c))* 30
2. Fra regulært uttrykk til NFA til til til JFLAP algoritme litt annerledes: legger til flere kanter 19. januar 2017 31
2. Fra regulært uttrykk til NFA Gitt et regulært uttrykk r Lag en automat N med to tilstander: starttilstand og en sluttilstand en kant fra start til slutt merket med r Omform kantene trinn for trinn som vist på forrige side Da vil L(N)=L(r) Observasjon: N vil være ikke-deterministisk med -kanter 19. januar 2017 32
3. Fra FSA til RE Hvorfor ikke bare reversere forrige algoritme? Kryssende løkker! 33
Legg til ny start og sluttilstand Fjern 1 og 1 tilstand 34
Ved fjerning av tilstand k: For alle tilstander i og j: new(i,j) := old(i,j) + old(i,k) old(k,k)*old(k,j) old(k,j) er uttrykket på kanten fra k til j 35
Fra DFA til RE: 1. Lag: 1. Ny begynnertilstand med -kant til original begynnertilstand 2. Ny sluttilstand med -kant fra alle originale sluttilstander. (Dette er eneste sluttilstand.) 2. Omform alle til 3. Hvis det ikke går kant fra tilstand i til tilstand k, så er det det samme som en kant merket med Ø. 4. Fjern i tur og orden alle indre tilstander. Ved fjerning av tilstand k: For alle gjenværende tilstander i og j: new(i,j) := old(i,j) + old(i,k) old(k,k)* old(k,j) Ikke nødvendig å kunne konstruksjonen. Men vite at det er mulig! 36
Observasjoner Hvis L og Mer regulære språk, så er 1. L M 2. A* L regulære. Bevis for 2: Fra ekvivalensen finnes en DFA a1 s.a. L=L(a1) Så sist at da finnes en DFA a2 s.a. A*-L = L(a2) Fra ekvivalensen følger det at A*-L er regulært Oppgave: Vis (1) tilsvarende. 19. januar 2017 37
Hva har vi lært? At DFA, NFA og regulære uttrykk definerer de samme språkene: de regulære språkene Hvordan vi gitt et regulært uttrykk kan konstruere en NFA for samme språk, og deretter en DFA for språket (Kjennskap til hvordan en DFA kan omformes til et regulært uttrykk, men ikke forventet å gjøre dette.) 19. januar 2017 38