algoritmiski neatrisināmas problēmas

15
Algoritmiski neatrisināmas problēmas Datorzinātnes pamati

Upload: amil

Post on 05-Jan-2016

35 views

Category:

Documents


0 download

DESCRIPTION

Algoritmiski neatrisināmas problēmas. Datorzinātnes pamati. …. …. Tjūringa mašīnas: atkārtojums. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Algoritmiski neatrisināmas problēmas

Algoritmiski neatrisināmas problēmas

Datorzinātnes pamati

Page 2: Algoritmiski neatrisināmas problēmas

Tjūringa mašīnas: atkārtojums

Tjūringa mašīna - abstrakta mašīna, paplašināts automāts: - vadības bloks – galīgs automāts, datu bloks – bezgalīga lenta,- operācija: atkarīga no automāta stāvokļa un no simbola, kas uz lentas pretī galviņai;

M = Q, L, P, S, F

Q – galīga automāta stāvokļu kopa,

L = {0,1, , …} – galīgs lentas simbolu alfabēts

P – mašīnas komandu kopa (programma),

katra komanda ir formā qiakqjare, kur

qi, qj Q, qi – komandas sākuma stāvoklis, qj – komandas beigu stāvoklis

ak, ar L, ak – no lentas nolasītais simbols, ar – uz lentas uzrakstītais simbols

e {L,R,E} – galviņas nobīde: L – pa kreisi, R – pa labi, E – paliek uz vietas

Tjūringa mašīnas izpilde: Ja automāts stāvoklī qi redz simbolu ak, tas uzraksta uz

lentas simbolu ar, pāriet uz stāvokli qj un pabīda galviņu uz lentas par e.

S Q – sākuma stāvokļu kopa, F Q – beigu stāvokļu kopa. Tjūringa mašīna sāk darbu no kāda stāvokļa q S, beidz darbu, ja sasniegusi kādu q F. Pieņemsim, ka T.M. programmā nav komandu qa q’a’e, kur q F (no beigu stāvokļiem tālākas pārejas nav iespējamas).

……

Page 3: Algoritmiski neatrisināmas problēmas

Naturālo skaitļu kodējums TM: atkārtojumsDefinīcija. T.M. lenta satur skaitļa n kodējumu, ja uz lentas sākot no kādas vietas ir n

binārais pieraksts (bez priekšā esošiem 0 simboliem), un no šī pieraksta pa labi un pa kreisi visās šūnās ir ierakstīts simbols . Tiek prasīts, lai mašīnas galviņa aplūkotu n pieraksta fragmenta pirmo simbolu.

Piemērs: skaitļa 53 kodējums uz T.M. lentas:

Definīcija. T.M. lenta satur skaitļu korteža n1,n2,…,nk kodējumu, ja uz lentas sākot no kādas vietas ir pēc kārtas n1, n2, …, nk binārie pieraksti, atdalīti ar vienu simbolu , pa kreisi un pa labi visās pārējās šūnās ir , mašīnas galviņa aplūko n1 binārā pieraksta kreiso simbolu.

Piemērs: korteža 3,0,6 kodējums uz T.M. lentas:

Definīcija. Tjūringa mašīna M rēķina (daļēji definētu) funkciju f : N N, ja M, sākot darbu ar lentu, uz kuras uzrakstīts n N:- ja f(n) ir definēts, pabeigs darbu ar lentu, uz kuras uzrakstīts f(n);- ja f(n) nav definēts, tad neapstāsies, vai arī pabeigs darbu ar lentu, kuras saturs neatbilst naturāla skaitļa kodam.

Analoģiski definē, kā T.M. rēķina k-argumentu funkciju f : Nk N.

…… 1 1 0 1 0 1

…… 1 0 1 11 0

Page 4: Algoritmiski neatrisināmas problēmas

Funkciju rēķināšana ar TM: atkārtojums

Čerča tēze: Katra funkcija f: NN, kas ir algoritmiski izrēķināma intuitīvā nozīmē, ir izrēķināma arī ar kādu Tjūringa mašīnu.

Intuitīvi: Ja eksistē algoritms kādas funkcijas rēķināšanai, kādas problēmas risināšanai, tad eksistē arī Tjūringa mašīna, kas šo algoritmu realizē.

Teorēma par TM klases sašaurināšanu. Ja funkcija f: NN ir izrēķināma ar kādu Tjūringa mašīnu M, tad f ir izrēķināma arī ar tādu Tjūringa mašīnu M’, kurai:

1) Ja f(x) nav definēts, tad M’ uz x neapstājas (M’ uz x nevar apstāties ar lentas saturu, kas nav naturāla skaitļa kods);

2) Visiem x M’ darba laikā mašīnas galviņa neaizvirzās pa kreisi no x pirmā simbola vietas (pietiek ar bezgalīgās lentas vienpusēju izmantošanu,

“kreisā puse” var tikt rezervēta citai informācijai)

3) M’ alfabēts ir {0,1, }

Tjūringa mašīnu, kas apmierina šīs teorēmas prasības, sauksim par standarta Tjūringa mašīnu (terminoloģija svarīga šai lekcijai).

Sekas: Katra funkcija f: NN, kas ir algoritmiski izrēķināma intuitīvā nozīmē, ir izrēķināma arī ar kādu standarta Tjūringa mašīnu.

Page 5: Algoritmiski neatrisināmas problēmas

Tjūringa mašīnu kodēšana

Aplūkojam standarta Tjūringa mašīnas. Definējam katrai no tām atbilstošo kodu.

Tjūringa mašīnas programma: komandas qiakqjare.

Kodējam katru komandas elementu, tad komandu, tad visu programmu.

k(0) = 01, k(1) = 10, k() = 11

k(n) = k(n0) k(n1) … k(nx), kur n0n1…nx - skaitļa n binārā forma.

Piemēram: k(5) = k(1012) = 100110

k(qi) = k(i), k(L) = 10, k(R) = 01, k(E) = 11

k(qiakqjare) = k(qi ) 00 k(ak ) 00 k(qj) 00 k(ar ) 00 k(e).

Piemēram: k(q20q51E) = 1001 00 01 00 100110 00 10 00 11

Programmas kods: sakārtojam komandas noteiktā secībā: vispirms visas, kam sākuma stāvoklis q1, tad – kam q2, utt. Katram stāvoklim vispirms komanda ar 0, tad ar 1, tad ar .Programmas kodu iegūstam, starp katriem 2 komandu kodiem ievietojot 0000.

Novērojums: katrai T.M. ir unikāls kods.

Novērojums: katras T.M. kods ir skaitlis binārā sistēmā. Mašīnas M koda skaitli apzīmējam ar #(M).

Apzīmējums: Tjūringa mašīnu ar kodu x apzīmējam ar Mx.

Page 6: Algoritmiski neatrisināmas problēmas

Tjūringa mašīnas: apstāšanās problēmaProblēma: Pēc dota x noskaidrot, vai (standarta) Tjūringa mašīna ar numuru x

apstājas, ja tā sāk darbu uz lentas, uz kuras uzrakstīts skaitlis x.

Aplūkojam funkciju : (x) = 1, ja Mx uz x apstājas,

(x) = 0, ja Mx uz x neapstājas

(x) nav definēta, ja Mx nav Tjūringa mašīna

Teorēma. Neeksistē Tjūringa mašīna, kas rēķina funkciju .

Pierādījums. Pieņemam pretējo, ka eksistē Tjūringa mašīna A, kas rēķina . Varam pieņemt, ka A – standarta Tjūringa mašīna.

Veidojam mašīnu A’ = A Q (Q sāk darbu tad, kad A pabeigusi darbu). Tā kā A – standarta Tjūringa mašīna, tad arī A’- standarta Tjūringa mašīna.

Q darbojas šādi: ja uz lentas ir uzrakstīts 1, tad ieciklojas,ja uz lentas ir uzrakstīts 0, tad uzraksta 1 un apstājas.

Skatāmies, kāda ir A’ darbība uz tās numura #(A’).

2 iespējas: (1) A’ uz #(A’) apstājas, tad (#(A’)) = 1, tātad A darbojoties uz #(A’) uz lentas uzraksta 1 (jo A rēķina funkciju ). Pēc tam Q ieciklojas. Tātad A’ uz #(A’) neapstājas. Pretruna.

(2) A’ uz #(A’) neapstājas, tad (#(A’)) = 0, tātad A darbojoties uz #(A’) uz lentas uzraksta 0, pēc tam Q šo 0 pārvērš par 1, tātad A’ uz #(A’) izdod rezultātu 1, tātad A’ uz #(A’) apstājas. Pretruna.

Page 7: Algoritmiski neatrisināmas problēmas

Apstāšanās problēma: programmēšanas valodaProblēma: Pēc dota x noskaidrot, vai (standarta) Tjūringa mašīna ar numuru x

