[NFA:n, jo­ka sal­lii en­sin a:ta, sit­ten b:tä,
sit­ten c:tä ku­va]

Teh­tä­vä:
NFA:n muun­ta­mi­nen DFA:ksi

Ly­hyt Math­Check-oh­je (uu­teen vä­li­leh­teen)

Täs­sä teh­tä­väs­sä ker­ra­taan epä­de­ter­mi­nis­tis­ten ää­rel­lis­ten au­to­maat­tien pe­rus­kä­sit­tei­tä ja muun­ne­taan epä­de­ter­mi­nis­ti­siä ää­rel­li­siä au­to­maat­te­ja de­ter­mi­nis­ti­sik­si. Teh­tä­vän DFA-pe­rus­asioi­ta tu­lee ol­la teh­ty, kos­ka siel­lä käy­dään lä­pi täl­le teh­tä­väl­le vält­tä­mät­tö­miä esi­tie­to­ja.

  1. NFA:n mää­ri­tel­mä
  2. Muun­nok­sen ma­te­ma­tiik­kaa
  3. Muun­nos­har­joi­tuk­sia
  4. Lo­puk­si

NFA:n mää­ri­tel­mä

Mää­ri­tel­mä Epä­de­ter­mi­nis­ti­nen ää­rel­li­nen au­to­maat­ti eli NFA tar­koit­taa vii­sik­koa (Q, Σ, Δ, , F), jon­ka osat to­teut­ta­vat seu­raa­vat eh­dot:

NFA on siis muu­ten sa­man­lai­nen kuin DFA, mut­ta osit­tai­sen funk­tion δ pai­kal­la on re­laa­tio Δ. Sa­na ”re­laa­tio” tar­koit­taa mi­tä ta­han­sa jouk­koa A, jo­ka to­teut­taa eh­don muo­toa AA1 × … × An. Sen al­kiot esi­te­tään muo­dos­sa (a1, …, an), ja pä­tee a1A1, …, anAn. Niin­pä il­maus Δ ⊆ Q × (Σ ∪ {ε}) × Q tar­koit­taa, et­tä Δ on jouk­ko kol­mi­koi­ta (q, a, q’), mis­sä (il­mai­se sa­nal­li­ses­ti) q on täl­lai­nenti­la olen­to, a on täl­lai­nenmerk­ki tai ε olen­to ja q’ on täl­lai­nenti­la olen­to. Ku­vas­sa (q, a, q’) piir­re­tään näinnuo­le­na, jo­ka al­kaa ti­las­ta q ja päät­tyy ti­laan q’, ja jon­ka var­rel­le a on kir­joi­tet­tu.

Kos­ka Δ on jouk­ko, hy­vin piir­re­tys­sä ku­vas­sa ei ole kah­ta kaar­ta, jot­ka al­ka­vat sa­mas­ta ti­las­ta, ovat sa­man­ni­mi­set (mo­lem­pien var­rel­le on kir­joi­tet­tu sa­ma merk­ki tai mo­lem­pien var­rel­le on kir­joi­tet­tu ε), ja päät­ty­vät sa­maan ti­laan.. Jos Q = {1, 2} ja Σ = {a, b, c, d}, niin kaa­ria on vä­hin­tään näin mon­ta0 ja enin­tään näin mon­ta2 ⋅ (4 + 1) ⋅ 2 = 20.

Vaik­ka DFA:n δ on ta­pa­na esit­tää eri sym­bo­lil­la kuin NFA:n Δ, sil­le­kin pä­tee δ ⊆ Q × (Σ ∪ {ε}) × Q. DFA ei kui­ten­kaan ole sa­ma asia kuin NFA, kos­ka sil­le pä­te­vät nä­mä• Kaa­ren ni­me­nä ei voi ol­la ε.
• Sa­mas­ta ti­las­ta sa­mal­la ni­mel­lä läh­tee enin­tään yk­si kaa­ri.
li­sä­ra­joi­tuk­set.

Niin­pä jo­kai­nen DFA on NFA. Täl­lai­nen sa­no­jen käyt­tö on hie­man omi­tuis­ta: se on sa­man­lais­ta kuin jos sa­not­tai­siin, et­tä jo­kai­nen epä­ai­to maa­laus on ai­to maa­laus. Täl­lai­sek­si sa­nas­to on kui­ten­kin va­kiin­tu­nut. Si­tä­pait­si ei­kös jo­kai­nen epä­luu­lo ole luu­lo? Suo­men­kie­li­kään ei siis ole täs­sä täy­sin joh­don­mu­kai­nen. Ma­te­ma­tii­kas­sa on muu­ta­kin sa­mal­la ta­val­la kum­mal­lis­ta kie­len­käyt­töä. Esi­mer­kik­si jo­kai­nen osit­tai­nen funk­tio on täy­si funk­tio.

