กำหนดฟังก์ชั่นพื้นฐานบางอย่าง:
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(ก.1( xk¯) , g2( xk¯) , … , gม.( xk¯) )
กำหนดการเรียกซ้ำแบบดั้งเดิม:
ฟังก์ชั่นที่กำหนด
- ฉ: Nk→ N
- ก.: Nk + 2→ N
สร้างฟังก์ชั่นดังต่อไปนี้ (ชิ้นส่วน):
h : Nk + 1→ N :( xk¯, y+ 1 ) ↦ { f( xk¯) ,ก.( xk¯, y, h ( xk¯, y) ) ,Y+ 1 = 0Y+ 1 > 0
ฟังก์ชั่นทุกอย่างที่สามารถทำได้โดยใช้องค์ประกอบและrecursion ดั้งเดิมในการทำงานขั้นพื้นฐานจะถูกเรียกว่าดั้งเดิม recursive มันถูกเรียกว่าเป็นอย่างนั้นตามคำจำกัดความ แม้ว่าจะมีลิงก์ที่มีฟังก์ชั่นที่เรียกว่าตัวเองอยู่ แต่ก็ไม่จำเป็นต้องลองและเชื่อมโยงเข้าด้วยกัน คุณอาจพิจารณาการใช้คำพ้องเสียงซ้ำซาก
คำจำกัดความและการก่อสร้างด้านบนนี้สร้างโดยGödel (มีคนไม่กี่คนที่เกี่ยวข้องด้วย) ในความพยายามที่จะจับฟังก์ชั่นทั้งหมดที่คำนวณได้นั่นคือมีทัวริงสำหรับฟังก์ชันนั้น โปรดทราบว่าแนวคิดของเครื่องทัวริงยังไม่ได้อธิบายหรืออย่างน้อยก็คลุมเครือมาก
(ยกเลิก) โชคดีมีคนเรียก Ackermann มาและกำหนดหน้าที่ต่อไปนี้:
- 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.