apstājas, ja tā sāk darbu uz lentas, uz kuras uzrakstīts skaitlis x.

Aplūkojam funkciju : (x) = 1, ja Mx uz x apstājas,

(x) = 0, ja Mx uz x neapstājas

(x) nav definēta, ja Mx nav Tjūringa mašīna

Teorēma. Neeksistē Tjūringa mašīna, kas rēķina funkciju .

Standarta Tjūringa mašīna ar numuru x – programma ar tekstu (kodu) x.

Valoda L – “pietiekami bagāta”. Programma P valodā L, #P – programmas teksts.

Teorēma. Neeksistē programma A valodā L, kas, saņemot ieejā programmas P tekstu #P valodā L, nosaka, vai P apstājas uz #P.

Pierādījums. Pieņemam pretējo, ka eksistē šāda programma A, kas, saņemot ieejā #P, izdod 1, ja P uz #P apstājas un 0, ja P uz #P neapstājas.

Veidojam programmu A’(X) = if A(X) = 0 then forever loop else return 1.

Skatāmies, kāda ir A’ darbība uz tās numura #(A’).

Ja A’ uz #(A’) apstājas, tad A uz #(A’) izdod 1, tātad A’ uz #(A’) neapstājas.

Ja A’ uz #(A’) neapstājas, tad A uz #(A’) izdod 0, tātad A’ uz #(A’) izdod 1 un apstājas.

Abos gadījumos iegūtas pretrunas.

Page 8: Algoritmiski neatrisināmas problēmas

Apstāšanās problēmas varianti (1)

Valoda L – “pietiekami bagāta”. Programma P valodā L, #P – programmas teksts.

Teorēma 1. Neeksistē programma A valodā L, kas, saņemot ieejā programmas P tekstu #P valodā L, nosaka, vai P apstājas uz #P.

Teorēma 2. Neeksistē programma A valodā L, kas, saņemot ieejā programmas P tekstu #P valodā L un simbolu virkni X, nosaka, vai P apstājas uz X.

Pierādījums. Ja šāda A eksistētu, tad ar tās palīdzību varētu noteikt arī katram #P, vai P apstājas uz #P (kas nav iespējams saskaņā ar teorēmu 1).

Page 9: Algoritmiski neatrisināmas problēmas

Apstāšanās problēmas varianti (2)Valoda L – “pietiekami bagāta”. Programma P valodā L, #P – programmas teksts.

Teorēma 1. Neeksistē programma A valodā L, kas, saņemot ieejā programmas P tekstu #P valodā L, nosaka, vai P apstājas uz #P.

Teorēma 2. Neeksistē programma A valodā L, kas, saņemot ieejā programmas P tekstu #P un valodā L un simbolu virkni X, nosaka, vai P apstājas uz X.

Lemma. Katrai programmai P(S) valodā L ar vienu ieejas mainīgo S un katrai fiksētai

argumenta S vērtībai X eksistē atbilstoša programma PX, kuras darbības rezultāts

sakrīt ar P darbību uz X. Turklāt, PX tekstu #PX var algoritmiski iegūt no #P un X.

Pierādījuma ideja: Programmas PX tekstu iegūst no P teksta, ievietojot tā sākumā

piešķiršanu S := X.

Piezīme. Precīzu pierādījumu viegli izveidot Tjūringa mašīnu valodai. Lai runātu par precīzu pierādījumu valodai L, būtu arī pati L precīzi jānodefinē.

Teorēma 3. Neeksistē algoritms (programma A valodā L), kas patvaļīgai L programmai P bez ieejas datiem nosaka, vai P apstājas, vai nē.

Pierādījums. Ja šāda programma A eksistētu, to varētu izmantot, lai noteiktu, vai #PX

apstājas patvaļīgiem P un X, līdz ar to nosakot, vai P apstājas uz X, kas nav iespējams saskaņā ar teorēmu 2.

Page 10: Algoritmiski neatrisināmas problēmas

Apstāšanās problēmas varianti (3)

Valoda L – “pietiekami bagāta”. Programma P valodā L, #P – programmas teksts.

Teorēma 1. Neeksistē programma A valodā L, kas, saņemot ieejā programmas P tekstu #P valodā L, nosaka, vai P apstājas uz #P.

Teorēma 2. Neeksistē programma A valodā L, kas, saņemot ieejā programmas P tekstu #P un valodā L un simbolu virkni X, nosaka, vai P apstājas uz X.