Päin­vas­tai­nen ei pä­de: ei ole niin, et­tä jo­kai­nen NFA on DFA. Piir­rä mah­dol­li­sim­man pie­ni NFA, jo­ka ei ole DFA. vas­taus[yk­si­ti­lai­sen ε-kaa­rel­li­sen ää­rel­li­sen au­to­maa­tin ku­va]

Jo­kai­nen NFA, jos­sa on vain yk­si ti­la ja jon­ka kaar­ten ni­mis­sä ei esiin­ny ε, on DFA täs­tä syys­täSa­mas­ta ti­las­ta sa­mal­la ni­mel­lä läh­tee enin­tään yk­si kaa­ri, kos­ka mah­dol­li­sia kär­ki­pään ti­lo­ja on vain yk­si..

[NFA:n, jo­ka sal­lii en­sin a:ta, sit­ten b:tä,
sit­ten c:tä ku­va] DFA:il­la q =σ⇒ q’ tar­koit­taa, et­tä on ole­mas­sa pol­ku q:sta q’:uun, jon­ka kaar­ten ni­met muo­dos­ta­vat merk­ki­jo­non σ. NFA:il­la ti­lan­ne on si­kä­li mo­ni­mut­kai­sem­pi, et­tä ε-kaa­ret ei­vät tuo­ta merk­ke­jä pol­kua vas­taa­vaan merk­ki­jo­noon. Esi­mer­kik­si ku­van NFA:lla pä­tee 1 =bbd⇒ 4 po­lun 1ε2b2b2ε3ε4d4 an­sios­ta. Po­lun pi­tuus voi siis ol­la suu­rem­pi kuin po­lun tuot­ta­man merk­ki­jo­non pi­tuus. Jat­koa var­ten an­nam­me ku­van NFA:lle ni­men a*b*c*. Se on myös ruu­dun oi­keas­sa ala­nur­kas­sa.

Se­kä DFA:n et­tä NFA:n ta­pauk­ses­sa σ kuu­luu au­to­maa­tin hy­väk­sy­mään kie­leen jos ja vain jos on ole­mas­sa al­ku­ti­las­ta jo­hon­kin lop­pu­ti­laan vie­vä pol­ku, jon­ka kaar­ten ni­mien jo­no ε:t pois jä­tet­ty­nä on σ. NFA:n hy­väk­sy­mä kie­li on siis {σ ∈ Σ* | ∃ qF: =σ⇒ q}. Sa­ma kaa­va pä­tee DFA:n hy­väk­sy­mäl­le kie­lel­le.

Ol­koon qF ja q1 =ε⇒ q =ε⇒ q2. Voi­ko hy­väk­syt­ty kie­li muut­tua, jos q1 muu­te­taan lop­pu­ti­lak­si? vas­tausEi voi. Jo­kai­sel­la merk­ki­jo­nol­la σ, jol­la pää­see al­ku­ti­las­ta q1:een, pää­see al­ku­ti­las­ta q:hun pol­kua =σ⇒ q1 =ε⇒ q pit­kin. Se kuu­luu siis hy­väk­syt­tyyn kie­leen jo sil­loin kun q1 ei vie­lä ole lop­pu­ti­la. Voi­ko hy­väk­syt­ty kie­li muut­tua, jos q2 muu­te­taan lop­pu­ti­lak­si? vas­tausKyl­lä voi. Jos a*b*c*:ssä ti­la 4 muu­te­taan lop­pu­ti­lak­si, niin muun muas­sa d tu­lee uu­te­na hy­väk­syt­tyyn kie­leen.

