Sunteți pe pagina 1din 14

Relaii, funcii

i calcul n sens Turing


1 Relaii
O relaie R peste mulimile Mi, i=1,n, este o submulime a produsului cartezian
M1M2...Mn. Un element al relaiei R este un tuplu (x1,x2,...,xn) cu xiMi,
i=1,n. Dac n=2 i M1=M2 spunem c R este o relaie binar peste M i pentru
(x,y)R putem scrie x R y (de exemplu, scriem 25 ca alternativ pentru (2,5)).
Domeniul dom(R), respectiv codomeniul ran(R), unei relaii binare R peste M1
i M2 corespund mulimilor:
dom(R) =def {xM1,yM2 | (x,y)R x}
ran(R) =def {xM1,yM2 | (x,y)R y}

O relaie binar R peste M1 i M2 este total dac:


xM1,yM2 (x,y)R (y,x)R

Relaia este total peste , n timp ce relaia < nu este total (prechile de
forma (x,x) nu sunt n relaia <).
Fie P o proprietate a elementelor lui M, proprietate care poate fi privit ca o
submulime PM a elementelor din M ce satisfac P, iar R o relaie binar peste M.
Spunem c propriatatea P este pstrat de relaia R dac:
xM,yM | (x,y)R P(x) P(y)

O relaie binar R peste M este:

reflexiv, dac xM (x,x)R


tranzitiv, dac xM,yM,zM | (x,y)R (y,z)R (x,z)R
simetric, dac xM,yM | (x,y)R (y,x)R
antisimetric, dac xM,yM | (x,y)R (y,x)R x=y

Fie R o relaie binar peste o mulime M. Spunem c relaia R este de:

preordine, dac este reflexiv i tranzitiv;


ordine parial, dac este de preordine i este antisimetric;
ordine total, dac este de ordine parial i este total.
echivalen, dac este simetric, reflexiv i tranzitiv.

Cristian Giumale/Note de curs

Dac R este o relaie de echivalen peste o mulime M, iar x este un element


din M, definim clasa de exhivalen a lui x ca o mulime:
R[a] = {yM | (x,y)R}

De exemplu, este o relaie de ordine total peste , iar relaia


R= {x,y | x+y este par (x,y)}

este o relaie de echivalen peste . Pentru orice x impar avem clasa de


echivalen R[x] = {y | y este impar}, iar pentru orice x par avem R[x] =
{y | y este par}.
Fie R o relaie binar peste o mulime M. nchiderea refelexiv a relaiei R este
cea mai mic1 relaie reflexiv R' peste M astfel nct RR'. Constructivist,
R'= {xM (x,x)} R

Fie R o relaie binar peste o mulime M. nchiderea tranzitiv a relaiei R, notat


R+, este cea mai mic relaie tranzitiv R' peste M astfel nct RR'. Constructivist,
R+=

U Ri
i

unde,

R0 = R
Ri+1= Ri {xM,yM,zM | (x,y)Ri (y,z)Ri (x,z)}, i1

Fie R o relaie binar peste o mulime M. nchiderea reflexiv-tranzitiv a relaiei


R, notat R*, este cea mai mic relaie reflexiv i tranzitiv R' peste M astfel nct
RR'. Constructivist,
R* = {xM (x,x)} R+.

2 Funcii
O funcie f din A n B, notat f:AB, este o relaie binar f AB care satisface
restricia:
xA,yB,zB (x,y)f (x,z)f y=z

Pentru orice xA exist cel mult o pereche (x,y)f. Dac (x,y)f spunem c
funcia este definit n punctul x i scriem y=f(x) nelegnd c f are valoarea y n
punctul x. Prin convenie, dac f nu este definit n x scriem f(x)=, iar dac f este
definit n x scriem f(x) sau f(x)=y, presupunnd c simbolul nu este n A i nici
n B.

1 R' este cea mai mic n sensul c pentru orice relaie reflexiv R" exist implicaia

RR" R'R".

Cristian Giumale/Note de curs

Domeniul funciei f:AB, notat dom(f), este submulimea punctelor din A n


care f este definit. Codomeniul lui f, notat ran(f), este mulimea valorilor funciei f.
La fel ca i pentru relaii,
dom(f)=def {xA | (yB (x,y)f)}
ran(f)=def {yB | (xA (x,y)f)}

