Turing teorya. Turing machine

Post-1920s expression Kinakalkula ang makina ay tumutukoy sa anumang makina na nagsagawa ng trabaho computer ng tao, lalo na sa mga nabuong naaayon sa mabisang pamamaraan ang Simbahan - Turing thesis. Ang tesis na ito ay binubuo bilang: "Ang anumang algorithm ay maaaring tukuyin sa anyo ng isang katumbas na makina ng Turing o isang bahagyang recursive na kahulugan, at ang klase ng mga naihahambing na pag-andar ay tumutugma sa klase ng mga bahagyang recursive na pag-andar at sa klase ng mga pagpapaandar na naihahambing sa mga makina ng Turing . " Sa madaling salita, ang thesis na Church-Turing ay tinukoy bilang isang teorya tungkol sa likas na katangian ng mga mechanical computing device, tulad ng mga elektronikong computer. Ang anumang pagkalkula na posible ay maaaring gawin sa isang computer, sa kondisyon na may sapat na oras at espasyo sa pag-iimbak.

Ang mga mekanismo na nagtatrabaho sa pag-compute ng mga infinities ay naging kilala bilang uri ng analog. Ang mga halaga sa naturang mga mekanismo ay kinakatawan ng tuluy-tuloy na mga halaga ng bilang, halimbawa, ang anggulo ng pag-ikot ng isang poste o ang pagkakaiba sa potensyal na elektrikal.

Hindi tulad ng mga analog machine, ang mga digital machine ay may kakayahang kumatawan sa estado ng isang numerong halaga at iimbak nang magkahiwalay ang bawat digit. Gumamit ang mga digital machine ng iba't ibang mga processor o relay bago ang pag-imbento ng aparato ng RAM.

Pangalan Kinakalkula ang makina mula pa noong 1940s, nagsimula itong suplado ng konsepto isang kompyuter... Nagawa ng mga computer na iyon ang mga kalkulasyon na ginagawa ng mga clerks. Mula noong ang mga halaga ay hindi na nakasalalay sa mga pisikal na katangian (tulad ng sa mga analog machine), isang lohikal na computer na nakabatay sa digital hardware ang nagawa ang lahat na maaaring mailarawan. pulos mekanikal na sistema .

Ang mga machine na Turing ay dinisenyo upang pormal na tukuyin ang matematika kung ano ang maaaring makalkula na ibinigay na mga hadlang sa lakas ng computational. Kung ang isang makina ng Turing ay maaaring makumpleto ang isang gawain, kung gayon ang gawain ay isinasaalang-alang ang Turing na mabibilang. Pangunahin ang pagtuon sa pagtuon ng isang makina na maaaring matukoy kung ano ang maaaring kalkulahin. Napagpasyahan ni Turing na hangga't mayroong isang makina ng Turing na maaaring makalkula ang pagtatantya ng isang numero, mabibilang ang halagang iyon. Bilang karagdagan, maaaring mabigyang kahulugan ng makina ng Turing ang mga lohikal na operator tulad ng AT, O, XOR, HINDI, at Kung-Pagkatapos-Iba pa upang matukoy kung

Madalas naming malulutas ang mga problema ng iba't ibang pagiging kumplikado: araw-araw, matematika, atbp. Ang ilan ay madaling malutas, ang ilan ay kailangan nating mag-isip nang husto, para sa ilan na hindi pa tayo nakakahanap ng solusyon.

Sa pangkalahatang kaso, ang paraan upang malutas ang problema (kung mayroon man) ay maaaring mailarawan gamit ang isang may hangganan na bilang ng mga aksyon sa elementarya.

Halimbawa, paglutas ng isang quadratic equation:

  1. Dalhin ang equation sa canonical form \ (a x ^ 2 + b x + c = 0 \)
  2. Kung \ (a = 0 \), pagkatapos ito linear equation gamit ang solusyon \ (x = \ frac (-c) (b) \). Ang problema ay nalutas. Kung hindi man, pumunta sa hakbang 3.
  3. Kalkulahin ang diskriminante \ (D = b ^ 2-4 a c \)
  4. Kalkulahin ang mga solusyon sa equation \ (x_ (1,2) = \ frac (-b \ pm \ sqrt (D)) (2 a) \)... Ang problema ay nalutas.

Maaari mong ipakilala ang sumusunod na intuitive na konsepto ng algorithm:

Ang Algorithm ay isang hanay ng mga tagubilin na naglalarawan sa pagkakasunud-sunod ng mga aksyon ng tagapagpatupad upang makamit ang resulta ng paglutas ng problema sa isang may hangganang bilang ng mga aksyon, para sa anumang hanay ng paunang data.

Siyempre, ito ay hindi isang mahigpit na kahulugan, ngunit inilalarawan nito ang kakanyahan ng konsepto ng isang algorithm.

Ang mga algorithm ay pinagsama-sama batay sa isang tukoy tagapalabas, at, alinsunod dito, dapat na isulat sa isang wikang mauunawaan ng tagaganap.

Ang nagpapatupad ng algorithm ay maaaring isang tao, o maaari itong isang computer, o ilang iba pang makina, halimbawa, isang loom.

Ang mga sumusunod na katangian ng mga algorithm ay naka-highlight:

Ang pagkadulas ng algorithm ay dapat na isang tiyak na pagkakasunud-sunod ng magkahiwalay, malinaw na tinukoy na mga hakbang (pagkilos). Ang bawat isa sa mga pagkilos na ito ay dapat na may hangganan sa oras. Determinism sa bawat hakbang ng algorithm, ang susunod na hakbang ay natatanging natukoy ng kasalukuyang estado ng system. Bilang kinahinatnan, sa parehong paunang data, ibinabalik ng algorithm ang parehong mga resulta sa bawat oras, gaano man karaming beses itong naisakatuparan. Pag-unawa Ang algorithm ay dapat na formulate sa isang wikang naiintindihan ng tagaganap. Kung dumating na sa isang computer, ang algorithm ay dapat gumamit lamang ng mga utos na alam sa computer at ang resulta nito ay mahigpit na tinukoy. Ang finiteness ng algorithm ay dapat kumpletuhin sa isang may hangganang bilang ng mga hakbang. Ang kalakhan ng algorithm ay dapat na mailapat sa iba't ibang mga hanay ng data ng pag-input. Sa madaling salita, ang algorithm ay dapat na angkop para sa paglutas klase gawain. Bumabalik sa halimbawa ng quadratic, ang algorithm ay angkop para sa paglutas sa lahat quadratic equation, hindi lang isa o higit pa. Ang bisa ng algorithm ay dapat magtapos sa isang tiyak na resulta. Sabihin, sa pamamagitan ng paglutas ng isang problema, o sa pag-alam na walang mga solusyon. Kung ang algorithm ay hindi humantong sa isang resulta, hindi malinaw kung bakit kinakailangan ito sa lahat.

Hindi lahat ng paraan upang malutas ang isang problema ay isang algorithm. Sabihin nating ang algorithm ay hindi nagpapahiwatig ng pagpipilian. Halimbawa, ang karamihan sa mga recipe ay hindi mga algorithm dahil gumagamit sila ng mga parirala tulad ng "asin sa panlasa". Bilang isang resulta, ang kinakailangan ng determinism ay lumabag.

Hindi para sa bawat problema kung saan may solusyon, mayroon ding solusyon sa algorithm. Halimbawa, ang problema ng pagkilala sa imahe ay higit pa ring hindi nalulutas, at tiyak na hindi gumagamit ng isang mahigpit na algorithm. Gayunpaman, ang paggamit ng mga neural network ay nagbibigay ng mahusay na mga resulta.

Karaniwan, may mga hanay para sa algorithm pinahihintulutan input data. Kakaiba ang subukang ilapat ang algorithm sa paglutas ng equation sa pagluluto ng hapunan, o kabaligtaran.

Bilang karagdagan, ang hanay ng mga posibleng pagkilos ng tagapalabas ay limitado din, dahil kung may pinahihintulutang anumang pagkilos, kasama sa kanila ay magkakaroon ding "hindi katanggap-tanggap".

Mahigpit na Kahulugan ng Algorithm

Ang kahulugan ng algorithm sa itaas ay hindi mahigpit. Lumilikha ito ng ilang mga paghihirap. Sa partikular, sa naturang kahulugan, imposibleng mahigpit na patunayan kung ang isang naibigay na klase ng mga problema ay malulutas ng isang algorithm.

