31.10.2014 Views

Studento V. Astrausko ruošti ir dėstytojo peržiūrėti konspektai ...

Studento V. Astrausko ruošti ir dėstytojo peržiūrėti konspektai ...

Studento V. Astrausko ruošti ir dėstytojo peržiūrėti konspektai ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

VILNIAUS UNIVERSITETAS<br />

MATEMATIKOS IR INFORMATIKOS FAKULTETAS<br />

PROGRAMŲ SISTEMŲ KATEDRA<br />

Algoritmų teorija<br />

Paskaitų konspektas<br />

Dėstytojas: lekt. dr. Adomas B<strong>ir</strong>štunas<br />

Vilnius – 2013


Turinys<br />

1. Algoritmo samprata .................................................................... 2<br />

2. Hilberto tipo teiginių skaičiavimas ................................................... 3<br />

2.1. Dedukcijos teorema.................................................................... 3<br />

3. Sekvencinis skaičiavimas ............................................................... 6<br />

4. Disjunktų dedukcinė sistema. Rezoliucijų metodas ................................ 8<br />

4.1. Rezoliucijų metodas ................................................................... 11<br />

5. Turingo mašinos <strong>ir</strong> jų variantai........................................................ 12<br />

5.1. Baigtiniai automatai.................................................................... 13<br />

5.2. Algoritmų sudėtingumas .............................................................. 13<br />

5.3. Porų numeravimas ..................................................................... 14<br />

5.4. Baigtinumo problema .................................................................. 15<br />

6. λ-skaičiavimas ........................................................................... 18<br />

7. Primityviai rekursyvios funkcijos ..................................................... 20<br />

7.1. Dalinai rekursyvios funkcijos .......................................................... 21<br />

7.2. Rekursyviai skaičiosios aibės .......................................................... 23<br />

7.3. Ackermann funkcijos. ................................................................. 26<br />

7.4. Universaliosios funkcijos .............................................................. 27<br />

PAKEITIMAI ................................................................................ 30<br />

1


1. ALGORITMO SAMPRATA<br />

1 Ap. (Algoritmas). (Intuityvus apibrėžimas.) Veiksmų seka, kuri leidžia spręsti vieną ar kitą<br />

uždavinį.<br />

Pagrindinės algoritmo savybės:<br />

• žingsnių elementarumas;<br />

• diskretumas (algoritmas susk<strong>ir</strong>stytas į atsk<strong>ir</strong>us žingsnius);<br />

• determinuotumas (atlikus žingsnį aišku, kokį kitą žingsnį reikia atlikti);<br />

• masiškumas (sk<strong>ir</strong>tas ne vienam uždaviniui, bet jų klasei spręsti).<br />

Algoritmo formalizavimo būdai:<br />

1. sukurti idealizuotą matematinę mašiną (Turingo, RAM);<br />

2. apibrėžti rekursyvių funkcijų klasę (Dalinai rekursyvios funkcijos, λ-skaičiavimas).<br />

1 T. (Church tezė) Algoritmiškai apskaičiuojamų funkcijų aibė sutampa su rekursyviųjų funkcijų klase.<br />

(Šio teiginio neįmanoma įrodyti.)<br />

2 T. Turingo mašinomis apskaičiuojamų funkcijų aibė sutampa su rekursyviųjų funkcijų klase.<br />

2


2. HILBERTO TIPO TEIGINIŲ SKAIČIAVIMAS<br />

2 Ap. (Hilberto tipo teiginių skaičiavimas). Skaičiavimas, kuriame yra aksiomų schemos:<br />

1. 1 A → (B → A)<br />

2 (A → (B → C)) → ((A → B) → (A → C))<br />

2. 1 (A ∧ B) → A<br />

2 (A ∧ B) → B<br />

3 (A → B) → ((A → C) → (A → (B ∧ C)))<br />

3. 1 A → (A ∨ B)<br />

2 B → (A ∨ B)<br />

3 (A → C) → ((B → C) → ((A ∨ B) → C))<br />

4. 1 (A → B) → (¬B → ¬A)<br />

2 A → ¬¬A<br />

3 ¬¬A → A<br />

<strong>ir</strong> taisyklė Modus Ponens (MP):<br />