Funcia f:AB este total (peste A) dac xA (yB (x,y)f), deci


dac dom(f)=A. Altfel, dac dom(f)A, spunem c f este parial (peste A).
Funcia f:AB este injectiv dac pentru puncte distincte din A are valori
distincte, adic
xdom(f),ydom(f) f(x)=f(y) x=y

Funcia f:AB este surjectiv dac yB (xA y=f(x)), deci dac


ran(f)=B.

O funcie f:AB total, injectiv i surjectiv este bijectiv (o bijecie AB). n


acest caz, spunem c mulimile A i B sunt echipotente.
Dou funcii f:AB i g:AB sunt egale dac i numai dac au acelai
domeniu i aceeai valoare pentru fiecare punct din domeniu. Scriem f=g pentru a
specifica egalitatea funciilor.
f=g xA (f(x)= g(x)=) (yB f(x)=y g(x)=y)

Prin urmare f(x)=g(x) arat fie c :

f i g sunt definite n x i au aceeai valoare, fie c


f(x)= i g(x)=

2.1 Funcii primitiv-recursive


O funcie f:n este obinut prin transformare direct dintr-o funcie
g:m dac
f(x1,x2,...,xn) = g(v1,v2,...,vm)

unde xi, i=1,n, sunt variabile cu valori n , iar vj este fie o variabil xi, 1in, fie o
constant din . Prin convenie, scriem f=Tr[g] pentru a indica posibilitatea
construciei lui f printr-o transformare explicit a lui g, dar fr a preciza detaliile
transformrii.
O funcie f:n este obinut prin compunere pe baza funciilor h:n,
n
gi: , i=1,n, dac pentru orice vector de valori xn = (x1,x2,...,xn)n

avem:

Cristian Giumale/Note de curs


f(xn) = h(g1(xn), g2(xn),..., gn(xn)), dac i1..n gi(xn)
f(xn) = , dac i1..n gi(xn)=

Prin convenie, scriem f=Cp[h,g1,g2,...,gn] pentru a indica construcia lui f


prin compunere.
O funcie f:n+1 este obinut prin recursivitate primitiv, pe baza
funciilor h:n+2, g:n , dac:
f(0,xn) = g(xn)
| h(m,xn,f(m,xn)), dac f(m,xn)
f(m+1,xn) = |
| altfel

Prin convenie, scriem f=Pr[g,h] pentru a indica construcia lui f prin


recursivitate primitiv pe baza funciilor g i h.
O funcie este primitiv-recursiv dac poate fi obinut printr-un numr finit de
pai de aplicare a operaiilor de transformare direct, compunere i recursivitate
primitiv pornind de la funciile de baz zero (funcia constant x.0) i succ (funcia
succesor x.x+1). Alternativ, clasa funciilor primitiv-recursive este cea mai mic clas
de funcii care conine funciile de baz zero i succ i este nchis sub operaiile de
transformare direct, compunere i recursivitate primitiv. Prin urmare, o funcie
primitiv-recursiv poate fi scris f=E, unde E conine doar transformri Tr, Cp i Pr
aplicate funciilor zero i succ.
Se poate demonstra [Tay 98] c orice funcie primitiv-recursiv este total2. De
exemplu, funciile definite mai jos sunt primitiv recursive i totale.
Convenim s scriem x1, x2,...,xn.calcul pentru a desemna o funcie n-ar
cu parametrii xi, i=1,n, i cu valoarea f(x1,x2,...,xn) obinut conform calculului
calcul (parametrizat n raport cu xi, i=1,n). De asemenea, aplicaia f(x) va fi scris
uneori i sub forma (f x).
id: id este funcia identitate
id(0) = 0 = zero(0)
id(n+1) = succ(id n) = n,r.(succ r) (n,id(n))
id = Pr[zero, n,r.(succ r)] = Pr[zero,Tr[succ]]
pred: pred(n) calculeaz predecesorul lui n, cu limitare la 0.
pred(0) = 0 = zero(0)
pred(n+1) = n = id(n) = n,r.(id n) (n,pred(n))

2 Funciile de baz sunt totale, iar transformarea explicit, compunerea funcional sau
recursivitatea primitiv generaz o funcie total prin aplicare asupra unor funcii totale.

Cristian Giumale/Note de curs