Jos jo­kai­sel­le qQ pä­tee =ε⇒ q =ε⇒ , niin mi­kä on hy­väk­syt­ty kie­li? vih­jeJos (q, a, q’) on mi­kä ta­han­sa kaa­ri, niin teh­tä­vän ole­tuk­sen mu­kaan =ε⇒ q ja q’ =ε⇒ . Sik­si =a. vas­tausJos F = ∅, niin myös hy­väk­syt­ty kie­li on ∅. Jos F ≠ ∅, niin kie­li on Γ*, mis­sä Γ on ku­vas­sa esiin­ty­vien kaar­ten ni­mien jouk­ko ε pois­lu­kien. pe­rus­te­lu 1Jo­kai­sel­le NFA:lle pä­tee, et­tä jos F = ∅, niin myös hy­väk­syt­ty kie­li on ∅. Jos lop­pu­ti­lo­ja ei ole, niin mi­kään pol­ku ei vie lop­pu­ti­laan, jo­ten mi­tään merk­ki­jo­noa ei hy­väk­sy­tä. pe­rus­te­lu 2Jos F ≠ ∅, niin on ole­mas­sa lop­pu­ti­la. An­nam­me sen ni­mek­si qF. Teh­tä­vän ole­tuk­sen mu­kaan =ε⇒ qF. Jo­kai­nen a1a2an ∈ Γ* voi­daan hy­väk­syä po­lul­la, jo­ka vih­jeen mu­kaan kul­kee =a1 =a2 =an =ε⇒ qF. Vaik­ka voi­kin ol­la Σ ≠ Γ, mui­ta Σ*:n al­kioi­ta ei ole mu­ka­na seu­raa­vas­ta syys­tä. Jos merk­ki­jo­nos­sa esiin­tyy merk­ki, jol­la mi­kään kaa­ri ei ole mer­kit­ty, niin merk­ki­jo­non mu­kaan kul­ke­mi­nen epäon­nis­tuu vii­meis­tään sen koh­dal­la.

Pel­käs­tään ε-kaa­ris­ta muo­dos­tu­vat sil­mu­kat muo­dos­ta­vat eri­kois­ta­pauk­sen, jo­ka on otet­ta­va huo­mioon esi­mer­kik­si pump­paus­lem­maa kä­si­tel­täes­sä. Sel­lai­sen sil­mu­kan kier­tä­mi­nen tai kier­tä­mät­tä jät­tä­mi­nen ei muu­ta luet­tua merk­ki­jo­noa. Kaik­ki sil­mu­kan ti­lat voi­daan yh­dis­tää yh­dek­si ti­lak­si il­man, et­tä hy­väk­syt­ty kie­li muut­tuu. Tu­lee­ko tä­män yh­dis­te­tyn ti­lan ol­la lop­pu­ti­la? vas­tausYh­dis­te­tyn ti­lan tu­lee ol­la lop­pu­ti­la jos ja vain jos yk­si­kin sil­mu­kan ti­la on lop­pu­ti­la.

Muun­nok­sen ma­te­ma­tiik­kaa

Täs­sä lu­vus­sa ta­voit­tee­na on muun­taa NFA N = (QN, Σ, Δ, N, FN) DFA:ksi D = (QD, Σ, δ, D, FD), jo­ka hy­väk­syy sa­man kie­len. Tä­mä lu­ku ei eh­kä ole ihan help­po, jo­ten voit kat­soa sen suo­ri­te­tuk­si, jos koet op­pi­nee­si jo­tain uut­ta (ja tie­ten­kin myös jos sait sen teh­tyä). Pää­ta­voit­tee­na ei ole op­pia mi­ten muun­nos toi­mii, vaan mi­ten täl­lai­sia asioi­ta to­dis­te­taan. Sik­si to­dis­tus ete­nee huo­mat­ta­vas­ti pie­nem­min as­ke­lin kuin kir­jal­li­suu­des­sa on ta­pa­na, ja vä­lil­lä ker­ro­taan mik­si teh­dään niin kuin teh­dään.

Käy­täm­me ala­in­dek­se­jä N ja D osoit­ta­maan, kum­man au­to­maa­tin osis­ta kul­loin­kin pu­hum­me. Mo­lem­mil­la au­to­maa­teil­la on sa­ma aak­kos­to, jo­ten mer­kit­sem­me si­tä Σ em­me­kä ΣD ja ΣN. Sym­bo­lit Δ ja δ ei­vät tar­vit­se ala­in­dek­se­jä, kos­ka ne erot­tu­vat toi­sis­taan il­man­kin.