May klase pala mga problemang hindi malulutas sa algorithm- mga problema kung saan imposibleng bumuo ng isang solusyon sa algorithm. Ngunit upang masidhing mapatunayan ang algorithmic undecidability, kailangan mo munang magkaroon ng isang mahigpit na kahulugan ng algorithm.

Noong 20-30s ng XX siglo, iba't ibang mga matematiko ang nagtrabaho sa problema ng isang mahigpit na kahulugan ng algorithm, sa partikular na Alan Turing, Emil Leon Post, Andrei Andreevich Markov, Andrei Nikolaevich Kolmogorov, Alonzo Church at iba pa. Ang kanilang gawain sa paglaon ay humantong sa paglitaw at pag-unlad ng teorya ng mga algorithm, ang teorya ng calculus at iba't ibang mga diskarte sa calculus, at, sa pamamagitan ng paraan, ang programa sa pangkalahatan. Ang isa sa mga resulta ng kanilang trabaho ay ang paglitaw ng maraming mahigpit na kahulugan ng algorithm, na ipinakilala sa iba't ibang paraan, ngunit katumbas sa bawat isa.

Tatalakayin namin nang detalyado ang kahulugan ng Turing, at mababaw na pag-aralan ang katumbas na kahulugan ng Post, Church at Markov.

Turing machine

Upang ipakilala ang isang pormal na kahulugan ng isang algorithm, dumating si Turing at inilarawan ang isang abstract computing machine na tinatawag na Turing computing machine, o simpleng isang Turing machine.

Alan Turing (1912-1954)

Ang isang dalub-agbilang Ingles, logician, cryptographer, posibleng ang unang "hacker" sa buong mundo, ay nangunguna sa agham ng computer at teorya ng artipisyal na intelektuwal. Malaki ang naging kontribusyon niya sa tagumpay ng mga puwersang Allied sa Ikalawang Digmaang Pandaigdig.

Ang input data para sa makina ng Turing ay ang mga salita na naipon sa tulong ng isang tiyak alpabeto, iyon ay, ang set mga tauhan.

Ang resulta ng gawain ng makina ng Turing ay mga salita din.

Ang salita kung saan inilapat ang algorithm ay tinawag input... Ang salitang nagmula sa trabaho katapusan ng linggo.

Ang hanay ng mga salita kung saan inilapat ang algorithm ay tinawag ang saklaw ng algorithm.

Mahigpit na pagsasalita, imposibleng patunayan na ang anumang bagay ay maaaring kinatawan sa anyo ng mga salitang binubuo sa ilang alpabeto - para dito kailangan namin ng isang mahigpit na kahulugan ng bagay. Gayunpaman, maaari mong suriin na ang anumang random na algorithm na gumagana sa mga bagay ay maaaring mabago upang gumana ito sa mga salita nang hindi binabago ang kakanyahan ng algorithm.

Paglalarawan ng makina ng Turing

Ang Turing machine ay may kasamang isang tape na walang limitasyong sa parehong direksyon, nahahati sa mga cell, at isang control device (tinatawag din babasahin ang ulo, o simpleng makina), may kakayahang nasa isa sa maraming mga estado. Ang bilang ng mga posibleng estado ng control aparato ay may hangganan at tiyak na tinukoy.

Ang aparato ng control ay maaaring ilipat ang kaliwa at kanan kasama ang tape, basahin at isulat ang mga character ng ilang may hangganang alpabeto sa mga cell. Ang isang espesyal na walang laman na character, na tinukoy na \ (a_0 \) o \ (\ Lambda \), ay inilalaan, na pumupuno sa lahat ng mga cell ng tape, maliban sa mga iyon (may hangganang numero) kung saan nakasulat ang input data.

Nagpapatakbo ang controller alinsunod sa mga panuntunan sa paglipat, na kumakatawan sa algorithm na ipinatupad ng isang naibigay na makina ng Turing. Inuutusan ng bawat panuntunan sa paglipat ang makina, depende sa kasalukuyang estado at simbolo na sinusunod sa kasalukuyang cell, upang magsulat ng isang bagong simbolo sa cell na ito, lumipat sa isang bagong estado, at ilipat ang isang cell sa kaliwa o kanan. Ang ilang mga estado ng makina ng Turing ay maaaring minarkahan bilang terminal, at ang paglipat sa alinman sa mga ito ay nangangahulugang ang pagtatapos ng trabaho, ang paghinto ng algorithm.

Kahit na ang makina ng Turing ay isang konsepto ng abstract, sapat na upang isipin lamang ang gayong machine (kahit na may isang may hangganan na tape), at mayroong kahit mga demo machine na tulad nito:

Maginhawa upang kumatawan sa algorithm para sa isang makina ng Turing sa anyo ng isang talahanayan: ang mga haligi ng talahanayan ay tumutugma sa kasalukuyang (sinusunod) na simbolo sa tape, ang mga hilera ay tumutugma sa kasalukuyang estado ng makina, at naglalaman ang mga cell ang utos na naisakatuparan ng makina.

Ang utos naman ay maaaring magkaroon ng sumusunod na istraktura:

\ [a_k \ left \ lbrace \ start (matrix) L \\ N \\ R \ end (matrix) \ kanan \ rbrace q_m \]

Una ang simbolo ng alpabeto, na dapat isulat sa kasalukuyang cell \ (a_k \), pagkatapos, ang paggalaw ng makina sa kaliwa (L), sa kanan (P) o kahit saan (manatili sa lugar, H) ay ipinahiwatig. Sa pagtatapos, isang bagong estado ang ipinahiwatig, kung saan dapat pumunta ang automaton \ (q_m \).

Ang talahanayan cell ay malinaw na tinukoy ng kasalukuyang simbolo \ (a_i \) at ang kasalukuyang estado ng makina \ (q_j \).

Sumasang-ayon tayo na sa simula ng trabaho, ang makina ng Turing ay nasa paunang estado, na tinukoy ni \ (q_1 \), at sa paglipat sa itigil ang estado\ (q_0 \) nakumpleto ang algorithm at huminto ang makina.

Halimbawa

Bumuo tayo ng isang algorithm para sa isang makina ng Turing na nagdaragdag ng 1 sa salitang input, na isang decimal number.

Pagkatapos, mapaglarawang, ang algorithm ay maaaring formulate tulad ng sumusunod:

  1. Paglipat sa kanan, hanapin ang simula ng input word
  2. Paglipat sa kanan, hanapin ang katapusan ng salitang input
  3. Magdagdag ng isa sa kasalukuyang piraso ng salitang input. Kung mayroong isang numero mula 0 hanggang 8, lumabas. Kung hindi man, isulat ang 0, lumipat pakaliwa, at bumalik sa hakbang 3.

Isulat natin ang algorithm na ito sa anyo ng isang talahanayan. Ang alpabetong binubuo ng mga numero 0 hanggang 9 at ang blangko na character \ (\ Lambda \). Kailangan din namin ng 4 na estado ng automaton, na binibilang ang stop na estado, na naaayon sa mga hakbang sa paglalarawan ng algorithm.

Sumasang-ayon tayo na ang paunang estado na \ (1 \) ay ang paghahanap para sa simula ng salitang input, \ (2 \) ay ang paghahanap para sa pagtatapos ng salitang input, \ (3 \) ay ang pagdaragdag ng 1.

\ (_ (q_j) \ backslash ^ (a_i) \) Λ 0 1 2 3 4 5 6 7 8 9
1 ΛП1 0H2 1H2 2H2 3H2 4H2 5H2 6H2 7H2 8H2 9H2
2 ΛЛ3 0P2 1P2 2P2 3P2 4P2 5P2 6P2 7P2 8P2 9P2
3 1H0 1H0 2H0 3H0 4H0 5H0 6H0 7H0 8H0 9H0 0L3

Subaybayan natin ang pagpapatakbo ng algorithm na ito gamit ang isang halimbawa. Ang unang linya ay tumutugma sa tape, ang pangalawa ay nagpapahiwatig ng posisyon ng makina at ng kasalukuyang estado.

1 9 9
1

Sa estado 1, ang vending machine ay nasa itaas ng walang laman na cell. Ang kaukulang utos mula sa talahanayan na "1П1", iyon ay, iwanang walang laman ang cell, lumipat sa kanan at manatili sa estado 1:

1 9 9
1

Ngayon sinusubaybayan ng vending machine ang halagang "1". Ang kaukulang utos na "1H2", iyon ay, iwanan ang "1" sa cell, huwag lumipat, at pumunta sa estado na "2":

