Documente Academic
Documente Profesional
Documente Cultură
I <- (T)
K
( Numarul instructiunii de executat )
V <- l(r(I))
( Numarul variabilei ce apare in instructiunea cu numarul I )
U <- r(r(I))
( Numarul atasat tipului de intructiune )
IF U = 0 GOTO N ( next instruction )
IF U = 1 GOTO A ( addition )
IF U = 2 GOTO D ( decrement )
( Daca nu este 0 , 1 sau 2, este IF )
IF P !| S GOTO N
V
( Daca al V-lea prim nu este divizibil cu S, inseamna ca e 0 )
K <- min_dupa_r[U - 2 = l((T)r)]
( K este numarul de ordine a primei instructiuni etichetata cu numarul U-2 )
GOTO C
A:
S <- S*P
v
GOTO N
D:
IF P !| S GOTO N ( Pentru a nu scadea sub 0 )
v
S <- S/P
v
N:
K <- K+1
GOTO C
F:
Y <- (S)
1
GOTO E
( Extragerea rezultatului )
2. Problema Opririi. Nedecidabilitatea Predicatului HALT:
==================================================
=======
Demonstratia se face prin reducere la absurd.
Presupun ca HALT este calculabil.
Consider urmatorul program, P1:
------------------------A: Z[r+1] <- HALT(x,x)
IF Z[r+1] =/= 0 GOTO A
------------------------Z[r+1] este prima variabila de lucru libera. Ce face programul e sa
cicleze, in principiu la infiinit.
Codific programul P1 de mai sus: #(P1) = t.
Acum, ne punem intrebarea ce se intampla daca rulam predicatul HALT cu
argumentele x si t. ( Programul P1 cu intrarea x )
Se va obtine o contradictie:
Z va fi 0 daca programul x cu intrarea x nu se opreste.
Dar cum x este t, obtin HALT(t,t) <=> not(HALT(t,t))
http://www.comp.nus.edu.sg/~cs5234/FAQ/halt.html
Aici se gaseste o demonstratie si mai simpla.