Tu­lok­se­na syn­ty­vän DFA:n D ti­lat ovat al­ku­pe­räi­sen NFA:n N ti­lo­jen jouk­ko­ja. Muun­nos on eh­kä hel­poin ym­mär­tää, jos jo­kai­sel­le σ ∈ Σ* otam­me käyt­töön mer­kin­nän qσ tar­koit­ta­maan nii­den N:n ti­lo­jen jouk­koa, joi­hin N:n al­ku­ti­las­ta pää­see σ:lla N:n kaa­ria pit­kin.

qσ = {qQN | N =σ⇒ q}

Muun­nok­sen tu­lok­sen osat voi­daan nyt il­mais­ta ly­hyil­lä kaa­voil­la. Nii­den si­säl­töä ava­taan kaa­vo­jen jäl­keen.

Merk­ki­jo­no­ja eli Σ*:n al­kioi­ta on ää­ret­tö­mäs­ti (pait­si jos Σ = ∅). Kaa­van QD = {qσ | σ ∈ Σ*} voi aja­tel­la käy­vän lä­pi ne kaik­ki ja tuot­ta­van jo­kai­sel­le niis­tä ti­lan. Ti­lo­ja ei kui­ten­kaan syn­ny ää­ret­tö­mäs­ti täs­tä syys­täEri merk­ki­jo­noil­le voi syn­tyä sa­mo­ja ti­lo­ja, eli voi ol­la qσ = qρ vaik­ka σ ≠ ρ.. Kos­ka tuo­tet­ta­vat ti­lat ovat QN:n osa­jouk­ko­ja, nii­tä voi syn­tyä enin­tään näin mon­ta2|QN|.

Ol­koon a merk­ki ja σ merk­ki­jo­no. Osan δ ym­mär­tä­mi­sek­si il­mai­sem­me qσa:n seu­raa­vas­ti: qσa on nii­den N:n ti­lo­jen jouk­ko, joi­hin pääs­tään qσ:n si­säl­tä­mis­tä ti­lois­ta pol­kua pit­kin, jos­sa on en­sin nol­la tai useam­pia ε-kaa­ria, sit­ten yk­si a-kaa­ri, ja lo­puk­si nol­la tai useam­pia ε-kaa­ria.

qσa = {qQN | ∃ q’ ∈ qσ: q’ =aq}

Tä­män kaa­van to­dis­ta­mi­sek­si pi­tää osoit­taa, et­tä jos qqσa, niin ∃ q’ ∈ qσ: q’ =aq ja päin­vas­toin. To­dis­tus on yk­sin­ker­tai­nen ja tyl­sä. Sii­nä ve­do­taan tois­tu­vas­ti qσ:n edel­lä ol­lee­seen mää­ri­tel­mään ja pa­ri ker­taa =a1an⇒:n mää­ri­tel­mään.

Ken­ties huo­ma­sit, et­tä juu­ri to­dis­ta­mam­me kaa­van oi­kea puo­li on mel­kein sa­man­lai­nen kuin δ(qD, a):n mää­ri­tel­män oi­kea puo­li. Muu­ta eroa ei ole kuin (il­mai­se se­kä sym­bo­li­na et­tä sa­nal­li­ses­ti) sii­nä mis­sä δ(qD, a):n mää­ri­tel­mäs­sä on tä­mäqD eli tuo­tet­ta­van DFA:n ti­la, qσa:n kaa­vas­sa on tä­mäqσ eli nii­den ti­lo­jen jouk­ko, jo­hon al­ku­pe­räi­ses­sä NFA:ssa pää­see σ:lla. Niin­pä jos qσ sat­tu­moi­sin on sel­lai­nen ti­la, jo­hon δ(qD, a):n mää­ri­tel­mää voi so­vel­taa, niin saam­me δ(qσ, a) = qσa. Voi­ko näin tyy­li­käs tu­los ol­la sat­tu­maa? vas­tausVoi, mut­ta ai­ka usein ei ole. Täl­lä­kään ker­taa ei ole. Mer­kin­nät py­ri­tään usein va­lit­se­maan si­ten, et­tä mer­kin­tö­jen vä­li­set suh­teet vas­taa­vat mer­kin­tö­jen tar­koit­ta­mien asioi­den vä­li­siä suh­tei­ta. Se hel­pot­taa päät­te­lyn seu­raa­mis­ta.