1 9 9
2

Sa estado na "2", sinusunod ng makina ang halagang "1". Ang kaukulang utos na "1P2", iyon ay, iwanan ang "1", lumipat sa kanan at manatili sa "2" na estado:

Ang sitwasyon ay inuulit:

Ngayon, sa estado 3 at obserbahan ang simbolong "9", ang makina ay nagpapatupad ng utos na "0L3":

1 9 0
3

Ang sitwasyon ay inuulit:

Sabihin ang "0" - itigil ang estado. Nakumpleto ang algorithm.

Pormal na paglalarawan

Sa matematika, ang isang makina ng Turing ay maaaring inilarawan tulad ng sumusunod:

Turing Machine (MT)

ito ay isang sistema ng form \ (\ (A, a_0, Q, q_1, q_0, T, \ tau \) \), saan

  • \ (A \) - isang may hangganan na hanay ng mga simbolo ng alpabeto MT
  • \ (a_0 \ sa A \) - walang laman na character ng alpabeto
  • Ang \ (Q \) ay isang may hangganan na hanay ng mga estado ng MT
  • \ (q_1 \ sa Q \) - paunang estado ng MT
  • \ (q_0 \ in Q \) - pangwakas na estado ng MT (stop state)
  • Ang \ (T = \ (A, P, H \) \) ay ang hanay ng mga shift MT
  • \ (\ tau \) - MT na programa, iyon ay, isang pagpapaandar na tumutukoy sa pagmamapa \ (\ tau: A \ beses Q \ backslash \ (q_0 \) \ rightarrow A \ beses T \ beses Q \)

Ang susi sa teorya ng mga algorithm ay Tesis ng Turing.

Maluwag na binigkas, ang tesis ni Turing ay binubuo tulad ng sumusunod:

Ang tesis ni Turing para sa anumang problemang nalulutas ng algorithm, mayroong isang makina ng Turing na malulutas ang problemang ito. kung hindi man, para sa anumang algorithm mayroong isang katumbas na makina ng Turing.

Pinapayagan kami ng thesis ni Turing na pag-usapan ang tungkol sa mga algorithm gamit ang isang simpleng simpleng aparatong matematika. Bukod dito, ang makina ng Turing mismo unibersal na actuator, at ang napaka posibilidad ng paglikha ng tulad ng isang haka-haka machine ay naging isang dahilan upang pag-usapan ang tungkol sa paglikha ng unibersal na teknolohiya ng computing.

Mga Kahulugan ng Alternatibong Algorithm

Bukod sa makina ng Turing, maraming mga independiyenteng kahulugan na katumbas ng kahulugan ng Turing.

Sa partikular, ang kahulugan sa pamamagitan ng Post machine, sa pamamagitan ng calculus ng lambda ng Simbahan, ang normal na Markov algorithm.

Isaalang-alang natin ang mga pamamaraang ito.

Post Machine

Isang taon pagkatapos ng Turing, ang Amerikanong matematiko na si Emile Leon Post na nakapag-iisa ay nagpanukala ng isa pang abstract universal computing machine, na medyo pinasimple kumpara sa makina ng Turing.

Ang makina ng Post ay nagpapatakbo ng isang dalawang-digit na alpabeto, at ang panloob na estado ng makina ay pinalitan ng linya ng programa.

Kung hindi man, ang Post machine ay katulad ng makina ng Turing: mayroong isang automaton, at mayroong walang katapusang tape na may mga cell.

Ang Post Machine ay maaaring magpatupad ng mga sumusunod na utos:

  1. Sumulat ng 1, pumunta sa linya ng i-ika ng programa
  2. Sumulat ng 0, pumunta sa linya ng i-ika ng programa
  3. Lumipat sa kaliwa, pumunta sa linya ng i-ika ng programa
  4. Lumipat sa kanan, pumunta sa linya ng i-ika ng programa
  5. Kundisyon ng paglukso: kung mayroong 0 sa sinusunod na cell, pumunta sa linya ng i-th ng programa, kung hindi man, pumunta sa linya ng j-th ng programa.
  6. Tigilan mo na

Ang Post machine ay mayroon ding maraming mga ipinagbabawal na utos:

  1. Pagsusulat sa cell 1 kapag mayroon nang 1.
  2. Sumusulat sa cell 0 kapag mayroon nang 0.

Ang mga nasabing kaganapan ay humantong sa isang pag-crash.

Upang magsulat ng mga programa para sa post machine, maaari mong gamitin ang sumusunod na notasyon:

  1. ∨ i - sumulat ng 1, pumunta sa linya ng i-ika ng programa
  2. × i - sumulat ng 0, pumunta sa linya ng i-ika ng programa
  3. ← i - gumanap ng kaliwang shift, pumunta sa ika-ika linya ng programa
  4. → i - magsagawa ng paglilipat sa kanan, pumunta sa ika-ika linya ng programa
  5. ? i; j - kondisyonal na pagtalon: kung mayroong 0 sa sinusunod na cell, pumunta sa linya ng i-th ng programa, kung hindi man, pumunta sa linya ng j-th ng programa.
  6. ! - itigil.

Sample na programa:

1. → 2 2.? 1; 3 3. × 4 4. ← 5 5.!

Tatanggalin ng programang ito ang unang tatak (1) na matatagpuan sa kanan ng panimulang posisyon ng makina at ititigil ang makina sa cell sa kaliwa nito.

Sa pangkalahatan, ang kotse ni Post ang hinalinhan pautos mga wika ng programa, halimbawa, C, Fortran, atbp.

Ang Post machine ay katumbas ng makina ng Turing. Sa madaling salita, para sa anumang programa para sa isang makina ng Turing, maaari kang sumulat ng isang katumbas na programa para sa isang Post machine, at kabaliktaran.

Isa sa mga mahahalagang kahihinatnan ng katumbas na ito ay iyon ang anumang alpabeto ay maaaring mabawasan sa binary code.

Katulad ng thesis ni Turing, mayroon ding thesis ng Post.

Ang thesis ng post ng anumang algorithm ay maaaring kinatawan sa anyo ng isang Post machine.

Karaniwang Markov Algorithm

Ang normal na mga algorithm ng Markov ay idinisenyo upang mailapat sa mga salita sa iba't ibang mga alpabeto.

Ang kahulugan ng anumang normal na algorithm ay binubuo ng dalawang bahagi:

  1. Alpabeto algorithm
  2. Mga Scheme algorithm

Ang algorithm mismo ay inilapat sa mga salita, iyon ay, mga pagkakasunud-sunod ng mga character alpabeto.

Ang pamamaraan ng isang normal na algorithm ay tinatawag na isang may hangganang nakaayos na hanay ng mga tinatawag mga formula ng pagpapalit, bawat isa ay maaaring maging simple o ang pangwakas... Ang mga ekspresyon ng form na \ (L \ to D \) ay tinatawag na mga simpleng formula ng pagpapalit, kung saan ang \ (L \) at \ (D \) ay dalawang di-makatwirang mga salita na binubuo mula sa alpabeto ng algorithm (tinawag, ayon sa pagkakabanggit, sa kaliwa at kanan panig ng pormula ng pagpapalit). Katulad nito, ang mga panghuling formula ng pagpapalit ay pagpapahayag ng form na \ (L \ to \ cdot D \), kung saan ang \ (L \) at \ (D \) ay dalawang di-makatwirang mga salitang binubuo mula sa alpabeto ng algorithm.

Ipinapalagay na ang mga auxiliary character \ (\ to \) at \ (\ to \ cdot \) ay hindi kabilang sa alpabeto ng algorithm.

