Zdefiniuj podstawowe funkcje:
pnja: Nn→ N : ( x1,x2), … , Xn) ↦ xja
Od teraz będę używać do oznaczenia ( x 1 , x 2 , … , x n )xn¯( x1, x2), … , Xn)
Zdefiniuj kompozycję:
Podane funkcje
- każdy z podpisem N k → Ng1,g2,…,gmNk→N
- f:Nm→N
Skonstruuj następującą funkcję:
h:Nk→N:xk¯↦h(xk¯)=f(g1(xk¯),g2(xk¯),…,gm(xk¯))
Zdefiniuj prymitywną rekurencję:
Podane funkcje
- f:Nk→N
- g:Nk+2→N
Skonstruuj następującą (częściową) funkcję:
h:Nk+1→N:(xk¯,y+1)↦{f(xk¯),g(xk¯,y,h(xk¯,y)),y+1=0y+1>0
Wszystkie funkcje, które można wykonać za pomocą kompozycji i prymitywnej rekurencji na podstawowych funkcjach , nazywane są prymitywną rekurencyjną . Nazywa się to tak z definicji. Chociaż istnieje łącze z funkcjami, które same się wywołują, nie trzeba próbować łączyć ich ze sobą. Możesz uznać rekursję za homonim.
Powyższa definicja i powyższa konstrukcja została zbudowana przez Gödela (zaangażowanych było także kilka innych osób) w celu uchwycenia wszystkich obliczalnych funkcji, tj. Istnieje maszyna Turinga dla tej funkcji. Zauważ, że koncepcja maszyny Turinga nie została jeszcze opisana lub przynajmniej była niejasna.
(Nie) na szczęście przyszedł ktoś o imieniu Ackermann i zdefiniował następującą funkcję:
- Ack:N2→N
- Ack(0,y)=y+1
- Ack(x+1,0)=Ack(x,1)
- Ack(x+1,y+1)=Ack(x,Ack(x+1,y))
Ack
Ack
Nieograniczona minimalizacja
- g:Nk→N
- [f(xk¯,y)=0 AND f(xk¯,z) is defined ∀z<y AND f(xk¯,z)≠0]
THEN
g(xk¯)=y
ELSE
g(xk¯) is not defined.
This last one may be hard to grasp, but it basically means that g((x1,x2,…,xk)) is the smallest root of f (if a root exists).
All functions that can be constructed with all the constructions defined above are called recursive. Again, the name recursive is just by definition, and it doesn't necessarily have correlation with functions that call themselves. Truly, consider it a homonym.
Recursive functions can be either partial recursive functions or total recursive functions. All partial recursive functions are total recursive functions. All primitive recursive functions are total. As an example of a partial recursive function that is not total, consider the minimisation of the successor function. The successor function doesn't have roots, so its minimisation is not defined. An example of a total recursive function (which uses minimisation) is Ack.
Now Gödel was able to construct the Ack function as well with his expanded class of functions. As a matter of fact, every function that can be computed by a Turing machine, can be represented by using the constructions above and vice versa, every construction can be represented by a Turing machine.
If you're intrigued, you could try to make Gödel's class bigger. You can try to define the 'opposite' of unbounded minimisation. That is, unbounded maximisation i.e. the function that finds the biggest root. However, you may find that computing that function is hard (impossible). You can read into the Busy Beaver Problem, which tries to apply unbounded maximisation.