Mit­kä qσ ovat sel­lai­sia ti­lo­ja? Ti­lan qσ saa pan­na qD:n pai­kal­le δ(qD, a):ssa sil­lä qD:tä kos­ke­val­la eh­dol­la, mi­kä δ(qD, a):n mää­ri­tel­mäs­sä on sa­not­tu. Se on tä­mäqDQD. Täy­tyy siis ol­la qσQD.. Mit­kä qσ to­teut­ta­vat tä­män eh­don? vih­jeSen nä­kee QD:n mää­ri­tel­mäs­tä. vas­tausKaik­ki.

Täs­tä seu­raa, et­tä jos va­lit­sem­me D:n so­pi­vas­ti, niin D:ssä jo­kai­sel­le merk­ki­jo­nol­le σ pä­tee D =σ⇒ qσ. Se tar­koit­taa, et­tä aja­mal­la D:ssä σ:n saam­me sel­vil­le kaik­kien nii­den ti­lo­jen jou­kon, jois­sa N voi ol­la ajet­tuaan σ:n. Jot­ta tä­mä pä­ti­si kun σ = ε, täy­tyy ol­la D =ε⇒ qε. Kos­ka DFA:is­sa ei ole ε-kaa­ria, on DFA:is­sa voi­mas­sa sään­tö, et­tä jos q =ε⇒ q’, niin q’ = q. Ta­pauk­seen D =ε⇒ qε so­vel­let­tu­na tä­mä tar­koit­taa qε = D. Juu­ri näin­hän edel­lä va­lit­tiin.

Olem­me lu­van­neet, et­tä D =σ⇒ qσ, mut­ta em­me vie­lä ole to­dis­ta­neet si­tä. Nyt to­dis­tam­me. Ol­koon si­tä var­ten σ = a1a2an mi­kä ta­han­sa merk­ki­jo­no. Tar­vit­sem­me seu­raa­vaa pe­riaa­tet­ta, jo­ta mer­kit­sem­me (*): jos DFA:ssa q =σ⇒ q’ ja δ(q’, a) = q’’, niin qaq’’. Pe­riaat­teen pä­te­vyys seu­raa suo­raan pe­rus­mää­ri­tel­mis­tä. Se on help­po näh­dä pä­te­väk­si, kun muo­toi­lee sen sa­noik­si: Jos q:sta on σ:lla mer­kit­ty pol­ku q’:uun ja siel­tä on a-kaa­ri q’’:uun, niin yh­des­sä ne muo­dos­ta­vat σa:lla mer­ki­tyn po­lun q:sta q’’:uun..

Tä­mä päät­te­ly ete­nee siis mi­tä ta­han­sa merk­ki­jo­noa pit­kin merk­ki ker­ral­laan, kun­nes ko­ko merk­ki­jo­no on sen pii­ris­sä. Niin­pä se to­dis­taa jo­kai­sel­le merk­ki­jo­nol­le σ, et­tä D =σ⇒ qσ. Täl­lais­ta sa­man­lai­sil­la as­ke­lil­la pie­nes­tä suu­reen ete­ne­vää to­dis­tus­ta kut­su­taan in­duk­tio­to­dis­tuk­sek­si.

Ha­lu­sim­me, et­tä D hy­väk­syy sa­man kie­len kuin N. Sik­si jos σ vie N:ssä al­ku­ti­las­ta jo­hon­kin lop­pu­ti­laan, pi­tää sa­man ta­pah­tua D:ssä, eli qσ:n pi­tää ol­la lop­pu­ti­la. Jos σ ei vie N:ssä al­ku­ti­las­ta mi­hin­kään lop­pu­ti­laan, qσ ei saa ol­la lop­pu­ti­la. Mää­ri­tel­män­sä mu­kaan qσ on nii­den N:n ti­lo­jen jouk­ko, joi­hin N:ssä pää­see N:n al­ku­ti­las­ta σ:lla. Sik­si on help­po kat­soa qσ:sta, hy­väk­syy­kö N σ:n. Näin se käy.Kat­so­taan, si­säl­tää­kö qσ yh­tään N:n lop­pu­ti­laa, eli pä­tee­kö qσFN ≠ ∅. Edel­lä FD mää­ri­tel­tiin D:n nii­den ti­lo­jen qσ jouk­ko­na, joil­le tä­mä eh­to pä­tee. Ra­jaus D:n ti­loi­hin esi­tet­tiin näinRa­jau­dut­tiin nii­hin qσ, joil­le σ on merk­ki­jo­no. Se on QD:n mää­ri­tel­män mu­kaan täs­mäl­leen sa­ma jouk­ko kuin QD:n ti­lo­jen jouk­ko..