Ang proseso ng paglalapat ng normal na algorithm sa isang di-makatwirang salita \ (V \) ay ang sumusunod na pagkakasunud-sunod ng mga aksyon:

  1. Hayaan ang \ (V "\) ang salitang nakuha sa nakaraang hakbang ng algorithm (o ang orihinal na salita kung ang kasalukuyang hakbang ay ang una).
  2. Kung walang pagpapalit sa mga pormula ng pagpapalit, ang kaliwang bahagi nito ay isasama sa \ (V "\), kung gayon ang gawain ng algorithm ay itinuturing na kumpleto, at ang resulta ng gawaing ito ay ang salitang \ (V" \ ).
  3. Kung hindi man, sa mga pormula ng pagpapalit, ang kaliwang bahagi nito ay kasama sa \ (V "\), ang pinakauna ay napili.
  4. Sa lahat ng mga posibleng representasyon ng salitang \ (V "\) sa form na \ (RLS \) (kung saan ang \ (R \) ay isang unlapi, at ang \ (L \) ay isang panlapi), ang isa ay napili na \ Ang (R \) ay ang pinakamaikling sinusundan ng pagpapalit \ (V "= RDS \).
  5. Kung ang formula ng pagpapalit ay may hangganan, pagkatapos ang algorithm ay nakumpleto sa resulta \ (V "\). Kung hindi man, pumunta sa hakbang 1 (ang susunod na hakbang).

Ang anumang normal na algorithm ay katumbas ng ilang makina ng Turing, at kabaliktaran - ang anumang makina ng Turing ay katumbas ng ilang normal na algorithm.

Ang isang analogue ng tesis ng Turing para sa normal na mga algorithm ay karaniwang tinatawag ang prinsipyo ng normalisasyon.

Halimbawa

Ang algorithm na ito ay nagko-convert ng mga binary number sa "isa" (kung saan ang tala ng isang hindi negatibong integer N ay isang string ng N sticks). Halimbawa, ang binary number 101 ay na-convert sa 5 sticks: ||

Alpabeto: (0, 1, |) Mga Panuntunan:

  1. 1 → 0|
  2. |0 → 0||
  3. 0 -> (walang laman na string)
Orihinal na linya: 101 Pagpapatupad:
  1. 0|00|
  2. 00||0|
  3. 00|0|||
  4. 000|||||
  5. 00|||||
  6. 0|||||
  7. |||||

Mga recursive function

Ang isang sistema na katumbas ng isang makina ng Turing ay maaaring mabuo batay sa mga pag-andar sa matematika. Para sa mga ito, kailangan naming ipakilala ang mga sumusunod na uri ng pag-andar:

  • primitive recursive function
  • pangkalahatang recursive function
  • bahagyang recursive function

Ang huling klase ay magkakasabay sa klase ng Turing-computable na mga pagpapaandar (iyon ay, mga pagpapaandar para sa pagkalkula kung saan ang isang algorithm para sa isang makina ng Turing ay maaaring itayo).

Ang kahulugan ng isang algorithm sa pamamagitan ng recursive function ay sa katunayan sa gitna ng lambda calculus, at batay sa batayan nito ay binuo ang diskarte. functional na programa.

Mga pangunahing pag-andar na recursive

Naglalaman ang klase ng mga primitive recursive function pangunahing pag-andar at lahat ng mga pagpapaandar na nagmula sa mga batayan sa pamamagitan ng mga operator mga pamalit at primitive recursion.

Pangunahing mga pag-andar ay kinabibilangan ng:

  • Ang null function \ (O () = 0 \) ay isang pagpapaandar na walang mga argumento na laging nagbabalik \ (0 \).
  • Ang pagpapaandar na pagkakasunod \ (S (x) = x + 1 \) ay isang pagpapaandar na mayroon natural na numero\ (x \) tumutugma sa sumusunod na numero \ (x + 1 \)
  • Mga pagpapaandar \ (I_n ^ m (x_1, \ ldots, x_n) = x_m \), kung saan \ (0

Upang maitayo ang natitirang mga pagpapaandar ng klase, ginagamit ang mga operator:

  • Mga kahalili. Para sa pagpapaandar \ (f \) mula sa \ (m \) variable at \ (m \) function \ (g_1, \ ldots, g_m \) mula sa bawat variable na \ (n \), ang resulta ng pagpapalit \ (g_k \) sa \ (f \) ay isang pagpapaandar \ (h (x_1, \ ldots, x_n) = f (g_1 (x_1, \ ldots, x_n), \ ldots, g_m (x_1, \ ldots, x_n)) \) mula sa \ (n \) mga variable.
  • Primitive recursion. Hayaan ang \ (f (x_1, \ ldots, x_n) \) ay isang pagpapaandar ng mga variable na \ (n \), at \ (g (x_1, \ ldots, x_ (n + 2)) \) isang pagpapaandar ng \ (n + 2 \) mga variable. Pagkatapos ang resulta ng paglalapat ng primitive recursion operator sa mga pagpapaandar \ (f \) at \ (g \) ay isang pagpapaandar \ (h \) ng \ (n + 1 \) variable ng form: \ [h (x_1, \ ldots, x_n, 0) = f (x_1, \ ldots, x_n) \] \ [h (x_1, \ ldots, x_n, y + 1) = g (x_1, \ ldots, x_n, y, h (x_1, \ ldots, x_n, y)) \]

Bahagyang recursive function

Ang klase ng mga bahagyang recursive na function ay may kasamang mga primitive recursive function, at, bilang karagdagan, ang lahat ng mga pagpapaandar na nakuha mula sa mga primitive recursive na gumagamit ng operator ng minimization ng argument:

Operator ng pagliit ng argumento

Hayaan ang \ (f \) na maging isang pagpapaandar ng \ (n \) variable "(x_i \ in \ mathbb (N) \). Pagkatapos ang resulta ng paglalapat ng operator ng pag-minimize ng argument sa pagpapaandar \ (f \) ay ang pagpapaandar \ (h \) ng \ (n-1 \) argument, na tinukoy bilang:

\ [h (x_1, \ ldots, x_ (n-1)) = \ min y, \] kung saan \ Iyon ay, ibabalik ng \ (h \) ang minimum na halaga ng huling argument sa pag-andar ng \ (f \) kung saan ang \ (f \) ay zero.

Habang ang mga primitive recursive function ay palaging nakalkula, ang mga bahagyang recursive na pag-andar ay maaaring hindi matukoy para sa ilang mga halaga ng argument.

Mas mahigpit, ang mga bahagyang recursive na pag-andar ay dapat tawaging "bahagyang natukoy na mga recursive function", dahil ang mga ito ay tinukoy lamang sa isang maliit na bahagi ng mga posibleng halaga ng argument.

Pangkalahatang mga recursive function

Ang mga pangkalahatang pag-andar na recursive ay isang subclass ng lahat ng bahagyang recursive na mga pagpapaandar na tinukoy para sa anumang halaga ng argument. Ang problema sa pagtukoy kung ang isang naibigay na bahagyang recursive function ay pangkalahatang recursive ay hindi maikakaila sa algorithm... Dinadala tayo nito sa paksa ng teoryang computability at ang paghinto ng problema.

Computability theory at ang paghinto ng problema

Pinapayagan ng aming mga imahinasyon bilang isang buo ang pagkakaroon ng mga hindi malulutas na problema, iyon ay, mga problema kung saan imposibleng gumawa ng isang algorithm.

Ang teorya ng Computability ay nakikipag-usap sa mga ganitong problema.

Ang mga halimbawa ng mga problemang hindi malulutas sa algorithm ay tigilan ang problema at problema sa pagkilala sa hatchability... Isaalang-alang natin ang mga ito nang mas detalyado.

Paghinto ng problema Batay sa paglalarawan ng algorithm A at ang input data \ (x \), kinakailangan upang malaman kung ang algorithm \ (A \) ay huminto sa input data \ (x \).

Ang problema sa paghinto ay hindi malulutas sa algorithm. Patunayan natin ito.

\ (\ Delta \)

Hayaan ang pagkakaroon ng isang unibersal na algorithm na malulutas ang paghinto ng problema. Isaalang-alang pagkatapos ang isang klase ng mga algorithm na nagpoproseso ng mga teksto na naglalarawan ng mga algorithm.

Dahil sa pagkakaroon ng isang unibersal na algorithm para sa paglutas ng problema sa paghinto, mayroong isang algorithm na tumutukoy kung ang isang algorithm mula sa nabanggit na klase ay titigil sa sarili nitong teksto o hindi. Tukuyin natin ang gayong isang algorithm sa pamamagitan ng \ (B \).

Buuin natin ang algorithm \ (C \), ang input data kung saan ang teksto ng algorithm \ (A \), na nagpoproseso ng sarili nitong teksto:

  1. Ipatupad ang algorithm \ (B \) sa paglipas ng \ (A \).
  2. Kung tinutukoy ng algorithm \ (B \) na ang \ (A \) ay titigil sa teksto nito, pumunta sa hakbang 1. Kung hindi man, pumunta sa hakbang 3.
  3. Pagtatapos ng algorithm \ (C \).

Sinubukan naming ilapat ang \ (C \) algorithm sa \ (C \) algorithm, nakarating kami sa isang halatang kontradiksyon: kung ang \ (C \) ay tumitigil sa sarili nitong teksto, kung gayon hindi ito maaaring tumigil, at kabaliktaran. Samakatuwid, walang \ (B \) algorithm. \ (\ not \ Delta \)

Ang isang mas pangkalahatang pagbabalangkas ng problema sa paghinto ay ang problema ng pagtukoy ng hatchability.

Problema sa pagkilala sa hatchability

Hayaan ang isang tiyak na alpabeto, salita (pormula) ng alpabeto na ito, at isang sistema ng pormal na pagbabago sa mga salita ng alpabeto na ito na tinukoy (ibig sabihin, isang lohikal na calculus ang binuo)

Mayroon bang para sa anumang dalawang salitang \ (R \) at \ (S \) isang nakakadala na kadena na humahantong mula sa \ (R \) hanggang sa \ (S \) sa loob ng balangkas ng lohikal na calculus na ito?

Noong 1936, pinatunayan ng Alonzo Church ang teorama ng Simbahan.

Teorya ng Simbahan Ang problema sa pagkilala sa deducibility ay hindi malulutas sa algorithm.

Ginamit ng simbahan ang pormalismo ng lambda calculus upang patunayan ito. Noong 1937, nang nakapag-iisa sa kanya, pinatunayan ni Turing ang parehong teorama gamit ang pormalismo ng makina ng Turing.

Dahil ang lahat ng mga kahulugan ng mga algorithm ay katumbas sa bawat isa, mayroong isang sistema ng mga konsepto na hindi nauugnay sa isang tukoy na kahulugan ng isang algorithm, at nagpapatakbo ng konsepto computable function.

Computable function Isang function na maaaring makalkula ng isang algorithm.

Mayroong mga problema kung saan ang relasyon sa pagitan ng input at output data ay hindi mailarawan gamit ang isang algorithm. Ang ganitong mga pagpapaandar ay hindi mapagkumpitensya.

Isang halimbawa ng isang hindi maihahambing na pagpapaandar

Dalhin ang pagpapaandar na \ (h (n) \) na tinukoy para sa \ (\ forall n \ in \ mathbb (N) \) tulad ng sumusunod:

\ [h (n) = \ magsimula (mga kaso) 1, & \ teksto (kung nasa) \ pi \ text (mayroong isang pagkakasunud-sunod ng eksaktong) n \ text (9-k) \\ 0, & \ text (kung hindi man ) \ end (mga kaso) \]

Maaari nating makuha ang halagang \ (1 \) para sa pagpapaandar na ito, gayunpaman, upang makuha ang halaga \ (0 \), kailangan nating suriin ang walang katapusang pagpapalawak ng decimal ng \ (\ pi \), na malinaw na imposible sa isang may wakas na oras . Ang pagpapaandar na ito ay sa gayon ay hindi makalkula.

Ang isa sa pinakamahalagang katanungan ng modernong agham sa kompyuter ay kung mayroong isang pormal na tagapagpatupad sa tulong na maaaring gayahin ang sinumang pormal na tagapagpatupad. ang sagot sa katanungang ito ay halos nakuha ng dalawang natitirang siyentipiko - A. Turing at E. Post. Ang mga tagapalabas na iminungkahi nila ay magkakaiba sa bawat isa, ngunit lumabas na maaari nilang gayahin ang bawat isa, at ang pinakamahalaga, gayahin ang gawain ng sinumang pormal na gumaganap.

Ano ang isang pormal na kontratista? Ano ang ibig sabihin nito - ang isang pormal na tagapalabas ay ginagaya ang gawain ng isa pang pormal na tagapalabas? Kung naglaro ka ng mga laro sa computer, ang mga bagay sa screen ay sumusunod sa mga utos ng player nang walang tanong. Ang bawat bagay ay may isang hanay ng mga wastong utos. Sa parehong oras, ang computer mismo ay isang tagapagpatupad, at hindi virtual, ngunit totoo. Kaya't lumalabas na ang isang pormal na tagapalabas ay ginagaya ang gawain ng isa pang pormal na gumaganap.

Isaalang-alang kung paano gumagana ang isang Turing Machine.

Ang makinang Turing ay isang walang katapusang tape na nahahati sa mga cell, at isang karwahe (reader-printer) na gumagalaw kasama ng tape.

Kaya, ang Turing Machine ay pormal na inilarawan ng isang hanay ng dalawang mga alpabeto:

A = (a1, a2, a3, ..., an) - panlabas na alpabeto, ginamit upang maitala ang paunang data

Q = (q1, q2, q3,…, qm) - panloob na alpabeto, naglalarawan ng isang hanay ng mga estado ng mambabasa at pag-print na aparato.

Ang bawat cell ng tape ay maaaring maglaman ng isang simbolo mula sa panlabas na alpabeto A = (a0, a1, ..., an) (Sa aming kaso, A = (0, 1))

Ang wastong mga pagkilos ng Turing Machine ay ang mga sumusunod:

1) isulat ang anumang character ng panlabas na alpabeto sa tape cell (ang character na naroroon dati ay na-overtake)

2) lumipat sa isang katabing cell

3) baguhin ang estado sa isa sa mga ipinahiwatig ng simbolo ng panloob na alpabeto Q

Ang machine na Turing ay isang machine na hinimok ng mesa.

Ang mga hilera sa talahanayan ay tumutugma sa mga simbolo ng napiling alpabeto A, at ang mga haligi ay tumutugma sa mga estado ng automaton Q = (q0, q1,…, qm). Sa simula ng operasyon, ang makina ng Turing ay nasa estado ng q1. Ang estado ng q0 ay ang pangwakas na estado; sa sandaling makapasok dito, natapos ng automaton ang gawain nito.

Ang bawat cell ng talahanayan na naaayon sa ilang simbolo ai at ilang estado qj ay naglalaman ng isang utos na binubuo ng tatlong bahagi
Isang character mula sa alpabeto A
· Direksyon ng paggalaw: ">" (sa kanan), "<» (влево) или «.» (на месте)
Bagong estado ng makina

Sa talahanayan sa itaas, ang alpabeto A = (0, 1, _) (naglalaman ng 3 mga character) at ang panloob na alpabeto Q = (q1, q2, q3, q4, q0), q0 ang estado na humihinto sa karwahe.

Isaalang-alang natin ang maraming mga gawain sa pamamagitan ng paglutas. Maaari mong i-download ang makina ng Turing sa website sa seksyon.

Suliranin 1. Hayaan ang A = (0, 1, _). Sa tape, naglalaman ang mga cell ng mga character mula sa alpabeto sa sumusunod na pagkakasunud-sunod 0011011. Ang caret ay nasa itaas ng unang character. Kinakailangan na magsulat ng isang programa na papalitan ang 0 ng 1, 1 ng 0 at ibalik ang karwahe sa orihinal nitong posisyon.

Tukuyin natin ngayon ang mga estado ng karwahe. Tinatawag ko sila na "kargamento ay may nais na gumawa."

q1) Ang karwahe ay dapat pumunta sa kanan: kung makita ang 0, binago ito sa 1 at nananatili sa q1 na estado, kung nakikita ang 1, binago ito sa 0 at nananatili sa q1 na estado, kung nakikita ang _, ito binabalik ang 1 cell na "nais ng iba pa", iyon ay, napupunta ito sa estado ng q2. Isulat natin ang ating pangangatuwiran sa talahanayan ng tagaganap. Tingnan ang tulong ng programa para sa syntax)

