Sunteți pe pagina 1din 4

mate

begin ... end?(1)

ALGORITMI CALCULABILITATE
Horia Georgescu
n cadrul acestui articol vom aborda problema existenei algoritmilor de
rezolvare pentru diferite probleme i vom insista asupra calculabilitii
funciilor.

n cei 12 ani de existen, n Gazeta de Informatic (apoi


GInfo) au aprut nenumrate articole privind algoritmii,
sub toate aspectele lor. Dar toate aceste articole au avut un
numitor comun i anume au presupus existena algoritmilor pentru problemele studiate.

GInfo nr. 13/7 - noiembrie 2003

Exist algoritmi pentru orice problem?

24

Aceast problem a stat n atenia matematicienilor chiar


nainte de apariia calculatoarelor i face obiectul teoriei
calculabilitii. La baz stau cercetrile din al patrulea
deceniu al secolului trecut ale unor personaliti precum
Church, Gdel, Kleene, Post i Turing. Ei au propus diferite definiii ale noiunii de algoritm, bazate fie pe limbaje
de programare, fie pe maini matematice, definiii care sau dovedit a fi echivalente.
Articolul de fa i propune s prezinte cititorilor elementele de baz ale teoriei calculabilitii, cu scopul de a
dovedi c exist probleme pentru care nu pot fi elaborai
algoritmi. Prezentarea nu este original, ci urmeaz ntocmai o parte din minunata carte Computability, Complexity and Languages, Academic Press 1983, a lui Martin Davis
i Elaine Weyuker.
Ne exprimm sperana c cititorii GInfo vor fi interesai de acest subiect, care din pcate lipsete chiar din programa multor faculti cu profilul informatic.

Limbajul de programare S

O prim definiie a noiunii de algoritm se bazeaz pe limbajul S. ntr-o prim etap se va face prezentarea acestui
limbaj foarte simplu, urmnd ca apoi s cptm ncredere
n posibilitile sale.

Un program P scris n limbajul S este o secven de


instruciuni (un numr finit de instruciuni scrise ntr-o
anumit ordine), program n care intervin:
numere naturale;
variabile de intrare, notate de obicei prin x1, x2, ;
variabila de ieire y;
variabile intermediare (de lucru), notate de obicei prin z1,
z2, .
cu meniunea c valorile luate de variabile pot fi orice numere naturale.
Deoarece lucrm numai cu numere naturale, vom spune, uneori, pur i simplu numr n loc de numr natural.
nainte de a prezenta instruciunile limbajului S, precizm c ele pot fi precedate, opional, de etichete. Acestea
sunt reprezentate prin litere mari (eventual indexate cu numere naturale), cuprinse ntre paranteze drepte i plasate la
nceputul instruciunii. Se admite ca mai multe instruciuni s aib aceeai etichet; raiunea acestui fapt va fi prezentat n alt articol.
Instruciunile admise de limbajul S i semnificaia lor
sunt urmtoarele:
v v + 1 valoarea curent a variabilei v crete cu o
unitate;
v v - 1 valoarea curent a variabilei v scade cu o
unitate (dac era strict pozitiv), respectiv rmne 0
(dac era 0);
if v 0 goto L dac valoarea curent a variabilei v
este nenul, atunci se face transfer necondiionat la prima
instruciune din program etichetat cu L; dac nici o in-

struciune nu este etichetat cu L, atunci programul se


termin; dac valoarea curent a lui v este 0, atunci se
trece la instruciunea urmtoare;
v v este instruciunea cu efect nul, a crei utilitate
va aprea ulterior.
Exemplul 1
Programul:

se termin pentru orice valoare iniial a lui x. La ieire


vom avea:
1, = 0
y=
, > 0

Exemplul 2
Programul:
[A] x x + 1
if x 0 goto A

nu se termin niciodat, indiferent de valoarea iniial a lui x.


Observaie
Faptul c programele n limbajul S produc o singur valoare de ieire nu este o restricie. ntr-adevr, dac dorim s
obinem mai multe valori de ieire, vom scrie cte un program pentru fiecare i vom executa succesiv aceste programe. Menionm c, n acest studiu, suntem interesai numai de existena algoritmilor, nu i de eficiena lor.
Fie P un program scris n limbajul S. Fie V mulimea
tuturor variabilelor (de intrare, de lucru i de ieire) care
apar n P. Vom da n continuare o definiie riguroas a
semanticii programului P.