Vie­lä ei ole ihan val­mis­ta. Em­me ole to­dis­ta­neet, et­tä D on DFA. Täl­lais­ten tar­kas­ta­mi­nen on usein help­poa ja saa­te­taan il­man mai­nin­taa jät­tää lu­ki­jan teh­tä­väk­si. Sii­nä on vaa­ra­na, et­tä lo­pul­ta ku­kaan ei tar­kas­ta asiaa, ja se ei pi­dä­kään paik­kaan­sa.

DFA:n mää­ri­tel­mäs­sä ase­te­taan jo­kai­sel­le osal­le oma eh­to. Mit­kä ne eh­dot ovat ja mit­kä niis­tä olem­me edel­lä jo tar­kas­ta­neet?  QDQD on ää­rel­li­nen jouk­ko. Tä­män olem­me tar­kas­ta­neet.  ΣΣ on ää­rel­li­nen jouk­ko, jol­le pä­tee ε ∉ Σ. Täs­tä em­me ole pu­hu­neet, mut­ta se on hy­vin il­mei­nen. Se ol­koon räs­ti 1.  δδ on osit­tai­nen funk­tio jou­kol­ta QD × Σ jou­kol­le QD. Tä­tä em­me ole tar­kas­ta­neet. Se on niin vai­kea, et­tä kan­nat­taa teh­dä muut en­sin ja teh­dä tä­mä lo­puk­si räs­tei­nä 3 ja 4.  DDQD. Em­me eh­kä ole sa­no­neet tä­tä ai­van suo­raan, mut­ta se näh­dään hel­pos­ti to­dek­si. Tä­mä ol­koon räs­ti 2.  FDFDQD. Edel­lä pe­rus­tel­tiin, et­tä FD:n al­kiot ovat D:n ti­lo­ja.

Tar­kas­tam­me ne eh­dot, jot­ka ovat vie­lä tar­kas­ta­mat­ta. räs­ti 1Myös NFA:n mää­ri­tel­mäs­sä on sa­ma vaa­ti­mus, ja Σ on myös N:n aak­kos­to. Sik­si väi­te seu­raa sii­tä läh­tö­koh­das­tam­me, et­tä N on NFA. räs­ti 2Mää­ri­tel­tiin D = qε, qε on muo­toa qσ, ja QD on kaik­kien si­tä muo­toa ole­vien ti­lo­jen jouk­ko. räs­ti 3Edel­lä δ(qD, a) mää­ri­tel­tiin jo­kai­sel­le qDQD ja a ∈ Σ, jo­ten δ on funk­tio niil­tä jou­koil­ta mil­tä pi­tää­kin. Se on it­se asias­sa täy­si funk­tio, mut­ta se ei hait­taa, sil­lä ma­te­ma­tii­kas­sa jo­kai­nen täy­si funk­tio on osit­tai­nen funk­tio. räs­ti 4Myös δ:n tu­lok­sen pi­tää ol­la QD:n al­kio. Tä­mä seu­raa sii­tä, et­tä jos qDQD, niin QD:n mää­ri­tel­män vuok­si on ole­mas­sa jo­kin sel­lai­nen σ, et­tä qD = qσ. Olem­me osoit­ta­neet, et­tä δ(qσ, a) = qσa. Merk­ki­jo­non mää­ri­tel­mäs­tä seu­raa, et­tä jos σ ∈ Σ* ja a ∈ Σ, niin myös σa ∈ Σ*. Sik­si käyt­tä­mäl­lä QD:n mää­ri­tel­mäs­sä σa:ta näh­dään, et­tä δ:n tu­los eli qσa on QD:n al­kio.

Tä­män lu­vun alus­sa lu­pa­sim­me, et­tä D on DFA ja hy­väk­syy sa­man kie­len kuin N. Olem­me osoit­ta­neet mo­lem­mat.

Muun­nos­har­joi­tuk­sia