q2) Ngayon inilalarawan namin ang "wish ng karwahe" q2. Dapat tayong bumalik sa ating orihinal na posisyon. Upang gawin ito: kung nakikita natin ang 1, iniiwan natin ito at mananatili sa estado na q2 (na may parehong pagnanais na maabot ang dulo ng hilera ng mga simbolo); kung nakikita natin ang 0, iniiwan natin ito at patuloy na lumipat sa kaliwa sa estado q2; nakikita natin ang _ - ay inilipat sa kanan ng 1 cell. Narito kung saan kinakailangan ito sa pahayag ng problema. pumasa kami sa estado ng q0.

Maaari mong panoorin ang gawain ng programa sa video:

Suliranin 2. Ibinigay: ang pangwakas na pagkakasunud-sunod ng 0 at 1 (001101011101). Kinakailangan na isulat ang mga ito pagkatapos ng pagkakasunud-sunod na ito, sa pamamagitan ng isang walang laman na cell, at sa pagkakasunud-sunod na ito palitan ang mga ito ng 0. Halimbawa:

Mula sa 001101011101 nakakakuha kami ng 000000000000 1111111.

Tulad ng nakikita mo, pitong mga nakasulat pagkatapos ng pagkakasunud-sunod na ito, at sa kanilang mga lugar ay mga zero.

