Løsningsforslg til Oligtorisk oppgve INF1800 Logikk og eregnrhet Høsten 008 Alfred Brtterud Oppgve 1 Vi hr lfetet A = {} og språkene L 1 = {s s } L = {s s inneholder minst tre forekomster v } L 3 = {s s er et prtll} OBS: Husk t vi kn finne utllige regulære uttrykk for det smme språket. Nedenfor oppgir vi ett eller to lterntiver; dersom du hr skrevet noe nnet kn du se etter om gruppelærer hr gitt noen kommentr på din olig. Det kn godt være riktig selv om det vviker fr løsningene gitt her. () Finn et regulært uttrykk R slik t L(R) = L 1 : Her trenger vi å lge et uttrykk som eskriver lle strenger over lfetet, foruten. ( + )( + ) og ( + ) ( + ) er egge riktige svr. Først hr vi ( + ) som gir lle strengene i språket; L(( + ) ) = L( + ) = (L() L()) = ({} {}) = {} = {,,,,,,,,...} Legger vi til ( + ) forn eller k er vi kvitt ; det spiller ingen rolle hvilken vi velger fordi fr lgeren for regulære uttrykk hr vi RR = R R så ( + )( + ) = ( + ) ( + ) () Finn et regulært uttrykk R slik t L(R) = L : Her er det viktig å merke seg t vi ikke re er ute etter de strengene som inneholder delstrengen (mnge hr gjort den feilen), men lle strenger som inneholder minst tre er. Vi kn gjøre slik: ( + ) ( + ) ( + ) ( + ) men det kn også skrives litt enklere, med tnke på t vi skl lge en DFA senere, der vi må h determinisme for : ( + ) 1
Her legger vi ltså re et vilkårlig ntll er mellom de tre første ene; siden vi må h tre forekomster v må det finnes tre første forekomster v. Til slutt legger vi på hv som helst. () Finn et regulært uttrykk R slik t L(R) = L 3 : Vi må ygge opp strengen v pr, nærmere estemt lle mulige pr over lfetet; ( + + + ) som vi, med tnke på DFA en vi skl lge, kn forenkle til (( + )( + )) (d) Gi en deterministisk endelig tilstndsutomt som gjenkjenner L 1 : strt 1 (e) Gi en deterministisk endelig tilstndsutomt som gjenkjenner L : strt 1 3 4 Her vil de tre -kntene representere de første tre forekomstene v i input-strengen. (f) Gi en deterministisk endelig tilstndsutomt som gjenkjenner L 3 : strt 1 Oppgve Forenkle uttrykket ( ) + ( ) ved å ruke lgeriske likheter. Legg merke til t det eneste som skiller uttrykkene er rekkefølgen på og inne i prentesene. Eller gjerne også ( ) + ( ) = ( ) + ( + ) ved (R S ) = (R + S) = ( ) + ( + ) ved R + S = S + R = ( ) + ( ) ved (R S ) = (R + S) = ( ) ved R + R = R = ( + ) ved (R S ) = (R + S)
Oppgve 3 Vi hr følgende NFA gitt ved trnsisjonstell: strt 0 1 Vi kunne også ttt med som egen tilstnd, men det er ikke nødvendig siden vi ikke krever determinisme v denne utomten. () Vi ruker lgoritmen for å gå fr NFA til regulært uttrykk. Det er ikke et krv i oppgven å ruke lgoritmen, men hvis mn lærer seg den vil mn være sikker på å finne riktig løsning: 1. Lg ny strt- og stopptilstnd: strt S 0 1 A. Vi skl hele tiden sjekke om det går to knter fr en tilstnd til en nnen. I så fll skl vi slå smmen kntene, og dersom vi hdde R over den ene og S over den ndre setter vi R + S over den nye knten. Vi egynner nå å fjerne tilstnder, men holder øye med dette hele tiden. 3. Fjern tilstnd 0, og lg nye knter new(i, j) fr hver tilstnd i som hr en vei til en tilstnd j kun vi 0. Vi hr ruker formelen for nye knter fr ok, der 0 er stt inn for k, new(i, j) = old(i, j) + old(i, 0)old(0, 0) old(0, j). Vi hr her to veier som går vi 0 : S 0 1 og 0 1. Vi får d to nye knter: new(s, 1) = old(s, 1) + old(s, 0)old(0, 0) old(0, 1) = + old(s, 0)old(0, 0) old(0, 1) old(s, 1) = = + old(0, 0) old(0, 1) old(s, 0) = = + old(0, 1) old(0, 0) = = + old(0, 1) = = + = 3
Altså for S 1 og for 1 får vi: new(, 1) = old(, 1) + old(, 0)old(0, 0) old(0, 1) = + old(, 0)old(0, 0) old(0, 1) old(, 1) = = + old(0, 0) old(0, 1) old(, 0) = = + old(0, 1) old(0, 0) = = + old(0, 1) = = + = Dette gir følgende ilde strt S 1 A OBS: Dette er ikke lenger en NFA, fordi vi hr knter med regulære uttrykk over, i stedet for okstver i lfetet. 4. Vi fjerner tilstnd 1 på smme måte og får: strt S A Her hr vi fått en ny løkke i tilstnd fordi det gikk en vei fr til vi 1 som le fjernet. Dermed hr vi to knter fr til som nå må slås smmen (her kn vi forenkle uttrykket litt, men det gjør vi til slutt): + strt S A 5. Til slutt fjerner vi tilstnd : strt S ( + ) A Og sitter igjen med det regulære uttrykket ( + ) ( ) Som kn forkortes til fordi + = ( + ) = () Vi ruker lgoritmen for å gå fr NFA til DFA. Igjen er det ikke noe krv i oppgven om å ruke en estemt lgoritme, men når vi gjør det vet vi t vi kommer i mål. Husk definisjonen v λ-lukning: λ(s) = {x x kn nåes fr S kun vi } {S}. Dette lir ltså en mengde, siden vi må h med lle tilstnder vi kn nå med fr S, gjerne vi ndre tilstnder, ikke re direkte. 4
1. Ny strttilstnd er λ-lukningen v den gmle strttilstnden, ltså λ(0) = 0, 1,. D skl vi finne lle trnsisjonene gitt ved T D (D for deterministisk) fr den nye strttilstnden. L T N (s, x) være trnsisjonsfunksjonen slik den står for NFA en. Vi hr d t Så lngt hr vi ltså dette: T D (0, 1,, ) = λ(t N (0, )) λ(t N (1, )) λ(t N (, )) = λ(0) λ() λ() = λ(0) = {0, 1, } strt {1,,3} Husk t det som står inne i tilstnden re er et nvn. Her indikerer det t denne tilstnden lir en kominsjon v tilstndene 1, og 3 fr NFA en. 3. Vi går videre og sjekker hv i strttilstnden gir: T D ({0, 1, }, ) = λ(t N (0, )) λ(t N (1, )) λ(t N (, )) Vi koler til den nye tilstnden og får = λ() λ(1) λ() = λ(1) som vi regner ut til = {1, } ved å se på NFA en strt {0, 1, } {1, } 4. For i strttilstnden får vi: T D ({0, 1, }, ) = λ(t N (0, )) λ(t N (1, )) λ(t N (, )) = λ() λ({0, }) = λ({0, }) som lir = λ(0) λ() = {0, 1, } = {0, 1, } Vi får ltså en ny løkke fr {0, 1, } {0, 1, }, som vi slår smmen med den løkken vi hr for., strt {0, 1, } {1, } 5
5. Vi er ferdige med strttilstnden, så vi går til {1, } og finner trnsisjonene derfr. T D ({1, }, ) = λ(t N (1, )) λ(t N (, )) = λ() λ() = Siden vi skl h determinisme må vi lge en tilstnd som lir en slgs Søppelhåndtering :, strt {0, 1, } {1, } 6. Videre ser vi hv gir i {1, }: T D ({1, }, ) = λ(t N (1, )) λ(t N (, )) = λ(1) λ() = {1, }, strt {0, 1, } {1, } 7. Så regner vi ut hv gir i {1, }: T D ({1, }, ) = λ(t N (1, )) λ(t N (, )) = λ() λ({0, }) = λ(0) λ() = {0, 1, } {} = {0, 1, }, strt {0, 1, } {1, } 6
8. Til slutt finner vi hv henholdsvis og gir i. Vi hr ingen knter fr i den opprinnelige utomten, så T D (, δ) = λ(t N (, δ) = λ() For δ = og. Dette gir tre nye løkker, som vi slår smmen til en: =, strt {0, 1, } {1, }, Til sist ngir vi hvilke tilstnder som er ksepterende. Det er lle nye tilstnder som inneholder en v de ksepterende tilstnder fr den NFA en vi egynte med. I vårt tilfelle lir dette lle ortsett fr. Vi hr ltså gått fr denne NFA en: strt 0 1 Til denne DFA en vi lgoritmen for NFA DFA:, strt {0, 1, } {1, }, 7