pred = Pr[zero, n,r.(id n)] = Pr[zero,Tr[id]]


zerop: zerop(n) este 1 dac n=0 i 0 altfel
zerop(0) = 1 = succ 0 = succ(zero 0)) = Cp[succ,zero](0)
zerop(n+1) = 0 = n,r.(zero n) (n,zerop(n))
zerop = Pr[Cp[succ,zero], n,r.(zero n)]
= Pr[Cp[succ,zero],Tr[zero]]
plus:2 plus(n,m) calculeaz suma n+m
plus(0,m) = m = id(m)
plus(n+1,m) = succ(plus(n,m)) = n,m,r.(succ r)(n,m,plus(n,m))
plus = Pr[id, n,m,r.(succ r)]= Pr[id,Tr[succ]]
dif:2 plus(n,m) calculeaz diferena n-m, cu limitare la 0
dif(n,m) = dif'(m,n) = Tr[dif']

unde dif'(n,m) calculeaz diferena m-n, cu limitare la 0


dif'(0,m) = m = id(m)
dif'(n+1,m) = pred(dif'(n,m)) = n,m,r.(pred r)(n,m,dif'(n,m))
dif' = Pr[id, n,m,r.(pred r)]= Pr[id,Tr[pred]]
dif = Tr[Pr[id,Tr[pred]]]
ori:2 ori(n,m) calculeaz produsul n * m
ori(0,m) = 0 = zero(0)
ori(n+1,m) = plus(m,ori(n,m)) = n,m,r.(plus(m,r))(n,m,plus(n,m))
ori = Pr[zero, n,m,r.(plus(m,r))] = Pr[zero,Tr[plus]]
mic:2 mic(n,m) este 1 dac n<m i 0 altfel.
mic(n,m)= dif(1,zerop(dif(m,n)))

Dac n m avem mic(n,m) = dif(1,zerop(0)) = dif(1,1) = 0


Dac n < m avem mic(n,m) = dif(1,zerop(m-n)) = dif(1,0) = 1
mic(n,m) = dif(n,m.(succ(zero n))(n,m),
n,m.(zerop(dif(m,n)))(n,m))
mic = Cp[dif,Tr[Cp[succ,zero]],Tr[Cp[zerop,Tr[dif]]]]

O alt variant, mai direct, a funciei mic este:


mic(n,0) = 0
mic(0,m+1) = 1

Cristian Giumale/Note de curs


mic(n+1,m+1) = mic(n,m)

2.2 Funcii parial-recursive


O funcie f:n este obinut prin minimizare (sau -transformare) pe
baza unei funcii g:n+1 , dac:
f(xn) = m g(m,xn), dac m g(m,xn)=0
f(xn) = altfel

unde m g(m,xn) desemneaz cea mai mic valoare a parametrului m pentru care
g(m,xn)=0.
O funcie este parial-recursiv dac poate fi obinut printr-un numr finit de
pai de aplicare a operaiilor de transformare direct, compunere, recursivitate
primitiv i minimizare pornind de la funciile de baz zero (funcia constant x.0) i
succ (funcia succesor x.x+1). Alternativ, clasa funciilor parial-recursive este cea
mai mic clas care conine funciile de baz zero i succ i este nchis sub
operaiile de transformare direct, compunere, recursivitate primitiv i minimizare.
Mulimea funciilor parial recursive include mulimea funciilor primitiv-recursive i,
totodat conine i funcii care nu sunt totale3. Funciile parial-recursive care sunt
totale se mai numesc i funcii recursive, dei acest termen este folosit uneori pentru a
desemna o funcie recursiv fr a preciza clasa ei.
De exemplu, funcia div(n,m) de mai jos calculeaz ctul mpririi ntregi
dintre numerele naturale n i m i este parial recursiv.
div(n,m) = t(g(t,n,m)
g(t,n,m) = mic(plus(ori(t,m),m),succ(n))

adic g(t,n,m) = t*m+m < succ(n). Se observ c g este o compunere obinut pe


baza unor funcii primitiv-recursive. Deci div poate fi obinut exclusiv prin operaiile
de transformare direct, compunere, recursivitate primitiv i minimizare pornind de la
funciile de baz zero i succ.
Avem div(15,7)=2. ntr-adevr, g(t,15,7)=1 pentru t=0,1 i g(2,15,7)=0.
Deci t(g(t,15,7))=2 i, implicit, div(15,7)=2.
Se observ c funcia div nu este total, nefiind definit pentru tuplurile (n,0),
n. ntr-adevr, funcia g(t,n,0) nu se anuleaz pentru nici o valoare a lui t i a lui
n. Deci, conform definiiei operaiei de -transformare, t(g(t,n,0)) = i, implicit,
div(n,0)=.
3 Operaia de minimizare aplicat asupra unei funcii totale poate genera o funcie

parial.

Cristian Giumale/Note de curs

3 Calcul n sens Turing


Maina Turing, n particular maina Turing determinist, reprezint modelul
tradiional al calculabilitii, diversele modele fiind raportate n cele din urm la Turingcalculabilitate. Calculabilitatea efectiv este, de asemenea, raportat la Turingcalculabilitate, iar multe domenii ale tiinei calculatoarelor folosesc aparatul
matematic i proprietile mainii Turing ca baz teoretic.

3.1 O descriere informal a mainii Turing


Dei a premers explozia tehnologiei digitale, maina Turing este apropiat ca
structur i mod de funcionare de un calculator digital modern. Diferena principal
este c o main Turing este construit n mod special pentru un anumit calcul4.
Similar cu un calculator numeric, o main Turing particular M este format dintr-o
unitate de control i o memorie.
Memoria este o band deplasabil n faa unui cap H de citire/scriere. Banda
mainii este divizat n celule, iar lungimea ei (numrul de celule) nu este limitat.
Fiecare celul memoreaz un simbol dintr-o mulime finit , numit alfabetul benzii.
Fiecare celul poate fi citi i rescris, rescrierea distrugnd coninutul curent al
celulei. n exist un simbol special, notat B (i numit "blank"), folosit pentru a marca
celulele libere de pe band. Micarea benzii este n cuante, o cuant de micare
corespunznd deplasrii benzii cu o celul, spre stnga sau spre dreapta, n faa
capului H. Simbolul aflat n celula poziionat n faa capului H este denumit simbolul
curent scanat.
Unitatea de control este un automat finit determinist care controleaz operaia
executat de capul H (citire/scriere) i micarea benzii. Operaiile (sau instruciunile)
ce pot fi executate de main sunt:

1:2 Dac simbolul curent scanat este 1 el este rescris cu simbolul


2. n particular, 1 i/sau 2 pot fi B.

:R Dac simbolul curent scanat este atunci banda se deplaseaz


spre dreapta cu o celul n faa capului H.

:L Dac simbolul curent scanat este atunci banda se deplaseaz


spre dreapta cu o celul n faa capului H.

Se observ c execia instruciunilor este condiionat de simbolul curent


scanat. De asemenea, cel mult o singur instruciune este executabil la un moment
dat pentru orice stare a mainii (determinism).

4 Sunt prezentate, pentru simplitate, doar astfel de maini. Generalizarea exist, maina
Turing universal fiind programabil.

Cristian Giumale/Note de curs

Diagrama tranziiilor efectuate de unitatea de control a mainii corespunde unui


graf orientat n care nodurile reprezint stri, iar arcele tranziii ntre stri. Fiecare nod
este etichetat cu un simbol de stare, notat convenional qk, dintr-o mulime finit de
asemenea simboluri. Un arc este etichetat cu instruciunea executat de main n
momentul parcurgerii arcului. Procesul de schimbare a strii mainii prin execuia unei
instruciuni constituie un pas al calculului efectuat de main.
Prin convenie, se presupune c maina M este ntr-o stare special q0 la
nceputul calculului (stare iniial). Maina se oprete atunci cnd nici o instruciune
nu mai poate fi executat pornind din starea curent.

unitate control

b:a

B:L

a:L

a:R

B:R

cap citire/scriere

band

Figura 1 O main determinist Turing


Coninutul benzii i starea mainii se schimb n cursul funcionrii. Folosim
termenul configuraia benzii pentru a desemna coninutul benzii (al memoriei mainii)
i poziia capului H la un moment dat de timp. De asemenea, termenul configuraia
mainii desemneaz configuraia benzii i starea curent a unitii de control la un
anumit moment n cursul funcionrii.
Pentru a descrie calculul efectuat de main, un pas de calcul este reprezentat
folosind notaia:
...Bsqis'B... : ...Bsqj's'B...

Notaia arat c plecnd de la configuraia curent a benzii ...Bss'B...,


unde s,s'*, iar este simbolul curent scanat, i de la starea curent qi atunci
prin execuia instruciunii : - cu aciunea {L,R} - configuraa benzii devine
...Bs's'B... - unde 'este noul simbol scanat i starea mainii devine qj.
Scrierea ...B desemneaz un ir de simboluri aflate pe band la stnga
capului H i care este format doar din simboluri B. Scrierea B... desemneaz un ir
de simboluri aflate pe band la dreapta capului H i care este format doar din

Cristian Giumale/Note de curs

simboluri B. n ceea ce urmeaz considerm implicite punctele ce preced sau succed


simbolul B din specificarea unui pas de calcul.
Ca exemplu, se consider maina Turnig din figura 1 (preluat din [Tay 98]). n
configuraia iniial a mainii celulele benzii coin simbolul B (sunt libere) cu excepia
unei zone compacte ce memoreaz simbolurile a i b. Capul H este poziionat pe
primul simbol diferit de B de pe band, iar starea iniial a mainii este q0.
Calculul efectuat de main const n nlocuirea tuturor simbolurilor a de pe
band cu simboluri b. De asemenea, maina trebuie s se opreasc cu capul H
poziionat ca n starea iniial: pe primul simbol non B de pe band. Calculul este
descris de urmtorii pai:
Bq0baabB

b:a
b:a
B:L
B:R

Bq0aaabB (a:R)3 Baaaq0bB


Baaaq0aB a:R Baaaaq0B
Baaaq1aB (a:L)4 q1BaaaaB
Bq2aaaaB

unde (i)n desemneaz aplicarea de n ori a instruciunii i. Se observ c pentru orice


stare a mainii cel mult o singur instruciune este executabil ntr-un pas. Maina
este determinist.

3.2 Maini Turing deterministe


O main Turing determinist M este un qvintuplu M = <Q,,,q0,> unde:
Q este o mulime finit i nevid de stri. Exist o stare q0Q singular,
reprezentnd starea initial a mainii M.
i sunt mulimi finite nevide astfel nct . este alfabetul de intrare al
lui M (simbolurile ce constituie configuraia iniial a benzii lui M). este alfabetul
complet al benzii lui M (simbolurile ce pot fi folosite n orice configuraie a benzii n
cursul calculului executat de M).
: Q ( {L,R})Q este o funcie parial peste Q numit funcie de
tranziie a lui M. Funcia primete o stare qi i un simbol al benzii i rentoarce o
singur aciune {L,R} i o singur stare qj. Funcia codific paii de calcul ce
pot fi executai de M. Dac M este n starea qi i simbolul curent scanat este atunci
maina execut instruciunea : i trece n starea qj.

O main Turing poate fi folosit pentru a calcula funcii teoretice numerice


(number-theoretic functions). Spunem c o funcie f este Turing calculabil dac
exist o main Turing care pentru fiecare configuraie iniial a benzii, reprezentnd
argumentul x al funciei, fie se oprete cu o configuraie a benzii ce corespunde
rezultatului f(x), dac xdom(f), fie nu se oprete, dac xdom(f).

10

Cristian Giumale/Note de curs

Prin convenie, n exemplele urmtoare reprezentm numrul natural n ca o


secven de n+1 simboluri diferite de B, de exemplu 1..n+1..1 sau, prescurtat, 1n+1.
Reprezentarea dezambigueaz ntre 0, care ar corespunde unei celule libere, i B.
Un prim exemplu de funcie Turing-calculabil, s considerm adunarea a dou
numere naturale: plus(n,m)=n+m, n, m. Numim plus maina care calculeaz
funcia i a crei diagram de tranziii este ilustrat n figura 2.
1:R

1:R
B:R

B:L
1

1:B
3

2
B:L

B:R
8

1:L

B:1

B:L

B:L

1:B
5

1:L

Figura 2. Adunarea a dou numere naturale


Configuraia iniial a benzii mainii plus conine reprezentrile numerelor n i
m, separate printr-un simbol B. Celelalte celule ale benzii sunt B (libere). Iniial, capul H
este poziionat pe primul digit al lui n (pe primul simbol 1 din reprezentarea lui n).
Configuraia final a benzii conine reprezentarea numrului cu valoarea n+m, capul H
fiind poziionat pe primul digit al rezultatului.
...B 1n+1 B 1m+1 B... plus ...B 1n+m+1 B...

H
H

Paii calculului plus(n,m) au un efect simplu: ultimul 1 din m este preschimbat


n B, iar simbolul B de separaie dintre n i m este transformat n 1 atunci cnd m1.
Iniial

Caz m=0

Bq01n+1B1m+1B
(1:R)n+1 B1n+1q0B1m+1B
B:R B1n+1Bq11m+1B
(1:R)m+1 B1n+1B1m+1q1B
B:L B1n+1B1mq21B
1:B B1n+1B1mq3BB
B1n+1Bq3BB
B:L B1n+1q4BBB
B:L B1nq71BBBB
(B:L)n+1 q7B1n+1BBBB
B:R Bq81n+11BBBB

Cristian Giumale/Note de curs


Caz m>0

11

B1n+1B1mq3BB.
B:L B1n+1B1m-1q41BB
1:B B1n+1B1m-1q5BBB

Caz m=1

B1n+1Bq5BBB
B:L B1n+1q6BBBB
B:1 B1n+1q71BBB
(1:L)n+2 q7B1n+m+1BBB
B:R Bq81n+m+1BBB

Caz m>1

B1n+1B1m-1q5BBB
B:L B1n+1B1m-2q61BBB
(1:L)m-1 B1n+1q6B1m-1BBB
B:1 B1n+1q71mBBB
(1:L)n+2 q7B1n+m+1BBB
B:R Bq81n+m+1BBB

Calculele mai complicate pot fi descompuse n fragmente mai simple, iar


mainile care calculez fragmentele pot fi combinate pentru a constitui o main care
realizeaz ntregul calcul. Bunoar, cuplarea n secven a dou maini Turing
corespunde compunerii funcionale.
De exemplu, funcia dublu(n)=2*n poate fi calculat de o main dublu =
plus o copie, rezultat prin cuplarea n cascad a mainilor plus i copie. Maina
copie construiete o copie a numrului n, iar plus realizeaz adunarea plus(n,n).
1:R
1:R
B:R

*:R
2

1:*
B:1

*:R
6

1:L

B:L
4

1:L
B:R

1:L
1:L

*:1
7

Figura 3. Copierea a unui numr natural

12

Cristian Giumale/Note de curs

O posibil implementarea a mainii copie este ilustrat n figura 3. Configuraia


iniial a mainii este Bq01n+1B. Maina se oprete cu configuraia Bq81n+1B1n+1B.
Starea final este ntotdeauna q8.
Dac din q8 a mainii copie are loc o tranziie n starea q0 a mainii plus, aa
cum se arat n figura 4, atunci maina dublu rezultat prin compunerea plus o
copie calculeaz 2*n. Tranziia este q8(copie)1:q0(plus)1 i este ntotdeauna
posibil. ntradevr, chiar dac n=0, copia lui n are cel puin un simbol 1, iar capul H al
mainii copie se afl poziionat pe primul 1 al lui n n starea q8(copie). Starea
iniial a mainii dublu este starea iniial q0 a mainii copie, iar starea final a lui
dublu este starea final q8 a mainii plus.

main de copiere: copie

main de adunare: plus

2n

1:1
0

Figura 4. O main pentru calculul 2*n = plus(n,copie(n))


Ca exemplu adiional, s construim o main Turing, numit count, care
testeaz egalitatea dintre numrul de apariii ale dou simboluri a i b ntr-un ir
s{a,b}*. Dac notm nx(s) numrul de apariii ale simbolului x n irul s, atunci
calculul realizat de maina count este na(s)=nb(s). Maina count are o configuraie
iniial a benzii astfel nct capul H este poziionat pe primul simbol al irului, iar
coninutul benzii este BsB, unde s este irul de scanat. Dac na(s)=nb(s)
configuraia final a benzii este B1B, iar dac na(s)nb(s) configuraia final a benzii
este B0B, unde simbolurile 1 i 0 sunt diferite fa de a i b. O posibil implementare a
mainii count este ilustrat n figura 5. Maina recunoate propoziiile limbajului
L={s{a,b}*| na(s)=nb(s)}: se termin ntotdeauna cu 1 dac sL i cu 0 dac
sL.
*:R

a:B
B:L

b:*
B:L

B:L

5
1

*:R

*:B

b:B
b:L

*:B

a:*
a:R

B:R

B:L

*:L

b:R

B:1

B:0

a:L

b:*
2
6

a:*
B:L

*:R
...B1B...

...B0B...

Cristian Giumale/Note de curs

13

Figura 5. O main care recunoate limbajul L={s{a,b}*| na(s)=nb(s)}


Problemele date ca exemplu sunt modelabile prin funcii recursive. Urmtoarea
teorem, arat c Turing computabilitatea acoper exact aceast clas de funcii.
Teorem (Turing). Clasa funciilor Turing-calculabile este exact clasa funciilor
parial-recursive.
Demonstraia este complicat i depete domeniul analizei algoritmilor AA. O
variant a demonstraiei poate fi gsit n [Tay 98].

3.3 Mainile Turing ca modele utile n programare


n afara caracterizrii funciilor numeric-teoretice, mainile Turing ocup un loc
important n teoria automatelor i limbajelor formale cu consecine directe n
proiectarea i implementarea limbajelor de programare. Astfel, limbajele pot fi
caracterizate dup cum sunt acceptate sau recunoscute de diverse tipuri de Maini
Turing. Bunoar, maina count din seciunea 3.2 este capabil s disting ntre
irurile de simboluri ce reprezint propoziii n limbajul L={s{a,b}*| na(s)=nb(s)}
i irurile care nu sunt propoziii ale limbajului. Spunem c o asemenea main
recunoate limbajul (sau c este un "recognizer" al limbajului). Dac o main M se
oprete cu un anumit rezultat doar pentru propoziii sL i nu se oprete pentru iruri
sL, atunci maina M este un acceptor al limbajului L.
Similar, poate fi caracterizat decidabilitatea unor proprieti cu importan
paractic imediat ale diverselor clase de limbaje. Bunoar, n cazul unui limbaj
independent de context L(G)5, generat conform unei gramatici G, problemele
urmtoare nu sunt decidabile:
-

S se decid dac L(G) este ambiguu (exist cel puin o propoziie


derivabil prin secvene diferite de derivare).

S se decid dac L(G)=T*, unde T* este mulimea tuturor irurilor formate


cu simbolurile terminale ale gramaticii G.

Considernd dou limbaje independente de context L(G1) i L(G2), s se


decid dac L(G1)L(G1)=.

Maina Turing este apropiat de paradigma programrii imperative, folosit de


majoritatea limbajelor de programare comerciale. La baza unui asemenea limbaj este
conceptul de stare a programului definit ca mulimea valorilor variabilelor i valoarea
punctului de control al programului la un moment dat n cursul execuiei i corespunde
configuraiei unei maini Turing.

5 Limbajul L(G) este privit ca mulime a irurilor de simboluri terminale (iruri numite

propoziii) ce sunt formate conform regulilor gramaticii G.

14

Cristian Giumale/Note de curs

Un program imperativ scris bunoar n C poate fi privit ca o codificare


comod a diagramei tranziiilor unei maini int Turing, diagram ce controleaz
modificarea unei benzi direct adresabile ce joac rolul memoriei datelor. Exist o
origine convenional a benzii, iar celulele sunt numerotate pornind de la 0 n raport
cu originea. Variabilele folosite de program sunt grupuri de celule ale benzii direct
accesibile prin instruciuni de forma Li i Ri, unde i este adresa primei celule din irul
compact de celule asociat varibilei. Starea programului este modificat folosind
instruciuni de atribuire i de control al fluxului execuiei ce sunt macro-expandate n
instruciunile de baz ale mainii int Turing sau pot fi executate de maini Turing
interconectate ca pri ale mainii int.
De asemenea, cu unele extinderi, ecartul dintre o main Turing i un calculator
numeric programabil poate fi diminuat. O asemenea extindere corespunde mainii
Turing universale: o main capabil s preia ca intrare un program PT, reprezentnd
codificarea unei maini Turing T, i o configuraie i a benzii lui T. Maina emuleaz
execuia mainii T cu configuraia iniial i a benzii, deci practic execut T(i). Maina
Turing universal este conform conceptului de calculator cu program memorat.

S-ar putea să vă placă și