Teorēma 3. Neeksistē algoritms (programma A valodā L), kas patvaļīgai L programmai P bez ieejas datiem nosaka, vai P apstājas, vai nē.

Lemma. Katrai L programmai P bez ieejas datiem eksistē atbilstoša programma P’ ar vienu ieejas parametru S, kuras darbība uz jebkuras S vērtības sakrīt ar P darbību (P’ saņem ieejas parametra vērtību un to ignorē, bet darbojas kā P).

Teorēma 4a. Neeksistē algoritms (programma A valodā L), kas patvaļīgai L programmai P nosaka, vai P eksistē tādi ieejas dati X, uz kuriem P apstājas.

Teorēma 4b. Neeksistē algoritms (programma A valodā L), kas patvaļīgai L programmai P nosaka, vai P apstājas uz katriem ieejas datiem X.

Pierādījums. Ja šāda A eksistētu (gan 4a, gan 4b gadījumā), tad, pārbaudot programmu P’, šo A varētu izmantot, lai noteiktu, vai patvaļīga L programma P bez ieejas datiem apstājas, vai nē. Pretruna ar teorēmu 3.

Page 11: Algoritmiski neatrisināmas problēmas

Daļējās un pilnās korektības apgalvojumiValoda L – “pietiekami bagāta”. Programma P valodā L, #P – programmas teksts.

Teorēma 1. Neeksistē programma A valodā L, kas, saņemot ieejā programmas P tekstu #P valodā L, nosaka, vai P apstājas uz #P.

Teorēma 2. Neeksistē programma A valodā L, kas, saņemot ieejā programmas P tekstu #P un valodā L un simbolu virkni X, nosaka, vai P apstājas uz X.

Teorēma 3. Neeksistē algoritms (programma A valodā L), kas patvaļīgai L programmai P bez ieejas datiem nosaka, vai P apstājas, vai nē.

Teorēma 4a. Neeksistē algoritms (programma A valodā L), kas patvaļīgai L programmai P nosaka, vai P eksistē tādi ieejas dati X, uz kuriem P apstājas.

Teorēma 4b. Neeksistē algoritms (programma A valodā L), kas patvaļīgai L programmai P nosaka, vai P apstājas uz katriem ieejas datiem X.

Teorēma 5a. Neeksistē algoritms (programma A valodā L), kas patvaļīgai L programmai P nosaka, vai spēkā daļējās korektības apgalvojums {1=1} P {1=2}.

Pierādījums. Šāds apgalvojums spēkā tad un tikai tad, ja P nekad neapstājas. Līdz ar to šādas A eksistence ir pretrunā ar teorēmu 4a.

Teorēma 5b. Neeksistē algoritms (programma A valodā L), kas patvaļīgai L programmai P nosaka, vai spēkā pilnās korektības apgalvojums 1=1 P 1=1.

Pierādījums. Šādas A eksistence ir pretrunā ar teorēmu 4b.

Page 12: Algoritmiski neatrisināmas problēmas

Hoara loģika: algoritmiskie aspektiAksiomu sistēma { p } c { q } apgalvojumu pierādīšanai dažādiem c un dažādiem p,q:

1. {p} skip {p}

2. {q [e/x]} x := e {q} Piemērs: { x + 3 = 16 } x := x + 3 { x = 16 }

q [e/x] – formulā q visas x ieiešanas vietas aizstātas ar e (sintaktiski)

3. Ja {p} c1 {r} un {r} c2 {q}, tad {p} c1; c2 {q}.

4. Ja {pb} c1 {q} un {p b} c2 {q}, tad {p} if b then c1 else c2 fi {q}

5. Ja {rb} c1 {r}, tad {r} while b do c1 od {rb} r – cikla invariants

6. Ja p p’, {p’} c {q’} un q’ q, tad {p} c {q}

5a. Ja p r, {rb} c1 {r}, un rb q, tad {p} while b do c1 od {q}

2a. Ja p q [e/x], tad {p} x := e {q}.

Pierādījumu veidošana: (1) atrast ciklu invariantus, (2) noformēt pierādījumu. Ja (1) ir izdarīts, tad (2) var veikt ar mehānisku procedūru.

Pierādītās algoritmu neesamības teorēmas norāda, ka ciklu invariantu automātiska atrašana vispārīgajā gadījumā nav iespējama.

Interesanta pētnieciska problēma: piedāvāt metodes cikla invariantu atrašanas problēmas daļējiem risinājumiem: metodes, kas labi atrod ciklu invariantus pietiekami daudzām programmām.