Bumaba tayo sa pangangatuwiran. Tukuyin kung anong mga estado ang kinakailangan para sa karwahe at kung ilan.

q1) nakita 1 - ayusin ito sa zero at pumunta sa ibang estado q2 (isang bagong estado ang ipinakilala upang ang karwahe ay hindi binabago ang lahat sa mga zero sa isang pass)

q2) huwag baguhin ang anumang bagay, lumipat sa dulo ng pagkakasunud-sunod

q3) sa sandaling makita ng caret ang isang walang laman na cell, tumatagal ito ng isang hakbang sa kanan at iginuhit ang isa, kung nakakita ito ng isa, pagkatapos ay gumagalaw ito upang lagdaan ang character sa dulo. Kaagad na iguhit namin ang yunit, pupunta kami sa estado ng q4

q4) dumaan kami sa mga nakasulat na yunit nang hindi binabago ang anumang bagay. Sa sandaling maabot namin ang walang laman na cell na pinaghihiwalay ang pagkakasunud-sunod mula sa isa, dumadaan kami mula sa bagong estado na q5

q5) sa estado na ito pumunta kami sa simula ng pagkakasunud-sunod nang hindi binabago ang anumang. Narating namin ang isang walang laman na cell, lumingon at pumunta sa estado q1

Ipinapalagay ng karwahe ang estado na q0 kapag pumasa ito sa estado q1 hanggang sa katapusan ng pagkakasunud-sunod na ito at nakatagpo ng isang walang laman na cell.

Nakukuha namin ang sumusunod na programa:

Maaari mong panoorin ang gawain ng Turing Machine sa video sa ibaba.

Ang Turing machine ay isang koleksyon ng mga sumusunod na bagay

  • 1) panlabas na alpabeto A = (a 0, a 1,…, a n);
  • 2) ang panloob na alpabeto Q = (q 1, q 2,…, q m) ay isang hanay ng mga estado;
  • 3) isang hanay ng mga character ng pagkontrol (P, L, S)
  • 4) isang walang hanggan sa parehong direksyon tape, nahahati sa mga cell, sa bawat isa sa anumang discrete sandali ng oras isang character lamang mula sa alpabeto A ang maaaring maisulat;
  • 5) isang control aparato na may kakayahang maging sa isa sa maraming mga estado

Ang simbolo para sa isang walang laman na cell ay ang panlabas na titik ng alpabeto a 0.

Kabilang sa mga estado, ang paunang q 1, kung saan nagsisimulang gumana ang makina, at ang pangwakas (o itigil ang estado) q 0, kung saan huminto ang makina, ay nakikilala.

Ang aparato ng control ay maaaring ilipat kaliwa at kanan kasama ang tape, basahin at isulat ang mga titik ng alpabeto A sa mga cell ng tape. Gumagana ang control device ayon sa mga utos na ganito ang hitsura:

q i a j> a p X q k

Ang ibig sabihin ng pagpasok ay ang sumusunod: kung ang control aparato ay nasa qi state, at ang letrang aj ay nakasulat sa naobserbahang cell, pagkatapos ang (1) ap ay nakasulat sa cell sa halip na aj, (2) ang makina ay pupunta sa susunod kanang cell mula sa isa na tiningnan lamang, kung X = P, o upang matingnan ang susunod na kaliwang cell, kung X = L, o patuloy na surbey sa parehong cell ng tape, kung X = C, (3) ang control device pumupunta sa estado q k.

Dahil ang gawain ng makina, ayon sa kondisyon, ay ganap na natutukoy ng estado ng q, sa sa sandaling ito at ang mga nilalaman ng cell na tiningnan sa sandaling ito, pagkatapos para sa bawat posibleng pagsasaayos q i a j mayroong eksaktong isang panuntunan. Walang mga patakaran lamang para sa pangwakas na estado, kung saan humihinto ang kotse. Samakatuwid, ang isang programa sa machine ng Turing na may panlabas na alpabeto A = (a0, a1,…, an) at panloob na Q = (q1, q2,…, qm) ay naglalaman ng halos m (n + 1) na mga tagubilin.

Ang isang salita sa alpabeto A o sa alpabeto Q, o sa alpabeto A Q ay anumang pagkakasunud-sunod ng mga titik ng kaukulang alpabeto. Sa pamamagitan ng pagsasaayos ng k-th ibig sabihin namin ang imahe ng tape ng makina na may impormasyon na nabuo dito sa simula ng k-th na hakbang (o isang salita sa alpabeto A nakasulat sa tape sa simula ng k- ika-hakbang), na nagpapahiwatig kung aling cell ang tiningnan sa hakbang na ito at sa anong kalagayan ang kotse. Ang mga panghuling pagsasaayos lamang ang may katuturan, ibig sabihin ang mga kung saan lahat ng mga cell ng tape, na may posibleng pagbubukod ng isang may hangganan na numero, ay walang laman. Ang isang pagsasaayos ay tinatawag na pangwakas kung ang estado ng makina ay nasa wakas.

Kung pipiliin namin ang anumang hindi pangwakas na pagsasaayos ng makina ng Turing bilang paunang isa, pagkatapos ay ang gawain ng makina ay sunud-sunod (sunud-sunod) na ibahin ang paunang pagsasaayos alinsunod sa programa ng makina hanggang maabot ang panghuling pagsasaayos . Pagkatapos nito, ang gawain ng makina ng Turing ay isinasaalang-alang nakumpleto, at ang resulta ng trabaho ay ang nakakamit na pangwakas na pagsasaayos.

Sasabihin namin na ang isang walang laman na salitang b sa alpabeto A (a 0) = (a 1, ..., an) ay nakikita ng makina sa karaniwang posisyon, kung nakasulat ito sa magkasunod na mga cell ng tape, ang lahat ng iba pang mga cell ay walang laman, at ang makina ay tumitingin sa kaliwa o kanang bahagi ng cell mula sa mga kung saan nakasulat ang salitang b. Ang pamantayang posisyon ay tinatawag na paunang (pangwakas) na posisyon kung ang makina, na nakikita ang salita sa karaniwang posisyon, ay nasa paunang estado na q 1 (ayon sa pagkakabanggit, sa estado ng pagtigil sa q 0).

Kung ang pagproseso ng salitang b ay inililipat ang makina ng Turing sa pangwakas na estado, sinabi na naaangkop ito sa b, kung hindi man, hindi ito naaangkop sa b (ang makina ay tumatakbo nang walang katiyakan)

Isaalang-alang natin ang isang halimbawa:

Binigyan ng isang makina ng Turing na may panlabas na alpabeto A = (0, 1) (narito ang 0 ay simbolo ng isang walang laman na cell), isang alpabeto ng panloob na estado na Q = (q 0, q 1, q 2) at may sumusunod na diagram na gumagana (programa):

q 1 0> 1 L q 2;

q 1 1> 0 C q 2;

q 2 0> 0 P q 0;

q 2 1> 1 C q 1;

Ang program na ito ay maaaring nakasulat gamit ang isang table

Sa unang hakbang, nagpapatakbo ang sumusunod na utos: q 1 0> 1 Л q 2 (ang control device ay nasa estado ng q1, at ang titik 0 ay nakasulat sa naobserbahang cell, 1 ay nakasulat sa cell sa halip na 0, ang ang ulo ay inilipat sa kaliwa, ang control device ay papunta sa estado ng q2), sa Bilang isang resulta, ang sumusunod na pagsasaayos ay nilikha sa makina:

Panghuli, pagkatapos maipatupad ang utos q 2 0> 0 P q 0, nilikha ang pagsasaayos

Pangwakas ang pagsasaayos na ito, dahil ang makina ay nasa estado ng pagtigil sa q 0.

Kaya, ang orihinal na salitang 110 ay pinoproseso ng makina sa salitang 101.

Ang nagreresultang pagkakasunud-sunod ng mga pagsasaayos ay maaaring isulat sa isang mas maikling paraan (ang mga nilalaman ng naobserbahang cell ay nakasulat sa kanan ng estado kung saan kasalukuyang matatagpuan ang makina):

