T-791001/1002 Tietojenkäsittelyteorin perusteet T/Y Hrri Hnpää Tietojenkäsittelyteorin lortorio, TKK Syksy 2006 Hrri Hnpää 1 Luento 0: Aiheen esittely j kurssin käytännöt Luento 1: temttisi peruskäsitteitä; merkkijonot j kielet Luento 2: Äärelliset utomtit Luento 3: ÄA:n minimointi; epädeterministiset ÄA:t Luento 4: Säännölliset lusekkeet j äärelliset utomtit Luento 5: Yhteydettömät kieliopit; säännölliset kieliopit Luento 6: Jäsennyspuut; LL(1)-kielioppien jäsennys Luento 7: Säännöllisten kielten pumppuslemm; Chomskyn normlimuoto; CYK-lgoritmi Luento 8: Pinoutomtit, yhteydettömien kielten pumppuslemm; Turingin kone Luento 9: Turingin koneen ljennuksi; joukkojen numeroituvuus Luento 10: Kieliluokt R j RE; universlinen Turingin kone Luento 11: Pysähtymisongelm; rtkemttomuus; Ricen luse Luento 12: Rjoittmttomt j yhteysherkät kieliopit; Chomskyn hierrki Hrri Hnpää 2 T 791001/1002 Tietojenkäsittelyteorin perusteet T/Y Introduction to Theoreticl Computer Science T/Y Wht cn one do with computer? This course divides roughly into three prts We exmine three models of computer, their power nd limittions, ie, the clsses of lnguges tht they cn decide It turns out tht ech clss of utomt corresponds to clss of grmmrs The clsses of utomt nd grmmrs re: 1 Finite stte utomt & regulr expressions 2 Pushdown utomt & context-free grmmrs 3 Turing mchines & unrestricted grmmrs The first teching period of the course (=Y version) covers finite stte utomt, regulr expressions nd context-free grmmrs The second period covers the rest Course versions T-791001 Introduction to Theoreticl Computer Science T is two-period course compulsory in the computer science curriculum It replces the old course T-79148, which is compulsory in mny specilistions of the pre-2005 telecommunictions engineering curriculum It is lso oligtory for students wishing to study theoreticl computer science s minor suject T-791002 Introduction to Theoreticl Computer Science Y is one-period course tht covers the most rodly useful tools in the re It is compulsory sic (P) course in the 2005 dt nd communictions engineering progrm Hrri Hnpää 3 Hrri Hnpää 4
Prcticl rrngements Registrtion: oligtory, y TOPI Lectures: Thu 14 16 T1, in Finnish y Hrri Hnpää Tutorils: once week, register y TOPI on 12-14 (period I only) on 14-16 (period I only) Tue 12-14 Tue 16-18 (in English) Wed 12-14 Wed 14-16 Computer exercises: oligtory, using WWW system Regis Course home pge: http://wwwtcshutfi/studies/t-791001/ Course newsgroup: opinnottiktkt on newstkyhutfi Plese sk (nd nswer!) your questions there! To pss the course 1 Pss the computer exercises efore tking the exm 2 After pssing the computer exercises tke the exm (exms typiclly in y, Aug, Oct, Dec, r) ximum score in exm is 60 for T course, 40 for Y course 3 There re 3 homework prolems week; you gin onus points for exm ccording to tle: # solved: 0 4 5 9 10 14 15 19 20 24 25 29 30 T-791001 2 1 +0 +1 +2 +3 +4 T-791002 1 +0 +1 +2 N/A 4 By completing the computer ssignments y 26 Oct 13:00, one cn ern onus of 2 points for the exm 5 inimum score for vrious grdes my vry However, with 30 points (T) or 20 points (Y) pssing is gurnteed Hrri Hnpää 5 Hrri Hnpää 6 Honour code Solve your computer ssignments yourself Solve tutoril prolems yourself or in smll groups ut do not tolerte free riders An honest try is etter thn copied model solution If someone sks for your help, do not give wy the prolem give little hint to point him/her in the right direction teril Lecture notes (in Finnish) nd solutions of demonstrtion exercises (in Finnish) re distriuted through Edit Recommended textook ichel Sipser, Introduction to the Theory of Computtion, PWS Pulishing 1997 (Supplementry for Finnish-speking students; likely necessry for non-finnish-speking students) Some dditionl mteril on the course WWW pge Hrri Hnpää 7 Hrri Hnpää 8
Tietojenkäsittelyteorin os-loj TIETOJENKÄSITTELYTEORIA temttinen oppi siitä, mitä tietokoneell on mhdollist tehdä j kuink tehokksti Trjo mtemttisi käsitteitä j menetelmiä tietojenkäsittelyjärjestelmien mllintmiseen j nlysointiin sekä selkeiden j tehokkiden rtkisujen ltimiseen Lskettvuusteori itä tietokoneell voi tehdä peritteess? Turing, Gödel, Church, Post (1930-luku); Kleene, rkov (1950-luku) Lskennn vtivuusteori itä tietokoneell voi tehdä käytännössä? Hrtmnis, Sterns (1960-luku); Cook, Levin, Krp (1970-luku); Ppdimitriou, Sipser, Håstd, Rzorov ym (1980-) Automtti- j kielioppiteori Tietojenkäsittelyjärjestelmien perustyyppien ominisuudet j kuvusformlismit Chomsky (1950-luku); Ginsurg, Greich, Rin, Slom, Schützenerger ym (1960-luku) Hrri Hnpää 9 Tietojenkäsittelyteorin os-loj Ohjelmien oikeellisuus Tietojenkäsittelyjärjestelmien mtemttisesti ekskti määrittely j oiken toiminnn verifiointi uut Dijkstr, Hore (1960-luku); nn, Pnueli, Scott ym (1970-) lgoritmien suunnittelu j nlyysi (Knuth, Hopcroft, Trjn ym) kryptologi (Rivest, Shmir, Adlemn ym) rinnkkisten j hjutettujen järjestelmien teori (Lmport, Lynch, ilner, Vlint ym) koneoppimisteori (Vlint ym) jne Tällä kurssill käsitellään lähinnä utomttej j kielioppej sekä hiemn lskettvuusteorin lkeit uit iheit käsitellään Tietojenkäsittelyteorin lortorion muill kursseill Hrri Hnpää 11 Hrri Hnpää 10 1 temttisi peruskäsitteitä 11 Joukot Joukko (engl set) on kokoelm lkioit Alkiot voidn ilmoitt joko luettelemll, esim ti jonkin säännön vull, esim S = {2,3,5,7,11,13,17,19} S = {p p on lkuluku, 2 p 20} Jos lkio kuuluu joukkoon A, merkitään A, päinvstisess tpuksess / A (Esim 3 S, 8 / S) Tärkeä erikoistpus on tyhjä joukko (engl empty set) /0, johon ei kuulu yhtään lkiot Hrri Hnpää 12
Jos joukon A kikki lkiot kuuluvt myös joukkoon B, snotn että A on B:n osjoukko (engl suset) j merkitään A B [Kirjllisuudess esiintyy myös merkintä A B] Jos A ei ole B:n osjoukko merkitään A B Siis esim {2,3} S, {1,2,3} S Trivilisti on voimss /0 A kikill A Joukot A j B ovt smt, jos niissä on smt lkiot, so jos on A B j B A Jos on A B, mutt A B, snotn että A on B:n ito osjoukko (engl proper suset) j merkitään A B Edellä olisi siis voitu myös kirjoitt {2,3} S j /0 A jos A /0 Joukon lkioin voi oll myös toisi joukkoj (tällöin puhutn usein joukkoperheestä ), esim X = {/0,{1},{2},{1,2}} Jonkin perusjoukon A kikkien osjoukkojen muodostm joukkoperhettä snotn A:n potenssijoukoksi (engl powerset) j merkitään P (A):ll; esim edellä on X = P ({1,2}) [Kosk n-lkioisen perusjoukon A potenssijoukoss on 2 n lkiot (HT), käytetään kirjllisuudess potenssijoukolle myös merkintää 2 A ] Huom, että A B jos j vin jos A P (B) Hrri Hnpää 13 Joukkoj voidn kominoid joukko-opertioill, joist tärkeimmät ovt: yhdiste (engl union) A B = {x x A ti x B}, esim {1,2,3} {1,4} = {1,2,3,4} leikkus (engl intersection) A B = {x x A j x B}, esim {1,2,3} {1,4} = {1} erotus (engl difference) A B = {x x A j x / B}, Hrri Hnpää 14 Joukko-opertioit koskevt tietyt lskulit, joist tärkeimmät ovt yhdisteen j leikkuksen liitännäisyys: A (B C) = (A B) C, j vihdnnisuus: sekä näiden osittelulit: A B = B A, A (B C) = (A B) C A B = B A A (B C) = (A B) (A C), A (B C) = (A B) (A C) esim {1,2,3} {1,4} = {2,3} [Erotukselle käytetään myös merkintää A \ B] Hrri Hnpää 15 Hrri Hnpää 16
Jos kikki trksteltvt joukot ovt jonkin yhteisen universlijoukon U osjoukkoj, snotn erotust U A joukon A komplementiksi (U:n suhteen) j merkitään Ā:ll Yhdiste-, leikkus- j komplementointiopertioit yhdistävät tärkeät ns de orgnin kvt: A B = Ā B, A B = Ā B Lisäksi joukkojen erotus voidn esittää leikkuksen j komplementoinnin vull seurvsti: Jos joukkoperheen A jäsenet on indeksoitu, esim A = {A 1,A 2,A 3,}, niin yhdisteelle j leikkukselle voidn käyttää lyhennemerkintöjä [ A i = A 1 A 2 A 3 i 1 j \ A i = A 1 A 2 A 3 Indeksien ei trvitse oll edes luonnollisi lukuj, vn indeksijoukkon voi oll mikä thns joukko I Tällöin käytetään merkintöjä i 1 A = {A i i I} A B = A B j [ A i, i I \ A i i I Hrri Hnpää 17 Hrri Hnpää 18 12 Reltiot j funktiot Olkoot A j B joukkoj Alkioiden A j B järjestettyä pri (engl ordered pir) merkitään (, ) Huom, että joukkoin on in {,} = {,}, mutt jos, niin järjestettyinä prein on (,) (,) Joukkojen A j B krteesinen tulo (engl Crtesin product) määritellään A B = {(,) A j B}, esim {1,2,3} {1,4} = {(1,1),(1,4),(2,1),(2,4),(3,1),(3,4)} Reltio R joukolt A joukolle B on krteesisen tulon A B osjoukko: R A B Jos (,) R, niin merkitään myös R j snotn että lkio on reltioss (suhteess) R lkioon Tätä infix-merkintää käytetään vrsinkin silloin, kun reltion nimenä on jokin erikoismerkki, esim,,, Jos reltion R lähtöjoukko (engl domin) A j mlijoukko (engl rnge) B ovt smt, so R A A, snotn että R on reltio joukoss A Hrri Hnpää 19 Hrri Hnpää 20
Reltion R A B käänteisreltio (engl inverse reltion) on reltio R 1 B A, R 1 = {(,) (,) R} Jos R A B j S B C ovt reltioit, niin niiden yhdistetty reltio (engl composite reltion) R S A C määritellään: R S = {(,c) B se (,) R,(,c) S} Vrsinkin jos joukot A j B ovt äärellisiä, reltiot R A B voi oll hvinnollist trkstell suunnttun verkkon t grfin, jonk solmuin ovt joukkojen A j B lkiot j solmust A on kri ( nuoli ) solmuun B, jos j vin jos (,) R Olkoon esimerkiksi joukoss A = {,, c, d} määritelty reltio R A A, Reltion R grfiesitys on R = {(,),(,c),(,d),(c,d),(d,d)} Reltion R R grfiesitys puolestn on c d c d Hrri Hnpää 21 Hrri Hnpää 22 Reltio f A B on funktio, jos kukin A on reltioss f täsmälleen yhden B knss Tällöin käytetään yleisten reltiomerkintöjen sijn tvllisesti merkintöjä f : A B j f() = Funktioit koskee kikki mitä edellä yleisesti on todettu reltioist, mutt historillisist syistä funktioiden yhdistäminen merkitään toisin päin kuin yleisten reltioiden: jos f : A B j g : B C ovt funktioit, niin niiden yhdistetty funktio määritellään kvll (g f)() = g(f()), so reltioin g f = {(,c) B se f() =,g() = c} Olkoon f : A B funktio f on surjektio (engl onto mp), jos jokinen B on jonkin A kuv, so jos f(a) = B f on injektio (engl one-to-one mp), jos kikki A kuvutuvt eri lkioille, so jos f() f( ) f on ijektio, jos se on sekä injektio että surjektio, so jos jokinen B on yhden j vin yhden A kuv Hrri Hnpää 23 Hrri Hnpää 24
13 Ekvivlenssireltiot Ekvivlenssireltiot ovt mtemttisesti täsmällinen muotoilu sille yleiselle idelle, että oliot ovt keskenään smnkltisi jonkin kiinnostvn ominisuuden X suhteen Ominisuuteen X perustuv ekvivlenssireltio ositt trksteltvien olioiden joukon ekvivlenssiluokkiin, jotk vstvt ominisuuden X eri rvoj (Kääntäen mielivltinen olioiden joukon ositus Π määrää tietyn strktin smnkltisuusominisuuden, nim sen että oliot ovt smnkltisi jos ne sijoittuvt smn osituksen Π luokkn) Osoittutuu, että yleinen smnkltisuusreltion ide voidn kiteyttää seurviin kolmeen ominisuuteen ääritelmä 11 Reltio R A A on 1 refleksiivinen, jos R A; 2 symmetrinen, jos R R, A; 3 trnsitiivinen, jos R,Rc Rc,,c A ääritelmä 12 Reltio R A A, jok toteutt edelliset ehdot 1 3 on ekvivlenssireltio Alkion A ekvivlenssiluokk (reltion R suhteen) on R[] = {x A Rx} Ekvivlenssireltioit merkitään usein R:n sijn lkioiden smnkltisuutt korostvill symoleill,, tms Hrri Hnpää 25 Esim Olkoon A = {kikki 1900-luvull syntyneet ihmiset} j R voimss, jos henkilöillä j on sm syntymävuosi Tällöin R on selvästi ekvivlenssi, jonk ekvivlenssiluokt koostuvt keskenään smn vuonn syntyneistä henkilöistä Luokki on 100 kpplett, j strktisti ne vstvt 1900-luvun vuosi 1900,,1999 Hrri Hnpää 26 Lemm 13 Olkoon R A A ekvivlenssi Tällöin on kikill, A voimss: R[] = R[] joss R Tod Helppo; sivuutetn Lemm 14 Olkoon R A A ekvivlenssi Tällöin R:n ekvivlenssiluokt muodostvt A:n osituksen erillisiin epätyhjiin osjoukkoihin, so: R[] /0 kikill A; A = S A R[]; jos R[] R[], niin R[] R[] = /0, kikill, A Tod Helppo; sivuutetn Kääntäen jokinen perusjoukon A ositus erillisiin epätyhjiin luokkiin A i, i I, määrää vstvn ekvivlenssireltion: j kuuluvt smn luokkn A i Hrri Hnpää 27 Hrri Hnpää 28
15 Induktiopäättely Olkoon P(k) jokin luonnollisten lukujen ominisuus Jos on voimss: 1 P(0) j 2 kikill k 0: P(k) P(k + 1), niin P(n) on tosi kikill n N Esimerkki Väite Kikill n N on voimss kv P(n) : (1 + 2 + + n) 2 = 1 3 + 2 3 + + n 3 Todistus 1 Perustpus: P(0) : 0 2 = 0 (jtkuu) Hrri Hnpää 29 Hrri Hnpää 30 2 Induktioskel: Oletetn, että nnetull k 0 kv P(k) : (1 + 2 + + k) 2 = 1 3 + 2 3 + + k 3 on voimss Tällöin on myös: (1 + 2 + + k + (k + 1)) 2 = (1 + + k) 2 + 2(1 + k)(k + 1) + (k + 1) 2 = 1 3 + + k 3 k(k + 1) + 2 (k + 1) + (k + 1) 2 2 = 1 3 + + k 3 + k(k + 1) 2 + (k + 1) 2 = 1 3 + + k 3 + (k + 1) 3 On siis todettu, että kvn P(k) totuudest seur kvn P(k + 1) totuus, so että P(k) P(k + 1), kikill k 0 Luonnollisten lukujen induktioperitteen 19 nojll voidn nyt päätellä, että kv P(n) on voimss kikill n N 16 Akkostot, merkkijonot j kielet Automttiteori diskreetin signlinkäsittelyn perusmllit j -menetelmät ( diskreettien I/O-kuvusten yleinen teori) 1011 Input Automton Output Automtin käsite on mtemttinen strktio Yleisellä tsoll suunniteltu utomtti voidn toteutt eri tvoin: esim sähköpiirinä, meknisen litteen ti (tvllisimmin) tietokoneohjelmn B Hrri Hnpää 31 Hrri Hnpää 32
Peruskäsitteitä j merkintöjä Tällä kurssill keskitytään pääosin utomtteihin, joiden: 1 syötteet ovt äärellisiä, diskreettejä merkkijonoj 2 tulokset ovt muoto hyväksy / hylkää ( syöte OK / syöte ei kelp ) Yleistyksiä: äärettömät syötejonot ( rektiiviset järjestelmät, Büchi-utomtit) funktioutomtit ( oore- j ely-tilkoneet, Turingin funktiokoneet) Akkosto (engl lphet, voculry): äärellinen, epätyhjä joukko lkeismerkkejä t symoleit Esim: inäärikkosto {0, 1}; ltinlinen kkosto {A,B,,Z} erkkijono (engl string): äärellinen järjestetty jono jonkin kkoston merkkejä Esim: 01001, 0000 : inäärikkoston merkkijonoj; TKTP, XYZZY : ltinlisen kkoston merkkijonoj tyhjä merkkijono (engl empty string) Tyhjässä merkkijonoss ei ole yhtään merkkiä; sitä voidn merkitä ε:llä erkkijonon x pituus x on sen merkkien määrä Esim: 01001 = 5, TKTP = 4, ε = 0 Hrri Hnpää 33 Hrri Hnpää 34 erkkijonojen välinen perusopertio on ktentio eli jonojen peräkkäin kirjoittminen Ktention opertiomerkkinä käytetään joskus selkeyden lisäämiseksi symoli Esim KALA KUKKO = KALAKUKKO; jos x = 00 j y = 11, niin xy = 0011 j yx = 1100; kikill x on xε = εx = x; kikill x, y, z on (xy)z = x(yz); kikill x, y on xy = x + y Akkoston Σ kikkien merkkijonojen joukko merkitään Σ :ll Esimerkiksi jos Σ = {0,1}, niin Σ = {ε,0,1,00,01,10,} ielivltist merkkijonojoukko A Σ snotn kkoston Σ (formliksi) kieleksi (engl forml lnguge) Hrri Hnpää 35 Hrri Hnpää 36
Automtit j formlit kielet Olkoon utomtti, jonk syötteet ovt jonkin kkoston Σ merkkijonoj, j tulos on yksinkertisesti muoto syöte hyväksytään / syöte hylätään (erk lyhyesti 1/0) erkitään :n syötteellä x ntm tulost (x):llä j :n hyväksymien syötteiden joukko A :llä, so A = {x Σ (x) = 1} Snotn, että utomtti tunnist (engl recognises) kielen A Σ Automttiteorin (yksi) ide: utomtin rkenne heijstuu kielen A ominisuuksiss Kääntäen: olkoon nnettun jokin toivottu I/O-kuvus f : Σ {0,1} Trkstelemll kieltä A f = {x Σ f(x) = 1} sdn vihjeitä siitä, millinen utomtti trvitn kuvuksen f toteuttmiseen Hrri Hnpää 37 Vkiintuneit merkintöjä Em mtemttisille käsitteille käytetyt merkinnät ovt peritteess vpsti vlittviss, mutt esityksen ymmärrettävyyden prntmiseksi on tpn pitäytyä tietyissä käytännöissä Seurvt merkintätvt ovt vkiintuneet: Akkostot: Σ, Γ, (isoj kreikklisi kirjimi) Esim inäärikkosto Σ = {0, 1} Akkoston koko (ti yleisemmin joukon mhtvuus): Σ Alkeismerkit:,, c, (pieniä lkupään ltinlisi kirjimi) Esim: Olkoon Σ = { 1,, n } kkosto; tällöin Σ = n erkkijonot: u, v, w, x, y, (pieniä loppupään ltinlisi kirjimi) Hrri Hnpää 38 erkkijonojen ktentio: x y ti vin xy erkkijonon pituus: x Esimerkkejä: Tyhjä merkkijono: ε c = 3; olkoon x = 1 m, y = 1 n ; tällöin xy = m + n erkkijono, joss on n kpplett merkkiä : n Esimerkkejä: n = }{{} ; n kpl i j c k = i + j + k erkkijonon x toisto k kert: x k Esimerkkejä: () 2 = ; x k = k x Akkoston Σ kikkien merkkijonojen joukko: Σ Esim: {,} = {ε,,,,,,,,,} erkkijonoinduktio Automttiteoriss tehdään usein konstruktioit induktioll merkkijonon pituuden suhteen Tämä trkoitt, että määritellään ensin toiminto tyhjän merkkijonon ε (ti joskus yksittäisen kkosmerkin) tpuksess Sitten oletetn, että toiminto on määritelty kikill nnetun pituisill merkkijonoill u j esitetään, miten se tällöin määritellään yhtä merkkiä pitemmillä merkkijonoill w = u Esimerkki Olkoon Σ mielivltinen kkosto erkkijonon w Σ käänteisjono (engl reversl) w R määritellään induktiivisesti säännöillä: 1 ε R = ε; 2 jos w = u, u Σ, Σ, niin w R = u R Hrri Hnpää 39 Hrri Hnpää 40
Induktiivist ( rekursiivist ) määritelmää voidn tietenkin käyttää lskujen perustn; esim: (011) R = 1 (01) R = 1 (1 0 R ) = 11 (0 ε R ) = 110 ε R = 110 ε = 110 Tärkeämpää on kuitenkin konstruktioiden ominisuuksien todistminen määritelmää noudttelevll induktioll Esimerkki: Väite Olkoon Σ kkosto Kikill x,y Σ on voimss (xy) R = y R x R Todistus Induktio merkkijonon y pituuden suhteen 1 Perustpus y = ε: (xε) R = x R = ε R x R 2 Induktioskel: Olkoon y muoto y = u, u Σ, Σ Oletetn, että väite on voimss merkkijonoill x, u Tällöin on: (xy) R = (xu) R = (xu) R [R:n määritelmä] = (u R x R ) [induktio-oletus] = ( u R )x R [ :n liitännäisyys] = (u) R x R [R:n määritelmä] = y R x R Hrri Hnpää 41 Hrri Hnpää 42 ÄÄRELLISET AUTOAATIT JA SÄÄNNÖLLISET KIELET Esimerkki 1: Khviutomtti 20 c 20 c 10 c 10 c 10 c 10 c 0,00 0,10 0,20 0,30 0,40 21 Tilkviot j tiltulut Trkstelln luksi tietojenkäsittelyjärjestelmiä, joill on vin äärellisen mont mhdollist til Tällisen järjestelmän toimint voidn kuvt äärellisenä utomttin t äärellisenä tilkoneen (engl finite utomton, finite stte mchine) Äärellisillä utomteill on useit vihtoehtoisi esitystpoj: tilkviot, tiltulut, Hrri Hnpää 43 20 c 10 20 c 20 c > 0,4 Em tilkvion esittämä utomtti rtkisee päätösongelmn riittävätkö nnetut rht khvin ostmiseen? 10 20 c Äärellisiä utomttej voidn yleensäkin käyttää yksinkertisten päätösongelmien rtkisujen mllintmiseen Automttimllist on muitkin kuin inäärivsteisten järjestelmien kuvmiseen trkoitettuj versioit (ns oore- j ely-utomtit), mutt niitä ei käsitellä tällä kurssill Hrri Hnpää 44
Tilkvioiden merkinnät: Esimerkki 2: C-kielen etumerkittömät reliluvut q q 0 q f Automtin til nimeltä q Alkutil Lopputil: utomtti hyväksyy syötejonon, joss se jonon loppuess on tällisess tilss digit q 0 digit q 1 q 2 digit q 3 exp exp exp q 7 q 4 digit digit q 6 digit digit q 1 q 2 Syötemerkin iknsm siirtymä tilst q 1 tiln q 2 +,- digit q 5 Käytetyt lyhenteet: digit = {0,1,,9}, exp = {E,e} Hrri Hnpää 45 Hrri Hnpää 46 Äärellisen utomtin esitys tiltulun: utomtin uusi til vnhn tiln j syötemerkin funktion Esim relilukuutomtin tiltulu: digit exp + q 0 q 1 q 7 q 1 q 1 q 2 q 4 q 2 q 3 q 4 q 3 q 3 q 4 q 4 q 6 q 5 q 5 q 5 q 6 q 6 q 6 q 7 q 3 K: itä tiltulun tyhjät pikt trkoittvt? V: Tiltulun tyhjät pikt, ti vstvsti tilkvion puuttuvt kret, kuvvt utomtin virhetilnteit Jos utomtti ohjutuu tälliseen pikkn, syötejono ei kuulu utomtin hyväksymään joukkoon uodollisesti utomtiss jtelln olevn erityinen virhetil, jot ei vin selkeyden vuoksi merkitä näkyviin Hrri Hnpää 47 Hrri Hnpää 48
Esim relilukuutomtin täydellinen kvioesitys olisi: j relilukuutomtin täydellinen tuluesitys olisi: digit digit exp + digit q 0 q 1 exp, +,- error +,- digit, exp,,+,- exp q 0 q 1 q 7 error error error q 1 q 1 q 2 q 4 error error q 6 q 6 error error error error error error error error error error Hrri Hnpää 49 22 Äärellisiin utomtteihin perustuv ohjelmointi Annetun äärellisen utomtin pohjlt on helppo lti utomtin toimint vstv ohjelm Esim relilukuutomttiin perustuv syötejonon syntksitestus: Hrri Hnpää 50 #include <stdioh> #include <ctypeh> min() { int q, c; q = 0; while ((c = getchr())!= \n ) switch (q) { cse 0: if (isdigit(c)) q = 1; else if (c == ) q = 7; else q = 99; rek; cse 1: if (isdigit(c)) q = 1; else if (c == ) q = 2; else if (c == E c == e ) q = 4; else q = 99; rek; Hrri Hnpää 51 Hrri Hnpää 52
} cse 99: rek; } if (q == 2 q == 3 q == 6) printf("syöte ON REAALILUKU\n"); else printf("syöte EI OLE REAALILUKU\n"); Semnttisten toimintojen liittäminen äärellisiin utomtteihin Esimerkki Khdeksnjärjestelmän lukuj tunnistv utomtti j siihen perustuv syöteluvun rvonmääritys ( muuttminen kymmenjärjestelmään ) +,- d q 0 q 1 q 2 Lyhennysmerkintä d = {0,1,,7} d d Hrri Hnpää 53 Hrri Hnpää 54 Pelkän syntksitestin toteutus: #include <stdioh> #include <ctypeh> min() { int q, c; q = 0; while ((c = getchr())!= \n ) { switch (q) { cse 0: if (c == + c == - ) q = 1; else if ( 0 <= c && c <= 7 ) q = 2; else q = 99; rek; } cse 1: if ( 0 <= c && c <= 7 ) q = 2; else q = 99; rek; cse 2: if ( 0 <= c && c <= 7 ) q = 2; else q = 99; rek; cse 99: rek; } } if (q == 2) printf("syöte OK\n"); else printf("virheellinen LUKU\n"); Hrri Hnpää 55 Hrri Hnpää 56
Täydennys syöteluvun rvon lskevill opertioill ( luvun muuttminen kymmenjärjestelmään ): #include <stdioh> int min(void) { int q, c; int sgn, vl; /* SE: sgn = etumerkki */ sgn = 1; vl = 0; /* SE: vl = itseisrvo */ q = 0; while ((c = getchr())!= \n ) { switch (q) { cse 0: if (c == + ) q = 1; else if (c == - ) { sgn = -1; /* SE */ q = 1; } else if ( 0 <= c && c <= 7 ) { vl = c - 0 ; /* SE */ q = 2; } else q = 99; rek; Hrri Hnpää 57 Hrri Hnpää 58 cse 1: if ( 0 <= c && c <= 7 ) { vl = c - 0 ; /* SE */ q = 2; } else q = 99; rek; cse 2: if ( 0 <= c && c <= 7 ) { vl = 8 * vl + (c - 0 ); /* SE */ q = 2; } else q = 99; rek; cse 99: rek; } } } if (q == 2) { printf("luvun ARVO ON %d\n", sgn*vl);/*se*/ exit(0); } else { printf("virheellinen SYÖTE\n"); /* SE */ exit(1); } Hrri Hnpää 59 Hrri Hnpää 60
23 Äärellisen utomtin käsitteen formlisointi eknistinen mlli: syötenuh: nuhpää: ohjusyksikkö: i n p δ u q 1 q 2 Äärellinen utomtti koostuu äärellistilisest ohjusyksiköstä, jonk toimint säätelee utomtin siirtymäfunktio δ, sekä merkkipikkoihin jetust syötenuhst j nämä yhdistävästä nuhpäästä, jok kullkin hetkellä osoitt yhtä syötenuhn merkkiä Hrri Hnpää 61 q 0 t Automtin toimint : Automtti käynnistetään erityisessä lkutilss q 0, siten että trksteltv syöte on kirjoitettun syötenuhlle j nuhpää osoitt sen ensimmäistä merkkiä Yhdessä toimint-skeless utomtti lukee nuhpään kohdll olevn syötemerkin, päättää ohjusyksikön tiln j luetun merkin perusteell siirtymäfunktion mukisesti ohjusyksikön uudest tilst, j siirtää nuhpäätä yhden merkin eteenpäin Automtti pysähtyy, kun viimeinen syötemerkki on käsitelty Jos ohjusyksikön til tällöin kuuluu erityiseen (hyväksyvien) lopputilojen joukkoon, utomtti hyväksyy syötteen, muuten hylkää sen Automtin tunnistm kieli on sen hyväksymien merkkijonojen joukko Hrri Hnpää 62 Esimerkki Täsmällinen muotoilu: Äärellinen utomtti on viisikko = (Q,Σ,δ,q 0,F), missä Q on utomtin tilojen äärellinen joukko; Σ on utomtin syötekkosto; δ : Q Σ Q on utomtin siirtymäfunktio; q 0 Q on utomtin lkutil; F Q on utomtin (hyväksyvien) lopputilojen joukko Relilukuutomtin formli esitys: = ({q 0,,q 7,error},{0,1,,9,,E,e,+,-}, δ,q 0,{q 2,q 3,q 6 }), missä δ on kuten iemmin tulukoss; esim δ(q 0,0) = δ(q 0,1) = = δ(q 0,9) = q 1, δ(q 0,) = q 7, δ(q 0,E) = δ(q 0,e) = error, δ(q 1,) = q 2, δ(q 1,E) = δ(q 1,e) = q 4, jne Hrri Hnpää 63 Hrri Hnpää 64
Tilnne (q,w) joht suorn tilnteeseen (q,w ), merkitään (q,w) (q,w ), Automtin tilnne on pri (q,w) Q Σ ; erityisesti utomtin lkutilnne syötteellä x on pri (q 0,x) Intuitio: q on utomtin til j w on syötemerkkijonon jäljellä olev, so nuhpäästä oikelle sijitsev os jos on w = w ( Σ) j q = δ(q,) Tällöin snotn myös, että tilnne (q,w ) on tilnteen (q,w) välitön seurj Intuitio: utomtti ollessn tilss q j lukiessn nuhll olevn merkkijonon w = w ensimmäisen merkin siirtyy tiln q j siirtää nuhpäätä yhden skelen eteenpäin, jolloin nuhlle jää merkkijono w Jos utomtti on yhteydestä selvä, reltiot voidn merkitä yksinkertisesti (q,w) (q,w ) Hrri Hnpää 65 Hrri Hnpää 66 Tilnne (q,w) joht tilnteeseen (q,w ) t tilnne (q,w ) on tilnteen (q, w) seurj, merkitään (q,w) (q,w ), jos on olemss välitilnnejono (q 0,w 0 ), (q 1,w 1 ),, (q n,w n ), n 0, siten että (q,w) = (q 0,w 0 ) (q 1,w 1 ) (q n,w n ) = (q,w ) Erikoistpuksen n = 0 sdn (q,w) (q,w) millä thns tilnteell (q, w) Jälleen, jos utomtti on yhteydestä selvä, merkitään yksinkertisesti (q,w) (q,w ) Automtti hyväksyy merkkijonon x Σ, jos on voimss muuten hylkää x:n (q 0,x) (q f,ε) jollkin q f F; Toisin snoen: utomtti hyväksyy x:n, jos sen lkutilnne syötteellä x joht, syötteen loppuess, johonkin hyväksyvään lopputilnteeseen Automtin tunnistm kieli määritellään: L() = {x Σ (q 0,x) (q f,ε) jollkin q f F} Hrri Hnpää 67 Hrri Hnpää 68
24 Äärellisten utomttien minimointi Esimerkki: merkkijonon 025E2 käsittely relilukuutomtill: (q 0,025E2) (q 1,25E2) (q 2,25E2) (q 3,5E2) (q 3,E2) (q 4,2) (q 6,ε) Kosk q 6 F = {q 2,q 3,q 6 }, on siis 025E2 L() Voidn osoitt, että jokisell äärellisellä utomtill on yksikäsitteinen ekvivlentti (so smn kielen tunnistv) tilmäärältään minimlinen utomtti Annetun äärellisen utomtin knss minimointi (ekvivlentin minimiutomtin määrittäminen) on sekä käytännössä että teoreettiselt knnlt tärkeä tehtävä: siten voidn esimerkiksi selvittää, tunnistvtko kksi nnettu utomtti smn kielen Tehtävä voidn rtkist seurvss esitettävällä tehokkll menetelmällä enetelmän perusiden on pyrkiä smistmn keskenään selliset syötteenä nnetun utomtin tilt, joist lähtien utomtti toimii täsmälleen smoin kikill merkkijonoill Hrri Hnpää 69 Olkoon äärellinen utomtti = (Q,Σ,δ,q 0,F) Ljennetn :n siirtymäfunktio yksittäisistä syötemerkeistä merkkijonoihin: jos q Q, x Σ, merkitään δ (q,x) = se q Q, joll (q,x) (q,ε) :n tilt q j q ovt ekvivlentit, merkitään jos kikill x Σ on q q, δ (q,x) F jos j vin jos δ (q,x) F; toisin snoen, jos utomtti q:st j q :st lähtien hyväksyy täsmälleen smt merkkijonot Hrri Hnpää 71 Hrri Hnpää 70 Lievempi ekvivlenssiehto: tilt q j q ovt k-ekvivlentit, merkitään jos kikill x Σ, x k, on q k q, δ (q,x) F jos j vin jos δ (q,x) F; toisin snoen, jos mikään enintään k:n pituinen merkkijono ei pysty erottmn tiloj toisistn Ilmeisesti on: (i) q 0 q joss sekä q että q ovt lopputiloj ti kumpikn ei ole; j (ii) q q joss q k q kikill k = 0,1,2, Esitettävä minimointilgoritmi perustuu syötteenä nnetun utomtin tilojen k-ekvivlenssiluokkien hienontmiseen (k + 1)-ekvivlenssiluokiksi kunnes svutetn täysi ekvivlenssi Hrri Hnpää 72 (1)
Algoritmi IN-FA [Äärellisen utomtin minimointi] Syöte: Äärellinen utomtti = (Q,Σ,δ,q 0,F) Tulos: :n knss ekvivlentti äärellinen utomtti, joss on minimimäärä tiloj enetelmä: 1 [Turhien tilojen poisto] Poist :stä kikki tilt, joit ei void svutt tilst q 0 millään syötemerkkijonoll 2 [0-ekvivlenssi] Osit :n jäljelle jääneet tilt khteen luokkn: ei-lopputiloihin j lopputiloihin 3 [k-ekvivlenssi (k + 1)-ekvivlenssi] Trkst, siirrytäänkö smn ekvivlenssiluokkn kuuluvist tiloist smoill merkeillä in smnluokkisiin tiloihin Jos kyllä, lgoritmi päättyy j minimiutomtin tilt vstvt :n tilojen luokki uuss tpuksess hienonn ositust jkmll kunkin äskeistä ehto rikkovn ekvivlenssiluokn tilt uusiin, pienempiin ekvivlenssiluokkiin sen mukn, mihin luokkn kustkin tilst siirrytään milläkin kkosell, j toist koht 3 uudell osituksell Hrri Hnpää 73 Hrri Hnpää 74 On helppo osoitt, että skelen 3 (k + 1):nnen suorituskerrn (k = 0,1,) luss kksi til kuuluu smn muodostetun osituksen luokkn, jos j vin jos ne ovt k-ekvivlenttej Tästä seur, että lgoritmin suorituksen päättyessä, kun ositus ei enää hienone, muodostuneet tilluokt ovt täsmälleen :n tilojen -ekvivlenssiluokt (vrt ominisuus (1ii)) Algoritmin suoritus päättyy välttämättä in, sillä kullkin skelen 3 suorituskerrll, viimeistä lukuunottmtt, vähintään yksi tilluokk ositetn pienemmäksi Luse 21 Algoritmi IN-FA muodost nnetun äärellisen utomtin knss ekvivlentin äärellisen utomtin, joss on minimimäärä tiloj Tämä utomtti on tilojen nimeämistä pitsi yksikäsitteinen Esimerkki Trkstelln seurvn utomtin minimointi: Viheess 1 utomtist poistetn til 6, johon ei päästä millään merkkijonoll Viheess 2 ositetn utomtin tilt 1 5 ei-lopputiloihin (luokk I) j lopputiloihin (luokk II), j trkstetn siirtymien käyttäytyminen osituksen suhteen: 1 2 3 4 5 6 I : 1 2,I 3,I 2 4,II 2,I 3 2,I 3,I II : 4 3,I 5,II 5 1,I 4,II Hrri Hnpää 75 Hrri Hnpää 76
Luokss I on nyt khdentyyppisiä tiloj ({1,3} j {2}), joten ositust täytyy hienont j trkst siirtymät uuden osituksen suhteen: 1 2 3 4 5 6 I : 1 2,II 3,I 3 2,II 3,I II : 2 4,III 2,II III : 4 3,I 5,III 5 1,I 4,III Nyt kunkin luokn sisältämät tilt ovt keskenään smnlisi, joten minimointilgoritmi päättyy Sdun minimiutomtin tilkvio on seurv: I II III Hrri Hnpää 77 25 Epädeterministiset äärelliset utomtit Epädeterministiset utomtit ovt muuten smnlisi kuin deterministiset, mutt niiden siirtymäfunktio δ ei liitä utomtin vnhn tiln j syötemerkin muodostmiin preihin yksikäsitteistä uutt til, vn joukon mhdollisi seurvi tiloj Epädeterministinen utomtti hyväksyy syötteensä, jos jokin mhdollisten tilojen jono joht hyväksyvään lopputiln Vikk epädeterministisiä utomttej ei voi sellisinn toteutt tietokoneohjelmin, ne ovt tärkeä päätösongelmien kuvusformlismi Hrri Hnpää 78 Esimerkki Epädeterministinen utomtti, jok tutkii sisältääkö syötejono osjono : q 0 q 1 q 2 q 3 Automtti hyväksyy esim syötejonon, kosk sen on mhdollist edetä seurvsti: (q 0,) (q 0,) (q 1,) (q 2,) (q 3,ε) Automtti voisi päätyä myös hylkäävään tiln: (q 0,) (q 0,) (q 0,) (q 0,) (q 0,ε), mutt tällä ei ole merkitystä voidn jtell, että utomtti os ennust j vlit in prhn mhdollisen vihtoehdon Hrri Hnpää 79 Hrri Hnpää 80
ääritelmä 22 Epädeterministinen äärellinen utomtti on viisikko = (Q,Σ,δ,q 0,F), missä Q on äärellinen tilojen joukko; Σ on syötekkosto; δ : Q Σ P (Q) on utomtin joukkorvoinen siirtymäfunktio; q 0 Q on lkutil; F Q on (hyväksyvien) lopputilojen joukko q 0 q 1 q 2 q 3 Esimerkiksi -utomtin siirtymäfunktio: q 0 {q 0,q 1 } {q 0 } q 1 /0 {q 2 } q 2 {q 3 } /0 q 3 {q 3 } {q 3 } Tulukost nähdään, että esimerkiksi δ(q 0,) = {q 0,q 1 } j δ(q 1,) = /0 Hrri Hnpää 81 Epädeterministisen utomtin tilnne (q, w) voi joht suorn tilnteeseen (q,w ), merkitään (q,w) (q,w ), jos on w = w ( Σ) j q δ(q,) Snotn myös, että tilnne (q,w ) on tilnteen (q,w) mhdollinen välitön seurj Usemmn skelen mittiset tilnnejohdot, merkkijonojen hyväksyminen j hylkääminen ym käsitteet määritellään smoin snoin kuin deterministisillä utomteill Kosk yhden skelen johdon määritelmä kuitenkin nyt on toinen, niiden sisältö muovutuu hiemn eriliseksi Hrri Hnpää 82 Luse 22 Olkoon A = L() jonkin epädeterministisen äärellisen utomtin tunnistm kieli Tällöin on olemss myös deterministinen äärellinen utomtti, joll A = L( ) Todistus Olkoon A = L(), = (Q,Σ,δ,q 0,F) Todistuksen iden on lti deterministinen äärellinen utomtti, jok simuloi :n toimint kikiss sen kullkin hetkellä mhdollisiss tiloiss rinnkkin Formlisti: utomtin tilt vstvt :n tilojen joukkoj: missä = (ˆQ,Σ,ˆδ, ˆq0, F), ˆQ = P (Q) = {S S Q}, ˆq 0 = {q 0 }, F = {S Q S sisältää jonkin q f F}, [ ˆδ(S,) = δ(q,) q S Hrri Hnpää 83 Hrri Hnpää 84
q 0 q 1 q 2 q 3 q 0 q 0,q 1 q 0,q 2 q 0,q 1,q 3 q 0,q 2,q 3 Esimerkiksi -utomttiin sovellettun em konstruktio tuott seurvn deterministisen utomtin (vin lkutilst svutettvt tilt esitetty): q 0 q 0,q 1 q 0,q 2 q 0,q 1,q 3 q 0,q 3 q 0,q 2,q 3 q 0,q 3 inimoimll j nimeämällä tilt uudelleen tämä yksinkertistuu muotoon: s 0 s 1 s 2 s 3, Hrri Hnpää 85 Hrri Hnpää 86 [Todistus jtkuu] Trkstetn, että utomtti todell on ekvivlentti :n knss, so että L( ) = L() ääritelmien mukn on: j x L() joss (q 0,x) (q f,ε) jollkin q f F x L( ) joss ({q0 },x) (S,ε), missä S sis jonkin q f F Osoitetn siis, että kikill x Σ j q Q on: (q 0,x) (q,ε) joss ({q 0 },x) (S,ε) j q S (2) Väite (2): (q 0,x) (q,ε) joss ({q 0 },x) (S,ε) j q S Väitteen (2) todistus tehdään induktioll merkkijonon x pituuden suhteen (i) Tpus x = 0: (q 0,ε) (q,ε) joss q = q 0 ; smoin ({q 0 },ε) (S,ε) joss S = {q 0 } Hrri Hnpää 87 Hrri Hnpää 88
Väite (2): (q 0,x) (q,ε) joss ({q 0 },x) (S,ε) j q S (ii) Induktioskel: Olkoon x = y; oletetn, että väite (2) pätee y:lle Tällöin: (q 0,x) = (q 0,y) (q,ε) joss q Q se (q 0,y) (q,) j (q,) (q,ε) joss q Q se (q 0,y) q Q se ({q 0 },y) ({q 0 },y) ({q 0 },y) ({q 0 },y) ({q 0 },y) (q,ε) j (q,) (q,ε) joss (indol) (S,ε) j q S j q δ(q,) joss (S,ε) j q S se q δ(q,) joss (S,ε) j q S q S δ(q,) = ˆδ(S,) joss (S,) j q ˆδ(S,) = S joss (S,) j (S,) (S,ε) j q S joss ({q 0 },x) = ({q 0 },y) (S,ε) j q S ε-utomtit Jtkoss trvitn vielä yksi äärellisten utomttien mllin ljennus: epädeterministinen äärellinen utomtti, joss sllitn ε-siirtymät Tällisell siirtymällä utomtti tekee epädeterministisen vlinnn eri jtkovihtoehtojen välillä lukemtt yhtään syötemerkkiä Esimerkiksi kieli {, } voitisiin tunnist seurvll ε-utomtill: ε ε Hrri Hnpää 89 Formlisti: ε-utomtti on viisikko Hrri Hnpää 90 Lemm 24 = (Q,Σ,δ,q 0,F), missä siirtymäfunktio δ on kuvus δ : Q (Σ {ε}) P (Q) uut määritelmät ovt kuten tvllisill epädeterministisillä äärellisillä utomteill, pitsi suorn tilnnejohdon määritelmä: ε-utomttien tpuksess reltio (q,w) (q,w ) on voimss, jos on (i) w = w ( Σ) j q δ(q,); ti (ii) w = w j q δ(q,ε) Olkoon A = L() jollkin ε-utomtill Tällöin on olemss myös ε-siirtymätön epädeterministinen utomtti, joll A = L( ) Todistus Olkoon = (Q,Σ,δ,q 0,F) jokin ε-utomtti Automtti toimii muuten ivn smoin kuin, mutt se hrpp ε-siirtymien yli suorittmll kustkin tilst lähtien vin ne idot siirtymät, jotk ovt siitä käsin jotkin ε-siirtymäjono pitkin svutettviss Hrri Hnpää 91 Hrri Hnpää 92
Formlisti määritellään nnetun tiln q Q ε-sulkeum ε (q) utomtiss kvll ε (q) = {q Q (q,ε) (q,ε)}, Poistmll edellisen konstruktion mukisesti ε-siirtymät ε-utomtist sdn tvllinen epädeterministinen utomtti, esim: so joukkoon ε (q) kuuluvt kikki ne utomtin tilt, jotk ovt svutettviss tilst q pelkillä ε-siirtymillä Automtin siirtymäsäännöt voidn nyt kuvt seurvsti: missä = (Q,Σ,ˆδ,q 0, F), ˆδ(q,) = [ q ε (q) δ(q,); 1 ε ε 2 3 ε 4 5 6 ε ε 7 8 9 1 4 6 8 F = {q Q ε (q) F /0} Hrri Hnpää 93 26 SÄÄNNÖLLISET LAUSEKKEET Automttimlleist poikkev tp kuvt yksinkertisi kieliä Olkoot A j B kkoston Σ kieliä Perusopertioit: Yhdiste: A B = {x Σ x A ti x B}; Ktentio: AB = {xy Σ x A, y B}; Potenssit: { A 0 = {ε}, A k = AA k 1 = {x 1 x k x i A i = 1,,k} (k 1); Sulkeum t Kleenen tähti : Hrri Hnpää 94 ääritelmä 23 Akkoston Σ säännölliset lusekkeet määritellään induktiivisesti säännöillä: 1 /0 j ε ovt Σ:n säännöllisiä lusekkeit; 2 on Σ:n säännöllinen luseke kikill Σ; 3 jos r j s ovt Σ:n säännöllisiä lusekkeit, niin (r s), (rs) j r ovt Σ:n säännöllisiä lusekkeit; 4 muit Σ:n säännöllisiä lusekkeit ei ole A = [ k 0 = {x 1 x k k 0, x i A i = 1,,k} A k Hrri Hnpää 95 Hrri Hnpää 96
Akkoston {, } säännöllisiä lusekkeit: r 1 = (()), r 2 = (), Kukin Σ:n säännöllinen luseke r kuv kielen L(r), jok määritellään: L(/0) = /0; L(ε) = {ε}; L() = {} kikill Σ; L((r s)) = L(r) L(s); L((rs)) = L(r)L(s); L(r ) = (L(r)) r 3 = ( ), r 4 = (( ())) Lusekkeiden kuvmt kielet: L(r 1 ) = ({}{}){} = {}{} = {}; L(r 2 ) = {} = {ε,,,,} = {() i i 0}; L(r 3 ) = {}({}) = {,,,,} = { i i 0}; L(r 4 ) = ({}{,}) = {,} = {ε,,,,,} = {x {,} kutkin -kirjint x:ssä seur 1 ti 2 -kirjint } Hrri Hnpää 97 Hrri Hnpää 98 Sulkumerkkien vähentämissääntöjä: Operttoreiden prioriteetti: Esimerkki: C-kielen etumerkittömät reliluvut numer = (dd d dd )(e(+ ε)dd ε) (dd e(+ ε)dd ), Yhdiste- j tulo-opertioiden ssositiivisuus: L(((r s) t)) = L((r (s t))) L(((rs)t)) = L((r(st))) peräkkäisiä yhdisteitä j tuloj ei trvitse sulutt Käytetään tvllisi kirjsimi, mikäli seknnuksen vr merkkijonoihin ei ole Yksinkertisemmin siis: missä d on lyhennemerkintä lusekkeelle d = (0 1 2 3 4 5 6 7 8 9) j e on lyhennemerkintä lusekkeelle e = (E e) Usein merkitään myös lyhyesti rr r + Esim: (d + d d + )(e(+ ε)d + ε) (d + e(+ ε)d + ) r 1 =, r 2 = (), r 3 =, r 4 = (( )) Hrri Hnpää 99 Hrri Hnpää 100
ääritelmä 24 Säännöllisten lusekkeiden sieventäminen Säännöllisillä kielillä on yleensä useit vihtoehtoisi kuvuksi, esim: Kieli on säännöllinen, jos se voidn kuvt säännöllisellä lusekkeell Σ = L(( ) ) = L(( ) ) = L( ( ) ( ) ) ääritelmä Säännölliset lusekkeet r j s ovt ekvivlentit, merk r = s, jos L(r) = L(s) Lusekkeen sieventäminen = yksinkertisimmn ekvivlentin lusekkeen määrittäminen Säännöllisten lusekkeiden ekvivlenssitestus on epätrivili, mutt peritteess meknisesti rtkev ongelm Hrri Hnpää 101 Hrri Hnpää 102 Sievennyssääntöjä: r (s t) = (r s) t r(st) = (rs)t r s = s r r(s t) = rs rt (r s)t = rt st r r = r r /0 = r εr = r /0r = /0 r = ε r r r = (ε r) ikä thns säännöllisten lusekkeiden tosi ekvivlenssi voidn joht näistä lskuleist, kun lisätään päättelysääntö: jos r = rs t, niin r = ts, edellyttäen että ε / L(s) Khden lusekkeen ekvivlenssin totemiseksi knntt usein päätellä erikseen kummnkin kuvmn kielen sisältyminen toiseen erkitään lyhyesti: r s, jos L(r) L(s) Tällöin siis r = s joss r s j s r Esimerkki: todetn, että ( ) = ( ) 1 Selvästi ( ) ( ), kosk ( ) kuv kikki kkoston {, } merkkijonoj 2 Kosk selvästi ( ), niin myös ( ) ( ) Hrri Hnpää 103 Hrri Hnpää 104
27 ÄÄRELLISET AUTOAATIT JA SÄÄNNÖLLISET KIELET Luse 23 Jokinen säännöllinen kieli voidn tunnist äärellisellä utomtill Todistus Seurvn klvon induktiivisen konstruktion vull voidn mielivltisen säännöllisen lusekkeen r rkennett seurten muodost ε-utomtti r, joll L( r ) = L(r) Tästä utomtist voidn poist ε-siirtymät Lemmn 24 mukisesti, j trvittess voidn syntyvä epädeterministinen utomtti determinisoid Luseen 22 konstruktioll Esitettävästä konstruktiost on syytä huomt, että muodostettviin ε-utomtteihin tulee in yksikäsitteiset lku- j lopputil, eikä minkään os-utomtin lopputilst lähde eikä lkutiln tule yhtään ko os-utomtin sisäistä siirtymää r = /0 : r = ε : ε r = s t : r = ( Σ) : r = st : s s ε ε t r = s : ε ε t ε ε ε s ε Hrri Hnpää 105 Hrri Hnpää 106 Esimerkiksi lusekkeest r = (( )) sdn näiden sääntöjen mukn seurv ε-utomtti: ε ε ε ε ε ε ε ε Esim lusekkeen r = (( )) perusteell on helppo muodost seurv yksinkertinen epädeterministinen tunnistj-utomtti: Automtti on selvästi hyvin redundntti Käsin utomttej suunniteltess ne knnttkin usein muodost suorn Hrri Hnpää 107 Hrri Hnpää 108
Luse 24 Jokinen äärellisellä utomtill tunnistettv kieli on säännöllinen Todistus Trvitn vielä yksi äärellisten utomttien ljennus: lusekeutomtiss voidn siirtymien ehtoin käyttää mielivltisi säännöllisiä lusekkeit Formlisointi: erk RE Σ = kkoston Σ säännöllisten lusekkeiden joukko Lusekeutomtti on viisikko = (Q,Σ,δ,q 0,F), missä siirtymäfunktio δ on äärellinen kuvus Yhden skelen tilnnejohto määritellään: (q,w) (q,w ) jos on q δ(q,r) jollkin sellisell r RE Σ, että w = zw, z L(r) uut määritelmät smt kuin iemmin Todistetn: jokinen lusekeutomtill tunnistettv kieli on säännöllinen δ : Q RE Σ P (Q) (so δ(q,r) /0 vin äärellisen monell prill (q,r) Q RE Σ ) Hrri Hnpää 109 Olkoon jokin lusekeutomtti Säännöllinen luseke, jok kuv :n tunnistmn kielen, muodostetn khdess viheess: 1 Tiivistetään ekvivlentiksi enintään 2-tiliseksi lusekeutomtiksi seurvill muunnoksill: (i) Jos :llä on useit lopputiloj, yhdistetään ne seurvsti ε Hrri Hnpää 110 (ii) Poistetn :n muut kuin lku- j lopputil yksi kerrlln seurvsti Olk q jokin :n til, jok ei ole lku- eikä lopputil; trkstelln kikki reittejä, jotk :ssä kulkevt q:n kutt Olk q i j q j q:n välittömät edeltäjä- j seurjtil jollkin tällisell reitillä Poistetn q reitiltä q i q j oheisen kuvn (i) muunnoksell, jos tilst q ei ole siirtymää itseensä, j kuvn (ii) muunnoksell, jos tilst q on siirtymä itseensä: (i): q r i q s q j q i rs q j ε ε (ii): t q r i q s q j q i rt s q j Smll yhdistetään rinnkkiset siirtymät seurvsti: q i r s q j q i r s q j Hrri Hnpää 111 Hrri Hnpää 112
2 Tiivistyksen päättyessä jäljellä olev 2-tilist utomtti vstv säännöllinen luseke muodostetn seurvn kuvn esittämällä tvll: Esimerkki: (i): r r (ii): r 1 r 2 r 3 r 1 r 2(r 3 r 4 r 1 r 2) ( )() ( ) r 4 ( )() ( ) ( ( )() ( )) Hrri Hnpää 113 28 Säännöllisten kielten rjoituksist Krdinliteettisyistä on oltv olemss (pljon) ei-säännöllisiä kieliä: kieliä on ylinumeroituv määrä, säännöllisiä lusekkeit vin numeroituvsti Voidnko löytää konkreettinen, mielenkiintoinen esimerkki kielestä, jok ei olisi säännöllinen? Helposti Säännöllisten kielten perusrjoitus: äärellisillä utomteill on vin rjllinen muisti Siten ne eivät pysty rtkisemn ongelmi, joiss vditn mielivltisen suurten lukujen trkk muistmist Esimerkki: sulkulusekekieli Formlisointi: pumppuslemm L mtch = {( k ) k k 0} Hrri Hnpää 114 Lemm 26 (Pumppuslemm) Olkoon A säännöllinen kieli Tällöin on olemss sellinen n 1, että mikä thns x A, x n, voidn jk osiin x = uvw siten, että uv n, v 1, j uv i w A kikill i = 0,1,2, Todistus Olkoon jokin A:n tunnistv deterministinen äärellinen utomtti, j olkoon n :n tilojen määrä Trkstelln :n läpikäymiä tiloj syötteellä x A, x n Kosk jokisell x:n merkillä siirtyy tilst toiseen, sen täytyy kulke jonkin tiln kutt (inkin) kksi kert itse siss jo x:n n:n ensimmäisen merkin ikn Olkoon q ensimmäinen toistettu til Olkoon u :n käsittelemä x:n lkuos sen tulless ensimmäisen kerrn tiln q, v se os x:stä jonk v käsittelee ennen ensimmäistä pluutn q:hun, u q w j w loput x:stä Tällöin on uv n, v 1, j uv i w A kikill i = 0,1,2, Hrri Hnpää 115 Hrri Hnpää 116
u q v w 3 KIELIOPIT JA ERKKIJONOJEN TUOTTAINEN Esimerkki Trkstelln em sulkulusekekieltä (merk ( =, ) = ): L = L mtch = { k k k 0} Oletetn, että L olisi säännöllinen Tällöin pitäisi pumppuslemmn mukn oll jokin n 1, jot pitempiä L:n merkkijonoj voidn pumpt Vlitn x = n n, jolloin x = 2n > n Lemmn mukn x voidn jk pumpttvksi osiin x = uvw, uv n, v 1; siis on oltv u = i, v = j, w = n (i+j) n, i n 1, j 1 utt esimerkiksi 0-kertisesti pumpttess: Kielioppi = muunnossysteemi merkkijonojen (kielen snojen ) tuottmiseen tietystä lähtöjonost lken, osjonoj toistuvsti nnettujen sääntöjen mukn uudelleenkirjoittmll Kielioppi on yhteydetön, jos kusskin uudelleenkirjoitusskeless korvtn yksi erityinen muuttuj- t välikesymoli jollkin siihen liitetyllä korvusjonoll, j korvus voidn in tehdä symoli ympäröivän merkkijonon rkenteest riippumtt Sovelluksi: rkenteisten tekstien kuvminen (esim ohjelmointikielten BNF-syntksikuvukset, XL:n DTD/Schem-määrittelyt), yleisemmin rkenteisten olioiden kuvminen (esim syntktinen hhmontunnistus) uv 0 w = i n (i+j) n = n j n L Siten L ei voi oll säännöllinen Hrri Hnpää 117 Hrri Hnpää 118 Yhteydettömillä kieliopeill voidn kuvt (tuott) myös ei-säännöllisiä kieliä Esimerkki: yhteydetön kielioppi kielelle L mtch (lähtösymoli S): (i) S ε, (ii) S (S) Esimerkiksi merkkijonon ((())) tuottminen: S (S) ((S)) (((S))) (((ε))) = ((())) Toinen esimerkki: kielioppi C-tyyppisen ohjelmointikielen ritmeettisille lusekkeille (yksinkertistettu) E T E + T T F T F F (E) Esimerkiksi lusekkeen ( + ) tuottminen: E T T F F F (E) F (E + T ) F (T + T ) F (F + T ) F ( + T ) F ( + F) F ( + ) F ( + ) Hrri Hnpää 119 Hrri Hnpää 120
ääritelmä 31 Yhteydetön kielioppi on nelikko missä V on kieliopin kkosto; G = (V,Σ,P,S), Σ V on kieliopin päätemerkkien joukko; sen komplementti N = V Σ on kieliopin välikemerkkien t -symolien joukko; P N V on kieliopin sääntöjen t produktioiden joukko; S N on kieliopin lähtösymoli Produktiot (A, ω) P merkitään tvllisesti A ω erkkijono γ V tuott t joht suorn merkkijonon γ V kieliopiss G, merkitään γ G γ jos voidn kirjoitt γ = αaβ, γ = αωβ (α,β,ω V, A N), j kieliopiss G on produktio A ω Jos kielioppi G on yhteydestä selvä, voidn merkitä γ γ erkkijono γ V tuott t joht merkkijonon γ V kieliopiss G, merkitään γ γ G jos on olemss jono V :n merkkijonoj γ 0,γ 1,,γ n (n 0), siten että γ = γ 0 G γ 1 G G γ n = γ Erikoistpuksen n = 0 sdn γ γ millä thns γ V G Jälleen, jos G on yhteydestä selvä, voidn merkitä γ γ Hrri Hnpää 121 Hrri Hnpää 122 erkkijono γ V on kieliopin G lusejohdos, jos on S γ G Pelkästään päätemerkeistä koostuv G:n lusejohdos x Σ on G:n luse Kieliopin G tuottm t kuvm kieli koostuu G:n luseist: L(G) = {x Σ S x} G Formli kieli L Σ on yhteydetön, jos se voidn tuott jollkin yhteydettömällä kieliopill Esimerkiksi tspinoisten sulkujonojen muodostmn kielen L mtch = {( k ) k k 0} tuott kielioppi G mtch = ({S,(,)},{(,)},{S ε,s (S)},S) Yksinkertisten ritmeettisten lusekkeiden muodostmn kielen L expr tuott kielioppi G expr = (V,Σ,P,E), missä V = {E,T,F,,+,,(,)}, Σ = {,+,,(,)}, P = {E T, E E + T, T F, T T F, F, F (E)} Hrri Hnpää 123 Hrri Hnpää 124
Vkiintuneit merkintätpoj Toinen kielioppi kielen L expr tuottmiseen on missä V = {E,,+,,(,)}, Σ = {,+,,(,)}, G expr = (V,Σ,P,E), P = {E E + E, E E E, E, E (E)} Huom: Vikk kielioppi G expr näyttää yksinkertisemmlt kuin kielioppi G expr, sen ongelmn on ns rkenteellinen moniselitteisyys, mikä on monesti ei-toivottu ominisuus Välikesymoleit: A,B,C,,S,T Päätemerkkejä: kirjimet,,c,,s,t; numerot 0,1,,9; erikoismerkit; lihvoidut ti lleviivtut vrtut snt (if, for, end, ) ielivltisi merkkejä (kun välikkeitä j päätteitä ei erotell): X,Y,Z Päätemerkkijonoj: u,v,w,x,y,z Sekmerkkijonoj: α,β,γ,,ω Hrri Hnpää 125 Produktiot, joill on yhteinen vsen puoli A, voidn kirjoitt yhteen: joukon A ω 1, A ω 2, A ω k sijn kirjoitetn A ω 1 ω 2 ω k Kielioppi esitetään usein pelkkänä sääntöjoukkon: A 1 ω 11 ω 1k1 A 2 ω 21 ω 2k2 A m ω m1 ω mkm Tällöin päätellään välikesymolit edellisten merkintäsopimusten mukn ti siitä, että ne esiintyvät sääntöjen vsempin puolin; muut esiintyvät merkit ovt päätemerkkejä Lähtösymoli on tällöin ensimmäisen säännön vsempn puolen esiintyvä välike; tässä siis A 1 Hrri Hnpää 127 Hrri Hnpää 126 Eräitä konstruktioit Olkoon L(T ) välikkeestä T johdettviss olevien päätejonojen joukko Olkoon nnettu produktiokokoelm P, joss ei esiinny välikettä A, j joll B:stä voidn joht L(B) j vstvsti C:stä L(C) Lisäämällä P:hen jokin seurvist produktioist sdn uusi kieliä: produktio kieli A B C A BC A AB ε (vsen rekursio) ti A BA ε (oike rekursio) yhdiste L(A) = L(B) L(C) ktentio L(A) = L(B)L(C), j Kleenen sulkeum L(A) = L(B) Hrri Hnpää 128
32 Säännölliset kielet j yhteydettömät kieliopit Välikkeiden keskeisupotus on yhteydettömille kieliopeille omininen konstruktio, jok tekee usein (muttei in) kielestä epäsäännöllisen: lisäämällä produktio A BAC ε sdn L(A) = [ L(B) i L(C) i i=0 Yhteydettömillä kieliopeill voidn siis kuvt joitkin ei-säännöllisiä kieliä (esimerkiksi kielet L mtch j L expr ) Osoitetn, että myös kikki säännölliset kielet voidn kuvt yhteydettömillä kieliopeill Yhteydettömät kielet ovt siten säännollisten kielten ito yliluokk Yhteydetön kielioppi on oikelle linerinen, jos sen kikki produktiot ovt muoto A B ti A ε, j vsemmlle linerinen, jos sen kikki produktiot ovt muoto A B ti A ε Osoittutuu, että sekä vsemmlle että oikelle linerisill kieliopeill voidn tuott täsmälleen säännölliset kielet, minkä tki näitä kielioppej nimitetään myös yhteisesti säännöllisiksi Todistetn tässä väite vin oikelle linerisille kieliopeille Hrri Hnpää 129 Hrri Hnpää 130 Luse 31 Esimerkki Jokinen säännöllinen kieli voidn tuott oikelle linerisell kieliopill Automtti: Todistus Olkoon L kkoston Σ säännöllinen kieli, j olkoon = (Q,Σ,δ,q 0,F) sen tunnistv (deterministinen ti epädeterministinen) äärellinen utomtti uodostetn kielioppi G, joll on L(G ) = L() = L 1, 2 Kieliopin G päätekkosto on sm kuin :n syötekkosto Σ, j sen välikekkostoon otetn yksi välike A q kutkin :n til q kohden Kieliopin lähtösymoli on A q0, j sen produktiot vstvt :n siirtymiä: Vstv kielioppi: (i) kutkin :n lopputil q F kohden kielioppiin otetn produktio A q ε; A 1 A 1 A 1 A 2 A 2 ε A 2 (ii) kutkin :n siirtymää q q (so q δ(q,)) kohden kielioppiin otetn produktio A q A q Hrri Hnpää 131 Hrri Hnpää 132
Konstruktion oikeellisuuden trkstmiseksi merkitään välikkeestä A q tuotettvien päätejonojen joukko L(A q ) = {x Σ A q G x} Induktioll merkkijonon x pituuden suhteen voidn osoitt, että kikill q on Erityisesti on siis x L(A q ) joss (q,x) (q f,ε) jollkin q f F L(G ) = L(A q0 ) = {x Σ (q 0,x) (q f,ε) jollkin q f F} = L() = L Luse 32 Jokinen oikelle linerisell kieliopill tuotettv kieli on säännöllinen Todistus Olkoon G = (V, Σ, P, S) oikelle linerinen kielioppi uodostetn kielen L(G) tunnistv epädeterministinen äärellinen utomtti G = (Q,Σ,δ,q S,F) seurvsti: G :n tilt vstvt G:n välikkeitä: Q = {q A A V Σ} G :n lkutil on lähtösymoli S vstv til q S G :n syötekkosto on G:n päätekkosto Σ G :n siirtymäfunktio δ jäljittelee G:n produktioit siten, että kutkin produktiot A B kohden utomtiss on siirtymä q A q B (so q B δ(q A,)) Hrri Hnpää 133 Hrri Hnpää 134 33 KIELIOPPIEN JÄSENNYSONGELA G :n lopputiloj ovt ne tilt, joit vstviin välikkeisiin liittyy G:ssä ε-produktio: F = {q A Q A ε P} Konstruktion oikeellisuus voidn jälleen trkst induktioll G:n tuottmien j G :n hyväksymien merkkijonojen pituuden suhteen Rtkistv tehtävä: Annettu yhteydetön kielioppi G j merkkijono x Onko x L(G)? Rtkisumenetelmä = jäsennyslgoritmi Useit vihtoehtoisi menetelmiä, erityisesti kun G on jotin rjoitettu (käytännössä esiintyvää) muoto Hrri Hnpää 135 Hrri Hnpää 136
Johdot j jäsennyspuut Olkoon γ V kieliopin G = (V,Σ,P,S) lusejohdos Lähtösymolist S merkkijonoon γ johtv suorien johtojen jono snotn γ:n johdoksi G:ssä S = γ 0 γ 1 γ n = γ Johdon pituus on siihen kuuluvien suorien johtojen määrä (edellä n) Esimerkki: luseen + johtoj kieliopiss G expr : (i) E E + T T + T F + T + T + F + (ii) E E + T E + F T + F F + F F + + (iii) E E + T E + F E + T + F + + Johto γ γ on vsen johto, merkitään γ γ, lm jos kusskin johtoskeless on produktiot sovellettu merkkijonon vsemmnpuoleisimpn välikkeeseen (edellä johto (i)) Vstvsti määritellään oike johto (edellä (iii)), jot merkitään γ γ rm Suori vsempi j oikeit johtoskeli merkitään γ lm γ j γ γ rm Hrri Hnpää 137 Olkoon G = (V,Σ,P,S) yhteydetön kielioppi Kieliopin G mukinen jäsennyspuu on järjestetty puu, joll on seurvt ominisuudet: (i) puun solmut on nimetty joukon V {ε} lkioill siten, että sisäsolmujen nimet ovt välikkeitä (so joukost N = V Σ) j juurisolmun nimenä on lähtösymoli S; (ii) jos A on puun jonkin sisäsolmun nimi, j X 1,,X k ovt sen jälkeläisten nimet järjestyksessä, niin A X 1 X k on G:n produktio Jäsennyspuun τ tuotos on merkkijono, jok sdn liittämällä yhteen sen lehtisolmujen nimet esijärjestyksessä ( vsemmlt oikelle ) Hrri Hnpää 138 Esimerkki Luseen + jäsennyspuu kieliopiss G expr : E E + T T F F Luseen johto: E E + T T + T F + T + T + F + Hrri Hnpää 139 Hrri Hnpää 140
Johto S = γ 0 γ 1 γ n = γ vstvn jäsennyspuun muodostminen: (i) puun juuren nimeksi tulee S; jos n = 0, niin puuss ei ole muit solmuj; muuten (ii) jos ensimmäisessä johtoskeless on sovellettu produktiot S X 1 X 2 X k, niin juurelle tulee k jälkeläissolmu, joiden nimet vsemmlt oikelle ovt X 1,X 2,,X k ; (iii) jos seurvss skeless on sovellettu produktiot X i Y 1 Y 2 Y l, niin juuren i:nnelle jälkeläissolmulle tulee l jälkeläistä, joiden nimet vsemmlt oikelle ovt Y 1,Y 2,,Y l ; j niin edelleen Konstruktiost huomtn, että jos τ on jotkin johto S γ vstv jäsennyspuu, niin τ:n tuotos on γ Olkoon τ kieliopin G mukinen jäsennyspuu, jonk tuotos on päätemerkkijono x Tällöin τ:st sdn vsen johto x:lle käymällä puun solmut läpi esijärjestyksessä ( ylhäältä ls, vsemmlt oikelle ) j lventmll vstn tulevt välikkeet järjestyksessä puun osoittmll tvll Oike johto sdn käymällä puu läpi käänteisessä esijärjestyksessä ( ylhäältä ls, oikelt vsemmlle ) uodostmll nnetust vsemmst johdost S x ensin lm jäsennyspuu edellä esitetyllä tvll, j sitten jäsennyspuust vsen johto, sdn tkisin lkuperäinen johto; vstv tulos pätee myös oikeille johdoille Hrri Hnpää 141 Esimerkki Luseen + vsemmn johdon muodostminen jäsennyspuust Jäsennyspuu: E 1 E 2 + T 1 T 2 F 2 F 1 1 2 Solmut esijärjestyksessä: E 1 E 2 T 2 F 1 1 + T 1 F 2 2 Vsen johto: E lm E + T lm T + T lm F + T lm + T lm + F lm + Hrri Hnpää 142 Luse 33 Olkoon G = (V,Σ,P,S) yhteydetön kielioppi Tällöin: (i) jokisell G:n lusejohdoksell γ on G:n mukinen jäsennyspuu τ, jonk tuotos on γ; (ii) jokist G:n mukist jäsennyspuut τ, jonk tuotos on päätemerkkijono x, vstvt yksikäsitteiset vsen j oike johto S x j S x lm rm Seurus 34 Jokisell G:n luseell on vsen j oike johto Siis: yhteydettömän kieliopin tuottmien luseiden jäsennyspuut, vsemmt j oiket johdot vstvt yksikäsitteisesti toisin Jäsennysongelmn rtkisuun ktsotn usein kuuluvn pelkän päätösongelmn Onko x L(G)? rtkisemisen lisäksi jonkin näistä jäsennysesityksistä tuottminen Hrri Hnpää 143 Hrri Hnpää 144
Kieliopin moniselitteisyys Luseell voi oll kieliopiss useit jäsennyksiä Esimerkki Trkstelln yksinkertisten ritmeettisten lusekkeiden kielioppi: G expr = {E E + E, E E E, E, E (E)} Luseell + on tässä kieliopiss kksi jäsennystä: E E + E E E Yhteydetön kielioppi G on moniselitteinen, jos jollkin G:n luseell x on kksi erilist G:n mukist jäsennyspuut uuten kielioppi on yksiselitteinen Hrri Hnpää 145 34 Osittv jäsentäminen Yksi (yleisessä muodoss tehoton!) tp etsiä vsent johto (jäsennyspuut) nnetun kieliopin G mukiselle luseelle x on loitt G:n lähtösymolist j generoid systemttisesti kikki mhdolliset vsemmt johdot (jäsennyspuut), smll sovitten muodostetun lusejohdoksen päätemerkkejä (puun lehtiä) x:n merkkeihin Ei-yhteensopivuuden ilmetessä peruutetn viimeksi tehty produktiovlint j kokeilln järjestyksessä seurv vihtoehto Tällist luseenjäsennystp snotn osittvksi, kosk siinä trksteltu luse yritetään joht kieliopin lähtösymolist osittmll se vlittujen produktioiden mukisiin rkenneosiin j yrittämällä näin, trvittess toistuvsti edelleen osittmll, sovitt kieliopin tuottm rkennett yhteen luseen rkenteen knss E E + E E E oniselitteisyys on tietojenkäsittelysovelluksiss yleensä ei-toivottu ominisuus, kosk se merkitsee että nnetull luseell on kksi vihtoehtoist tulkint Yhteydetön kieli, jonk tuottvt kieliopit ovt kikki moniselitteisiä, on luonnostn moniselitteinen Esimerkiksi kielioppi G expr on moniselitteinen, kieliopit G expr j G mtch yksiselitteisiä Kieli L expr = L(G expr) ei ole luonnostn moniselitteinen, kosk sillä on myös yksiselitteinen kielioppi G expr Luonnostn moniselitteinen on esimerkiksi kieli (Todistus sivuutetn) { i j c k i = j ti j = k} Hrri Hnpää 146 Esim Trkstelln kielioppi G: E T + E T E T T (E) Luseen osittv jäsennys G:n suhteen: E T + E + T [ristiriit; peruutetn] (E) + T [ristiriit; peruutetn] T E E T + E + E [ristiriit; peruutetn] T E E T + E (E) + E [ristiriit; peruutetn] T E E [ristiriit; peruutetn] T E (E) E [ristiriit; peruutetn] T [OK!] Hrri Hnpää 147 Hrri Hnpää 148
Em osittv jäsennystekniikk sdn huomttvsti tehokkmmksi, jos kieliopill on sellinen ominisuus, että jäsennyksen jok viheess määrää tvoitteen olevn luseen seurv merkki yksikäsitteisesti sen, mikä lvennettvn olevn välikkeeseen liittyvä produktio on vlittv Kielioppi, joll on tämä ominisuus, snotn LL(1)-tyyppiseksi uoktn G:stä välikkeen E produktiot tekijöimällä ekvivlentti kielioppi G : E TE E +E E ε T (E) Esimerkiksi luseen jäsentäminen G :n suhteen (kulloisenkin produktiovlinnn määräävä syötemerkki on tässä merkitty vstvn johtonuolen päälle): E TE lm lm E lm E TE lm lm E ε lm Hrri Hnpää 149 LL(1)-tyyppiselle kieliopille on helppo kirjoitt jäsennysohjelm suorn rekursiivisin proseduurein Esimerkiksi kieliopin G pohjlt voidn muodost seurv C-kielinen funktiokokoelm, jok syötejonon jäsennyksen yhteydessä tulost sen tuottvn vsemmn johdon produktiot järjestyksessä #include <stdioh> int next; void E(void); void Eprime(void); void T(void); void E(void) { printf("e -> TE \n"); T(); Eprime(); } Hrri Hnpää 150 void Eprime(void) { if (next == + ) { printf("e -> +E\n"); next = getchr(); E(); } else if (next == - ) { printf("e -> -E\n"); next = getchr(); E(); } else printf("e -> \n"); } void T(void) { if (next == ) { printf("t -> \n"); next = getchr(); } else if (next == ( ) { } printf("t -> (E)\n"); next = getchr(); E(); if (next!= ) ) ERROR(") expected"); next = getchr(); } else ERROR("T cnnot strt with this"); Hrri Hnpää 151 Hrri Hnpää 152
void ERROR(chr *msg) { printf("%s\n",msg); exit(1); } int min(void) { next = getchr(); E(); exit(0); } Esimerkiksi syötejono -(+) käsitellessään ohjelm tulost seurvt rivit: E TE T E -E E TE T (E) E TE T E +E E TE T E E Tulostus vst vsent johto: E TE E E TE (E)E (TE )E (E )E ( + E)E ( + TE )E ( + E )E ( + )E ( + ) Hrri Hnpää 153 Hrri Hnpää 154 35 Attriuuttikieliopit Tp liittää yhteydettömiin kielioppeihin yksinkertist kielen semntiikn kuvust Kukin kieliopin mukisen jäsennyspuun solmu, jonk nimenä on symoli X, jtelln tietueeksi, jok on tyyppiä X Tietuetyyppiin X kuuluvi kenttiä snotn X:n ttriuuteiksi j merkitään Xs, Xt jne Kusskin X-tyyppisessä jäsennyspuun solmuss jtelln olevn X:n ttriuuteist eri ilmentymät Säännöt voivt oll peritteess minkälisi funktioit thns, kunhn niiden rgumenttein esiintyy vin pikllisesti stviss olev tieto Trkemmin snoen: produktioon A X 1 X k liitettävissä säännöissä s minit vin symolien A,X 1,,X k ttriuuttej Kieliopin produktioihin A X 1 X k liitetään ttriuuttien evluointisääntöjä, jotk ilmisevt miten nnetun jäsennyspuun solmun ttriuutti-ilmentymien rvot määräytyvät sen isä- j jälkeläissolmujen ttriuutti-ilmentymien rvoist Hrri Hnpää 155 Hrri Hnpää 156
Esimerkki Etumerkillisten kokonislukujen rvojen määrittäminen (kielioppi + ttriuuttien evluointisäännöt) Kuhunkin jäsennyspuun X-tyyppiseen välikesolmuun liitetään ttriuutti-ilmentymä Xv, jonk rvoksi tulee X:stä tuotetun numerojonon lukurvo; erityisesti juurisolmun v-ilmentymän rvoksi tulee koko puun tuotoksen olevn numerojonon luku Produktiot: Evluointisäännöt: I +U Iv := Uv I U Iv := Uv I U Iv := Uv U D Uv := Dv U UD U 1 v := 10 U 2 v + Dv D 0 Dv := 0 D 9 Dv := 9 Esimerkiksi näitä sääntöjä käyttäen ttriutoitu luseen -319 jäsennyspuu on seurv: U I v = 3 v = 319 U v = 31 U 3 1 9 v = 319 D v = 3 D v = 1 D v = 9 Produktioon U UD liittyvässä evluointisäännössä on välikkeen U eri esiintymät erotettu indekseillä Hrri Hnpää 157 Hrri Hnpää 158 Attriuuttikieliopin ttriuutti t on synteettinen, jos sen kuhunkin produktioon A X 1 X k liittyvä evluointisääntö on muoto Esimerkki: kokonislukujen rvon määrittäminen periytyvää positiokerroin -ttriuutti s j synteettistä rvo -ttriuutti v käyttäen: At := f(a,x 1,,X k ) Produktiot: Evluointisäännöt: Tällöin jäsennyspuuss kunkin solmun mhdollisen t- ilmentymän rvo riippuu vin solmun omien j sen jälkeläisten ttriuutti-ilmentymien rvoist uunliset ttriuutit ovt periytyviä Attriuuttisemntiikn kuvuksess pyritään käyttämään pääsiss synteettisiä ttriuuttej, kosk ne voidn evluoid helposti yhdellä jäsennyspuun lehdistä juureen suuntutuvll läpikäynnillä itään peritteellist estettä myös perittyjen ttriuuttien käyttöön ei kuitenkn ole kunhn ttriuutti-ilmentymien riippuvuusverkkoihin ei tule syklejä I +U Us := 1, Iv := Uv I U Us := 1, Iv := Uv I U Us := 1, Iv := Uv U D Uv := (Dv) (Us) U UD U 2 s := 10 (U 1 s), U 1 v := U 2 v + (Dv) (U 1 s) D 0 Dv := 0 D 9 Dv := 9 Hrri Hnpää 159 Hrri Hnpää 160
Em positiokerrointekniikk käyttäen sdn luseelle -319 seurv ttriutoitu jäsennyspuu: U 3 I s = 100 v = 300 v = 319 U 1 U s = 10 v = 310 9 s = 1 v = 319 D v = 3 D v = 1 D v = 9 Attriuutti-ilmentymien rvot voidn usein lske suorn jäsennysrutiineiss muodostmtt jäsennyspuut eksplisiittisesti Esimerkki Ohjelm, jok muunt syötteenä nnettuj ritmeettisi lusekkeit postfix-esitykseen Tvnomiseen, yksinkertisi ritmeettisi lusekkeit tuottvn kielioppiin liitetään yksi synteettinen, merkkijonorvoinen ttriuutti pf ; kuhunkin välikkeeseen X liittyvän ttriuutti-ilmentymän Xpf rvo on X:stä tuotetun lilusekkeen postfix-esitys Produktiot: Evluointisäännöt: E T + E E 1 pf := (T pf) (E 2 pf) ( + ) E T Epf := T pf T F T T 1 pf := (Fpf) (T 2 pf) ( ) T F Tpf := Fpf F Fpf := F (E) Fpf := Epf Hrri Hnpää 161 Rekursiivisesti etenevä jäsentäjä, jok evluoi ttriuutti-ilmentymien rvot suorn jäsennyksen yhteydessä: #include <stdioh> #include <stdlih> #include <stringh> #define AXLEN 80 /* ks lusekkeenpituus */ int next; chr *pf; /* Tulosluseke */ void E(chr *); void T(chr *); void F(chr *); void ERROR(chr *msg) { printf("%s\n",msg); exit(1); } Hrri Hnpää 162 /* Produktiot: E -> T+E T */ void E(chr *pf) { chr *pf1, *pf2; pf1 = (chr *) mlloc(axlen+1); pf2 = (chr *) mlloc(axlen+1); T(pf1); /* pf1 = Tpf */ if (next == + ) { next = getchr(); E(pf2); /* pf2 = E(2)pf */ strcpy(pf,strct(pf1,strct(pf2,"+"))); /* Epf = pf1^pf2^( + ) */ } else strcpy(pf,pf1); /* Epf = Tpf */ free(pf1); free(pf2); } Hrri Hnpää 163 Hrri Hnpää 164
/* Produktiot: T -> F*T F */ void T(chr *pf) { chr *pf1, *pf2; pf1 = (chr *) mlloc(axlen+1); pf2 = (chr *) mlloc(axlen+1); F(pf1); /* pf1 = Fpf */ if (next == * ) { next = getchr(); T(pf2); /* pf2 = T(2)pf */ strcpy(pf,strct(pf1,strct(pf2,"*"))); /* Tpf = pf1^pf2^( * ) */ } else strcpy(pf,pf1); /* Tpf = Fpf */ free(pf1); free(pf2); } /* Produktiot: F -> (E) */ void F(chr *pf) { if (next == ) { strcpy(pf,""); /* Fpf = */ next = getchr(); } else if (next == ( ) { next = getchr(); E(pf); /* Fpf = Epf */ if (next!= ) ) ERROR(") expected"); next = getchr(); } else ERROR("F cnnot strt with this"); } Hrri Hnpää 165 Hrri Hnpää 166 28 Säännöllisten kielten rjoituksist int min(void) { next = getchr(); pf = (chr *) mlloc(axlen+1); E(pf); printf("%s\n", pf); free(pf); } Krdinliteettisyistä on oltv olemss (pljon) ei-säännöllisiä kieliä: kieliä on ylinumeroituv määrä, säännöllisiä lusekkeit vin numeroituvsti Voidnko löytää konkreettinen, mielenkiintoinen esimerkki kielestä, jok ei olisi säännöllinen? Helposti Säännöllisten kielten perusrjoitus: äärellisillä utomteill on vin rjllinen muisti Siten ne eivät pysty rtkisemn ongelmi, joiss vditn mielivltisen suurten lukujen trkk muistmist Esimerkki: sulkulusekekieli L mtch = {( k ) k k 0} Formlisointi: pumppuslemm Hrri Hnpää 167 Hrri Hnpää 168
Lemm 26 (Pumppuslemm) Olkoon A säännöllinen kieli Tällöin on olemss sellinen n 1, että mikä thns x A, x n, voidn jk osiin x = uvw siten, että uv n, v 1, j uv i w A kikill i = 0,1,2, Todistus Olkoon jokin A:n tunnistv deterministinen äärellinen utomtti, j olkoon n :n tilojen määrä Trkstelln :n läpikäymiä tiloj syötteellä x A, x n Kosk jokisell x:n merkillä siirtyy tilst toiseen, sen täytyy kulke jonkin tiln kutt (inkin) kksi kert itse siss jo x:n n:n ensimmäisen merkin ikn Olkoon q ensimmäinen toistettu til Olkoon u :n käsittelemä x:n lkuos sen tulless ensimmäisen kerrn tiln q, v se os x:stä jonk v käsittelee ennen ensimmäistä pluutn q:hun, u q w j w loput x:stä Tällöin on uv n, v 1, j uv i w A kikill i = 0,1,2, Hrri Hnpää 169 u Esimerkki Trkstelln em sulkulusekekieltä (merk ( =, ) = ): q v w L = L mtch = { k k k 0} Oletetn, että L olisi säännöllinen Tällöin pitäisi pumppuslemmn mukn oll jokin n 1, jot pitempiä L:n merkkijonoj voidn pumpt Vlitn x = n n, jolloin x = 2n > n Lemmn mukn x voidn jk pumpttvksi osiin x = uvw, uv n, v 1; siis on oltv u = i, v = j, w = n (i+j) n, i n 1, j 1 utt esimerkiksi 0-kertisesti pumpttess: Siten L ei voi oll säännöllinen uv 0 w = i n (i+j) n = n j n L Hrri Hnpää 170 36 Cocke-Younger-Ksmi -jäsennyslgoritmi Osittv jäsentäminen on selkeä j tehoks jäsennysmenetelmä LL(1)-kieliopeille: n merkin mittisen syötemerkkijonon käsittely sujuu jss O(n) LL(1)-kieliopit ovt kuitenkin melko rjoitettu luokk; yleisen jäsennysongelmn rtkisu ei ole yhtä helppo Peritteess ongelm voidn rtkist esim soveltmll yleistä (peruuttv) osittv jäsennystä, mutt käytännössä vikeudeksi muodostuu erilisten kokeiltvien johtovihtoehtojen suuri määrä (Tyypillisesti O(c n ) kpl jollkin c 2) Cocke-Younger-Ksmi -lgoritmi on yleiseen ns dynmisen ohjelmoinnin tekniikkn (t osrtkisujen tulukointiin) perustuv menetelmä mielivltisen yhteydettömän kieliopin tuottmien merkkijonojen tunnistmiseen enetelmä toimii jss O(n 3 ), missä n on tutkittvn merkkijonon pituus Algoritmi vrten määritellään ensin joitkin kielioppimuunnoksi Hrri Hnpää 171 Hrri Hnpää 172
1 ε-produktioiden poistminen Todistus Olkoon G = (V,Σ,P,S) yhteydetön kielioppi Välike A V Σ on tyhjentyvä, jos A ε G Lemm 35 istä thns yhteydettömästä kieliopist G voidn muodost ekvivlentti kielioppi G, joss enintään lähtösymoli on tyhjentyvä Olkoon G = (V,Σ,P,S) Selvitetään ensin G:n tyhjentyvät välikkeet seurvsti: (i) setetn luksi NULL := {A V Σ A ε on G:n produktio}; (ii) toistetn sitten seurv NULL-joukon ljennusopertiot, kunnes joukko ei enää ksv: NULL := NULL {A V Σ A B 1 B k on G:n prod, B i NULL kikill i = 1,,k} Hrri Hnpää 173 Hrri Hnpää 174 Esimerkki Poistetn ε-produktiot kieliopist: Tämän jälkeen korvtn kukin G:n produktio A X 1 X k kikkien sellisten produktioiden joukoll, jotk ovt muoto A α 1 α k, missä { Xi, jos X α i = i / NULL; X i ti ε, jos X i NULL Lopuksi poistetn kikki muoto A ε olevt produktiot Jos poistettvn on myös produktio S ε, otetn muodostettvn kielioppiin G uusi lähtösymoli S j sille produktiot S S j S ε S A B A B ε (NULL = {A, B, S}) B A ε S A B ε A B ε B A ε S S ε S A B A B B A Hrri Hnpää 175 Hrri Hnpää 176
2 Yksikköproduktioiden poistminen Todistus Olkoon G = (V,Σ,P,S) Selvitetään ensin G:n kunkin välikkeen yksikköseurjt seurvsti: (i) setetn luksi kullekin A V Σ: Produktio muoto A B, missä A j B ovt välikkeitä, on yksikköproduktio Lemm 36 istä thns yhteydettömästä kieliopist G voidn muodost ekvivlentti kielioppi G, joss ei ole yksikköproduktioit F(A) := {B V Σ A B on G:n produktio}; (ii) toistetn sitten seurvi F-joukkojen ljennusopertioit, kunnes joukot eivät enää ksv: F(A) := F(A) [ {F(B) A B on G:n produktio} Tämän jälkeen poistetn G:stä kikki yksikköproduktiot j lisätään niiden sijn kikki mhdolliset produktiot muoto A ω, missä B ω on G:n ei-yksikköproduktio jollkin B F(A) Hrri Hnpää 177 Esimerkki Poistetn yksikköproduktiot iemmin muodostetust kieliopist: S S ε S A B A B B A Välikkeiden yksikköseurjt ovt: F(S ) = {S,A,B}, F(S) = {A,B}, F(A) = F(B) = /0 Korvmll yksikköproduktiot edellä esitetyllä tvll sdn kielioppi: S B A ε S B A A B B A (Huomtn, että välike S on nyt itse siss turh, so se ei voi esiintyä minkään kieliopin luseen johdoss yös turht välikkeet voidn hluttess poist kieliopist smntpisell lgoritmill (HT)) Hrri Hnpää 179 Hrri Hnpää 178 Chomskyn normlimuoto Yhteydetön kielioppi G = (V,Σ,P,S) on Chomskyn normlimuodoss, jos sen välikkeistä enintään S on tyhjentyvä, j mhdollist produktiot S ε lukuunottmtt muut produktiot ovt muoto A BC ti A, missä A,B j C ovt välikkeitä j on päätemerkki Lisäksi vditn yksinkertisuuden vuoksi, että lähtösymoli S ei esiinny minkään produktion oikell puolell Hrri Hnpää 180
Luse 37 istä thns yhteydettömästä kieliopist G voidn muodost ekvivlentti Chomskyn normlimuotoinen kielioppi G Lisätään nyt kielioppiin kutkin päätemerkkiä vrten uusi välike C j sille produktio C Korvtn kusskin muoto A X 1 X k, k 2, olevss produktioss ensin kikki päätemerkit em uusill välikkeillä, j sitten koko produktio produktiojoukoll Todistus Olkoon G = (V,Σ,P,S) ikäli lähtösymoli S esiintyy G:ssä jonkin produktion oikell puolell, otetn käyttöön uusi lähtösymoli S j lisätään G:hen produktio S S Poistetn sitten G:stä ε-produktiot j yksikköproduktiot lemmojen 35 j 36 konstruktioill Tämän jälkeen kikki G:n produktiot ovt muoto A ti A X 1 X k, k 2 (ti S ε/s ε) A X 1 A 1 A 1 X 2 A 2 A k 2 X k 1 X k, missä A 1,,A k 2 ovt jälleen uusi välikkeitä Hrri Hnpää 181 Esimerkki Kielioppi: S BCd B C c Em konstruktioll stu Chomskyn normlimuoto: S C S 1 1 S 1 1 BS 1 2 S 1 2 CC d S C S 2 1 S 2 1 C C B C c C C C c c C d d Hrri Hnpää 182 CYK-lgoritmi Olkoon G = (V,Σ,P,S) yhteydetön kielioppi Luseen 37 nojll voidn olett, että G on Chomskyn normlimuodoss Kysymys, kuuluuko nnettu merkkijono x kieleen L(G) voidn tällöin rtkist seurvsti: Jos x = ε, niin x L(G) joss S ε on G:n produktio uuss tpuksess merkitään x = 1 n j trkstelln x:n eri osjonojen tuottmist erkitään N ik :ll niiden välikkeiden A joukko, joist voidn tuott x:n positiost i lkv, k merkin mittinen osjono: N ik = {A V Σ A i i+k 1 }, G 1 i i + k 1 n Joukot N ik voidn lske tulukoimll lyhyistä osjonoist pitempiin seurvss esitettävällä tvll Selvästi on x L(G) joss S N 1n Hrri Hnpää 183 Hrri Hnpää 184
Joukkojen N ik lskeminen: (i) setetn luksi kikill i = 1,,n: N i1 := {A V Σ A i on G:n produktio}; (ii) lsketn sitten kikill k = 2,,n j kullkin k kikill i = 1,,n k + 1: N ik := S k 1 j=1 {A V Σ A BC on G:n produktio, missä B N ij j C N i+j,k j } Esimerkki Chomskyn normlimuotoinen kielioppi G: S AB BC A BA B CC C AB CYK-lgoritmin lskent kieliopill G j syötteellä x = : i N ik 1 : 2 : 3 : 4 : 5 : 1 B A,C A,C B A,C 2 S,A B S,C S,A k 3 /0 B B 4 /0 S,A,C 5 S,A,C Kosk lähtösymoli S kuuluu joukkoon N 15, päätellään että x kuuluu kieleen L(G) Hrri Hnpää 185 Hrri Hnpää 186 Yleisesti otten CYK-lgoritmiss jotkin joukko N ik määritettäessä edetään smnikisesti srkkeess N ij joukko N ik kohti j digonli N i+j,k j pitkin siitä poispäin : 37 Pinoutomtit Yhteydettömille kielille sdn utomttikrkterisointi ns pinoutomttien vull: syötenuh: i n p u t N ik nuhpää: ohjusyksikkö: q 1 q 2 q 0 δ pino (työnuh): K C A T S Pinoutomtti on kuin äärellinen utomtti, johon on lisätty rjoittmttomn suuri pino Pinon käyttö on vrsin rjllist: utomtti voi luke, kirjoitt, poist ti lisätä merkkejä vin pinon päälle Hrri Hnpää 187 Hrri Hnpää 188
ääritelmä 32 Pinoutomtti on kuusikko missä Q on tilojen äärellinen joukko; Σ on syötekkosto; Γ on pinokkosto; = (Q,Σ,Γ,δ,q 0,F), δ : Q (Σ {ε}) (Γ {ε}) P (Q (Γ {ε})) on (joukkorvoinen) siirtymäfunktio; q 0 Q on lkutil; F Q on (hyväksyvien) lopputilojen joukko Siirtymäfunktion rvon δ(q,σ,γ) = {(q 1,γ 1 ),,(q k,γ k )} tulkint on, että ollessn tilss q j lukiessn syötemerkin σ j pinomerkin γ utomtti voi siirtyä johonkin tiloist q 1,,q k j korvt vstvsti pinon päällimmäisen merkin jollkin merkeistä γ 1,,γ k Pinoutomtit ovt siis yleisessä tpuksess epädeterministisiä Jos σ = ε, utomtti tekee siirtymän syötemerkkiä lukemtt Jos γ = ε, utomtti ei lue pinomerkkiä j uusi kirjoitettu merkki tulee pinon päälle vnh päällimmäistä merkkiä poistmtt ( push -opertio) Jos pinost luettu merkki on γ ε j kirjoitettvn on γ i = ε, pinost poistetn sen päällimmäinen merkki ( pop -opertio) Hrri Hnpää 189 Automtin tilnne on kolmikko (q,w,α) Q Σ Γ ; erityisesti utomtin lkutilnne syötteellä x on kolmikko (q 0,x,ε) Intuitio: tilnteess (q, w, α) utomtti on tilss q, syötemerkkijonon käsittelemätön os on w j pinoss on ylhäältä ls lukien merkkijono α Tilnne (q,w,α) joht suorn tilnteeseen (q,w,α ), merkitään (q,w,α) (q,w,α ), jos voidn kirjoitt w = σw, α = γβ, α = γ β ( σ, γ, γ 1), siten että (q,γ ) δ(q,σ,γ) Hrri Hnpää 190 Tilnne (q,w,α) joht tilnteeseen (q,w,α ), merkitään (q,w,α) (q,w,α ), jos on olemss tilnnejono (q 0,w 0,α 0 ), (q 1,w 1,α 1 ),, (q n,w n,α n ), n 0, siten että (q,w,α) = (q 0,w 0,α 0 ) (q 1,w 1,α 1 ) Pinoutomtti hyväksyy merkkijonon x Σ, jos (q n,w n,α n ) = (q,w,α ) (q 0,x,ε) (q f,ε,α) joillkin q f F j α Γ, siis jos se syötteen loppuess on josskin hyväksyvässä lopputilss; muuten hylkää x:n Automtin tunnistm kieli on: L() = {x Σ (q 0,x,ε) (q f,ε,α) joillkin q f F j α Γ } Hrri Hnpää 191 Hrri Hnpää 192
Esimerkki Pinoutomtti kielelle { k k k 0}: = ({q 0,q 1,q 2,q 3 },{,},{A,A},δ,q 0,{q 0,q 3 }), missä δ(q 0,,ε) = {(q 1,A)}, δ(q 1,,ε) = {(q 1,A)}, δ(q 1,,A) = {(q 2,ε)}, δ(q 1,,A) = {(q 3,ε)}, δ(q 2,,A) = {(q 2,ε)}, δ(q 2,,A) = {(q 3,ε)}, δ(q,σ,γ) = /0 muill (q,σ,γ) Kvioesitys:,ε/A q 0,A/ε q 3,A/ε q 1 q 2,A/ε,ε/A,A/ε,ε/A q 0,A/ε q 3 Automtin toimint syötteellä :,A/ε q 1 q 2,A/ε,ε/A,A/ε (q 0,,ε) (q 1,,A) (q 1,,AA) (q 2,,A) (q 3,ε,ε) Kosk q 3 F = {q 0,q 3 }, on siis L() Hrri Hnpää 193 Pinoutomtit j yhteydettömät kielet Hrri Hnpää 194 q 0 Luse 38 Kieli on yhteydetön, jos j vin jos se voidn tunnist jollkin (epädeterministisellä) pinoutomtill Em luseen todistus sivuutetn tässä, mutt peritteen esim nnettu kielioppi G vstvn pinoutomtin G toiminnss on, että G :n pinon käyttäytyminen syötteellä x noudttelee G:n mukisen vsemmn lusejohdon S lm x etenemistä: jos pinon päällimmäisenä on välikemerkki, sovelletn jotin G:n produktiot j lisätään pinon pinnlle vstvt merkit; jos pinon päällimmäisenä on päätemerkki, se sovitetn yhteen seurvn syötemerkin knss Esimerkki Kielioppi {S SS SS ε} vstv pinoutomtti: Automtin kuvuksess on käytetty seurv luonnollist lyhennemerkintää: α,β/x 1 X k,/ε,/ε ε, ε/s# q ε,s/ε ε,#/ε q f ε, S/SS ε, S/SS α,β/x k ε,ε/x k 1 ε,ε/x 1 Hrri Hnpää 195 Hrri Hnpää 196
Esimerkiksi syötteellä on em utomtill seurv hyväksyvä lskent: (q 0,,ε) (q,,s#) (q,,ss#) (q,,ss#) (q,,sss#) (q,, SSS#) (q,, SS#) (q,, SS#) (q,, S#) (q,ε,s#) (q,ε,#) (q f,ε,ε) Tämä vst nnetun kieliopin mukist luseen vsent johto: S SS SSS SS S Pinoutomtti on deterministinen, jos jokisell tilnteell (q, w, α) on enintään yksi mhdollinen seurj (q,w,α ), joll (q,w,α) (q,w,α ) Toisin kuin äärellisten utomttien tpuksess, epädeterministiset pinoutomtit ovt idosti vhvempi kuin deterministiset Esimerkiksi kieli {ww R w {,} } voidn tunnist epädeterministisellä, mutt ei deterministisellä pinoutomtill (Tod siv) Yhteydetön kieli on deterministinen, jos se voidn tunnist jollkin deterministisellä pinoutomtill Deterministiset kielet voidn jäsentää jss O(n); yleiset yhteydettömät kielet vtivt tunnetuill menetelmillä lähes jn O(n 3 ) Hrri Hnpää 197 38 Yhteydettömien kielten rjoituksist Hrri Hnpää 198 Todistus Yhteydettömille kielille on voimss säännöllisten kielten pumppuslemmn vstine Nyt kuitenkin merkkijono on pumpttv smnikisesti khdest pikst Lemm 39 ( uvwxy-lemm ) Olkoon L yhteydetön kieli Tällöin on olemss sellinen n 1, että mikä thns z L, z n, voidn jk osiin z = uvwxy siten, että (i) vx 1, (ii) vwx n, (iii) uv i wx i y L kikill i = 0,1,2, Olkoon G = (V, Σ, P, S) Chomskyn normlimuotoinen kielioppi L:lle Tällöin missä thns G:n jäsennyspuuss, jonk korkeus on h, on enintään 2 h lehteä Toisin snoen, minkä thns z L jokisess jäsennyspuuss on polku, jonk pituus on vähintään log 2 z Olkoon k = V Σ kieliopin G välikkeiden määrä Asetetn n = 2 k+1 Trkstelln jotkin z L, z n, j sen jotkin jäsennyspuut Edellisen nojll puuss on polku, jonk pituus on k + 1; tällä polull on siis jonkin välikkeen toistuttv itse siss jo polun k + 2 limmn solmun joukoss Olkoon A jokin tällinen välike Hrri Hnpää 199 Hrri Hnpää 200
S S S S A A A A A A A A u v w x y u v v A x x y u v w x y u v v A x x y v w x v w x erkkijono z voidn nyt ositt z = uvwxy, missä w on A:n limmst ilmentymästä tuotettu osjono j vwx seurvksi ylemmästä A:n ilmentymästä tuotettu osjono; osjonot sdn johdost S uay uvaxy uvwxy Kosk siis S uay, A vax j A w, osjonoj v j x voidn pumpt w:n ympärillä: S uay uvaxy uv 2 Ax 2 y uv i Ax i y uv i wx i y Siten uv i wx i y L kikill i = 0,1,2, Hrri Hnpää 201 Hrri Hnpää 202 Esimerkki Kosk kielioppi G on Chomskyn normlimuodoss j A vax, on oltv vx 1 Kosk edelleen välikkeen A vlinnn perusteell sen toiseksi ylin ilmentymä on enintään korkeudell k + 1 jäsennyspuun lehdistä, on tähän ilmentymään juurtuvn lipuun tuotokselle voimss pituusrj vwx 2 k+1 = n Trkstelln kieltä L = { k k c k k 0} Oletetn, että L olisi yhteydetön; vlitn prmetri n lemmn mukisesti j trkstelln merkkijono z = n n c n L Lemmn 39 mukn z voidn jk pumpttvksi osiin z = uvwxy, vx 1, vwx n Viimeisen ehdon tki merkkijono vx ei voi sisältää sekä :t, :tä että c:tä erkkijonoss uv 0 wx 0 y = uwy on siten ylijäämä jotkin merkkiä muihin merkkeihin nähden, eikä se voi oll kielen L määritelmässä vdittu muoto, vikk lemmn mukn pitäisi oll uwy L Hrri Hnpää 203 Hrri Hnpää 204
4 TURINGIN KONEET Aln Turing 1935 36 Turingin kone on kuin äärellinen nuh: T U R I N G utomtti, joll on käytössään nuh Kone voi siirtää nuhpäätä nuhpää: vsemmlle ti oikelle; se voi myös luke ti kirjoitt nuhpään kohdll q 1 q 2 olevn merkin Nuh on oikelle rjton ohjusyksikkö: q 0 δ Churchin Turingin teesi: ikä thns meknisesti rtkev ongelm voidn rtkist Turingin koneell Turingin koneen knss ekvivlenttej lskentmllej: Gödelin Kleenen rekursiivisesti määritellyt funktiot (1936), Churchin λ-klkyyli (1936), Postin (1936) j rkovin (1951) merkkijonomuunnossysteemit, kikki nykyiset ohjelmointikielet Turingin koneet ohjelmointikieli Hrri Hnpää 205 Hrri Hnpää 206 ääritelmä 41 Turingin kone on seitsikko = (Q,Σ,Γ,δ,q 0,q cc,q rej ), missä: Q on koneen tilojen äärellinen joukko; Σ on koneen syötekkosto; Γ Σ on koneen nuh-kkosto (ol että, / Γ); δ : (Q {q cc,q rej }) (Γ {, }) Q (Γ {, }) {L,R} on koneen siirtymäfunktio; q 0 Q on koneen lkutil; q cc Q on koneen hyväksyvä j q rej Q sen hylkäävä lopputil Siirtymäfunktion rvon tulkint: δ(q,) = (q,, ) Ollessn tilss q j lukiessn nuhmerkin (ti lku- ti loppumerkin), kone siirtyy tiln q, kirjoitt lukemns pikkn merkin, j siirtää nuhpäätä yhden merkkipikn verrn suuntn (L left, R right ) Sllittuj kirjoitettvi merkkejä j siirtosuunti on rjoitettu, mikäli = ti, j siirtymäfunktion rvo on in määrittelemätön, kun q = q cc ti q = q rej Joutuessn jompn kumpn näistä tiloist kone pysähtyy heti Hrri Hnpää 207 Hrri Hnpää 208
Koneen tilnne on nelikko (q,u,,v) Q Γ (Γ {ε}) Γ, Siis: siirtymäfunktion rvoilt δ(q,) = (q,, ) vditn: (i) jos =, niin = ; (ii) jos =, niin = j = R; (iii) jos =, niin = j = L missä voi oll = ε, mikäli myös u = ε ti v = ε Tulkint: kone on tilss q, nuhn sisältö sen lust nuhpään vsemmlle puolelle on u, nuhpään kohdll on merkki j nuhn sisältö nuhpään oikelt puolelt käytetyn osn loppuun on v hdollisesti on = ε, jos nuhpää sijitsee ivn nuhn luss ti sen käytetyn osn lopuss Ensimmäisessä tpuksess jtelln, että kone hvitsee merkin j toisess tpuksess merkin Alkutilnne syötteellä x = 1 2 n on nelikko (q 0,ε, 1, 2 n ) Tilnnett (q, u,, v) merkitään yleensä yksinkertisemmin (q, uv), j lkutilnnett syötteellä x yksinkertisesti (q 0,x) Hrri Hnpää 209 Hrri Hnpää 210 Tilnne (q,w) joht suorn tilnteeseen (q,w ), merkitään (q,w) (q,w ), jos jokin seurvist ehdoist täyttyy: kikill q,q Q, u,v Γ,, Γ j c Γ {ε}: jos δ(q,) = (q,,r), niin (q,ucv) (q,ucv); jos δ(q,) = (q,,l), niin (q,ucv) (q,ucv); jos δ(q, ) = (q,,r), niin (q,εcv) (q,cv); jos δ(q, ) = (q,,r), niin (q,uε) (q,uε); jos δ(q, ) = (q,,l), niin (q,ucε) (q,uc); jos δ(q, ) = (q,,l), niin (q,ucε) (q,uc) Tilnteet, jotk ovt muoto (q cc,w) ti (q rej,w) eivät johd mihinkään muuhun tilnteeseen Näissä tilnteiss kone pysähtyy Tilnne (q,w) joht tilnteeseen (q,w ), merkitään (q,w) (q,w ), jos on olemss tilnnejono (q 0,w 0 ), (q 1,w 1 ),, (q n,w n ), n 0, siten että (q,w) = (q 0,w 0 ) (q 1,w 1 ) (q n,w n ) = (q,w ) Turingin kone hyväksyy merkkijonon x Σ, jos muuten hylkää x:n Koneen tunnistm kieli on: (q 0,x) (q cc,w) jollkin w Γ ; L() = {x Σ (q 0,x) (q cc,w) jollkin w Γ } Hrri Hnpää 211 Hrri Hnpää 212
Esimerkki 1 Kvioesityksessä käytetyt merkinnät: Kieli { 2k k 0} voidn tunnist Turingin koneell = ({q 0,q 1,q cc,q rej },{},{},δ,q 0,q cc,q rej ), q q 0 Til q Alkutil Kvioesitys: missä /,R Hyväksyvä lopputil (q cc ) δ(q 0,) = (q 1,,R), δ(q 1,) = (q 0,,R), δ(q 0, ) = (q cc,,l), δ(q 1, ) = (q rej,,l) /,L q 0 /,R q 1 /,L /, q q Hylkäävä lopputil (q rej ) Tilsiirtymä δ(q,) = (q,, ) Hrri Hnpää 213 Hrri Hnpää 214 /,R Esimerkki 2 q 0 q 1 Kielen { k k c k k 0} tunnistv Turingin kone: /,L /,R /,L /,R B/B,R /,R C/C,R Koneen lskent esimerkiksi syötteellä etenee seurvsti: (q 0,) (q 1,) (q 0,) (q 1,ε) Kone pysähtyy tilss q rej, joten / L() (q rej,) /,L /,L /A,R /B,R q 0 q 1 q 2 q 5 q 4 B/B,R C/C,R /A,R B/B,R A/A,R q 3 c/c,l C/C,L /,L B/B,L /,L Selkeyden vuoksi ei koneen hylkäävää lopputil q rej ole tässä esitetty eksplisiittisesti Tulkint on tällöin, että kikki kviost puuttuvt kret johtvt tähän tiln Hrri Hnpää 215 Hrri Hnpää 216
Koneen lskent syötteellä cc: (q 0,cc) (q 1,Acc) (q 1,Acc) (q 2,ABcc) (q 2,ABcc) (q 3,ABCc) (q 3,ABCc) (q 3,ABCc) (q 3,ABCc) (q 4,ABCc) (q 1,AABCc) (q 1,AABCc) (q 2,AABBCc) (q 2,AABBCc) (q 3,AABBCC) (q 3,AABBCC) (q 3,AABBCC) (q 3,AABBCC) (q 4,AABBCC) (q 5,AABBCC) (q 5,AABBCC) (q 5,AABBCC) (q 5,AABBCCε) (q cc,aabbcc) /,L /,L B/B,R C/C,R /,R B/B,R /A,R /B,R q 0 q 1 q 2 q 5 q 4 /A,R B/B,R A/A,R q 3 /,R C/C,R c/c,l C/C,L /,L B/B,L /,L 42 Turingin koneiden ljennuksi 1 oniuriset koneet Sllitn, että Turingin koneen nuh koostuu k:st rinnkkisest urst, jotk kikki kone lukee j kirjoitt yhdessä lskent-skeless: Koneen siirtymäfunktion rvot ovt tällöin muoto: A L A N A T H T U R I nuhpää: # I N δ(q,( 1,, k )) = (q,( 1,, k ), ), # S G # # O N # # missä 1,, k ovt urilt 1,,k luetut merkit, 1,, k niiden tillle kirjoitettvt merkit, j {L, R} on nuhpään siirtosuunt Lskennn luksi tutkittv syöte sijoitetn ykkösurn vsempn litn; muille urille tulee sen kohdlle erityisiä tyhjämerkkejä # Hrri Hnpää 217 Hrri Hnpää 218 Luse 41 Formlisti k-urinen Turingin kone on seitsikko = (Q,Σ,Γ,δ,q 0,q cc,q rej ), missä muut komponentit ovt kuten stndrdimlliss, pitsi siirtymäfunktio: δ : (Q {q cc,q rej }) (Γ k {, }) Q (Γ k {, }) {L,R} Seurjtilnnereltion, lkutiln jne määritelmät ovt pieniä muutoksi lukuunottmtt smnliset kuin stndrdimlliss Jos formli kieli L voidn tunnist k-urisell Turingin koneell, se voidn tunnist myös stndrdimllisell Turingin koneell Todistus Olkoon = (Q,Σ,Γ,δ,q 0,q cc,q rej ) k-urinen Turingin kone, jok tunnist kielen L Vstv stndrdimllinen kone muodostetn seurvsti: = (ˆQ,Σ, ˆΓ,ˆδ, ˆq 0,q cc,q rej ), missä ˆQ = Q {ˆq0, ˆq 1, ˆq 2 }, ˆΓ = Σ Γ k j kikill q Q on [ ] [ ] ˆδ(q, ) = (q,, ), 1 k kun 1 k δ(q,( 1,, k )) = (q,( 1,, k ), ) Hrri Hnpää 219 Hrri Hnpää 220
Koneen lskennn luksi täytyy syötejono nost ykkösurlle, so korvt nuhll merkkijono 1 2 n merkkijonoll 1 # # 2 # # Tätä opertiot vrten liitetään :stä kopioidun siirtymäfunktion osn lkuun vielä pieni esiprosessori : / #,R # / #,L # # # ˆq 0 /,L n # # ˆq 1 q 0 /,R Hrri Hnpää 221 2 oninuhiset koneet 1 2 3 A L A N A T H I S O N T U R I N G q 1 q 2 q 0 δ Sllitn, että Turingin koneell on k toisistn riippumtont nuh, joill on kullkin om nuhpäänsä Kone lukee j kirjoitt kikki nuht yhdessä lskent-skeless Lskennn luksi syöte sijoitetn ykkösnuhn vsempn litn j kikki nuhpäät nuhojens lkuun Hrri Hnpää 222 Tällisen koneen siirtymäfunktion rvot ovt muoto δ(q, 1,, k ) = (q,( 1, 1 ),,( k, k )), missä 1,, k ovt nuhoilt 1,,k luetut merkit, 1,, k niiden tillle kirjoitettvt merkit, j 1,, k {L,R} nuhpäiden siirtosuunnt Formlisti k-nuhinen Turingin kone on seitsikko = (Q,Σ,Γ,δ,q 0,q cc,q rej ), missä muut komponentit ovt kuten stndrdimlliss, pitsi siirtymäfunktio: δ : (Q {q cc,q rej }) (Γ {, }) k Q ((Γ {, }) {L,R}) k Seurjtilnnereltio ym peruskäsitteet määritellään pienin muutoksin entiseen tpn Luse 42 Jos formli kieli L voidn tunnist k-nuhisell Turingin koneell, se voidn tunnist myös stndrdimllisell Turingin koneell Todistus (ide) Olkoon = (Q,Σ,Γ,δ,q 0,q cc,q rej ) k-nuhinen Turingin kone, jok tunnist kielen L Konett voidn simuloid 2k-urisell koneell siten, että koneen prittomt urt 1,3,5,,2k 1 vstvt :n nuhoj 1,2,,k, j kutkin pritont ur seurvll prillisell urll on merkillä merkitty vstvn nuhn nuhpään sijinti 1 2 3 4 5 6 A L A T U A T R δ N q 1 q 2 q 0 # # # # H I S O N I N G # # Hrri Hnpää 223 Hrri Hnpää 224
3 Epädeterministiset koneet Simuloinnin luksi syötemerkkijono sijoitetn normlisti koneen ykkösurlle Ensimmäisessä siirtymässään merkitsee nuhpääosoittimet prillisten urien ensimmäisiin merkkipikkoihin Tämän jälkeen toimii pyyhkimällä nuh edestkisin sen lku- j loppumerkin välillä Vsemmlt oikelle pyyhkäisyllä kerää tiedot kunkin osoittimen kohdll olevst :n nuhmerkistä Kun kikki merkit ovt selvillä, simuloi yhden :n siirtymän, j tkisin oikelt vsemmlle suuntutuvll pyyhkäisyllä kirjoitt -osoittimien kohdlle sinmukiset uudet merkit j siirtää osoittimi Formlisti epädeterministinen Turingin kone on seitsikko = (Q,Σ,Γ,δ,q 0,q cc,q rej ), missä muut komponentit ovt kuten deterministisessä stndrdimlliss, pitsi siirtymäfunktio: δ : (Q {q cc,q rej }) (Γ {, }) P (Q (Γ {, }) {L,R}) Siirtymäfunktion rvon δ(q,) = {(q 1, 1, 1 ),,(q k, k, k )} tulkint on, että ollessn tilss q j lukiessn merkin kone voi toimi jonkin kolmikon (q i, i, i ) mukisesti Hrri Hnpää 225 Epädeterministisen koneen tilnteet, tilnnejohdot jne määritellään formlisti smoin kuin deterministisenkin koneen tpuksess, pitsi että ehdon δ(q,) = (q,, ) sijn kirjoitetn (q,, ) δ(q,) Tämän muutoksen tki seurjtilnnereltio ei ole enää yksirvoinen: koneen tilnteell (q, w) voi nyt oll useit vihtoehtoisi seurji, so tilnteit (q,w ), joill (q,w) (q,w ) Koneen tunnistm kieli määritellään: L() = {x Σ (q 0,x) (q cc,w) jollkin w Γ } Epädeterministisen koneen tpuksess siis merkkijono x kuuluu :n tunnistmn kieleen, jos jokin :n kelvollinen tilnnejono joht lkutilnteest syötteellä x hyväksyvään lopputilnteeseen Hrri Hnpää 226 Esimerkki Yhdistettyjen lukujen tunnistminen epädeterministisillä Turingin koneill Ei-negtiivinen kokonisluku n on yhdistetty, jos sillä on kokonislukutekijät p,q 2, joill pq = n Luku, jok ei ole yhdistetty, on lkuluku Oletetn, että on jo suunniteltu deterministinen kone CHECK_ULT, jok tunnist kielen L(CHECK_ULT) = {n#p#q n,p,q inäärilukuj, n = pq} Olkoon lisäksi GO_START deterministinen Turingin kone, jok siirtää nuhpään osoittmn nuhn ensimmäistä merkkiä Hrri Hnpää 227 Hrri Hnpää 228
Olkoon edelleen GEN_INT seurv mielivltisen ykköstä suuremmn inääriluvun nuhn loppuun tuottv epädeterministinen Turingin kone: 0/0,R 1/1,R /#,R /1,R /0,R /0,R Epädeterministinen Turingin kone TEST_COPOSITE, jok tunnist kielen L(TEST_COPOSITE) = {n n on inäärimuotoinen yhdistetty luku} voidn muodost näistä komponenteist yhdistämällä: /1,R n n#p n#p#q n#p#q /1,R GEN_INT GEN_INT GO_START CHECK_ULT Hrri Hnpää 229 Yhdistetty kone hyväksyy syötteenä nnetun inääriluvun n, jos j vin jos on olemss inääriluvut p,q 2, joill n = pq siis jos j vin jos n on yhdistetty luku Huom Yleinen kviomerkintä Turingin koneiden yhdistämiselle: 1 Hrri Hnpää 230 Luse 43 Jos formli kieli L voidn tunnist epädeterministisellä Turingin koneell, se voidn tunnist myös stndrdimllisell deterministisellä Turingin koneell Todistus (ide) Olkoon = (Q,Σ,Γ,δ,q 0,q cc,q rej ) 0 2 epädeterministinen Turingin kone, jok tunnist kielen L Konett voidn simuloid kolmenuhisell deterministisellä koneell, jok käy systemttisesti läpi :n mhdollisi lskentoj (tilnnejonoj), kunnes löytää hyväksyvän jos sellinen on olemss Kone voidn edelleen muunt stndrdimlliseksi edellisten luseiden konstruktioill Hrri Hnpää 231 Hrri Hnpää 232
Yksityiskohtisemmin: Nuhll 1 säilyttää kopiot syötejonost j nuhll 2 se 1 simuloi koneen työnuh Kunkin simuloitvn lskennn 2 luksi kopioi syötteen nuhlt 1 nuhlle 2 j pyyhkii pois nuhlle 3 2 edellisen lskennn jäljiltä mhdollisesti jääneet merkit Nuhll 3 pitää kirj vuoross olevn lskennn järjestysnumerost i i n n p W u O R K D 1 D 3 D 2 D 2 D 1 D 4 D 3 q 1 q 2 q 0 δ t Trkemmin snoen, olkoon r suurin :n siirtymäfunktion rvojoukon koko Tällöin :ll on erityiset nuhmerkit D 1,,D r, 1 joist koostuvi jonoj se generoi nuhlle 3 knonisess 2 järjestyksessä: ε, D 1, D 2,, D r, 3 D 1 D 1, D 1 D 2,, D 1 D r, D 2 D 1, Kutkin generoitu jono kohden simuloi yhden :n osittisen lskennn, joss epädeterministiset vlinnt tehdään kolmosnuhn koodijonon ilmisemll tvll i i n n p W u O R K D 1 D 3 D 2 D 2 D 1 D 4 D 3 q 1 q 2 q 0 δ t Hrri Hnpää 233 Hrri Hnpää 234 Esimerkiksi jos kolmosnuhll on jono D 1 D 3 D 2, niin ensimmäisessä siirtymässä vlitn vihtoehto 1, toisess vihtoehto 3, kolmnness vihtoehto 2 Ellei tämä lskent johtnut :n hyväksyvään lopputiln, generoidn seurv koodijono D 1 D 3 D 3 j loitetn lust Jos koodijono on epäkelpo, so jos siinä josskin kohden on tilnteeseen liin suuri koodi, simuloitu lskent keskeytetään j generoidn seurv jono 1 2 3 i i n n p W u O R K D 1 D 3 D 2 D 2 D 1 D 4 D 3 q 1 q 2 q 0 δ t 1 2 3 i i n n p W u O R K D 1 D 3 D 2 D 2 D 1 D 4 D 3 q 1 q 2 q 0 δ Selvästi tämä systemttinen koneen lskentojen läpikäynti joht koneen hyväksymään syötejonon, jos j vin jos koneell on syötteen hyväksyvä lskent Jos hyväksyvää lskent ei ole, kone ei pysähdy t Hrri Hnpää 235 Hrri Hnpää 236
17 Numeroituvt j ylinumeroituvt joukot ääritelmä 110 Joukko X on numeroituvsti ääretön, jos on olemss ijektio f : N X Joukko on numeroituv, jos se on äärellinen ti numeroituvsti ääretön Joukko, jok ei ole numeroituv on ylinumeroituv Intuitiivisesti snoen joukko X on numeroituv, jos sen lkiot voidn järjestää j indeksoid luonnollisill luvuill: X = {x 0,x 1,x 2,,x n 1 }, jos X on n-lkioinen äärellinen joukko j jos X on numeroituvsti ääretön X = {x 0,x 1,x 2,}, Numeroituvn joukon kikki osjoukot ovt myös numeroituvi (HT), mutt ylinumeroituvill joukoill on sekä numeroituvi että ylinumeroituvi osjoukkoj Siten ylinumeroituvt joukot ovt jossin mielessä isompi kuin numeroituvt Hrri Hnpää 237 Luse 111 inkä thns kkoston Σ merkkijonojen joukko Σ on numeroituvsti ääretön Todistus uodostetn ijektio f : N Σ seurvsti Olkoon Σ = { 1, 2,, n } Kiinnitetään Σ:n merkeille jokin kkosjärjestys ; olkoon se 1 < 2 < < n Joukon Σ merkkijonot voidn nyt luetell vlitun kkosjärjestyksen suhteen knonisess t leksikogrfisess järjestyksessä (engl cnonicl t lexicogrphic order) seurvsti: ensin luetelln 0:n mittiset merkkijonot (= ε), sitten 1:n mittiset (= 1, 2,, n ), sitten 2:n mittiset jne; kunkin pituusryhmän sisällä merkkijonot luetelln kkosjärjestyksessä Hrri Hnpää 238 Bijektio f on siis: 0 ε 1 1 2 2 n n n + 1 1 1 n + 2 1 2 2n 1 n 2n + 1 2 1 3n 2 n n 2 + n n n n 2 + n + 1 1 1 1 n 2 + n + 2 1 1 2 Itse siss millä thns ohjelmointikielellä kirjoitetut ohjelmt ovt kielen peruskkoston (esim C-kielessä ASCII-merkistön) merkkijonoj Luseen 111 mukn minkä thns kkoston merkkijonojen joukko on numeroituvsti ääretön, joten myös millä thns ohjelmointikielellä mhdollisten ohjelmien joukko on numeroituv Seurvksi todistetn, että kikkien formlien kielten joukko on ylinumeroituv Formlej kieliä on siis enemmän kuin mhdollisi tietokoneohjelmi, j siksi millään ohjelmointikielellä ei void lti tunnistusutomttej kikille formleille kielille (Ti toisin snoen: on olemss peritteess mhdollisi I/O-kuvuksi, joit ei void toteutt tietokoneell) Hrri Hnpää 239 Hrri Hnpää 240
Luse 112 inkä thns kkoston Σ kikkien formlien kielten perhe on ylinumeroituv Todistus (ns Cntorin digonlirgumentti) erkitään kkoston Σ kikkien formlien kielten perhettä P (Σ ) = A Tehdään vstoletus: oletetn, että olisi olemss kikki Σ:n formlit kielet kttv numerointi: A = {A 0,A 1,A 2,} Olkoot Σ :n merkkijonot knonisess järjestyksessä x 0,x 1,x 2, ääritellään em numerointej käyttäen formli kieli Ã: à = {x i Σ x i / A i } Kosk à A j A:n numerointi oletettiin kttvksi, pitäisi oll à = A k jollkin k N utt tällöin Ã:n määritelmän mukn à A 0 A 1 A 2 A 3 x 0 1 0 0 0 1 x 1 0 x 2 1 1 x 3 0 0 0 0 1 0 0 0 1 1 1 0 Kuvllisesti todistuksen ide voidn esittää seurvsti uodostetn kielten A 0,A 1,A 2, j merkkijonojen x 0,x 1,x 2, insidenssimtriisi, jonk rivin i srkkeess j on rvo 1 jos x i A j j muuten 0 Tällöin kieli à poikke kustkin kielestä A k mtriisin digonlill : x k à x k / A k = à Stu ristiriit osoitt, että vstoletus on väärä Hrri Hnpää 241 18 *Ekskursio: Turingin pysähtymisongelm Luseiden 111 j 112 mukn on siis olemss formlej kieliä (I/O-kuvuksi), joit ei void toteutt esim C-ohjelmill Entä jokin konkreettinen esimerkki tällisest? Tunnetuin esimerkki on ns Turingin pysähtymisongelm (Aln Turing, 1936) C-ohjelmi käyttäen tulos voidn muotoill seurvsti: Väite Ei ole olemss C-funktiot hlt(p,x), jok s syötteenään mielivltisen C-funktion tekstin p j tälle trkoitetun syötteen x j tuott tuloksen 1, jos p:n suoritus pysähtyy syötteellä x, j 0 jos p:n suoritus x:llä jää ikuiseen silmukkn Hrri Hnpää 243 Hrri Hnpää 242 Todistus Oletetn väitteen vstisesti, että tällinen funktio hlt voitisiin lti uodostetn tätä käyttäen toinen funktio confuse (ks ll) erkitään funktion confuse ohjelmtekstiä c:llä j trkstelln funktion confuse lskent tällä omll kuvukselln void confuse(chr *p){ int hlt(chr *p, chr *x){ /* Funktion hlt runko */ } if (hlt(p,p) == 1) while (1); } Sdn ristiriit: confuse(c) pysähtyy hlt(c,c) == 1 confuse(c) ei pysähdy Ristiriidst seur, että oletettu pysähtymistestusfunktiot hlt ei voi oll olemss Smnsukuisi ns rtkemttomi ongelmi on itse siss pljon Asin pltn kurssin loppupuolell Hrri Hnpää 244
6 LASKETTAVUUSTEORIAA Churchin Turingin teesi: ielivltinen (riittävän vhv) lskulite Turingin kone Lskettvuusteori: Trkstelln mitä Turingin koneill voi j erityisesti mitä ei voi lske Tärkeä erottelu: Pysähtyvät j ei-pysähtyvät Turingin koneet ääritelmä 61 Turingin kone = (Q,Σ,Γ,δ,q 0,q cc,q rej ) on totlinen, jos se pysähtyy kikill syötteillä Formli kieli A on rekursiivisesti numeroituv, jos se voidn tunnist jollkin Turingin koneell, j rekursiivinen, jos se voidn tunnist jollkin totlisell Turingin koneell Vihtoehtoinen termistö: Plutetn mieliin päätösongelmien (inäärivsteisten I/O-kuvusten) j formlien kielten vstvuus: päätösongelm Π vstv formli kieli A Π koostuu niistä syötteistä x, joille ongelmn Π vstus on kyllä (so toivottu vste = 1) Päätösongelm Π on rtkev, jos sitä vstv formli kieli A Π on rekursiivinen, j osittin rtkev, jos A Π on rekursiivisesti numeroituv Ongelm, jok ei ole rtkev, on rtkemton (Huom: rtkemton ongelm voi siis oll osittin rtkev) Toisin snoen: päätösongelm on rtkev, jos sillä on totlinen, kikill syötteillä pysähtyvä rtkisulgoritmi, j osittin rtkev, jos sillä on rtkisulgoritmi jok kyllä -tpuksiss vst in oikein, mutt ei -tpuksiss voi jäädä pysähtymättä Hrri Hnpää 245 62 Rekursiivisten j rek num kielten perusominisuuksi Luse 61 Olkoot A,B Σ rekursiivisi Tällöin myös Ā = Σ A, A B j A B ovt rekursiivisi Todistus (i) Olkoon A totlinen Turingin kone, joll L( A ) = A Kielen Ā tunnistv totlinen Turingin kone sdn vihtmll A :n hyväksyvä j hylkäävä lopputil keskenään Hrri Hnpää 246 (ii) Olkoot A j B totliset Turingin koneet, joill L( A ) = A, L( B ) = B Kielen A B tunnistv totlinen Turingin kone sdn yhdistämällä A j B toimimn peräkkäin: jos A hyväksyy syötteen, myös hyväksyy; jos A päätyy hylkäämiseen, simuloi vielä B :tä A B A (iii) A B = Ā B Hrri Hnpää 247 Hrri Hnpää 248
Luse 62 Olkoot A,B Σ rekursiivisesti numeroituvi Tällöin myös A B j A B ovt rekursiivisesti numeroituvi Todistus A B kuten Luse 61 j A B kuten Luse 63 (HT) Luse 63 Kieli A Σ on rekursiivinen, jos j vin jos kielet A j Ā ovt rekursiivisesti numeroituvi Todistus Luseen 61(i) nojll jos A on rekursiivinen, myös Ā on rekursiivinen j siis sekä A että Ā ovt rekursiivisesti numeroituvi Osoitetn, että jos A j Ā ovt rekursiivisesti numeroituvi, A on rekursiivinen: Olkoot A j Ā Turingin koneet kielten A j Ā tunnistmiseen Kikill x Σ joko A ti Ā pysähtyy j hyväksyy x:n uodostetn A j Ā rinnkkin yhdistämällä totlinen kksinuhinen tunnistjkone : simuloi ykkösnuhlln konett A j kkkosnuhlln konett Ā Jos ykkössimultio pysähtyy hyväksyvään lopputiln, hyväksyy syötteen; jos ts kkkossimultio hyväksyy, hylkää syötteen Seurus 64 Olkoon A Σ rekursiivisesti numeroituv kieli, jok ei ole rekursiivinen Tällöin kieli Ā ei ole rekursiivisesti numeroituv A Ā Hrri Hnpää 249 63 Turingin koneiden koodus Trkstelln stndrdimllisi Turingin koneit, joiden syötekkosto on Σ = {0,1} Jokinen tällinen kone voidn esittää inäärijonon: = (Q,Σ,Γ,δ,q 0,q cc,q rej ) Oletetn, että Q = {q 0,q 1,,q n }, missä q cc = q n 1 j q rej = q n ; j että Γ {, } = { 0, 1,, m }, missä 0 = 0, 1 = 1, 2 = j 3 = erkitään lisäksi 0 = L j 1 = R Siirtymäfunktion δ rvojen koodus: säännön δ(q i, j ) = (q r, s, t ) koodi on Koko koneen koodi on c ij = 0 i+1 10 j+1 10 r+1 10 s+1 10 t+1 c = 111c 00 11c 01 1111c 0m 11c 10 1111c 1m 11 11c n 2,0 1111c n 2,m 111 Hrri Hnpää 251 Hrri Hnpää 250 Kääntäen voidn jokiseen inäärijonoon c liittää jokin Turingin kone c Binäärijonoihin, jotk eivät ole edellisen kooduksen mukisi Turingin koneiden koodej, liitetään jokin trivili, kikki syötteet hylkäävä kone triv ääritellään siis: { kone, joll c = c, jos c on kelvollinen konekoodi c = kone triv, muuten Sdn luettelo kikist kkoston {0, 1} Turingin koneist, j epäsuorsti myös kikist kkoston {0, 1} rekursiivisesti numeroituvist kielistä Koneet ovt kielet vstvsti ε, 0, 1, 00, 01,, L( ε ),L( 0 ),L( 1 ),L( 00 ),L( 01 ), (indeksit knonisess järjestyksessä) Kukin kieli voi esiintyä luetteloss mont kert Hrri Hnpää 252
Eräs ei rekursiivisesti numeroituv kieli Lemm 65 Kieli D = {c {0,1} c / L( c )} Kieltä D vstv päätösongelm: Onko niin, ettei nnetun koodin c esittämä Turingin kone hyväksy syötettä c? Luontevmpi esimerkkejä seur jtkoss Kielen D muodostminen kuvllisesti: jos kielten L( ε ), L( 0 ), L( 1 ), krkteristiset funktiot esitetään tulukkon, niin kieli D poikke kustkin kielestä tulukon digonlill: ei ole rekursiivisesti numeroituv Todistus Oletetn, että olisi D = L() jollkin stndrdimllisell Turingin koneell Olkoon d koneen inäärikoodi, so D = L( d ) Tällöin on d D d / L( d ) = D Ristiriidst seur, että kieli D ei voi oll rekursiivisesti numeroituv D L( ε ) L( 0 ) L( 1 ) L( 00 ) ε 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 00 0 0 0 0 1 Hrri Hnpää 253 64 Universlit Turingin koneet Hrri Hnpää 254 Luse 66 Akkoston {0, 1} universlikieli U määritellään: U = {c w w L()} Olkoon A jokin kkoston {0, 1} rekursiivisesti numeroituv kieli, j olkoon kielen A tunnistv stndrdimllinen Turingin kone Tällöin on A = {w {0,1} c w U} yös kieli U on rekursiivisesti numeroituv Kielen U tunnistvi Turingin koneit snotn universleiksi Turingin koneiksi Kieli U on rekursiivisesti numeroituv Todistus Kielen U tunnistv universlikone U on helpoint kuvt kolmenuhisen mllin (Stndrdointi tvlliseen tpn) Lskennn luksi trkstettv syöte sijoitetn koneen U ykkösnuhn lkuun Tämän jälkeen kone toimii seurvsti: 1 Aluksi U trkst, että syöte on muoto cw, missä c on kelvollinen Turingin koneen koodi Jos syöte ei ole kelvollist muoto, U hylkää sen; muuten se kopioi merkkijonon w = 1 2 k {0,1} kkkosnuhlle muodoss 00010 1+1 10 2+1 110 k +1 10000 Hrri Hnpää 255 Hrri Hnpää 256
1 2 3 0 1 1 i+1 1 0 0 j+1 0 i+1 0 0 1 2 Jos syöte on muoto cw, missä c = c jollkin koneell, U :n on selvitettävä, hyväksyisikö kone syötteen w Tässä trkoituksess U säilyttää ykkösnuhll :n kuvust c, kkkosnuhll simuloi :n nuh, j kolmosnuhll säilyttää tieto :n simuloidust tilst muodoss q i 0 i+1 (luksi siis U kirjoitt kolmosnuhlle tiln q 0 koodin 0) Hrri Hnpää 257 1 0 j+1 0 1 0 1 2 3 0 1 1 i+1 1 0 0 j+1 0 i+1 0 3 Alkutoimien jälkeen U toimii viheittin, simuloiden kusskin viheess yhden koneen siirtymän Viheen luksi U etsii ykkösnuhlt :n kuvuksest kohdn, jok vst :n simuloitu til q i j merkkiä j Olkoon ykkösnuhll koodinkoht 0 i+1 10 j+1 10 r+1 10 s+1 10 t+1 0 1 Tällöin U korv kolmosnuhll merkkijonon 0 i+1 merkkijonoll 0 r+1, kkkosnuhll merkkijonon 0 j+1 merkkijonoll 0 s+1, j siirtää kkkosnuhn nuhpäätä yhden simuloidun merkin vsemmlle, jos t = 0, j oikelle, jos t = 1 Hrri Hnpää 258 1 0 j+1 0 1 0 Luse 67 1 2 3 0 1 1 i+1 1 0 0 j+1 0 i+1 0 Jos ykkösnuhll ei ole yhtään simuloituun tiln q i liittyvää koodi, simuloitu kone on tullut hyväksyvään ti hylkäävään lopputiln; tällöin i = k + 1 ti i = k + 2, missä q k on viimeinen ykkösnuhll kuvttu til Kone U siirtyy vstvsti lopputiln q cc ti q rej 0 1 1 0 j+1 0 1 0 Kieli U ei ole rekursiivinen Todistus Oletetn, että kielellä U olisi totlinen tunnistjkone T U Tällöin voitisiin Lemmn 65 kielelle D muodost totlinen tunnistjkone D seurvsti Olkoon OK totlinen Turingin kone, jok test, onko syötteenä nnettu merkkijono kelvollinen Turingin koneen koodi, j olkoon DUP totlinen Turingin kone, jok muunt syötejonon c muotoon cc Kone D muodostetn koneist T U, OK j DUP yhdistämällä seurvn kvion esittämällä tvll: c OK DUP cc T U Hrri Hnpää 259 Hrri Hnpää 260
Seurus 68 c cc OK U T DUP Selvästi kone D on totlinen, jos kone U T on, j c L( D ) c / L( OK ) ti cc / L( T U ) c / L( c ) c D utt lemmn 65 mukn kieli D ei ole rekursiivinen; ristiriit Kieli ei ole rekursiivisesti numeroituv Ũ = {c w w / L()} Todistus Kieli Ũ on oleellisesti sm kuin universlikielen U komplementti Ū; trksti otten on Ū = Ũ ERR, missä ERR on helposti tunnistettv rekursiivinen kieli ERR = {x {0,1} x ei sisällä lkuosnn kelvollist Turingin koneen koodi} Jos siis kieli Ũ olisi rekursiivisesti numeroituv, olisi smoin myös kieli Ū Kosk kieli U on rekursiivisesti numeroituv, seurisi tästä, että U on peräti rekursiivinen utt tämä on vstoin edellisen luseen tulost, mistä päätellään, että kieli Ũ ei voi oll rekursiivisesti numeroituv Hrri Hnpää 261 65 Turingin koneiden pysähtymisongelm Luse 69 Kieli H = {c w pysähtyy syötteellä w} on rekursiivisesti numeroituv, mutt ei rekursiivinen Todistus Todetn ensin, että kieli H on rekursiivisesti numeroituv Luseen 66 todistuksess esitetystä universlikoneest U on helppo muokt kone, jok syötteellä c w simuloi koneen lskent syötteellä w j pysähtyy hyväksyvään lopputiln, jos j vin jos simuloitu lskent ylipäätään pysähtyy Hrri Hnpää 262 Osoitetn sitten, että kieli H ei ole rekursiivinen Oletetn nimittäin, että olisi H = L( H ) jollkin totlisell Turingin koneell H Oletetn lisäksi, että kone H pysähtyessään jättää nuhlle lkuperäisen syötteensä, mhdollisesti tyhjämerkeillä jtkettun Olkoon U luseen 66 todistuksess konstruoitu universlikone Kielelle U voitisiin nyt muodost totlinen tunnistj yhdistämällä koneet H j U seurvsti: c w H U def U(m,w): if not _H(m,w): reject return _U(m,w) Luseen 67 mukn tällist kielen U tunnistjkonett ei kuitenkn voi oll olemss Stu ristiriit osoitt, että H ei voi oll rekursiivinen Hrri Hnpää 263 Hrri Hnpää 264
67 Ricen luse Seurus 610 Kieli H = {c w ei pysähdy syötteellä x} ei ole rekursiivisesti numeroituv Ricen luseen mukn kikki Turingin koneiden tunnistmi kieliä, t niiden lskemi I/O-kuvuksi koskevt epätrivilit kysymykset ovt rtkemttomi Johdnton luseen todistukseen trkstelln ensin yhtä sen erikoistpust, Turingin koneiden tunnistmien kielten epätyhjyysongelm: Hyväksyykö nnettu Turingin kone yhtään syötemerkkijono? Ongelmn esitys formlin kielenä on NE = {c {0,1} L( c ) /0} Luse 611 Kieli NE on rekursiivisesti numeroituv, mutt ei rekursiivinen Hrri Hnpää 265 Todistus Todetn ensin, että kieli NE on rekursiivisesti numeroituv muodostmll sille tunnistjkone NE Kone NE on helpoint suunnitell epädeterministisenä OK test, onko nnettu syöte kelvollinen Turingin koneen koodi, j G kirjoitt epädeterministisesti nuhll jo olevn merkkijonon perään mielivltisen inäärijonon w uodostetn NE yhdistämällä koneet OK, G j universlikone U seurvsti: Hrri Hnpää 266 c OK G cw U c OK def NE(m): if not _ok(m): reject w = choose_string_nondeterministiclly() return _U(m,w) G Hrri Hnpää 267 cw U Selvästi on: c L( NE ) c on kelvollinen Tk-koodi j w se cw U c on kelvollinen Tk-koodi j w se w L( c ) L( c ) /0 Hrri Hnpää 268
Osoitetn, ettei kieli NE ole rekursiivinen Oletetn, että kielellä NE olisi totlinen tunnistjkone NE T, j muodostetn sitä käyttäen totlinen tunnistjkone U T kielelle U (Ristiriit) Konstruktio perustuu syötteiden koodmiseen Turingin koneiden ohjelmvkioiksi Olkoon mielivltinen Turingin kone, jonk toimint syötteellä w = 1 2 k hlutn tutki erkitään w :llä konett, jok in korv todellisen syötteensä merkkijonoll w j toimii sitten kuten : /,L Olkoon sitten ENCODE Turingin kone, jok s syötteenään mielivltisen Turingin koneen koodist c j inäärijonost w muodostuvn jonon c w j jättää tuloksenn nuhlle edellä kuvtun koneen w koodin c w : c w ENCODE c w / 1,R / 2,R / k,r /,L /,R Koneen w toimint ei siis riipu linkn sen todellisest syötteestä, vn se joko hyväksyy ti hylkää kikki merkkijonot, sen mukn miten suhtutuu w:hen: L( w ) = { {0,1}, jos w L(); /0, jos w / L() def w(x): return _U(,w) (Jos syöte ei ole muoto cw, missä c on kelvollinen Turingin koneen koodi, kone ENCODE päätyy hylkäävään lopputiln) Kone ENCODE operoi siis Turingin koneiden koodeill Annetun koneen koodiin se lisää siirtymäviisikoit ( konekäskyjä ) j muutt tilojen numerointi siten, että koodi tulee koneen sijn esittämään konett w Hrri Hnpää 269 Hrri Hnpää 270 Universlikielelle U voitisiin nyt koneet ENCODE j hypoteettinen NE T seurvll tvll yhdistämällä muodost totlinen tunnistjkone U T : c w c w ENCODE T NE Kone U T on totlinen, jos T NE on, j L(T U ) = U, kosk: def TU(m,w): def w(x): return _U(m,w) return TNE(w) c w L( T U ) c w L(T NE ) = NE L(w ) /0 w L() utt kieli U ei ole rekursiivinen, joten tällinen totlinen tunnistjkone U T ei ole mhdollinen Sdust ristiriidst päätellään, että myöskään kielellä NE ei voi oll totlist tunnistj NE T Ricen luse Turingin koneiden semnttinen ominisuus S on mikä thns kokoelm rekursiivisesti numeroituvi kkoston {0, 1} kieliä; koneell on ominisuus S, jos L() S Trivilit ominisuudet ovt S = /0 (ominisuus, jot ei ole millään koneell) j S = RE (ominisuus, jok on kikill koneill) Ominisuus S on rtkev, jos joukko codes(s) = {c L( c ) S} on rekursiivinen Toisin snoen: ominisuus on rtkev, jos nnetust Turingin koneen koodist voidn lgoritmisesti päätellä, onko koneell kysytty semnttinen ominisuus Luse 612 [Rice 1953] Kikki Turingin koneiden epätrivilit semnttiset ominisuudet ovt rtkemttomi Hrri Hnpää 271 Hrri Hnpää 272
Todistus Olkoon S mielivltinen epätrivili semnttinen ominisuus Voidn olett, että /0 / S: toisin snoen, että tyhjän joukon tunnistvill Turingin koneill ei ole trksteltv ominisuutt Jos nimittäin /0 S, voidn ensin osoitt, että ominisuus S = RE S on rtkemton, j päätellä edelleen tästä että myös ominisuus S on rtkemton (Kosk codes( S) = codes(s)) Kosk S on epätrivili, on olemss jokin Turingin kone A, joll on ominisuus S joll siis L( A ) /0 S Hrri Hnpää 273 Oletetn sitten, että ominisuus S olisi rtkev, so että kielellä codes(s) olisi totlinen tunnistjkone S T Tällöin stisiin edellisen todistuksen tpn totlinen tunnistjkone kielelle U yhdistämällä koneet ENCODE j S T seurvsti: c w ENCODE c w T S Selvästi kone T U on totlinen, jos T S on, j def TU(,w): def w(x): if (w): return _A(x) else: reject return TS(w) c w L( T U ) c w L(T S ) = codes(s) L(w ) S w L() Kosk kieli U ei ole rekursiivinen, tämä on mhdotont, mistä päätellään, ettei ominisuus S voi oll rtkev Olkoon nyt ENCODE Turingin kone, jok muodost syötteenä nnetust merkkijonost x c w seurvnlisen Turingin koneen w koodin Jos syöte on väärää muoto, ENCODE hylkää sen Syötteellä x kone w toimii ensin kuten syötteellä w Jos hyväksyy w:n, w toimii kuten kone A syötteellä x Jos hylkää w:n, myös w hylkää x:n Kone w tunnist siis kielen w strt { L( w L(A ), jos w L(); ) = /0, jos w / L() A def w(x): if (w): return _A(x) else: reject Kosk oletuksen mukn L( A ) S j /0 / S, on koneell w ominisuus S, jos j vin jos w L() Hrri Hnpää 274 68 uit rtkemttomuustuloksi Luse 613 (Predikttiklkyylin rtkemttomuus; Church/Turing 1936) Ei ole olemss lgoritmi, jok rtkisisi, onko nnettu ensimmäisen kertluvun predikttiklkyylin kv φ vlidi ( loogisesti tosi, todistuv predikttiklkyylin ksioomist) Luse 614 ( Hilertin 10 ongelm ; tijsevitsh/dvis/roinson/putnm 1953 70) Ei ole olemss lgoritmi, jok rtkisisi, onko nnetull kokonislukukertoimisell polynomill P(x 1,,x n ) kokonislukunollkohti (so jonoj (m 1,,m n ) Z n, joill P(m 1,,m n ) = 0) Ongelm on rtkemton jo, kun n = 15 ti deg(p) = 4 Hrri Hnpää 275 Hrri Hnpää 276
Eräiden kielioppiongelmien rtkevuus, kun nnettun on kieliopit G j G Chomskyn hierrkin tietyltä tsolt i j merkkijono w Tulukoss R rtkev, E ei rtkev, T in tott Tso i: Ongelm: onko 3 2 1 0 w L(G)? R R R E L(G) = /0? R R E E L(G) = Σ? R E E E L(G) = L(G )? R E E E L(G) L(G )? R E E E L(G) L(G ) = /0? R E E E L(G) säännollinen? T E E E L(G) L(G ) tyyppiä i? T E T T L(G) tyyppiä i? T E T E 69 Rekursiiviset funktiot Turingin koneen = (Q,Σ,Γ,δ,q 0,q cc,q rej ) lskem osittiskuvus (t -funktio) f : Σ Γ määritellään: { u, jos (q0,x) (q,uv) jollkin q {q cc,q rej },v Γ ; f (x) = määrittelemätön, muuten Osittisfunktio f : Σ A on osittisrekursiivinen jos se voidn lske jollkin Turingin koneell j (kokonis-)rekursiivinen, jos se voidn lske jollkin totlisell Turingin koneell Ekvivlentisti voitisiin määritellä, että osittisrekursiivifunktio f on rekursiivinen, jos sen rvo f(x) on määritelty kikill x Hrri Hnpää 277 Luse 615 (i) Kieli A Σ on rekursiivinen, jos j vin jos sen krkteristinen funktio { 1, χ A : Σ jos x A; {0,1}, χ A (x) = 0, jos x / A on rekursiivinen funktio (ii) Kieli A Σ on rekursiivisesti numeroituv, jos j vin jos on A = /0 ti on olemss rekursiivinen funktio g : {0,1} Σ, joll Todistus HT A = {g(x) x {0,1} } Hrri Hnpää 278 5 RAJOITTAATTOAT KIELIOPIT ääritelmä 51 Rjoittmton kielioppi t yleinen merkkijonomuunnossysteemi on nelikko missä V on kieliopin kkosto; G = (V,Σ,P,S), Σ V on kieliopin päätemerkkien joukko; N = V Σ on välikemerkkien t -symolien joukko; P V + V on kieliopin sääntöjen t produktioiden joukko (V + = V {ε}); S N on kieliopin lähtösymoli Produktiot (ω,ω ) P merkitään tvllisesti ω ω Hrri Hnpää 279 Hrri Hnpää 280
erkkijono γ V tuott t joht suorn merkkijonon γ V kieliopiss G, merkitään γ G γ jos voidn kirjoitt γ = αωβ, γ = αω β (α,β,ω V, ω V + ), j kieliopiss on produktio ω ω Jos kielioppi G on yhteydestä selvä, merkitään γ γ erkkijono γ V tuott t joht merkkijonon γ V kieliopiss G, merkitään γ γ G jos on olemss jono V :n merkkijonoj γ 0,γ 1,,γ n (n 0), siten että erkkijono γ V on kieliopin G lusejohdos, jos on S γ G Pelkästään päätemerkeistä koostuv G:n lusejohdos x Σ on G:n luse Kieliopin G tuottm t kuvm kieli L(G) koostuu G:n luseist, so: L(G) = {x Σ S x} G γ = γ 0 G γ 1 G G γ n = γ Jälleen, jos G on yhteydestä selvä, merkitään γ γ Hrri Hnpää 281 Esimerkki Rjoittmton kielioppi ei-yhteydettömälle kielelle { k k c k k 0} S LT ε T ABCT ABC BA AB CB BC CA AC LA Esimerkiksi luseen cc johto: A B B C c cc cc S LT LABCT LABCABC LABACBC LAABCBC LAABBCC ABBCC BBCC BCC CC cc cc Hrri Hnpää 283 Hrri Hnpää 282 Luse 51 Jos formli kieli L voidn tuott rjoittmttomll kieliopill, se voidn tunnist Turingin koneell Todistus Olkoon G = (V,Σ,P,S) kielen L tuottv rjoittmton kielioppi uodostetn kielen L tunnistv kksinuhinen epädeterministinen Turingin kone G seurvsti: c c L A B A C q 1 q 2 q 0 δ B C Nuhll 1 kone säilyttää kopiot syötejonost Nuhll 2 on kullkin hetkellä jokin G:n lusejohdos, jot kone pyrkii muuntmn syötejonon muotoiseksi Toimintns luksi G kirjoitt kkkosnuhlle kieliopin lähtösymolin S Hrri Hnpää 284
Koneen G lskent koostuu viheist Kusskin viheess kone: (i) vie kkkosnuhn nuhpään epädeterministisesti johonkin kohtn nuhll; (ii) vlitsee epädeterministisesti jonkin G:n produktion, jot yrittää sovelt vlittuun nuhnkohtn (produktiot on koodttu G :n siirtymäfunktioon; (iii) jos produktion vsen puoli sopii yhteen nuhll olevien merkkien knss, G korv o merkit produktion oiken puolen merkeillä; (iv) viheen lopuksi G vert ykkös- j kkkosnuhn merkkijonoj toisiins: jos jonot ovt smt, kone siirtyy hyväksyvään lopputiln j pysähtyy, muuten loitt uuden viheen (koht (i)) Luse 52 Jos formli kieli L voidn tunnist Turingin koneell, se voidn tuott rjoittmttomll kieliopill Todistus Olkoon = (Q,Σ,Γ,δ,q 0,q cc,q rej ) kielen L tunnistv stndrdimllinen Turingin kone uodostetn kielen L tuottv rjoittmton kielioppi G seurvsti Ide: Kieliopin G välikkeiksi otetn (muiden muss) kikki :n tiloj q Q edustvt symolit Koneen tilnne (q, uv) esitetään merkkijonon [uqv] :n siirtymäfunktion perusteell G :ään muodostetn produktiot, joiden nsiost [uqv] [u q v ] joss (q,uv) (q,u v ) G Siten hyväksyy syötteen x, jos j vin jos [q 0 x] G [uq cc v] joillkin u,v Σ Hrri Hnpää 285 Hrri Hnpää 286 Kikkin kielioppiin G tulee kolme ryhmää produktioit: 1 Produktiot, joill lähtösymolist S voidn tuott mikä thns merkkijono muoto x[q 0 x], missä x Σ j [, q 0 j ] ovt G :n välikkeitä 2 Produktiot, joill merkkijonost [q 0 x] voidn tuott merkkijono [uq cc v], jos j vin jos hyväksyy x:n 3 Produktiot, joill muoto [uq cc v] olev merkkijono muutetn tyhjäksi merkkijonoksi Kieleen L() kuuluvn merkkijonon x tuottminen tphtuu tällöin seurvsti: (1) S (2) x[q 0 x] (3) x[uq cc v] x ääritellään siis G = (V,Σ,P,S), missä V = Γ Q {S,T,[,],E L,E R } {A Σ}, j produktiot P muodostuvt seurvist kolmest ryhmästä: 1 Alkutilnteen tuottminen: S T [q 0 ] T ε T TA ( Σ) A [q 0 [q 0 A ( Σ) A A (, Σ) A ] ] ( Σ) Hrri Hnpää 287 Hrri Hnpää 288
2 :n siirtymien simulointi (, Γ, c Γ {[}) : Siirtymät: Produktiot: δ(q,) = (q,,r) q q δ(q,) = (q,,l) cq q c δ(q, ) = (q,,r) q[ [q δ(q, ) = (q,,r) q] q ] δ(q, ) = (q,,l) cq] q c] δ(q, ) = (q,,l) cq] q c] 3 Lopputilnteen siivous: q cc E L E R q cc [ E R E L E L ( Γ) [E L ε E R E R ( Γ) E R ] ε Hrri Hnpää 289 Yhteysherkät kieliopit Hrri Hnpää 290 Luse 53 Rjoittmton kielioppi on yhteysherkkä, jos sen kikki produktiot ovt muoto ω ω, missä ω ω, ti mhdollisesti S ε, missä S on lähtösymoli Lisäksi vditn, että jos kieliopiss on produktio S ε, niin lähtösymoli S ei esiinny minkään produktion oikell puolell Formli kieli L on yhteysherkkä, jos se voidn tuott jollkin yhteysherkällä kieliopill Normlimuoto: Jokinen yhteysherkkä kieli voidn tuott kieliopill, jonk produktiot ovt muoto S ε j αaβ αωβ, missä A on välike j ω ε (Säännön A ω sovellus kontekstiss α_ β) Formli kieli L on yhteysherkkä, jos j vin jos se voidn tunnist epädeterministisellä Turingin koneell, jok ei trvitse enempää työtil kuin syötejonon pituuden verrn siis koneell, joll ei ole muoto δ(q, ) = (q,, ) olevi siirtymiä, missä Luseen 53 koneit snotn linerisesti rjoitetuiksi utomteiksi Avoin ongelm ( LBA?= DLBA ): onko epädeterminismi luseess 53 välttämätöntä? Hrri Hnpää 291 Hrri Hnpää 292
Chomskyn hierrki Kielioppien, niillä tuotettvien kielten j vstvien tunnistusutomttien ryhmittely: Luokk 0: rjoittmttomt kieliopit / rekursiivisesti numeroituvt kielet / Turingin koneet Luokk 1: yhteysherkät kieliopit / yhteysherkät kielet / linerisesti rjoitetut utomtit Luokk 2: yhteydettömät kieliopit / yhteydettömät kielet / pinoutomtit Luokk 3: oikelle j vsemmlle lineriset (säännölliset) kieliopit / säännölliset kielet / äärelliset utomtit 0 1 2 3 Ū U { k k c k k 0} { k k k 0} { k k 0} äärelliset kielet Hrri Hnpää 293