O configuraie terminal are forma (n + 1, s). Vom


asimila transferul la o etichet inexistent cu transferul la
instruciunea cu numrul n + 1.
Fie (i, s) o configuraie neterminal. Succesoarea ei (j, t)
este definit astfel:
1) Dac instruciunea i este v v + 1, atunci j = i + 1, iar:
t(u) = u, dac u v i
t(u) = u + 1, dac u = v.

Un calcul al programului P este o secven de configuraii consecutive c0, c1, , ck cu ck configuraie final (terminal).
n continuare vom lucra cu funcii pariale (parial definite). Mai precis, pentru f: Nm N vom nota prin Dom f
elementele din Nm pentru care funcia f este definit.
Fie P un program n care variabilele de intrare sunt x1,
x2, , xm. Atunci funcia (parial) calculat de programul
P este P( m ) : N m N definit astfel:
1) P(m ) (x1, x2, , xm) = y' dac exist un calcul c0, c1, , ck
al lui P cu c0 = (1, s0) i sk(y) = y';
2) P(m ) (x1, x2, , xm) = (nedefinit) dac exist un ir infinit de configuraii c0, c1, al lui P cu c0 = (1, s0), deci
dac programul P nu se termin.
Observaie
Fie P un program n care apar variabilele de intrare x1, x2,
, xm. Pentru orice numr natural n, i putem asocia o
funcie P(n ) astfel:
dac n m, atunci P(n ) (x1, x2, , xn) = P(m ) (x1, x2, , xm),
adic xn+1, ..., xm sunt ignorate;
dac n > m, atunci P(n ) (x1, , xn) = P(m ) (x1, , xm, 0, , 0).
Fie f: Nm N. Funcia f se numete parial calculabil
dac exist un program P n limbajul S cu P(m ) = f. Dac
Dom f = Nm, atunci f se numete calculabil.
Exemplul 1 arat c funcia f: N N dat de:
1, x = 0
f (x ) =
,
x, x > 0

este calculabil.

Exemplul 2 arat c funcia unar cu domeniul vid este


parial calculabil.

Macroinstruciuni

Aceast seciune urmrete s cptm ncredere n limbajul S. Vom arta c principalele prelucrri uzuale asupra
numerelor naturale pot fi realizate prin programe scrise n
acest limbaj.
Macroinstruciunile sunt abrevieri pentru secvene de
instruciuni n limbajul S. Menirea lor este de a scrie programe ct mai inteligibile. Prezena unei macroinstruciuni

GInfo nr. 13/7 - noiembrie 2003

Definim starea programului la un moment oarecare a


executrii sale ca fiind o funcie s: V N, unde N este
mulimea numerelor naturale. Deci, o stare este dat de valorile curente ale variabilelor din program.
O configuraie a programului P de lungime n (avnd n
instruciuni) este o pereche (i, s) cu i {1, 2, ..., n, n + 1} i
s stare.
O configuraie iniial are forma (1, s0), unde:
s0(u) = ri, dac u = xi i ri este valoarea iniial a lui xi i
s0(u) = 0, dac u nu este o variabil de intrare.

Se observ c succesoarea oricrei configuraii neterminale este unic determinat i nu depinde de eventuala etichetare a sa.

mate

[A] x x - 1
yy+1
if x 0 goto A

2) Dac instruciunea i este v v - 1, atunci j = i + 1, iar:


t(u) = s(v) - 1, dac u = v i s(v) > 0 i
t(u) = s(v), n caz contrar.
3) Dac instruciunea i este v v, atunci j = i + 1, i t = s.
4) Dac instruciunea i este if v 0 goto L , atunci t = s, iar:
j = i + 1, s(v) = 0;
j = n + 1, s(v) > 0 i nu exist instruciuni etichetate cu
L, i
j = k, dac s(v) > 0 i instruciunea k este prima instruciune cu eticheta L.

25

mate

ntr-un program trebuie interpretat ca prezena n acel