Tālāks, saistīts pētījums: aprakstīt tās programmu klases, kurām piedāvātā metode ļauj atrast cikla invariantus.

Page 13: Algoritmiski neatrisināmas problēmas

Galīgu automātu analīze: algoritmu eksistenceJa dots galīga automāta apraksts (automāta diagramma, automāta pāreju uzskaitījums

teksta formā, vai kā citādi), vai mēs varam kaut ko pateikt par to diskrēto procesu, ko šis automāts realizē? Par valodu, ko šis automāts apraksta?

Automātu analīzes problēmas (piemēri):

Pēc dota automāta A noskaidrot, vai L(A) = ?

Pēc dota automāta A un dota a I noskaidrot, vai L(A) satur kādu vārdu x, kurā ir vismaz viens (vai tieši viens) a burts?

Pēc dota automāta A un dota q Q noskaidrot, vai automātā eksistē ceļš no kāda sākuma stāvokļa līdz stāvoklim q?

Pēc 2 dotiem automātiem A un B noskaidrot, vai L(A) = L(B) ?

Fakts. Visas šeit minētās (un daudzas citas radniecīgas) galīgo automātu analīzes problēmas ir algoritmiski atrisināmas (katrai no šīm problēmām eksistē algoritms, kas to risina).

Motivācija: automātam ir galīgs skaits stāvokļu, visus tos ir iespējams “pārlasīt”. Algoritmi: sk. lekciju – automātu teorijas elementi.

Jautājums: vai mēs negribētu algoritmus līdzīgu problēmu risināšanai attiecībā uz C++ vai PASCAL programmām, kuras mēs rakstām? Algoritmi neeksistē.

Page 14: Algoritmiski neatrisināmas problēmas

Paplašinātu automātu algoritmiskā analīzeAnalīzes problēmas: stāvokļa sasniedzamība, noteikta darbības scenārija iespējamība

(piemēram, ieciklošanās, utt.), programmas/automāta atbilstība specifikācijai

Galīgi automāti – visas būtiskās analīzes problēmas algoritmiski atrisināmas.

Tjūringa mašīnas, universālās programmēšanas valodas – var pierādīt, ka visas būtiskās analīzes problēmas vispārīgajā gadījumā algoritmiski neatrisināmas.

Pētnieciski jautājumi: atrast tādas paplašināto automātu / programmu klases, kurām noteikta analīzes problēma tomēr ir algoritmiski atrisināma. Stāvokļu kopa ir bezgalīga, tātad metodes nevar būt vienkārša pārlase.

Skaitītājs zi: programmas mainīgais; sākumā 0, operācijas zi := zi+1, zi := zi-1, zi > 0.

Teorēma. Pēc dotas Tjūringa mašīnas M var uzkonstruēt automātu ar 2 skaitītājiem A(M), kas apstājas tad un tikai tad, ja M apstājas, sākot darbu ar tukšu lentu.

Sekas. Automātu ar 2 skaitītājiem klasē virsotnes sasniedzamības problēma ir algoritmiski neatrisināma.

Teorēma. Eksistē algoritms, kas pēc dota automāta ar 1 skaitītāju un dotas virsotnes automātā nosaka, vai šī virsotne ir sasniedzama.

Pierādījums. Labs mājas darbs tiem, kas pretendē uz 10

Citas paplašināto automātu klases: vēl redzēsim šajā kursā Petri tīklus.

Page 15: Algoritmiski neatrisināmas problēmas

Algoritmiskā neatrisināmība: Diofanta vienādojumi

Diofanta vienādojums:

P(x1, x2, …, xn) = 0,

kur P – polinoms ar mainīgajiem x1, …, xn un veseliem koeficientiem.

Uzdevums (Hilberta 10. problēma, 1900.g):

Atrast algoritmu, kas pēc dota Diofanta vienādojuma noskaidro, vai šim vienādojumam eksistē atrisinājums veselos skaitļos.

Piezīme. Ja ir zināms, ka kādam Diofanta vienādojumam eksistē atrisinājums veselos skaitļos, tad šo atrisinājumu var atrast, pēc kārtas noteiktā secībā pārlasot visus veselo skaitļu kortežus garumā n.

Teorēma (J.Matijasevičs, 1970): Neeksistē algoritms, kas pēc dota patvaļīga Diofanta vienādojuma noskaidro, vai šim vienādojumam eksistē atrisinājums naturālos skaitļos.

Pierādījums: nav ļoti vienkāršs.

Sk. K.Podnieka darbus tīmeklī.