Lõpliku automaadi animaator

läbi DFA üleminekud reaalajas olekudiagrammil

Interaktiivse simulatsiooni laadimine...

lõplik mälu, lõpmatud stringid 🖖

Lõplikul automaadil on fikseeritud mälu — tema olekute hulk. Ükskõik kui pikk on sisendstring, ei kasuta masin kunagi rohkem mälu kui tal on olekuid. Seetõttu ei saa DFA-d piiramatult loendada: pole olekut, mis 'mäletaks' suvalist täisarvu. Pumbalemma teeb selle täpseks: iga piisavalt pika DFA poolt aktsepteeritud stringi keskmist osa saab suvaliselt palju kordi korrata ja string jääb ikka aktsepteerituks. Keeled, mida ei saa pumbata (nagu aⁿbⁿ, võrdne arv a-sid ja b-sid), vajavad pinuautomaati või Turingi masinat. Myhill-Nerode teoreem annab täpse miinimumi: olekute arv võrdub sisendi prefiksite eristatavate ekvivalentsiklasside arvuga.

üks märk, üks tee 🖖

Deterministlik lõplik automaat on lihtsalt sildistatud diagramm olekutest, mida ühendavad nooled. Iga oleku ja iga sisendsümboli jaoks on täpselt üks nool, mida järgida — seega pole kunagi valikut. Masin loeb sõne ühe korra vasakult paremale ja jõuab ühte ainsasse olekusse. Kui see lõppolek on märgitud aktsepteerivaks, kuulub sisend keelde. Selle jälgimine on sama lihtne kui märgi lükkamine mööda nooli — just seda see tööriist näitabki.

sündinud neuronite mudelist 🖖

Lõplikud automaadid ei alguse arvutiteadusest. 1943. aastal kirjeldasid Warren McCulloch ja Walter Pitts neuroneid kui lihtsaid sisse/välja lülituvaid üksusi, mis on omavahel ühendatud, ja sellest sai esimene lõpliku olekumasina matemaatiline mudel. 1951. aastal analüüsis Stephen Kleene, milliseid mustreid sellised 'närvivõrgud' ära tunda suudavad, ja nimetas need regulaarseteks sündmusteks — tänapäeva regulaaravaldiste alge. Nii et automaat, mida sa siin sammhaaval läbid, pärineb otse katsest selgitada, kuidas aju arvutab.