11q 1 0 => 1 q 2 11 => 1q 1 11 => 1q 2 01 => 10q 0 1

Ang isang makina ng Turing ay hindi hihigit sa isang panuntunan (algorithm) para sa pagbabago ng mga salita ng alpabeto A Q, ibig sabihin mga pagsasaayos Kaya, upang tukuyin ang isang makina ng Turing, kailangan mong tukuyin ang panlabas at panloob na mga alpabeto, isang programa, at ipahiwatig kung alin sa mga simbolo ang nagpapahiwatig ng isang walang laman na cell at ang pangwakas na estado.

Turing Machine (MT)- abstract tagapagpatupad (abstract computing machine). Iminungkahi ni Alan Turing noong 1936 upang gawing pormal ang konsepto ng isang algorithm.

Ang isang makinang Turing ay isang pagpapalawak ng isang may hangganang makina ng estado at, ayon sa Simbahan - Turing thesis, may kakayahang gayahin ang lahat ng mga tagaganap(sa pamamagitan ng pagtukoy ng mga panuntunan sa paglipat) na kahit papaano ay nagpapatupad ng proseso ng sunud-sunod na pagkalkula, kung saan ang bawat hakbang ng pagkalkula ay medyo elementarya.

Iyon ay, ang anumang intuitive algorithm ay maaaring ipatupad gamit ang ilang makina ng Turing.

Collegiate YouTube

    1 / 5

    ✪ 09 - Panimula sa Mga Algorithm. Turing machine

    ✪ Turing Machine - Alexander Shen

    ✪ Lecture 20: Turing Machine

    ✪ Turing machine. Halimbawa ng trabaho

    ✪ 16 - Computability. Turing machine. Pagganyak at mga halimbawa

    Mga subtitle

Ang istraktura ng makina ng turing

Ang Turing machine ay nagsasama ng isang walang limitasyong sa parehong direksyon laso(Posible ang mga makina ng pag-turing, na mayroong maraming mga walang katapusan na laso), nahahati sa mga cell, at control aparato(tinatawag din babasahin ang ulo (GZCH)), may kakayahang maging isa sa hanay ng mga estado... Ang bilang ng mga posibleng estado ng control aparato ay may hangganan at tiyak na tinukoy.

Ang aparato ng control ay maaaring ilipat ang kaliwa at kanan kasama ang tape, basahin at isulat ang mga character ng ilang may hangganang alpabeto sa mga cell. Nagtatampok espesyal walang laman isang character na pumupuno sa lahat ng mga cell ng tape, maliban sa mga iyon (may hangganan na numero), kung saan nakasulat ang input data.

Gumagana ang control device alinsunod sa mga panuntunan sa paglipat na kumakatawan sa algorithm, mapagtanto ang Turing machine na ito. Inuutusan ng bawat panuntunan sa paglipat ang makina, depende sa kasalukuyang estado at simbolo na sinusunod sa kasalukuyang cell, upang magsulat ng isang bagong simbolo sa cell na ito, lumipat sa isang bagong estado, at ilipat ang isang cell sa kaliwa o kanan. Ang ilang mga estado ng makina ng Turing ay maaaring lagyan ng label bilang terminal, at ang paglipat sa alinman sa mga ito ay nangangahulugang ang pagtatapos ng trabaho, ang pagtigil ng algorithm.

Ang makina ng Turing ay tinawag mapagpasya kung hindi bababa sa isang panuntunan ay tumutugma sa bawat kumbinasyon ng estado at strip na simbolo sa talahanayan. Kung mayroong isang pares na "may guhit na simbolo - estado" kung saan mayroong 2 o higit pang mga tagubilin, ang nasabing isang makina ng Turing ay tinawag hindi matukoy.

Paglalarawan ng makina ng Turing

Ang isang tukoy na makina ng Turing ay tinukoy sa pamamagitan ng pagbilang ng mga elemento ng hanay ng mga titik ng alpabeto A, ang hanay ng mga estado na Q, at isang hanay ng mga patakaran ayon sa kung saan nagpapatakbo ang makina. Mayroon silang form: qiaj → q i1 a j1 dk (kung ang ulo ay nasa estado ng qi, at ang letrang aj ay nakasulat sa naobserbahang cell, pagkatapos ang ulo ay papunta sa estadong q i1, isang j1 ay nakasulat sa cell sa halip na aj, ang ulo ay gumagawa ng isang paggalaw dk, na mayroong tatlong mga pagpipilian: isang cell sa kaliwa (L), isang cell sa kanan (R), manatili sa lugar (N)). Para sa bawat posibleng pagsasaayos mayroong eksaktong isang panuntunan (para sa isang nondeterministic Turing machine, maaaring mayroong malaking dami panuntunan). Walang mga patakaran lamang para sa pangwakas na estado, kung saan humihinto ang kotse. Bilang karagdagan, kailangan mong tukuyin ang pagtatapos at simulan ang mga estado, ang paunang pagsasaayos sa sinturon, at ang lokasyon ng ulo ng makina.

Isang halimbawa ng isang makina ng Turing

Magbigay tayo ng isang halimbawa ng MT para sa pagpaparami ng mga numero sa unary number system. Ang tala ng panuntunang "qiaj → q i1 a j1 R / L / N" ay dapat na maunawaan tulad ng sumusunod: qi ay ang estado kung saan ang patakarang ito ay naisakatuparan, aj ay ang data sa cell kung saan matatagpuan ang ulo, q Ang i1 ay ang estado kung saan kinakailangan upang pumunta, isang j1 - kung ano ang kailangang isulat sa cell, R / L / N - ilipat ang utos.

Nagpapatakbo ang makina ayon sa sumusunod na hanay ng mga patakaran:

q 0 q 1 q 2 q 3 q 4 q 5 q 6 q 7 q 8
1 q 0 1 → q 0 1R q 1 1 → q 2 aR q 2 1 → q 2 1L q 3 1 → q 4 aR q 4 1 → q 4 1R q 7 1 → q 2 aR
× q 0 × → q 1 × R q 2 × → q 3 × L q 4 × → q 4 × R q 6 × → q 7 × R q 8 × → q 9 × N
= q 2 = → q 2 = L q 4 = → q 4 = R q 7 = → q 8 = L
a q 2 a → q 2 aL q 3 a → q 3 aL q 4 a → q 4 aR q 6 a → q 6 1R q 7 a → q 7 aR q 8 a → q 8 1L
* q 0 * → q 0 * R q 3 * → q 6 * R q 4 * → q 5 1R
q 5 → q 2 * L

Paglalarawan ng mga estado:

Magsimula
q 0 paunang estado. Hinahanap namin ang "x" sa kanan. Kapag nahanap, pumunta kami sa estado ng q1
q 1 pinalitan namin ang "1" ng "a" at pumunta sa estado q2
Ilipat ang lahat ng "1" mula sa unang numero sa resulta
q 2 naghahanap ng "x" sa kaliwa. Kapag nahanap, pumunta kami sa estado ng q3
q 3 hanapin ang "1" sa kaliwa, palitan ito ng "a" at pumunta sa estado q4.

Kung ang "1" ay tapos na, mahahanap namin ang "*" at pumunta sa estado q6

q 4 pumunta sa dulo (naghahanap ng "*" sa kanan), palitan ang "*" ng "1" at pumunta sa estado q5
q 5 idagdag ang "*" sa dulo at pumunta sa estado ng q2
Pinoproseso namin ang bawat digit ng pangalawang numero
q 6 hanapin ang "x" sa kanan at pumunta sa estado q7. Habang naghahanap kami, pinalitan namin ang "a" ng "1"
q 7 naghahanap ng "1" o "=" sa kanan

kapag naghahanap ng "1", pinalitan namin ito ng "a" at pumunta sa estado q2

kapag natagpuan ang "=", pumunta kami sa estado ng q8

Tapusin
q 8 naghahanap ng "x" sa kaliwa. Kapag nahanap, pumasa kami sa q9 ng estado. Habang naghahanap kami, pinalitan namin ang "a" ng "1"
q 9 estado ng terminal (ihinto ang algorithm)

I-multiply ang 3 ng 2 sa tulong ng MT sa unit system. Ipinapahiwatig ng protokol ang pauna at huling mga estado ng MT, ang paunang pagsasaayos sa sinturon at ang lokasyon ng ulo ng makina (may salungguhit na simbolo).