punct al programului a unei dezvoltri ale sale.
Chiar dac n acelai program apare n diferite locuri o
aceeai macroinstruciune, aceasta nu nseamn c va fi inserat aceeai dezvoltare a sa. Mai mult, chiar impunem ca
apariiile unei aceleiai macroinstruciuni pe poziii diferite
din program s presupun dezvoltri diferite ale macroinstruciunii (variabile de lucru i etichete distincte). De asemenea trebuie respectat regula ca valoarea variabilelor care apar n macroinstruciune, cu excepia celor care apar n
membrul stng al unei atribuiri, s nu fie modificate ca
efect al executrii macroinstruciunii.
Macroinstruciunea goto L are urmtoarea dezvoltare
posibil:
[A] z z + 1
if z 0 goto A

Macroinstruciunea v 0 are dezvoltarea:


[A] v v - 1
if v 0 goto A

unde eticheta A nu mai apare nicieri n programul care


conine aceast macroinstruciune.
3) Macroinstruciunea v k are dezvoltarea:
v0
vv+1

vv+1

unde instruciunea v v + 1 apare de exact k ori.

GInfo nr. 13/7 - noiembrie 2003

Exemplul 3
Funcia f: N N dat de f(x) = x este calculabil.
Pentru demonstraie, vom scrie urmtorul program P
cu P(1) = f, program care va asigura pstrarea valorii iniiale
a lui x:

26

[A] if x 0 goto B
goto C
[B] x x - 1
yy+1
zz+1
goto A
[C] if z 0 goto D
goto E
[D] z z - 1
xx+1
goto C

unde primele 6 instruciuni copiaz valoarea lui x n variabilele y i z, iar urmtoarele recopiaz valoarea lui z n x.
Putem acum introduce macroinstruciunea v u cu
dezvoltarea:
v0
[A] if u 0 goto B
goto C

[B] u u - 1
vv+1
zz+1
goto A
[C] if z 0 goto D
goto E
[D] z z - 1
uu+1
goto C
[E] v v

care "transcrie" funcia din exemplul 3.


Se impun urmtoarele remarci:
nu am iniializat pe z cu 0, deoarece este clar c dup orice executare a macroinstruciunii, valoarea sa va fi 0;
apare necesitatea instruciunii v v;
ca de obicei, variabila z nu mai apare nicieri n program
(este o variabil de lucru "nou"), iar etichetele A, B, C,
D, E nu mai apar nicieri n program (sunt etichete
"noi"). Avnd convingerea c cititorul s-a obinuit deja
cu aceste reguli, nu le vom mai aminti n continuare, presupunndu-le subnelese.
Exemplul 4
Funcia f: N N N definit prin f(x1, x2) = x1 + x2 este
calculabil.
Un program care calculeaz aceast funcie este urmtorul:
y x1
z x2
[B] if z 0 goto A
goto E
[A] z z - 1
yy+1
goto B

iar macroinstruciunea z z1 + z2 are urmtoarea dezvoltare posibil:


u z1
v z2
[B] if v 0 goto A
goto E
[A] v v - 1
uu+1
goto B
[E] z u

Exemplul 5
Funcia f: N N N definit prin f(x1, x2) = x1 x2 este
calculabil.
Un program care calculeaz aceast funcie este urmtorul:
z x2
[B] if z 0 goto A
goto E
[A] z z - 1

y' 0
x1' x1

y y + x1
goto B

iar macroinstruciunea z z1 z2 are urmtoarea dezvoltare posibil:

Exemplul 6
Fie f: N N N funcia parial definit prin:
x1 x2 , x1 x2
f (x1 , x2 ) =
.
, x1 < x2

Un program care calculeaz aceast funcie este urmtorul:


y x1
z x2
[C] if z 0 goto A
goto E
[A] if y = 0 goto B
goto A {y = 0 i z = 0}
[B] y y - 1
zz-1
goto C

Macroinstruciunea asociat este z z1 - z2 i are


urmtoarea dezvoltare posibil:

[C]
[A]
[B]

Exemplul 7
Fie f: Nm N o funcie (parial) calculabil, calculat de
un program P. Vom introduce macroinstruciunea:
z f(z1, , zm).
Pentru a obine o dezvoltare a acestei macroinstruciuni, s presupunem c n programul P variabilele de intrare sunt x1, , xm, variabilele de lucru sunt z1, , zk, iar
etichetele sunt A1, , Ap, unde (cu eventuala excepie a lui
Ap), orice etichet care apare ntr-o instruciune if este eticheta a cel puin uneia dintre instruciunile din P. Atunci
o dezvoltare a macroinstruciunii z f(z1, , zm) este
urmtoarea:

zk' 0
P'
I

unde:
y', x'1, , x'm, z'1, , z'k sunt variabile de lucru noi;
A'1, , A'p sunt etichete noi;
P' se obine din P nlocuind pe y, x1, , xm, z1, , zk, A1,
, Ap cu y', x'1, , x'm, z'1, , z'k, A'1, , A'p.
I este una dintre instruciunile:
z y', dac eticheta Ap este definit;
[A'p] z y', dac eticheta Ap nu este definit.
Se observ imediat c dac pentru anumite valori iniiale r1, , rm ale lui x1, , xm programul P nu se termin,
atunci nici executarea macroinstruciunii z f(z1, , zm)
nu se termin pentru z1, , zm avnd nainte de executarea
macroinstruciunii valorile r1, , rm.
Dac o macroinstruciune dintr-un program nu se termin, atunci nici programul care o folosete nu se termin.
Numim predicat o funcie f: Nm {0, 1}, parial sau
total definit, unde 0 corespunde falsului, iar 1 corespunde
adevrului.
Exemplul 8
Fie P: Nm {0, 1} un predicat calculabil. Atunci putem introduce macroinstruciunea:
if P(z1, ,zm) goto L
a crei dezvoltare este:

z P(z1, ..., zm)


if z = 0 goto L

Un caz particular l constituie predicatul:


1, x = 0
P(x ) =
,
0, x 0

care este calculabil conform programului:


if x 0 goto E
yy+1

ceea ce permite introducerea urmtoarei macroinstruciuni:


if v = 0 goto L.

Va urma...

n urmtoarele articole care constituie continuarea celui prezentat vom interaciona cu cteva probleme nedecidabile i
vom vedea cum problema de fa poate fi tratat folosind
alte modele de abordare.
Dl. prof. dr. Horia Georgescu este cadru didactic la Universitatea
Bucureti, fondator i director tiinific al GInfo i poate fi contactat prin
e-mail la adresa g_horia@hotmail.com.

GInfo nr. 13/7 - noiembrie 2003

[E]

u1 z1
u2 z2
if u2 0 goto A
goto E
if u1 = 0 goto B
goto A {y = 0 i z = 0}
u1 u1 - 1
u2 u2 - 1
goto C
z u1

mate

u0
v z2
[B] if v 0 goto A
goto E
[A] v v - 1
u u + z1
goto B
[E] z u

xm' xm
z1' 0

27

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

  • ADIV
    ADIV
    Document40 pagini
    ADIV
    Richard Davis
    Încă nu există evaluări
  • Citeva Reguli Generale
    Citeva Reguli Generale
    Document3 pagini
    Citeva Reguli Generale
    Richard Davis
    Încă nu există evaluări
  • Tema 2 SD Idei
    Tema 2 SD Idei
    Document1 pagină
    Tema 2 SD Idei
    Richard Davis
    Încă nu există evaluări
  • Varianta 3 e Info C-7850
    Varianta 3 e Info C-7850
    Document3 pagini
    Varianta 3 e Info C-7850
    Tache Alexandru
    Încă nu există evaluări
  • Conspectl1debye Scherrer
    Conspectl1debye Scherrer
    Document1 pagină
    Conspectl1debye Scherrer
    Richard Davis
    Încă nu există evaluări
  • Model CV Romana 4
    Model CV Romana 4
    Document2 pagini
    Model CV Romana 4
    Valentin-Nicusor Barbu
    100% (2)
  • Orar 1 CC
    Orar 1 CC
    Document1 pagină
    Orar 1 CC
    Richard Davis
    Încă nu există evaluări
  • Arbori de Intervale
    Arbori de Intervale
    Document14 pagini
    Arbori de Intervale
    Richard Davis
    Încă nu există evaluări
  • Proprietati Chimice
    Proprietati Chimice
    Document4 pagini
    Proprietati Chimice
    Richard Davis
    Încă nu există evaluări
  • Clase
    Clase
    Document7 pagini
    Clase
    Richard Davis
    Încă nu există evaluări
  • Clase
    Clase
    Document7 pagini
    Clase
    Richard Davis
    Încă nu există evaluări