Ülesanne täielikult lahendatud

  1. Miks ükski lõplik automaat ei suuda seada vastavusse 0-e ja 1-e, ükskõik kui palju olekuid sellele anda 8 sammu

    Selle lehe paarsusautomaadil on kaks olekut ja see loeb jada 101101 — kuus sümbolit —, vajamata kunagi kolmandat. Sööda sellele kuus miljonit sümbolit ja see vajab ikka kahte. Mis on siis see, mida fikseeritud olekute arvuga automaat teha ei suuda? Ja kuidas tõestada, et automaati ei ole olemas, mitte lihtsalt seda, et seda ei õnnestunud leida?

    1. Jälgi olemasolevat automaati. Paarsus algab olekus e ja iga 1 vahetab seda. Kuus sümbolit hiljem on see tagasi olekus e ja sisend võetakse vastu. Teel ei kogunenud midagi: automaat on kuuenda sümboli juures täpselt samas seisundis, milles see oleks võinud olla esimese sümboli juures.

    2. See ongi kogu ressurss. DFA mälu on olek, milles see viibib, ja ei midagi muud. Ei loendurit, ei pinu ega linti, kuhu kirjutada. Pärast mis tahes prefiksi lugemist on kõik, mida automaat selle prefiksi kohta teab, see, millises oma k olekust see parajasti asub.

    3. Nii et leia midagi, mis vajab selgelt rohkem. Võta sõned, mis koosnevad mingist arvust nullidest, millele järgneb täpselt sama palju ühtesid. 01 on selline, 0011 on selline, 001 ei ole ja ka 0110 ei ole.

    4. Oleta, et k olekuga DFA tuvastab selle. Ära küsi, milline automaat välja näeb — seda ei öelda sulle kunagi. Sööda sellele lihtsalt k+1 prefiksit, mis koosnevad 0 kuni k nullist, ja pane tähele, kuhu igaüks neist selle jätab.

    5. Dirichlet' printsiip. Prefikseid on rohkem kui olekuid, seega sattuvad kaks neist samasse kohta. Nimetagem neid 0ⁱ ja 0ʲ, kus i on väiksem kui j. Alates sellest hetkest ei suuda automaat neil vahet teha, ja mitte sellepärast, et see oleks halvasti kavandatud. Olek on ainus, mis tal on, ja need kaks sõnet viisid selle samasse olekusse.

    6. Nüüd sööda mõlemale jätkule sama asja: i ühte. Sama algolek, samad sümbolid, seega sama lõppolek ja seega sama otsus. Automaadil pole võimalust teha midagi muud.

    7. Ja need kaks otsust peavad erinema. 0ⁱ1ⁱ omab kattuvat arvu ja kuulub hulka; 0ʲ1ⁱ mitte, sest j ei ole i. Üks tuleb vastu võtta ja teine tagasi lükata, kuid automaat annab neile sama vastuse. See, mis murdub, on eeldus, et see oli olemas.

    8. Loe argumenti uuesti ja pane tähele, mida selles kunagi ei ilmunud: k väärtust. Kaks — paarsusautomaadi enda suurus — või kaks miljardit: k+1 prefiksit on igal juhul rohkem kui k olekut. Seades aga n-ile ülempiiri, muutub keel kohe lõplike olekutega keeleks: kuni N-i vastavusse viimiseks on vaja 2N+2 olekut, seega 22 olekut N = 10 korral ja 202 olekut N = 100 korral.

    Vastus

    Ükski lõplik automaat ei tuvasta seda, ükskõik mis suuruses. Tõestus ei vaja midagi selle kohta, kuidas automaat on ehitatud, vaid ainult seda, et k+1 elementi ei saa paikneda k kohas ilma, et kaks neist sama kohta jagaks, ning et oleku jagamine tähendab unustamist. Paarsusautomaat näitab sama asja miniatuuris: sööda sellele 0, siis 00, siis 000, ja kõik kolm jätavad selle olekusse e, sest see ei vaata nulle üldse.

    Ülempiiris peitubki kogu raskus. Kuni N-i vastavusse viimine on lihtne, 2N+2 olekuga — üks paar lisaks iga sümboli jaoks, kuhu soovid jõuda —, ja see arv kasvab peatumata, seega iga konkreetse N-i jaoks on olemas automaat ja ühelgi automaadil pole iga N-i. See lõhe ongi see, mida tähendab „lõplik mälu“, ja see on põhjus, miks järgmine samm pärast DFA-d defineeritakse sellele pinu andmisega: piiramatu hoidla, mis on lisatud tagasi täpselt sellepärast, et just seda selle puudumine maksab.

Allikad (2)

Näiteülesanded

  • lõpeb 01-ga - Sufiksituvastaja aktsepteerib stringe, mis lõpevad kombinatsiooniga 01.
  • tagasi lükatud (lõpeb 10-ga) - Liigu lõpuni ja masin lõpetab olekus q1 ning lükkab tagasi, olles poolel teel istunud aktsepteerivas olekus q2. Sümbolite 01 lugemine kuskil keskel ei ole päris sama, mis nendega lõpetamine. DFA kogu vastus peitub ainult viimase sümboli järel saavutatud olekus. Tal pole vähimatki võimalust mäletada, et asus kunagi varasemalt paremal positsioonil.
  • paaris arv ühtesid ✓ - Paarsusautomaat aktsepteerib binaarstringe, milles on paarisarv ühtesid.
  • paaritu arv ühtesid ✗ - Sisendis on kolm 1 ja paarsusmasin lülitub neist igaühe juures ümber: e, o, o, e, o. Ta lõpetab olekus o ja lükkab tagasi. Siin ei loendata mitte midagi. Kaks olekut on kõik, mis masinal on, ja kõik, mida tal vaja läheb. Teadmine, kas senine kogus on paaritu, on mistahes pikkusega sõne juures nimelt ainus meelespidamist väärt tõsiasi.
  • sisaldab 101 ✓ - Masin jõuab neljanda sümboliga olekusse s3 ega saa sealt enam lahkuda: nii 0 kui ka 1 viivad olekust s3 tagasi olekusse s3. Möödub veel kolm sümbolit, kuid otsus nende kõigi osas on juba lukus. Neelav olek on viis, kuidas DFA langetab jaatava otsuse enne sisendi lõppemist, jätmata sealjuures meelde vähimatki infot selle toimumise hetkest.
  • 101 puudub ✗ - Tagasi lükatud olekus s2, mida legend nimetab „loetud 10 – ühe sümboli kaugusel“. Veel üks 1 kõige lõpus oleks mustri lõpule viinud ja masina jäädavalt olekusse s3 lukustanud. Olek, milles sa maandud, näitab kohe, kui lähedale sa jõudsid. Paljas aktsepteerimise või tagasilükkamise bitt üksi ei suudaks seda kunagi.