Визначте основні функції:
pni:Nn→N:(x1,x2,…,xn)↦xi
Відтепер я буду використовувати для позначення ( x 1 , x 2 , … , x n )xn¯(x1,x2,…,xn)
Визначте склад:
Дані функції
- кожен з підписом N k → Ng1,g2,…,gmNk→N
- f:Nm→N
Побудуйте таку функцію:
h:Nk→N:xk¯↦h(xk¯)=f(g1(xk¯),g2(xk¯),…,gm(xk¯))
Визначте примітивну рекурсію:
Дані функції
- f:Nk→N
- g:Nk+2→N
Construct the following (piecewise) function:
h:Nk+1→N:(xk¯,y+1)↦{f(xk¯),g(xk¯,y,h(xk¯,y)),y+1=0y+1>0
Усі функції, які можна виконати за допомогою композицій та примітивної рекурсії на основних функціях , називаються примітивними рекурсивними . Це називається так за визначенням. Хоча зв’язок із функціями, які називають себе, існує, не потрібно намагатися зв’язувати їх між собою. Ви можете вважати рекурсію омонімом.
Це визначення та конструкція, описана вище, була побудована Геделем (ще декілька інших людей були задіяні) для спроби захопити всі функції, які можна обчислити, тобто існує машина Тьюрінга для цієї функції. Зауважте, що концепція машини Тюрінга ще не була описана, або вона була, принаймні, дуже розпливчастою.
(Не), на щастя, хтось з назвою Акерманн прийшов і визначив наступну функцію:
- 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))
This function is computable, but there's no way to construct it using only the constructions above! (i.e. Ack is not primitive recursive) This means that Gödel and his posse failed to capture all computable functions in their construction!
Gödel had to expand his class of functions so Ack could be constructed.
He did this by defining the following:
Unbounded minimisation
- g:Nk→N
- IF [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.