Magsimula Nasa estado kami ng q 0, ipinasok namin ang data sa makina: * 111x11 = *, ang ulo ng makina ay matatagpuan sa unang character *.

1st step. Tingnan natin ang talahanayan ng mga patakaran kung ano ang gagawin ng makina kapag ito ay nasa estado q 0 at sa itaas ng simbolong "*". Ito ang panuntunan mula sa ika-1 haligi ng ika-5 hilera - q 0 * → q 0 * R. Nangangahulugan ito na pupunta kami sa estado q 0 (iyon ay, hindi namin ito binabago), ang simbolo ay nagiging "*" (iyon ay, hindi ito nagbabago) at gumagalaw kami kasama ang teksto na ipinasok namin "* 111x11 = *" sa kanan ng isang posisyon (R), pagkatapos ay nasa ika-1 character 1. Sa turn, ang estado na q 0 1 (Ika-1 haligi ng unang hilera) ay naproseso ng panuntunang q 0 1 → q 0 1R. Iyon ay, muli mayroong simpleng paglipat sa kanan ng 1 posisyon. Nangyayari ito hanggang sa tumayo kami sa simbolong "x". At iba pa: kinukuha namin ang estado (ang index sa q), kinukuha ang simbolo kung saan kami tumayo (ang may salungguhit na simbolo), ikonekta ang mga ito at panoorin ang pagproseso ng nagresultang kombinasyon ayon sa talahanayan ng mga patakaran.

Sa mga simpleng salita, ang multiplication algorithm ay ang mga sumusunod: minarkahan namin ang ika-1 yunit ng ika-2 kadahilanan, pinapalitan ito ng titik na "a", at ilipat ang buong ika-1 kadahilanan sa likod ng pantay na pag-sign. Isinasagawa ang paglilipat sa pamamagitan ng halili na pagpapalit ng mga yunit ng ika-1 kadahilanan ng "a" at pagdaragdag ng parehong bilang ng mga yunit sa dulo ng linya (sa kaliwa ng kanang kanang "*"). Pagkatapos ay binabago namin ang lahat ng "a" sa pag-sign ng pagpaparami na "x" pabalik sa mga isa. At inuulit ang pag-ikot. Sa katunayan, pagkatapos ng lahat, ang A na pinarami ng B ay maaaring kinatawan bilang A + A + A B beses. Minarkahan namin ngayon ang ika-2 yunit ng ika-2 salik na may titik na "a" at ilipat muli ang mga yunit. Kapag walang mga unit bago ang "=" sign, pagkatapos ay kumpleto ang multiplication.

Turing pagkakumpleto

Maaari nating sabihin na ang isang makina ng Turing ay ang pinakasimpleng makina ng computing na may linear memory, na, ayon sa pormal na panuntunan, binabago ang input data gamit ang pagkakasunud-sunod aksyon sa elementarya.

Ang likas na katangian ng mga aksyon ay namamalagi sa ang katunayan na ang aksyon ay nagbabago lamang ng isang maliit na piraso ng data sa memorya (sa kaso ng isang makina ng Turing, isang cell lamang), at ang bilang ng mga posibleng aksyon ay may hangganan. Sa kabila ng pagiging simple ng makina ng Turing, maaari itong magamit upang makalkula ang lahat na maaaring makalkula sa anumang iba pang makina na gumaganap ng mga pagkalkula gamit ang isang pagkakasunud-sunod ng mga aksyon sa elementarya. Tinawag ang pag-aari na ito pagkakumpleto.

Isa sa mga natural na paraan upang patunayan na ang mga computational algorithm na maaaring ipatupad sa isang makina ay maaaring ipatupad sa isa pa ay ang gayahin ang unang makina sa pangalawa.

Ang panggagaya ay ang mga sumusunod. Sa pasukan sa pangalawang makina, isang paglalarawan ng programa (mga patakaran ng pagpapatakbo) ng unang makina ang ibinigay D (\ displaystyle D) at input data X (\ displaystyle X), na kung saan ay dapat na dumating sa pasukan ng unang kotse. Kinakailangan na ilarawan ang naturang programa (ang mga patakaran para sa pagpapatakbo ng pangalawang makina) upang bilang isang resulta ng mga kalkulasyon, ang output ay magiging pareho na ang unang makina ay babalik kung nakatanggap ito ng data bilang input X (\ displaystyle X).

Tulad ng sinabi, sa isang makina ng Turing, posible na gayahin (sa pamamagitan ng pagtatakda ng mga panuntunan sa paglipat) lahat ng iba pang mga tagapagpatupad na kahit papaano ay nagpapatupad ng proseso ng sunud-sunod na pagkalkula, kung saan ang bawat hakbang ng pagkalkula ay medyo elementarya.

Sa isang makina ng Turing, maaari mong gayahin ang isang Post machine, normal na mga algorithm ng Markov, at anumang programa para sa mga ordinaryong computer na nagko-convert ng input data sa mga output gamit ang ilang algorithm. Kaugnay nito, ang Turing Machine ay maaaring gayahin sa iba't ibang mga abstract na gumaganap. Ang mga tagaganap na kung kanino posible ito ay tinawag Turing kumpleto(Kumpleto ang turing).

Mayroong mga programa para sa mga ordinaryong computer na gumagaya sa pagpapatakbo ng isang makina ng Turing. Ngunit dapat pansinin na ang pekeng ito ay hindi kumpleto, dahil mayroong isang abstract infinite tape sa makina ng Turing. Ang isang walang katapusang tape na may data ay hindi maaaring ganap na gayahin sa isang computer na may may limitasyong memorya (ang kabuuang memorya ng computer ay RAM, mga hard drive, iba't ibang panlabas na storage media, mga rehistro at cache ng processor, atbp. - ay maaaring maging napakalaki, ngunit gayunpaman laging may hangganan).

Mga variant ng pag-turing ng makina

Ang modelo ng makina ng Turing ay napapalawak. Maaari naming isaalang-alang ang mga machine ng Turing na may isang di-makatwirang bilang ng mga teyp at mga multidimensional na teyp na may iba't ibang mga hadlang. Gayunpaman, ang lahat ng mga machine na ito ay kumpleto na ang Turing at na-modelo ng isang pangkaraniwang makina ng Turing.

Turing machine na tumatakbo sa isang semi-infinite belt

Bilang isang halimbawa ng naturang pagbawas, isaalang-alang ang sumusunod na teorama: Para sa anumang makina ng Turing, mayroong isang katumbas na makina ng Turing na tumatakbo sa isang semi-infinite tape (iyon ay, sa isang tape na walang katapusan sa isang direksyon).

Isaalang-alang ang patunay na ibinigay ni Yu G. G. Karpov sa librong "Theory of Automata". Ang patunay ng teoryang ito ay nakabubuo, iyon ay, magbibigay kami ng isang algorithm kung saan ang isang katumbas na makina ng Turing na may idineklarang pag-aari ay maaaring itayo para sa anumang makina ng Turing. Una, arbitrary naming binibilang ang mga cell ng working tape ng MT, iyon ay, tinutukoy namin ang isang bagong lokasyon ng impormasyon sa tape:

Pagkatapos ay bibilhin natin ang mga cell, at ipalagay natin na ang simbolong "*" ay hindi nakapaloob sa MT dictionary:

Sa wakas, binago namin ang makina ng Turing sa pamamagitan ng pagdodoble ng bilang ng mga estado nito at binago ang shift-read head shift upang sa isang pangkat ng mga estado ang operasyon ng makina ay katumbas ng operasyon nito sa may kulay na lugar, at sa iba pang pangkat ng mga estado gagana ang makina tulad ng ginagawa ng orihinal na makina.sa hindi nalilimutang lugar. Kung sa panahon ng pagpapatakbo ng MT ang sagisag na '*' ay nakasalubong, pagkatapos ang ulo na magbasa ng sulat ay nakarating sa hangganan ng zone:

Ang paunang estado ng bagong makina ng Turing ay itinakda sa isa o ibang zone, depende sa aling bahagi ng orihinal na tape ang read-write head sa orihinal na pagsasaayos. Malinaw na, sa kaliwa ng mga nagbubuklod na marker na "*", ang tape ay hindi ginagamit sa katumbas na makina ng Turing.

Dalawang-dimensional na Turing machine

  • Langgam ni Langton

Tingnan din

  • JFLAP cross-platform program simulator ng automata, Turing machine, grammars, kumukuha ng isang automaton graph