Nyt har­joit­te­lem­me muun­nok­sen te­ke­mis­tä. En­sin muun­nam­me NFA:n a*b*c* de­ter­mi­nis­ti­sek­si. Vas­taus ra­ken­ne­taan al­la vä­hän ker­ras­saan. Voit mil­loin vain ha­lu­tes­sa­si tes­ta­ta vas­taus­ta­si täs­sä. Al­ku­ti­lan ni­mi on an­net­tu val­miik­si ja mui­den ti­lo­jen ni­met saat va­li­ta va­paas­ti isois­ta kir­jai­mis­ta (ei ääk­kö­siä). Esi­mer­kik­si A ::= "" | aC | bB tar­koit­taa, et­tä A on lop­pu­ti­la ja sii­tä on a-kaa­ri C:hen ja b-kaa­ri B:hen. Aak­kos­toa ei il­moi­te­ta. Va­li­tet­ta­vas­ti Math­Check ei vie­lä osaa tar­kas­taa, et­tä vas­tauk­se­si on DFA, jo­ten se hy­väk­syy myös vää­riä vas­tauk­sia.

tai

Aak­kos­to on tä­mä{a, b, c, d}, ja sil­le ei ta­pah­du muun­nok­ses­sa mi­tään. Muo­dos­tam­me aluk­si ti­lan D, jo­ka tun­ne­taan myös täl­läqε merk­ki­jo­noa ala­in­dek­si­nä käyt­tä­väl­lä ni­mel­lä. Saam­me tu­lok­sek­si D = {1, 2, 3, 4}.

Seu­raa­vak­si va­lit­sem­me sen qD:ksi ja las­kem­me jo­kai­sel­le a ∈ Σ jou­kon {qQN | ∃ q’ ∈ qD: q’ =aq}.

δ(D, a) ={1, 2, 3, 4}
δ(D, b) ={2, 3, 4}
δ(D, c) ={3, 4}
δ(D, d) ={4}

Saim­me yh­den van­han ti­lan eli {1, 2, 3, 4} ja kol­me uut­ta ti­laa. Kun teem­me jo­kai­sel­le uu­del­le ti­lal­le sa­man­lai­sen las­kun, löy­däm­me vie­lä yh­den uu­den ti­lan. Kaik­kiaan saam­me seu­raa­van tau­lu­kon:

abcd
{1, 2, 3, 4}{1, 2, 3, 4}{2, 3, 4}{3, 4}{4}
{2, 3, 4}{2, 3, 4}{3, 4}{4}
{3, 4}{3, 4}{4}
{4}{4}

Lop­pu­ti­lo­ja ovat {1, 2, 3, 4}, {2, 3, 4} ja {3, 4}. Piir­ret­ty­nä lop­pu­tu­los näyt­tää täl­tä[a*b*c*:n hy­väk­sy­vän DFA:n ku­va] Tyh­jää jouk­koa vas­taa­va ti­la on tur­ha. Sii­hen tu­le­vat kaa­ret oli­vat tyl­siä piir­tää, kos­ka ti­laa oli niu­kas­ti!.

[NFA:n, jo­ka löy­tää merk­ki­jo­non abaa, ku­va] Ohei­nen NFA hy­väk­syy täs­mäl­leen ne merk­ki­jo­not, jot­ka lop­pu­vat abaa. Muun­na se DFA:ksi. Lop­pu­tu­lok­sen ti­lat il­mais­tu­na NFA:n ti­lo­jen osa­jouk­koi­na ovat {1}, {1, 2}, {1, 3}, {1, 2, 4} ja {1, 2, 5}. Piir­ret­ty­nä lop­pu­tu­los näyt­tää täl­tä[a*b*c*:n hy­väk­sy­vän DFA:n ku­va].

tai

An­na NFA, jo­ka hy­väk­syy täs­mäl­leen ne merk­ki­jo­not, jot­ka lop­pu­vat abaa ja jois­sa abaa ei esiin­ny muual­la kuin lo­pus­sa. Esi­mer­kik­si A ::= aA | aB | C tar­koit­taa, et­tä A:sta on a-kaa­ri A:han, a-kaa­ri B:hen ja ε-kaa­ri C:hen.

tai

Lo­puk­si

DFA:il­le ja NFA:il­le voi­daan teh­dä mui­ta­kin temp­pu­ja. Voi­daan muun muas­sa yh­dis­tää kak­si NFA:ta yh­dek­si, jon­ka hy­väk­sy­mä kie­li on al­ku­pe­räis­ten NFA:iden hy­väk­sy­mien kiel­ten leik­kaus. DFA:il­la ja NFA:il­la on käy­tän­nön kan­nal­ta hyö­dyl­li­nen ka­ve­ri ni­mel­tä sään­nöl­li­set lau­sek­keet (regular expression), jo­ka on help­po muun­taa NFA:ksi.