prielaidos { A A → B (MP), čia A, B, C – bet kokios teiginių logikos formulės.<br />

išvados { B<br />

Sakysime, jog formulė F yra įvykdoma Hilberto tipo teiginių skaičiavime, jeigu galima<br />

parašyti tokią formulių seką, kurioje kiekviena formulė yra:<br />

• arba aksioma,<br />

• arba gauta pagal MP iš ankstesnių<br />

<strong>ir</strong> kuri (seka) baigiasi formule F .<br />

3 T. Jei formulė yra įrodoma Hilberto tipo teiginių skaičiavime, tai ji yra tapačiai teisinga <strong>ir</strong> atv<strong>ir</strong>kščiai<br />

(jei nėra įrodoma, tai nėra tapačiai teisinga).<br />

Sakysime, jog skaičiavimo aksioma yra nepriklausoma, jei ją išmetus iš skaičiavimo, ji nėra<br />

išvedama jame.<br />

Visos Hilberto teiginių skaičiavimo aksiomos yra nepriklausomos.<br />

2.1. Dedukcijos teorema<br />

Sakysime, kad formulė F yra išvedama iš prielaidų A 1 , A 2 , A 3 , . . . , A n , jei egzistuoja tokia<br />

formulių seka, kurioje kiekviena formulė yra:<br />

• arba aksioma,<br />

• arba prielaida,<br />

• arba gauta pagal MP iš ankstesnių<br />

<strong>ir</strong> kuri (seka) baigiasi formule F .<br />

3


Žymėjimas: A 1 , A 2 , . . . , A n ⊢ F<br />

4 T. (Dedukcijos teorema) Γ ⊢ A → B ⇐⇒ Γ, A ⊢ B, kur A,B – bet kokios formulės, Γ –<br />

baigtinė formulių aibė (gali būti tuščia).<br />

Įrodymas ▷<br />

Būtinumas<br />

Jei Γ ⊢ A → B, tada egzistuoja formulių seka:<br />

1. F 1<br />

2. F 2<br />

· · ·<br />

i. F i<br />

· · ·<br />

k. F k = A → B<br />

k+1. A prielaida<br />

k+2. B MP iš k <strong>ir</strong> (k+1).<br />

kurioje:<br />

⎧<br />

⎪⎨ aksioma<br />

F i = prielaida iš Γ<br />

⎪⎩<br />

gauta pagal MP iš ankstesnių<br />

Γ, A ⊢ B.<br />

Pakankamumas<br />

Jei Γ, A ⊢ B, tai yra tokia formulių seka:<br />

1. F 1<br />

2. F 2<br />

· · ·<br />

i. F i<br />

· · ·<br />

k. F k = B<br />

kurioje:<br />

⎧<br />

⎪⎨<br />

F i =<br />

⎪⎩<br />

aksioma<br />

prielaida iš Γ<br />

prielaidaA<br />

gauta pagal MP iš ankstesnių<br />

4


Sukonstruokime tokią formulių seką (kuri nebūtinai yra išvedimas):<br />

1. A → F 1<br />

2. A → F 2<br />

· · ·<br />

i. A → F i<br />

· · ·<br />

k. A → F k = A → B<br />

Dabar kiekvieną A → F i keičiam tokiu būdu:<br />

1. Jei F i – aksioma, tada keičiam į:<br />

i.1 F i → (A → F i ) 1.1 aksioma<br />

i.2 F 1 aksioma<br />

i.3 A → F 1 MP iš (i.1) <strong>ir</strong> (i.2)<br />

2. Jei F i – prielaida iš Γ, tada keičiam į:<br />

i.1 F i → (A → F i ) 1.1 aksioma<br />

i.2 F 1 prielaida iš Γ<br />

i.3 A → F 1 MP iš (i.1) <strong>ir</strong> (i.2)<br />

3. Jei F i – prielaida A, tada A → F i = A → A. Keičiam A → A išvedimu.<br />

4. Tegu A → F u yra visos išvestos, kur u < i. F i buvo gauta iš kažkokių F r <strong>ir</strong> F l (kur<br />

r, l < i) pritaikius MP. Taigi mes jau turime išvestas A → F r <strong>ir</strong> A → F l . Kadangi<br />

F l = F r → F i (arba F r = F l → F i ), tai:<br />

i.1 (A →<br />

F l<br />

{ }} {<br />

(F r → F i )) → ((A → F r ) → (A → F i )) 1.2 aksioma<br />

i.2 (A → F r ) → (A → F i ) pagal MP<br />

i.3 A → F i pagal MP<br />

◁<br />

Sakysime, jog skaičiavimas yra pilnas formulių aibės A atžvilgiu, jei formulė ∈ A tada <strong>ir</strong> tik<br />

tada, jei ji yra įrodoma skaičiavimu.<br />

Hilberto tipo teiginių skaičiavimas yra pilnas tapačiai teisingų formulių aibės atžvilgiu.<br />

5


3. SEKVENCINIS SKAIČIAVIMAS<br />

3 Ap. (Sekvencija). Tokia išraiška F 1 , F 2 , . . . , F } {{ n ⊢ G } 1 , G 2 , . . . , G m , jei n + m > 0.<br />

} {{ }<br />

anticedentas<br />

sukcedentas<br />

Pastaba. Jei atitinkama sekvencija yra išvedama, tada teiginiai po brūkšnio yra teisingi:<br />

• ⊢ F – formulė yra tapačiai teisinga.<br />

• A 1 , A 2 , . . . , A n ⊢ F – iš prielaidų seka išvada F.<br />

• A 1 , A 2 , . . . , A n ⊢ B 1 , B 2 , . . . , B m – iš prielaidų seka bent viena iš išvadų B 1 , . . . , B m .<br />

• F ⊢ – formulė yra tapačiai klaidinga.<br />

4 Ap. (Sekvencinis skaičiavimas G). Skaičiavimas su aksioma Γ ′ , A, Γ ′′ ⊢ ∆ ′ , A, ∆ ′′ <strong>ir</strong> taisyklėmis<br />

(Γ, Γ ′ , Γ ′′ , ∆, ∆ ′ , ∆ ′′ – formulių sekos, A, B – formulės):<br />

(⊢ ¬)<br />

(¬ ⊢)<br />

(⊢ ∨)<br />

(∨ ⊢)<br />

(⊢ ∧)<br />

(∧ ⊢)<br />

(⊢→)<br />

(→⊢)<br />

Γ ′ , A, Γ ′′ ⊢ ∆ ′ , ∆ ′′<br />

Γ ′ , Γ ′′ ⊢ ∆ ′ , ¬A, ∆ ′′<br />

Γ ′ , Γ ′′ ⊢ ∆ ′ , A, ∆ ′′<br />

Γ ′ , ¬A, Γ ′′ ⊢ ∆ ′ , ∆ ′′<br />

Γ ′ , Γ ′′ ⊢ ∆ ′ , A, B, ∆ ′′<br />

Γ ′ , Γ ′′ ⊢ ∆ ′ , A ∨ B, ∆ ′′<br />

Γ ′ , A, Γ ′′ ⊢ ∆ ′ , ∆ ′′ Γ ′ , B, Γ ′′ ⊢ ∆ ′ , ∆ ′′<br />

Γ ′ , A ∨ B, Γ ′′ ⊢ ∆ ′ , ∆ ′′<br />

Γ ′ , Γ ′′ ⊢ ∆ ′ , A, ∆ ′′ Γ ′ , Γ ′′ ⊢ ∆ ′ , B, ∆ ′′<br />

Γ ′ , Γ ′′ ⊢ ∆ ′ , A ∧ B, ∆ ′′<br />

Γ ′ , A, B, Γ ′′ ⊢ ∆ ′ , ∆ ′′<br />

Γ ′ , A ∧ B, Γ ′′ ⊢ ∆ ′ , ∆ ′′<br />

Γ ′ , A, Γ ′′ ⊢ ∆ ′ , B, ∆ ′′<br />

Γ ′ , Γ ′′ ⊢ ∆ ′ , A → B, ∆ ′′<br />

Γ ′ , Γ ′′ ⊢ ∆ ′ , A, ∆ ′′ Γ ′ , B, Γ ′′ ⊢ ∆ ′ , ∆ ′′<br />

Γ ′ , A → B, Γ ′′ ⊢ ∆ ′ , ∆ ′′ 6


Sakysime, kad sekvencija F 1 , . . . , F n ⊢ G 1 , . . . , G m yra išvedame skaičiavime G, jei galime<br />

sukonstruoti tokį medį (grafą), kurio visose v<strong>ir</strong>šūnėse yra sekvencijos, šaknyje yra pradinė<br />

sekvencija F 1 , . . . , F n ⊢ G 1 , . . . , G m <strong>ir</strong> kiekvienai v<strong>ir</strong>šūnei teisinga: jei v<strong>ir</strong>šūnės N, kurioje yra<br />

sekvencija S, vaike(-uose) N 1 (<strong>ir</strong> N 2 ) yra sekvencija(-os) S 1 (<strong>ir</strong> S 2 ), tai sekvencija S yra gauta iš<br />

sekvencijos(-jų) S 1 (<strong>ir</strong> S 2 ) pagal kažkurią taisyklę, <strong>ir</strong> kurio (medžio) visuose lapuose yra aksiomos.<br />

Sakysime, kad taisyklė yra apverčiama, jei teisinga: jei taisyklės išvada išvedama, tai išvedamos<br />

<strong>ir</strong> visos taisyklės prielaidos.<br />

Visos sekvencinio skaičiavimo G taisyklės yra apverčiamos.<br />

Jei išvedant gautas lapas, kuriame nėra nei vienos formulės su kokia nors operacija <strong>ir</strong> jis<br />

nėra aksioma, tai reiškia, kad:<br />

1. sekvencija yra neišvedama, arba<br />

2. išvedime buvo panaudota neapverčiama taisyklė.<br />

5 T. Formulė F yra tapačiai teisinga tada <strong>ir</strong> tik tada, kai sekvenciniame skaičiavime G išvedama sekvencija<br />

⊢ F .<br />

7


4. DISJUNKTŲ DEDUKCINĖ SISTEMA. REZOLIUCIJŲ<br />

METODAS<br />

5 Ap. (Disjunktas). Literų disjunkcija. Litera yra kintamasis arba kintamasis su neigimu.<br />

6 Ap. (Atk<strong>ir</strong>tos taisyklė (AT)).<br />

C ′ ∨ p ∨ C ′′ D ′ ∨ ¬p ∨ D ′′ , kur p – litera, o C ′ , C ′′ , D ′ , D ′′ – disjunktai.<br />

C ′ ∨ C ′′ ∨ D ′ ∨ D ′′<br />

7 Ap. (S ⊢ C). Sakysime, kad disjunktas C yra išvedamas iš disjunktų aibės S, jei galima parašyti<br />

tokią disjunktų seką, kur kiekvienas disjunktas:<br />

• arba iš aibės S,<br />

• arba gautas pagal atk<strong>ir</strong>tos taisyklę iš jau parašytų<br />

<strong>ir</strong> kuri (seka) baigiasi disjunktu C.<br />

8 Ap. (Prieštaringa formulių aibė). Sakysime, kad formulių aibė S yra prieštaringa, jei su bet<br />

kokia interpretacija ν bent viena formulė iš aibės S yra klaidinga.<br />

Pastaba. Jei S nėra prieštaringa, tai S – įvykdoma.<br />

6 T. Jei iš disjunktų aibės S išvedamas disjunktas C <strong>ir</strong> disjunktas C nėra įvykdomas (tapačiai klaidingas),<br />

tai S – prieštaringa.<br />

Įrodymas ▷<br />

(Prieštaros būdu.)<br />

Tarkime S ⊢ C <strong>ir</strong> C – nėra įvykdomas, bet aibė S nėra prieštaringa.<br />

Jei aibė S nėra prieštaringa, tai yra tokia interpretacija ν, su kuria visi aibės S disjunktai bus<br />

teisingi:<br />

∀D (D ∈ S) : ν(D) = 1<br />

Parodysime, jog visi iš aibės S išvedami disjunktai yra teisingi su ta pačia interpretacija ν.<br />

Įrodymas matematinės indukcijos metodu, pagal išvedimo ilgį l:<br />

1. Jei l = 1, tai D 1 ∈ S =⇒ ν(D 1 ) = 1, nes visi aibės S disjunktai yra teisingi su interpretacija<br />

ν.<br />

2. Tarkime, kad ∀i (i < m), ν(D i ) = 1.<br />

3. Panagrinėkime ν(D m ):<br />

• Jei D m ∈ S, tai ν(D m ) = 1.<br />

• Jei D m ∉ S, tai D m gautas iš kažkokių D a <strong>ir</strong> D b pagal atk<strong>ir</strong>tos taisyklę. Pagal matematinės<br />

indukcijos prielaidą ν(D a ) = ν(D b ) = 1, nes a, b < m. Kadangi<br />

D a D b (AT)<br />

D m<br />

8


tai D a = D a ′ ∨ p <strong>ir</strong> D b = D b ′ ∨ ¬p, o D m = D a ′ ∨ D b ′ .<br />

– Jei ν(p) = 1, tai ν(D b ′ ) = 1(, nes ν(D′ b ∨ ¬p) = 1) =⇒ ν(D m) = ν(D b ′ ∨ D′ a) = 1.<br />

– Jei ν(¬p) = 1, tai ν(D a) ′ = 1(, nes ν(D a ′ ∨ p) = 1) =⇒ ν(D m ) = ν(D b ′ ∨ D′ a) = 1.<br />

Naudodami matematinę indukciją gavome, kad visi išvedami disjunktai yra teisingi su interpretacija<br />

ν. Tada <strong>ir</strong> ν(C) = 1 =⇒ prieštara, nes disjunktas C nėra įvykdomas.<br />

◁<br />

Tuščias disjunktas nėra įvykdomas (yra tapačiai klaidingas).<br />

Žymėjimas: □ – tuščias disjunktas.<br />

Jei iš aibės S ⊢ □, tai aibė S – prieštaringa.<br />

7 T. Jei disjunktų aibė S yra prieštaringa, tai iš jos galima išvesti tuščią disjunktą S ⊢ □.<br />

Įrodymas ▷<br />

(Matematinės indukcijos būdu pagal sk<strong>ir</strong>tingų kintamųjų kiekį n aibėje S.)<br />

Bazė Jei n = 1, tai aibė S gali būti: {p}, {¬p}, {p, ¬p}.<br />

} {{ }<br />

nėra prieštaringos<br />

S = {p, ¬p} – prieštaringa aibė:<br />

1. p (iš S)<br />

2. ¬p (iš S)<br />

3. □ (pagal AT iš 1 <strong>ir</strong> 2)<br />

Jei aibėje S yra vienas kintamasis, tai jai (aibei S) teisinga: jei S – prieštaringa, tai iš jos<br />

išvedama □.<br />

Prielaida Tarkime, jei aibėje yra n < m sk<strong>ir</strong>tingų kintamųjų, tai jei S – prieštaringa, tai S ⊢ □.<br />

Indukcinis žingsnis Tegu disjunktų aibė S turi n = m sk<strong>ir</strong>tingų kintamųjų.<br />

Padalinkime aibės S disjunktus į 3 aibes (grupes):<br />

S p priklauso tie aibės S disjunktai, kurie neturi literos p.<br />

S + p<br />

S − p<br />

priklauso tie aibės S disjunktai, kurie turi literą p (be neigimo).<br />

priklauso tie aibės S disjunktai, kurie turi literą ¬p (su neigimu).<br />

Tada: S = S p ∪ S + p ∪ S − p .<br />

Nagrinėkime aibę S ′ = S p ∪at(S + p , S − p ), kur at(S + p , S − p ) – yra disjunktų aibė, kuri yra gauta<br />

pritaikius AT visiems disjunktams iš aibių S + p <strong>ir</strong> S − p pagal kintamąjį p. Tegu:<br />

S + p = {C 1 ∨ p, C 2 ∨ p, . . . , C v ∨ p} <strong>ir</strong><br />

S − p<br />

= {D 1 ∨ ¬p, D 2 ∨ ¬p, . . . , D r ∨ ¬p}<br />

9


tada<br />

at(S + p , S − p ) = {C 1 ∨ D 1 , C 1 ∨ D 2 , . . . , C 1 ∨ D r<br />

C 2 ∨ D 1 , C 2 ∨ D 2 , . . . , C 2 ∨ D r<br />

· · ·<br />

C v ∨ D 1 , C v ∨ D 2 , . . . , C v ∨ D r }<br />

Aibėje S ′ yra < m kintamųjų (nes nėra p), todėl aibei S ′ galioja prielaida: jei S ′ – prieštaringa<br />

=⇒ S ′ ⊢ □. Parodysime, jog S <strong>ir</strong> S ′ arba abi kartu įvykdomos, arba neįvykdomos:<br />

1. Jei S – įvykdoma, tai ∃ν : ν(D) = 1, ∀D (D ∈ S). Taip pat <strong>ir</strong> visi disjunktai iš aibės S p<br />

yra įvykdomi su ta pačia interpretacija ν, nes S p ⊂ S. Taip pat visi disjunktai iš aibės<br />

at(S + p , S − p ) yra įvykdomi su interpretacija ν, nes jie yra išvesti iš aibės S pritaikius AT (žr.<br />

6 teiginio įrodymą). Taigi su ν teisingi visi aibės S ′ disjunktai, tai yra S ′ – įvykdoma.<br />

2. Jei S ′ – įvykdoma, tai yra interpretacija ν, su kuria visi aibės S ′ disjunktai yra teisingi.<br />

Kadangi aibėje S ′ nėra kintamojo p, tai interpretacija ν jam neprisk<strong>ir</strong>ia nei 0, nei 1.<br />

Papildome interpretaciją ν apibrėždami ar kintamasis p yra teisingas ar klaidingas, taip<br />

kad su interpretacija ν visi aibės S disjunktai būtų teisingi.<br />

2.1. Jei yra toks i (i = 1, 2, . . . , v), su kuriuo ν(C i ) = 0, tada apibrėžiame ν(p) = 1, tada<br />

ν(C 1 ∨ p) = ν(C 2 ∨ p) = · · · = ν(C v ∨ p) = 1<br />

Kadangi visi aibės at(S + p , S − p ) disjunktai yra teisingi su interpretacija ν, tai ν(C i ∨<br />

D 1 ) = · · · = ν(C i ∨ D r ) = 1, bet ν(C i ) = 0, todėl ν(D 1 ) = ν(D 2 ) = · · · = ν(D r ) =<br />

1 =⇒ ν(D 1 ∨ ¬p) = · · · = ν(D r ∨ ¬p) = 1<br />

Gavome, kad su ν visi S p + , Sp<br />

− <strong>ir</strong> S p yra teisingi =⇒ S – įvykdoma.<br />

2.2. Jei nėra tokio i (i = 1, 2, . . . , v), su kuriuo ν(C i ) = 0, tada ν(C 1 ) = ν(C 2 ) = · · · =<br />

ν(C v ) = 1, tada <strong>ir</strong> ν(C 1 ∨ p) = ν(C 2 ∨ p) = · · · = ν(C v ∨ p) = 1.<br />

Apibrėžkime ν(p) = 0, tada ν(D 1 ∨ ¬p) = ν(D 2 ∨ ¬p) = · · · = ν(D r ∨ ¬p) = 1.<br />

Gavome, kad su ν visi S p + , Sp<br />

− <strong>ir</strong> S p yra teisingi =⇒ S – įvykdoma.<br />

Gavome, kad jeigu S ′ įvykdoma, tai <strong>ir</strong> S yra įvykdoma.<br />

Aibėje S ′ yra < m kintamųjų, todėl jei S ′ prieštaringa, tai S ′ ⊢ □ (prielaida). S ′ – prieštaringa<br />

tada <strong>ir</strong> tik tada, kai S – prieštaringa, todėl jei S – prieštaringa, tai iš S galima išvesti<br />

□.<br />

Išvada: S ⊢ □ ⇐⇒ S – prieštaringa.<br />

◁<br />

10


4.1. Rezoliucijų metodas<br />

Jei norime patikrinti ar iš prielaidų A 1 , A 2 , . . . , A n seka išvada F :<br />

A 1 , A 2 , . . . , A n ⊢ F ⇐⇒ aibė B = {A 1 , A 2 , . . . , A n , ¬F } – prieštaringa<br />

⇐⇒ disjunktų aibė (gauta paverčiant B aibės elementus į NKF)<br />

S = {D 1 , D 2 , . . . , D m } – prieštaringa<br />

⇐⇒ S ⊢ □ pagal disjunktų dedukcinę sistemą.<br />

11


5. TURINGO MAŠINOS IR JŲ VARIANTAI<br />

9 Ap. (Determinuota vienajuostė Turingo mašina). Ketvertas < Σ, Q, F, δ >, kur:<br />

Σ – baigtinė aibė – abėcėlė. (Jei nepaminėta kitaip: Σ = {0, 1, b}.)<br />

Q – baigtinė aibė – būsenų aibė. (Q = {q 0 , q 1 , . . . , q n }, kur q 0 – pradinė būsena.)<br />

F – galutinių būsenų aibė (F ⊂ Q).<br />

δ – perėjimų funkcija. (δ : Q × Σ → Q × Σ × {K, N, D})<br />

10 Ap. (Apibrėžta TM). Sakysime, jog TM su pradiniais duomenimis X yra apibrėžta, jei pradžioje<br />

į duomenų juostą įrašius žodį X, TM po baigtinio žingsnių kiekio patenka į vieną iš galutinių<br />

būsenų.<br />

11 Ap. (Turingo mašina apskaičiuoja funkciją). Sakysime, kad TM M apskaičiuoja funkciją<br />

f(x 1 , x 2 , . . . , x n ), jei egzistuoja toks kodavimas abėcėlės Σ simboliais cod(x 1 , x 2 , . . . , x n ) = ˜x,<br />

kuriam teisinga:<br />

1. jei f(x 1 , x 2 , . . . , x n ) = y (funkcija apibrėžta), tada TM M su pradiniais duomenimis<br />

cod(x 1 , x 2 , . . . , x n ) yra apibrėžta <strong>ir</strong> baigus darbą, į dešinę nuo skaitymo galvutės yra žodis<br />

cod(y);<br />

2. jei f(x 1 , x 2 , . . . , x n ) – neapibrėžta, tada TM M su pradiniais duomenimis cod(x 1 , x 2 , . . . , x n )<br />

<strong>ir</strong>gi yra neapibrėžta.<br />

12 Ap. (Determinuota m-juostė TM). Ketvertas < Σ, Q, F, δ >, kur:<br />

Σ – baigtinė aibė – abėcėlė.<br />

Q – baigtinė būsenų aibė.<br />

F – galutinių būsenų aibė. (F ⊂ Q)<br />

δ – perėjimų funkcija:<br />

δ : Q × Σ<br />

}<br />

× Σ ×<br />

{{<br />

· · · × Σ<br />

}<br />

→<br />

m<br />

Q × Σ<br />

}<br />

× Σ ×<br />

{{<br />

· · · × Σ<br />

}<br />

× {K, D, N} × {K, D, N} × · · · × {K, D, N}<br />

} {{ }<br />

m<br />

m<br />

13 Ap. (Nedeterminuota Turingo mašina). Turingo mašina, kurios perėjimų funkcija yra daugiareikšmė.<br />

12


5.1. Baigtiniai automatai<br />

14 Ap. (Baigtinis automatas). Vienajuostė determinuota Turiningo mašina, kurios perėjimų funkcija<br />

yra δ(q i , a) = (q j , a, D) <strong>ir</strong> kuri (TM) baigia darbą tada, kai pasiekia p<strong>ir</strong>mąją tuščią ląstelę.<br />

15 Ap. (Baigtinio automato kalba). Aibė žodžių, su kuriais automatas baigia darbą vienoje iš<br />

galutinių būsenų.<br />

8 T. Baigtinė aibė yra baigtinio automato kalba.<br />

9 T. Baigtinio automato kalbos A papildinys Ā <strong>ir</strong>gi yra baigtinio automato kalba.<br />

10 T. Jei A 1 <strong>ir</strong> A 2 yra baigtinio automato kalbos, tai <strong>ir</strong> A 1 ∪ A 2 , bei A 1 ∩ A 2 yra baigtinio automato<br />

kalbos.<br />

Įrodymas ▷<br />

Grafų G 1 <strong>ir</strong> G 2 Dekarto sandauga yra grafas, kurio v<strong>ir</strong>šūnės yra visos įmanomos poros (q i , q j ), kur<br />

q i yra G 1 v<strong>ir</strong>šūnė, o q j – G 2 v<strong>ir</strong>šūnė. Iš v<strong>ir</strong>šūnės (q i , q j ) eis briauna į v<strong>ir</strong>šūnę (q k , q l ) su simboliu<br />

a, jei grafe G 1 eina briauna iš v<strong>ir</strong>šūnės q i į v<strong>ir</strong>šūnę q k su simboliu a <strong>ir</strong> grafe G 2 eina briauna iš<br />

v<strong>ir</strong>šūnės q j į v<strong>ir</strong>šūnę q l su simboliu a.<br />

F A∪B – visos v<strong>ir</strong>šūnės (q i , q j ), kur q i ∈ F A arba q j ∈ F B .<br />

F A∩B – visos v<strong>ir</strong>šūnės (q i , q j ), kur q i ∈ F A <strong>ir</strong> q j ∈ F B .<br />

Baigtinis automatas, kurio perėjimų funkcija vaizduojama grafu G 1 × G 2 , pradinė būsena<br />

yra (q 0 , q 0 ) <strong>ir</strong> kurio galutinių būsenų aibė yra F A∪B , turės kalbą A 1 ∪ A 2 . Atitinkamai, baigtinis<br />

automatas, kurio galutinių būsenų aibė yra F A∩B , turės kalbą A 1 ∩ A 2 .<br />

◁<br />

11 T. Baigtinių automatų kalbų<br />

1. konkatenacija := {uv : u ∈ A 1 , v ∈ A 2 }, kur A 1 , A 2 – automato kalbos;<br />

2. iteracija := {u 1 u 2 . . . u k : u i ∈ A, i = 1, 2, . . . , k}, kur A – automato kalba;<br />

3. atspindys := {a 1 a 2 . . . a n : a n a n−1 . . . a 1 ∈ A}, kur A – automato kalba<br />

<strong>ir</strong>gi yra baigtinių automatų kalbos.<br />

5.2. Algoritmų sudėtingumas<br />

Žymėjimas:<br />

i(v) – žodžio v ilgis;<br />

t(v) – žingsnių kiekis, kurį atlieka TM, jei pradinių duomenų juostoje yra žodis v.<br />

s(v) – panaudotų ląstelių kiekis, kurį sunaudojo TM, jei pradinių duomenų juostoje buvo žodis<br />

v.<br />

13


16 Ap. (Turingo mašinos M sudėtingumas laiko atžvilgiu). Funkcija: T M (n) = max{t(v) :<br />

i(v) = n}.<br />

17 Ap. (Turingo mašinos M sudėtingumas atminties atžvilgiu). Funkcija: S M (n) = max{s(v) :<br />

i(v) = n}.<br />

18 Ap. (Turingo mašinos kalba). Žodžių, su kuriais TM baigia darbą galutinėje būsenoje, aibė.<br />

19 Ap. (Problema (aibė) išsprendžiama su TM). Sakysime, jog problema (aibė) A yra išsprendžiama<br />

su Turingo mašina, jei yra tokia Turingo mašina, kurios kalba yra A.<br />

Sakysime, kad TM sudėtingumas atminties atžvilgiu yra f(n), jei ∃c (c > 0) : S M (n) =<br />

cf(n), ∀n.<br />

Sakysime, kad TM sudėtingumas laiko atžvilgiu yra f(n), jei ∃c (c > 0) : T M (n) =<br />

cf(n), ∀n.<br />

20 Ap. (Sudėtingumo klasės).<br />

• DT IME(f(n)) – sudėtingumo klasė, kuriai priklauso visi uždaviniai, kuriems egzistuoja juos<br />

sprendžianti daugiajuostė determinuota TM, kurios sudėtingumas laiko atžvilgiu yra f(n).<br />

• NT IME(f(n)) – sudėtingumo klasė, kuriai priklauso visi uždaviniai, kuriems egzisutoja juos<br />

sprendžianti daugiajuostė nedeterminuota TM, kurios sudėtingumas laiko atžvilgiu yra f(n).<br />

• DSP ACE(f(n)) – sudėtingumo klasė, kuriai priklauso visi uždaviniai, kuriems egzistuoja<br />

juos sprendžianti daugiajuostė determinuota TM, kurios sudėtingumas atminties atžvilgiu yra<br />

f(n).<br />

• NSP ACE(f(n)) – sudėtingumo klasė, kuriai priklauso visi uždaviniai, kuriems egzsituoja<br />

juos sprendžianti daugiajuostė nedeterminuota TM, kurios sudėtingumas atminties atžvilgiu<br />

yra f(n).<br />

21 Ap. (Sudėtingumo klasės).<br />

• L = DSP ACE(log n)<br />

• NL = NSP ACE(log n)<br />

• P = DT IME(n k ), kur k – konstanta.<br />

• NP = NT IME(n k ), kur k – konstanta.<br />

• P SP ACE = DSP ACE(n k ), kur k – konstanta.<br />

• EXP = DT IME(2 nk ), kur k – konstanta.<br />

12 T. L ⊆ NL ⊆ P ⊆ NP ⊆ P SP ACE ⊆ EXP <strong>ir</strong> NL ≠ P SP ACE <strong>ir</strong> P ≠ EXP .<br />

5.3. Porų numeravimas<br />

Σ=0<br />

Σ=1<br />

Σ=2<br />

{ }} { { }} { { }} {<br />

(0; 0) , (0; 1) , (1; 0) , (0; 2) , (1; 1) , (2; 0) , (0; 3) , (1; 2) , . . .<br />

} {{ } } {{ } } {{ } } {{ } } {{ } } {{ } } {{ } } {{ }<br />

0 1 2 3 4 5 6 7<br />

14


22 Ap. (Poros numeris Kantaro numeracijoje). Funkcija α 2 (x, y). Ka<strong>ir</strong>iojo nario funkcija yra<br />

π 1 2(n), o dešiniojo π 2 2(n), kur n yra porai prisk<strong>ir</strong>tas numeris.<br />

13 T. Poros (x; y) numeris:<br />

Pastaba.<br />

π 1 2(n) = n −· 1<br />

2<br />

α 2 (x, y) = (x + y)2 + 3x + y<br />

2<br />

[ √ ] [ 8n + 1] + 1 [<br />

[ √ 8n + 1] − 1]<br />

2<br />

23 Ap. (Kantaro funkcijos). α n (x 1 , x 2 , . . . , x n ) – rinkinio x 1 , x 2 , . . . , x n numeris Kantaro numeracijoje.<br />

π i n(K) – K-ojo rinkinio iš n elementų i-asis narys.<br />

Pastaba.<br />

Kantaro funkcijos rekurentinė išraiška:<br />

>>> def alpha(*numbers):<br />

... if len(numbers) == 2:<br />

... x, y = numbers<br />

⎧<br />

⎨α 2 (x, y) = (x+y)2 +3y+x<br />

2<br />

⎩α n (x 1 , x 2 , . . . , x n ) = α 2 (x 1 , α n−1 (x 2 , x 3 , . . . , x n ))<br />

... return ((x+y)**2 + 3*x + y)/2<br />

... elif len(numbers) > 2:<br />

... return alpha(numbers[0], alpha(*numbers[1:]))<br />

... else:<br />

... raise Exception('Netinkamas argumentų kiekis!')<br />

>>> alpha(1,0,1,2)<br />

436.0<br />

1 Pvz. Šis pavyzdys iliustruoja kaip į kiekvieną n-argumentų funkciją galima žiūrėti kaip į 1-<br />

argumento funkciją, kur argumentas yra atitinkamo rinkinio numeris. Šiuo atveju f(x, y) yra 2<br />

argumentų funkcija, o ją atitinkanti vieno argumento funkcija yra g(z) (iš esmės abi jos skaičiuoja<br />

tą patį).<br />

f(x, y) = 3x + y<br />

g(z) = 3π 1 2(z) + π 2 2(z)<br />

f(x, y) = g(α 2 (x, y)) = 3x + y<br />

5.4. Baigtinumo problema<br />

24 Ap. (Standartinė TM). Tokia TM, kuri:<br />

1. vienajuostė determinuota;<br />

15


2. Σ = {0, 1, b};<br />

3. kai baigia darbą būdama galutinėje būsenoje, juostoje yra tik atsakymas, <strong>ir</strong> skaitymo galvutė<br />

žiūri į p<strong>ir</strong>mąjį iš ka<strong>ir</strong>ės netuščią simbolį;<br />

4. |F | = 1.<br />

14 T. Kiekvienai TM egzistuoja standartinė TM, kuri skaičiuoja tą pačią funkciją.<br />

15 T. Standartinių TM aibė yra skaiti.<br />

Pastaba. Visas standartines TM galima sunumeruoti:<br />

Turingo mašina: T 0 , T 1 , T 2 , T 3 , T 4 , . . .<br />

Jos skaičiuojama funkcija: φ 0 (x), φ 1 (x), φ 2 (x), φ 3 (x), φ 4 (x), . . .<br />

25 Ap. (Baigtinumo problema). Ar yra toks algoritmas, kuris N skaičių porai (m, n) pasakytų, ar<br />

TM su numeriu m (T m ) <strong>ir</strong> pradiniais duomenimis n baigia darbą, ar ne.<br />

16 T. Baigtinumo problema neišsprendžiama.<br />

Įrodymas ▷<br />

(Prieštaros būdu.)<br />

Tarkime, jog egzistuoja toks algoritmas, kuris porai (m; n) pasako, ar TM T m su duomenimis<br />

n yra apibrėžta, ar ne. Tada egzistuoja tokia algoritmiškai apskaičiuojama funkcija:<br />

⎧<br />

⎨1, jei φ x (y) < ∞ (apibrėžta),<br />

g(α 2 (x, y)) =<br />

⎩0, jei φ x (y) = ∞ (neapibrėžta).<br />

Tada yra TM, kuri apskaičiuoja funkciją g(z). Tada yra TM, kuri apskaičiuoja funkciją:<br />

⎧<br />

⎨1, jei g(α 2 (x, x)) = 0,<br />

f(x) =<br />

⎩∞, jei g(α 2 (x, x)) = 1.<br />

TM skaičiuojančią g(z) pažymėkime M 1 .<br />

M 1 : Q 1 – būsenų aibė;<br />

F 1 – galutinių būsenų aibė.<br />

Sukonstruokime TM M 2 skaičiuojančią f(x):<br />

Kai M 1 baigia darbą, tai galimi du variantai:<br />

1. TM yra galutinėje būsenoje q F ∈ F 1 <strong>ir</strong> juostoje yra vienintelis simbolis 1, į kurį <strong>ir</strong> žiūri skaitymo<br />

galvutė.<br />

2. TM yra galutinėje būsenoje q F ∈ F 1 <strong>ir</strong> juostoje yra vienintelis simbolis 0, į kurį <strong>ir</strong> žiūri skaitymo<br />

galvutė.<br />

16


TM M 2 tokia pati, kaip <strong>ir</strong> M 1 , tik Q 2 = Q 1 ∪ {q ∗ }, F 2 = {q ∗ }, q F – nėra galutinė būsena <strong>ir</strong>:<br />

δ(q F , 0) = (q ∗ , 1, N) → f(x) – apibrėžta;<br />

δ(q F , 1) = (q F , 1, N) → f(x) – neapibrėžta.<br />

Kadangi yra TM (M 2 ), kuri apskaičiuoja funkciją f(x), tai yra toks numeris l, kad T l = M 2 .<br />

T l apskaičiuoja φ l (x), todėl f(x) = φ l (x). Panagrinėkime φ l (l):<br />

1. Jei φ l (l) < ∞, tai g(α 2 (l, l)) = 1 =⇒ f(l) = ∞ =⇒ φ l (l) = ∞;<br />

2. Jei φ l (l) = ∞, tai g(α 2 (l, l)) = 0 =⇒ f(l) = 1 =⇒ φ l (l) < ∞.<br />

Gauname prieštarą, todėl neegzistuoja toks algoritmas, kuris porai (m; n) pasakytų, ar TM T m su<br />

pradiniais duomenis n baigia darbą, ar ne.<br />

◁<br />

26 Ap. (Aibės charakteringoji funkcija). Aibės A charakteringoji funkcija yra:<br />

⎧<br />

⎨1, jei x ∈ A<br />

χ A (x) =<br />

⎩0, jei x ∉ A<br />

27 Ap. (Rekursyvi aibė). Sakysime, kad aibė yra rekursyvi, jei jos charakteringoji funkcija yra<br />

visur apibrėžta rekursyvi funkcija.<br />

Pastaba. (Rice teorema.) Jei aibė X yra vieno argumento dalinai rekursyvių funkcijų aibė <strong>ir</strong><br />

nesutampa nei su ∅, nei su visa vieno argumento dalinai rekursyvių funkcijų aibe (yra poaibis),<br />

tai aibė A = {x : φ x ∈ X} nėra rekursyvi.<br />

2 Pvz. X – funkcijų, kurios visada grąžina 1 aibė: X = {f(x) = 1}. Tada A = {x : φ x ∈ X}<br />

nėra rekursyvi =⇒ nėra algoritmo, kuris pasakytu ar x ∈ A.<br />

17


6. λ-SKAIČIAVIMAS<br />

28 Ap. (λ–skaičiavimo termas).<br />

• Jei u – kintamasis, tai u yra termas.<br />

• Jei E 1 <strong>ir</strong> E 2 yra termai, tai <strong>ir</strong> (E 1 E 2 ) yra termas.<br />

• Jei E yra termas, o x – kintamasis, tai <strong>ir</strong> λx.E <strong>ir</strong>gi yra termas.<br />

Pastaba. Kintamuosius žymime mažosiomis raidėmis.<br />

Pastaba. Skliaustai būtini: (xy)z ≠ x(yz)!<br />

Kintamojo įeitis terme yra jo pasitaikymas jame.<br />

3 Pvz. Jei turime termą:<br />

(λx.((yz)(λz.((zx)y)))(x(λy.(xy)))),<br />

tai:<br />

(λ }{{} x .((yz)(λz.((z<br />

1<br />

sunumeruotos yra kintamojo x įeitys.<br />

}{{} x<br />

2<br />

)y)))( x<br />

}{{}<br />

3<br />

(λy.( x<br />

}{{}<br />

4<br />

y)))),<br />

Kintamojo įeitis x yra suvaržyta, jei patenka į λx. veikimo sritį. Kitaip x įeitis yra laisva.<br />

Pastaba. λx.E terme λx. veikimo sritis yra termas E.<br />

Pastaba. λx.xu = (λx.x)u ≠ λx.(xu)<br />

Termai E 1 <strong>ir</strong> E 2 yra α-ekvivalentūs, jei E 2 yra gautas iš E 1 , jame visas laisvas kažkurio<br />

kintamojo x įeitis pakeitus nauju kintamuoju.<br />

Termas λx.E 1 yra α-ekvivalentus termui λy.E 2 , jei termas E 2 yra gautas iš termo E 1 , jame<br />

visas laisvas x įeitis pakeitus nauju kintamuoju y.<br />

29 Ap. (Redeksas <strong>ir</strong> jo santrauka). Termas pavidalo (λx.E)Y , kur E <strong>ir</strong> Y yra termai, vadinamas<br />

redeksu. Redekso (λx.E)Y santrauka yra termas E[ Y / x ] – termas E, kuriame visos laisvos<br />

kintamojo x įeitys yra pakeistos termu Y .<br />

4 Pvz. Redekso (λx. (ux)) (zz) santrauka yra termas u(zz).<br />

} {{ } }{{}<br />

E Y<br />

5 Pvz. Redekso (λx.((ux)(λx.(xy))))(zz) santrauka yra termas (u(zz))(λx.(xy)).<br />

30 Ap. (β-redukcija). λ-skaičiavimo termo E β-redukcija vadinama termų seka E 1 ▷ E 2 ▷ E 3 ▷<br />

E 4 ▷ · · · ▷ E k ▷, kur E 1 = E, <strong>ir</strong> E i+1 yra gautas iš E i jame p<strong>ir</strong>mąjį iš ka<strong>ir</strong>ės redeksą pakeitus jo<br />

santrauka.<br />

18


31 Ap. (Normalinis termas). Termas, kuriame nėra redeksų. Termas yra nenormalizuojamas,<br />

jeigu jo β-redukcija yra begalinė.<br />

32 Ap.. λ-skaičiavimo loginės konstantos yra λx.λy.y <strong>ir</strong> λx.λy.x.<br />

} {{ } } {{ }<br />

klaidinga teisinga<br />

Žymėjimas: λx.λy.y = 0 <strong>ir</strong> λx.λy.x = 1.<br />

33 Ap.. λ-skaičiavimo natūrinis skaičius k yra λf.λx.(f k x), kur f k x = f(f(. . . f(f x) . . . )).<br />

} {{ }<br />

k kartų<br />

Žymėjimas: Skaičius 2 žymimas 2 = λf.λx(f 2 x) = λf.λx(f(fx))<br />

6 Pvz. (x1)1 = (x(λx.λy.x))(λf.λx.(fx))<br />

34 Ap.. Sakysime, kad termas E apibrėžia dalinę funkciją f(x 1 , x 2 , . . . , x n ), jei:<br />

• jei f(K 1 , K 2 , . . . , K n ) = K, tai termas (. . . ((EK 1 )K 2 ) . . . )K n redukuojamas (β-redukcijoje)<br />

į termą K;<br />

• jei f(K 1 , K 2 , . . . , K n ) = ∞, tai termas (. . . ((EK 1 )K 2 ) . . . )K n yra neredukuojamas.<br />

17 T. Kiekvienai algoritmiškai apskaičiuojamai funkcijai egzistuoja ją apibrėžiantis termas.<br />

19


7. PRIMITYVIAI REKURSYVIOS FUNKCIJOS<br />

Kompozicijos operatorius: sakysime, kad funkcija f(x 1 , x 2 , . . . , x n ) yra gauta iš funkcijų<br />

g i (x 1 , x 2 , . . . , x n ) (i = 1, 2, 3, . . . , m) <strong>ir</strong> funkcijos h(x 1 , x 2 , . . . , x m ), jei f(x 1 , x 2 , . . . , x n ) =<br />

h(g 1 (x 1 , . . . , x n ), . . . , g m (x 1 , . . . , x n )).<br />

35 Ap.. Sakysime, jog funkcija f(x 1 , x 2 , . . . , x n ) yra gauta pagal primityviosios rekursijos operatorių<br />

iš g(x 1 , x 2 , . . . , x n−1 ) <strong>ir</strong> h(x 1 , x 2 , . . . , x n , x n+1 ), jei teisinga:<br />

f(x 1 , x 2 , . . . , x n−1 , 0) = g(x 1 , x 2 , . . . , x n−1 ) <strong>ir</strong><br />

f(x 1 , x 2 , . . . , x n−1 , y + 1) = h(x 1 , x 2 , . . . , x n−1 , y, f(x 1 , x 2 , . . . , x n−1 , y))<br />

36 Ap. (Primityviai rekursyvių funkcijų aibė (PR)). Primityviai rekursyvių funkcijų aibė sutampa<br />

su aibe, kuriai priklauso bazinės funkcijos: 0, s(x) = x + 1, pr i m(x 1 , x 2 , . . . , x m ) = x i <strong>ir</strong> kuri yra<br />

uždara kompozicijos <strong>ir</strong> primityviosios rekursijos operatorių atžvilgiu.<br />

Visos PR funkcijos yra apibrėžtos su visais natūraliaisiais skaičiais.<br />

Sakysime, kad N skaičių poaibis yra primityviai rekursyvus, jei jo charakteringoji funkcija<br />

priklauso PR.<br />

18 T. Kantaro funkcijos α n (x 1 , x 2 , . . . , x n ) <strong>ir</strong> π i n(K) yra primityviai rekursyvios.<br />

19 T. Jei funkcija g(x 1 , x 2 , . . . , x n ) ∈ PR, tai <strong>ir</strong> funkcija f(x 1 , x 2 , . . . , x n ) = ∑ x n<br />

i=0 g(x 1, x 2 , . . . , x n ) ∈<br />

PR<br />

20 T. Jei f i (x 1 , x 2 , . . . , x n ) ∈ PR <strong>ir</strong> α j (x 1 , x 2 , . . . , x n ) ∈ PR (i = 1, 2, . . . , s, s+1; j = 1, 2, . . . , s),<br />

tada <strong>ir</strong> funkcija:<br />

⎧<br />

f 1 (x 1 , x 2 , . . . , x n ), jei α 1 (x 1 , x 2 , . . . , x n ) = 0,<br />

f ⎪⎨ 2 (x 1 , x 2 , . . . , x n ), jei α 2 (x 1 , x 2 , . . . , x n ) = 0,<br />

h(x 1 , x 2 , . . . , x n ) = · · ·<br />

yra primityviai rekursyvi.<br />

f s (x 1 , x 2 , . . . , x n ), jei α s (x 1 , x 2 , . . . , x n ) = 0,<br />

⎪⎩ f s+1 (x 1 , x 2 , . . . , x n ), kitu atveju<br />

Pastaba. Su bet kuriuo rinkiniu (x 1 , x 2 , . . . , x n ) ne daugiau nei viena α i (x 1 , x 2 , . . . , x n ) (i =<br />

1, 2, . . . , s) gali būti lygi 0.<br />

37 Ap. (Iteracijos operatorius). Sakysime, kad funkcija f(x) yra gauta pagal iteracijos operatorių<br />

iš funkcijos g(x), jei teisinga:<br />

⎧<br />

⎨ f(0) = 0<br />

⎩f(y + 1) = g(f(y))<br />

20


21 T. Visų vieno argumento PR funkcijų aibė sutampa su aibe, kuriai priklauso funkcijos s(x) = x+1,<br />

q(x) = x −·<br />

[ √ x] 2 <strong>ir</strong> kuri yra uždara kompozicijos, sudėties <strong>ir</strong> iteracijos operatorių atžvilgiu.<br />

7.1. Dalinai rekursyvios funkcijos<br />

38 Ap. (Minimizacijos operatorius). Sakysime, kad funkcija f(x 1 , x 2 , . . . , x n ) gauta pagal minimizacijos<br />

operatorių iš funkcijos g(x 1 , x 2 , . . . , x n ), jei:<br />

f(x 1 , x 2 , . . . , x n ) = µ y (g(x 1 , x 2 , . . . , x n−1 , y) = x n ),<br />

tai yra pati mažiausia natūrali y reikšmė, kuriai teisinga g(x 1 , x 2 , . . . , x n−1 , y) = x n .<br />

39 Ap. (Dalinai rekursyvių funkcijų aibė (DR)). Dalinai rekursyvių funkcijų aibė sutampa su<br />

aibe, kuriai priklauso bazinės funkcijos 0, s(x) = x + 1, prn(x i 1 , x 2 , . . . , x n ) = x i <strong>ir</strong> kuri yra<br />

uždara kompozicijos, primityviosios rekursijos <strong>ir</strong> minimizacijos operatorių atžvilgiu.<br />

Pastaba. Jei f(x 1 , x 2 , . . . , x n ) = µ y (g(x 1 , x 2 , . . . , x n−1 , y) = x n ), tai f(x 1 , x 2 , . . . , x n ) reikšmė<br />

apskaičiuojama remiantis tokiu algoritmu:<br />

for (y = 0; g(x 1 , x 2 , . . . , x n−1 , y) ≠ x n ; y++);<br />

⎧<br />

⎨y, jei pavyko rasti y arba<br />

f(x 1 , x 2 , . . . , x n ) =<br />

⎩∞, jei y neegzistuoja, arba skaičiuojant buvo gauta neapibrėžtis.<br />

40 Ap. (Bendrųjų rekursyviųjų funkcijų aibė (BR)). Aibė sudaryta iš visų DR funkcijų, kurios<br />

yra apibrėžtos su visais natūraliaisiais argumentais.<br />

22 T. PR ⊆ BR ⊆ DR<br />

Pastaba. Žinomos primityviai rekursyvios funkcijos:<br />

• bazinės funkcijos:<br />

0,<br />

s(x) = x + 1,<br />

prn(x i 1 , x 2 , . . . , x n ) = x i ;<br />

• vieno argumento PR funkcijų bazinės funkcijos:<br />

s(x) = x + 1,<br />

q(x) = x −·<br />

[√ x<br />

] 2<br />

;<br />

21


• kitos žinomos PR funkcijos:<br />

⎧<br />

⎨1, jei x > 0<br />

sg(x) =<br />

,<br />

⎩0, jei x = 0<br />

⎧<br />

⎨0, jei x > 0<br />

sg(x) =<br />

,<br />

⎩1, jei x = 0<br />

⎧<br />

⎨x − y, jei x > y<br />

x −· y =<br />

,<br />

⎩0, kitu atveju<br />

x + y,<br />

x · y,<br />

|x − y|,<br />

[x/y].<br />

Pastaba. Žinomos dalinai rekursyvios funkcijos:<br />

• dalinis sk<strong>ir</strong>tumas:<br />

⎧<br />

⎨x − y, jei x ≥ y<br />

x − y =<br />

⎩∞, kitu atveju<br />

,<br />

• dalinė dalyba:<br />

⎧<br />

⎨x/y,<br />

jei x dalosi iš y<br />

x/y =<br />

⎩∞, kitu atveju<br />

,<br />

• dalinė šaknis:<br />

⎧<br />

√ ⎨ x, jei x yra natūralaus skaičiaus kvadratas<br />

x = .<br />

⎩√<br />

∞, kitu atveju<br />

7 Pvz. Tarkime, kad turime funkciją<br />

g(x, y, z) = (s(z) −· x) · sg(y −· z).<br />

Iš jos, pritaikę minimizacijos operatorių, galime gauti funkciją:<br />

f ′ (x 1 , x 2 , x 3 ) = µ y (g(x 1 , x 2 , y) = x 3 )<br />

= µ y ((s(y) −· x 1 ) · sg(x 2 −· y) = x 3 ).<br />

Dabar galime apibrėžti naują funkciją f(x, y):<br />

f(x, y) = f ′ (x, y, x)<br />

= µ z ((s(z) −· x) · sg(y −· z) = x).<br />

22


Apskaičiuokime f(1, 3):<br />

1. Įsistatome reikšmes:<br />

f(1, 3) = µ z ((s(z) −· 1) · sg(3 −· z) = 1).<br />

2. Tikriname z = 0:<br />

(s(0) −· 1) · sg(3 −· 0) = (1 −· 1) · sg(3) = 0 · 1 = 0 ≠ 1<br />

3. Tikriname z = 1:<br />

(s(1) −· 1) · sg(3 −· 1) = (2 −· 1) · sg(2) = 1 · 1 = 1<br />

Taigi gavome, kad f(1, 3) = 1.<br />

7.2. Rekursyviai skaičiosios aibės<br />

41 Ap. (Rekursyviai skaiti aibė). Aibė A yra rekursyviai skaiti, jei sutampa su kažkurios DR<br />

funkcijos apibrėžimo sritimi.<br />

42 Ap. (Rekursyviai skaiti aibė). Netuščia aibė A yra rekursyviai skaiti, jei sutampa su kažkurios<br />

PR funkcijos reikšmių sritimi.<br />

43 Ap. (Rekursyviai skaiti aibė). Aibė A yra rekursyviai skaiti, jei ∃ tokia PR funkcija f(a, x),<br />

kad lygtis f(a, x) = 0 turi sprendinį tada <strong>ir</strong> tik tada, kai a ∈ A.<br />

23 T. Visi trys (41, 42 <strong>ir</strong> 43) rekursyvios aibės apibrėžimai yra ekvivalentūs netuščios aibės atžvilgiu.<br />

Įrodymas ▷<br />

(Dalinis 42 =⇒ 41, 42 =⇒ 43 <strong>ir</strong> 43 =⇒ 42)<br />

(42 =⇒ 41) Tarkime, kad aibė A yra rekursyviai skaiti, nes ∃ PR funkcija h(x) tokia, kad A<br />

sutampa su h reikšmių sritimi (42 ap.):<br />

A = {h(0), h(1), h(2), h(3), . . . } .<br />

Imkime funkciją f(x) = µ y (h(y) = x). Ji yra dalinai rekursyvi, nes yra gauta pagal minimizacijos<br />

operatorių iš dalinai rekursyvios funkcijos h(∈ PR ⊆ DR).<br />

• Jei a ∈ A, tai ∃i(i ∈ N), kad h(i) = a =⇒ f(a) = µ y (h(y) = a) < ∞ – apibrėžta.<br />

• Jei a ∉ A, tai ∀j(j ∈ N) : h(j) ≠ a =⇒ f(a) = µ y (h(y) = a) = ∞ – neapibrėžta.<br />

Aibė A sutampa su funkcijos f(x) apibrėžimo sritimi <strong>ir</strong> f(x) ∈ DR =⇒ 41 ap.<br />

(42 =⇒ 43) Tarkime, jog aibė A sutampa su PR funkcijos h(x) apibrėžimo sritimi (42 ap.). Tai<br />

yra:<br />

A = {h(0), h(1), h(2), h(3), . . . } .<br />

23


Imkime funkciją f(a, x) = |h(x) − a|. f(a, x) ∈ PR, nes gauta iš PR funkcijų pritaikius<br />

kompozicijos operatorių. Lygtis f(a, x) = 0 yra |h(x) − a| = 0.<br />

• Jei a ∈ A, tai ∃ toks i, kad h(i) = a =⇒ |h(x) − a| = 0, turi sprendinį x = i.<br />

• Jei a ∉ A, tai ∀j(j ∈ N) : h(j) ≠ a =⇒ |h(x) − a| > 0 – lygtis neturi sprendinių.<br />

Lygtis f(a, x) = 0, turi sprendinį tada <strong>ir</strong> tik tada, kai a ∈ A =⇒ 43 ap.<br />

(43 =⇒ 42) Tarkime, jog a ∈ A tada <strong>ir</strong> tik tada, kai lygtis f(a, x) = 0, kur f(a, x) ∈ PR, turi<br />

sprendinį. Imkime funkciją<br />

h(t) = π2(t) 1 · sg(f(π2(t), 1 π2(t))) 2 + d · sg(f(π2(t), 1 π2(t))),<br />

2<br />

kur d – bet koks aibės A elementas. h(t) ∈ PR, nes gauta iš žinomų PR funkcijų pritaikius<br />

kompozicijos operatorių. Parodysime, kad h(t) reikšmių sritis sutampa su aibe A:<br />

• Jei a ∈ A, tai lygtis f(a, x) = 0 turi sprendinį x = u. Pažymėkime t = α 2 (a, u). Tada<br />

h(t) = h(α 2 (a, u))<br />

= a · sg(f(a, u) ) + d · sg(f(a, u) )<br />

} {{ } } {{ }<br />

=0<br />

=0<br />

= a · sg(0) + d · sg(0)<br />

= a<br />

• Jei t = α 2 (a, v), kad f(a, v) ≠ 0, tai<br />

h(t) = h(α 2 (a, v))<br />

= a · sg(f(a, v) ) + d · sg(f(a, v) )<br />

} {{ } } {{ }<br />

>0<br />

>0<br />

= a · 0 + d · 1<br />

= d<br />

Gavome, kad h(t) su bet kokiu t įgyja reikšmę ∈ A <strong>ir</strong> h(t) įgyja visas reikšmes iš aibės A.<br />

Kadangi h(t) reikšmių sritis yra aibė A <strong>ir</strong> h(t) ∈ PR, tai gavome 42 apibrėžimą.<br />

◁<br />

Pastaba. Rekursyvių <strong>ir</strong> rekursyviai skaičių aibių sk<strong>ir</strong>tumas:<br />

• A – rekursyvi, jei<br />

⎧<br />

⎨1, jei a ∈ A<br />

∃ χ A (a) =<br />

⎩0, jei a ∉ A<br />

∈ BR<br />

(Funkcija visur apibrėžta.)<br />

24


• A – rekursyviai skaiti, jei<br />

⎧<br />

⎨1, jei a ∈ A<br />

∃ χ A (a) =<br />

⎩∞, jei a ∉ A<br />

∈ DR<br />

(Funkcija ne visur apibrėžta.)<br />

Rekursyviai skaičių aibių savybės:<br />

1. Rekursyvi aibė A yra <strong>ir</strong> rekursyviai skaiti:<br />

⎧<br />

⎨1, jei a ∈ A<br />

∃ χ A (a) =<br />

,<br />

⎩0, jei a ∉ A<br />

tada aibė A sutampa su DR funkcijos f(a) = χ A (a)−1 apibrėžimo sritimi. Pagal 41 apibrėžimą<br />

A yra rekursyviai skaiti.<br />

2. Baigtinė aibė yra <strong>ir</strong> rekursyvi <strong>ir</strong> rekursyviai skaiti:<br />

A = {a 1 , a 2 , . . . , a n } – baigtinė aibė.<br />

Tada, jos charakteringoji funkcija:<br />

χ A (a) = sg(|a − a 1 |) + sg(|a − a 2 |) + . . . + sg(|a − a n |).<br />

24 T. Jeigu aibė A yra rekursyviai skaiti, bet A nėra rekursyvi, tai jos papildinys A nėra nei rekursyvi,<br />

nei rekursyviai skaiti aibė.<br />

Įrodymas ▷<br />

1. Tarkime, kad A yra rekursyviai skaiti.<br />

2. Tada pagal 42 apibrėžimą yra PR funkcija g(x), tokia kad A = {g(0), g(1), g(2), . . . }<br />

3. Kadangi aibė A yra rekursyviai skaiti (duota), tai pagal 42 apibrėžimą yra PR funkcija f(x)<br />

tokia, kad A = {f(0), f(1), f(2), . . . }.<br />

4. Panagrinėkime funkciją h(x) = µ z (|f(z) − x| · |g(z) − x| = 0). h(x) yra BR, nes gauta<br />

iš PR funkcijų taikant kompozicijos, bei minimizacijos operatorius <strong>ir</strong> yra apibrėžta su visais<br />

x (x ∈ N), nes A ∪ A = N.<br />

• jei x ∈ A, tada ∃z : f(z) = x =⇒ |f(z) − x| = 0,<br />

• jei x ∉ A =⇒ x ∈ A, tada ∃z : g(z) = x =⇒ |g(z) − x| = 0.<br />

5. • Jei x ∈ A, tada h(x) = z, kad f(z) = x.<br />

• Jei x ∈ A, tada h(x) = z, kad g(z) = x <strong>ir</strong> f(z) ≠ x.<br />

25


6. Tada aibės A charakteringoji funkcija būtų:<br />

χ A (x) = sg(|f(h(x)) − x|)<br />

⎧<br />

⎨sg(|f(z) − x|), kur f(z) = x, jei x ∈ A<br />

=<br />

,<br />

⎩sg(|f(z) − x|), kur f(z) ≠ x, jei x ∉ A<br />

⎧<br />

⎨sg(0),<br />

jei x ∈ A<br />

=<br />

,<br />

⎩sg(y + 1), jei x ∉ A<br />

Čia su y + 1 norėta pasakyti, kad tai kažkas > 0. Taip <strong>ir</strong> bus, jei y yra bet koks natūralusis<br />

skaičius.<br />

⎧<br />

⎨1, jei x ∈ A<br />

=<br />

.<br />

⎩0, jei x ∉ A<br />

7. χ A (x) ∈ BR, nes gauta iš BR <strong>ir</strong> PR funkcijų pritaikius kompozicijos operatorių.<br />

8. Kadangi χ A (x) ∈ BR, tai A – rekursyvi =⇒ prieštara =⇒ A – nėra rekursyviai skaiti aibė.<br />

◁<br />

7.3. Ackermann funkcijos.<br />

Ackerman funkcijos yra:<br />

B 0 (a, x) = a + x<br />

B 1 (a, x) = a · x<br />

B 2 (a, x) = a x<br />

B n (a, x + 1) = B n−1 (a, B n (a, x))<br />

B n (a, 0) = 1, kai n ≥ 2<br />

Jos yra visur apibrėžtos <strong>ir</strong> algoritmiškai apskaičiuojamos funkcijos, todėl yra bendrai rekursyvios<br />

funkcijos.<br />

Ackermann funkcijos variantas, kai a = 2, yra funkcija A(n, x) = B n (2, x). Jam teisingos<br />

lygybės <strong>ir</strong> nelygybės:<br />

1. A(n + 1, x + 1) = B n+1 (2, x + 1) = B n (2, B n+1 (2, x)) = A(n, A(n + 1, x))<br />

2. A(0, x) = x + 2<br />

3. A(1, 0) = 0<br />

4. A(n, 0) = 1, kai n ≥ 2<br />

5. A(n, x) ≥ 2 x , kai n ≥ 2 <strong>ir</strong> x ≥ 1<br />

26


6. A(n + 1, x) > A(n, x), kai n, x ≥ 2<br />

7. A(n, x + 1) > A(n, x), kai n, x ≥ 2<br />

8. A(n + 1, x) ≥ A(n, x + 1), kai n, x ≥ 2<br />

44 Ap. (Mažoruojanti funkcija). Sakysime, kad funkcija f(x) yra mažoruojama 1 funkcijos h(x),<br />

jei yra toks n 0 ∈ N, kad f(x) < h(x) su visais x > n 0 .<br />

25 T. Jei f(x) yra vieno argumento PR funkcija, tai egzistuoja toks n (n ∈ N), kad<br />

f(x) < A(n, x), kai x > 2.<br />

26 T. Egzistuoja tokios funkcijos, kurios yra bendrai rekursyvios, bet nėra primityviai rekursyvios.<br />

Įrodymas ▷<br />

Parodysime, kad funkcija h(x) = A(x, x) yra BR, bet nėra PR.<br />

h(x) ∈ BR, nes ji yra visur apibrėžta, algoritmiškai apskaičiuojama funkcija.<br />

Įrodysim, kad h(x) mažoruoja bet kokią PR vieno argumento funkciją.<br />

Tegu f(x) ∈ PR. Iš 25 teiginio: ∃n (n ∈ N), kad f(x) < A(n, x), kai x > 2.<br />

Tuomet f(n + x) < A(n, n + x) < A(n + x, n + x) = h(n + x) =⇒ ∃n 0 (n 0 ∈ N), kad<br />

f(x) < h(x), kai x > n 0 =⇒ f(x) yra mažoruojama funkcijos h(x).<br />

Kadangi bet kokia vieno argumento primityviai rekursyvi funkcija yra mažoruojama funkcijos<br />

h(x), tai funkcija h(x) ∉ PR.<br />

◁<br />

7.4. Universaliosios funkcijos<br />

45 Ap. (Universalioji funkcija). Tarkime, kad A yra kuri nors n argumentų funkcijų aibė. Funkciją<br />

F (x 0 , x 1 , . . . , x n ) vadinsime aibės A universaliąja, jei<br />

A = {F (0, x 1 , x 2 , . . . , x n ), F (1, x 1 , x 2 , . . . , x n ), F (2, x 1 , x 2 , . . . , x n ), . . . },<br />

tai yra, jei F (i, x 1 , x 2 , . . . , x n ) ∈ A (i = 0, 1, 2, . . . ) <strong>ir</strong> nesvarbu, kokia būtų f(x 1 , x 2 , . . . , x n ) ∈<br />

A, ats<strong>ir</strong>as bent vienas toks natūralusis skaičius i, kad f(x 1 , x 2 , . . . , x n ) = F (i, x 1 , x 2 , . . . , x n ).<br />

27 T.<br />

1. Visų n argumentų PR funkcijų universalioji F (i, x 1 , x 2 , . . . , x n ) ∉ PR.<br />

2. Visų n argumentų BR funkcijų universalioji F (i, x 1 , x 2 , . . . , x n ) ∉ BR.<br />

Įrodymas ▷<br />

1 Žr. DLKŽ.<br />

27


1. Tegu F (i, x 1 , x 2 , . . . , x n ) ∈ PR. Imkime funkciją g(x 1 , x 2 , . . . , x n ) = F (x 1 , x 1 , x 2 , . . . , x n ) +<br />

1. g(x 1 , x 2 , . . . , x n ) ∈ PR, nes gauta iš PR funkcijų F (i, x 1 , x 2 , . . . , x n ) <strong>ir</strong> (x + y) pritaikius<br />

kompozicijos operatorių. Kadangi g(x 1 , x 2 , . . . , x n ) yra n argumentų PR funkcija, tai ∃j (j ∈<br />

N) toks, kad F (j, x 1 , x 2 , . . . , x n ) = g(x 1 , x 2 , . . . , x n ). Tuomet paimkime x 1 = x 2 = · · · =<br />

x n = j, tada F (j, j, j, . . . , j) = g(j, j, . . . , j) = F (j, j, j, . . . , j) + 1 =⇒ F (j, j, j, . . . , j) –<br />

neapibrėžta =⇒ prieštara, nes visos PR funkcijos yra apibrėžtos su visais argumentais, todėl<br />

mūsų prielaida, jog F (i, x 0 , x 1 , . . . , x n ) ∈ PR yra neteisinga.<br />

2. Tegu F (i, x 1 , x 2 , . . . , x n ) ∈ BR. Imkime funkciją g(x 1 , x 2 , . . . , x n ) = F (x 1 , x 1 , x 2 , . . . , x n ) +<br />

1. g(x 1 , x 2 , . . . , x n ) ∈ BR, nes gauta iš BR funkcijų F (i, x 1 , x 2 , . . . , x n ) <strong>ir</strong> (x + y) pritaikius<br />

kompozicijos operatorių. Kadangi g(x 1 , x 2 , . . . , x n ) yra n argumentų BR funkcija, tai ∃j (j ∈<br />

N) toks, kad F (j, x 1 , x 2 , . . . , x n ) = g(x 1 , x 2 , . . . , x n ). Tuomet paimkime x 1 = x 2 = · · · =<br />

x n = j, tada F (j, j, j, . . . , j) = g(j, j, . . . , j) = F (j, j, j, . . . , j) + 1 =⇒ F (j, j, j, . . . , j) –<br />

neapibrėžta =⇒ prieštara, nes visos BR funkcijos yra apibrėžtos su visais argumentais, todėl<br />

mūsų prielaida, jog F (i, x 0 , x 1 , . . . , x n ) ∈ BR yra neteisinga.<br />

◁<br />

28 T. Visų vieno argumento PR funkcijų aibei egzistuoja universalioji funkcija, kuri yra PR.<br />

Įrodymas ▷<br />

Pagal 21 teiginį visas vieno argumento PR funkcijas galime išreikšti per bazines s(x), q(x) <strong>ir</strong><br />

sudėties, kompozicijos, bei iteracijos operatorius. Remiantis išraiška per s(x) <strong>ir</strong> q(x), visoms PR<br />

vieno argumento funkcijoms suteiksime numerius tokiu būdu:<br />

• n(s(x)) = 1<br />

• n(q(x)) = 3<br />

Jei n(f(x)) = a <strong>ir</strong> n(g(x)) = b, tai<br />

• h(x) = f(x) + g(x) =⇒ n(h(x)) = 2 · 3 a · 5 b<br />

• h(x) = f(g(x)) =⇒ n(h(x)) = 4 · 3 a · 5 b<br />

• h(x) = f(x) I =⇒ n(h(x)) = 8 · 3 a<br />

Tarkime, turime funkciją f n (x), kurios numeris yra n. Pažymėkime F (n, x) = f n (x). Tada:<br />

⎧<br />

f a (x) + f b (x), jei n = 2 · 3 a · 5 b<br />

f a (f b (x)), jei n = 4 · 3 a · 5 b<br />

⎪⎨ f a (f n (x − 1)), jei n = 8 · 3 a <strong>ir</strong> x > 0<br />

F (n, x) =<br />

0, jei n = 8 · 3 a <strong>ir</strong> x = 0<br />

s(x), jei n = 1<br />

⎪⎩ q(x), jei n = 3<br />

28


F (n, x) yra algoritmiškai apskaičiuojama. Tada visų vieno argumento PR universalioji yra:<br />

⎧<br />

⎨F (n, x), jei n – kažkurios funkcijos numeris<br />

D(n, x) =<br />

.<br />

⎩0, kitu atveju<br />

D(n, x) ∈ BR, nes yra algoritmiškai apskaičiuojama <strong>ir</strong> visur apibrėžta.<br />

◁<br />

29 T. Visų n argumentų PR funkcijų universalioji yra funkcija:<br />

D n+1 (x 0 , x 1 , x 2 , . . . , x n ) = D(x 0 , α n (x 1 , x 2 , . . . , x n ))<br />

46 Ap.. DR n argumentų funkcijos grafikas yra taškų, sudarytų iš (n + 1) elemento, aibė:<br />

G = {(x 1 , x 2 , . . . , x n , y) : f(x 1 , x 2 , . . . , x n ) = y}<br />

29


PAKEITIMAI<br />

10c4be5f50afda2a368fda677afb63eef6b87382<br />

Vytautas Astrauskas 2013-01-03<br />

21:38:33 +0100<br />

a00590681359d0b4b111595d4ee4f5f79b2a822e<br />

Vytautas Astrauskas 2013-01-03<br />

21:16:51 +0100<br />

f0fec6a1ce78a20cb06f83c6e5daf56c0e810238<br />

Vytautas Astrauskas 2013-01-03<br />

18:03:25 +0100<br />

96c6758732a27c45a27ffa7c80a4b8f63b76fb99<br />

Vytautas Astrauskas 2013-01-03<br />

17:45:04 +0100<br />

Smulkūs formatavimo pataisymai.<br />

Pataisymai pagal lekt. dr. Adomo B<strong>ir</strong>štuno<br />

pastabas.<br />

Pridėtas pakeitimų sąrašas.<br />

Atnaujintas šablonas.<br />

30

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!