Tầm quan trọng của các hàm đệ quy nguyên thủy là gì?


7

Tôi đang nghiên cứu bằng chứng về chức năng Ackermann được đệ quy, nhưng không phải đệ quy nguyên thủy, và một câu hỏi đặt ra cho tôi: "Vậy thì sao?". Tại sao nó quan trọng? Tầm quan trọng của các hàm đệ quy nguyên thủy là gì?


Một số câu hỏi liên quan: 1 , 2 , 3 . Đối với câu hỏi của bạn, bạn muốn chúng tôi giải thích "ý nghĩa" theo hướng nào? Trong lịch sử, trong lý thuyết tính toán, trong thực tế, ...?
Raphael

@Raphael Yuval Filmus cung cấp một số hiểu biết lý thuyết máy tính về vấn đề này, nhưng nếu bạn có kiến ​​thức về ý nghĩa lịch sử của nó, điều đó cũng sẽ rất thú vị.
Chưa có tiêu đề

Câu trả lời:


6

Vấn đề tạm dừng là không thể giải quyết được, nhưng người ta có thể phản đối rằng đối với hầu hết các chương trình, thật dễ dàng để kiểm tra xem chúng có dừng lại hay không, bằng cách tìm kiếm bất kỳ vòng lặp vô hạn rõ ràng nào. Ngược lại, nếu bạn muốn đảm bảo rằng chương trình của bạn luôn kết thúc, bạn có thể làm như vậy bằng cách giới hạn số lần lặp lại cho mỗi vòng lặp. Ví dụ, hãy xem xét mã giả cho bình phương lặp lại:

def power(x, y, p):
   "compute x^y mod p"
   assert y >= 0
   result = 1
   while y > 0:
     if x is odd: result = result * x (mod p)
     y = y div 2
     x = x * x
   return result

Làm thế nào để chúng ta biết rằng thủ tục này luôn luôn chấm dứt? Một cách sẽ là một tiên nghiệm ràng buộc vòng lặp:

def power(x, y, p):
   "compute x^y mod p"
   assert y >= 0
   bound = y
   result = 1
   loop bound times:
     if x is odd: result = result * x (mod p)
     y = y div 2
     x = x * x
     if y == 0: break
   return result

Bây giờ rõ ràng chương trình này chấm dứt và nếu chúng tôi không mắc lỗi ở nơi khác, hai chương trình sẽ tạo ra cùng một đầu ra.

Các hàm đệ quy nguyên thủy là các hàm được tính toán bởi các chương trình trong đó tất cả các vòng lặp được giới hạn và không có đệ quy.

Mặc dù chúng tôi không cho phép đệ quy (vì nó không bị ràng buộc), chúng tôi có thể mô phỏng nó bằng một vòng lặp. Chúng tôi có thể hỏi một số câu hỏi bây giờ:

  1. Là mọi chức năng tính toán có thể trình bày trong hình thức này?
  2. Nếu không, mối quan hệ giữa lớp này và tất cả các hàm tính toán là gì?

Để trả lời 1, người ta có thể chỉ ra rằng các hàm tính toán nhất định phát triển "quá nhanh" không phải là đệ quy nguyên thủy, ví dụ như hàm Ackermann. Ngược lại, mọi chức năng có tốc độ tăng trưởng là "hợp lý" là đệ quy nguyên thủy. Và mọi hàm tính toán có thể được nêu ở dạng cho đệ quy nguyên thủy , trong đó chúng ta nghĩ về như một vị ngữ.f(x)=ψ(minyϕ(x,y))ϕ,ψϕ


1) Mỗi ​​thứ như vậy boundphải được tính toán bằng các hàm đệ quy nguyên thủy. 2) Giải thích thuật ngữ "đệ quy nguyên thủy" bằng cách nói "không sử dụng đệ quy" là số lẻ. Chúng tôi có thể sử dụng đệ quy, không phải bất kỳ loại nào.
Raphael

@Raphael 1) Bị ràng buộc bởi một biến khác. 2) Đệ quy ám chỉ trong tên được thể hiện bằng các vòng lặp . Thuật ngữ không cần phải mạch lạc, sau khi tất cả các chức năng tính toán còn được gọi là hàm đệ quy , nhưng máy Turing không cho phép đệ quy (công khai).
Yuval Filmus

1

Khi tôi tham gia khóa học tính toán của mình, chúng tôi đã được giới thiệu về điều này theo cách sau:

Đệ quy nguyên thủy là một cách tự nhiên để xác định một tính toán (có thể rõ ràng nếu bạn có đầu óc toán học, đối với một lập trình viên thì dễ hiểu hơn rằng đệ quy là một vòng lặp ngược).

Vì vậy, một khi bạn thành thạo đệ quy nguyên thủy, bạn tự hỏi: đó có phải là tất cả trong tính toán không?

Chà, hóa ra là không phải. Đầu tiên, bạn đang thiếu các giá trị không xác định. Ok, vì vậy bạn có thể mở rộng đệ quy nguyên thủy đến các hàm đệ quy nguyên thủy một phần.

Tuy nhiên, có một số chức năng tính toán (hoàn chỉnh) không phải là đệ quy nguyên thủy. Vâng, Ackermann là một trong số đó. Vì vậy, đó là lý do tại sao chức năng Ackermann là quan trọng. Nó chỉ ra rằng 'đệ quy' là "đệ quy nguyên thủy + tối thiểu hóa", và trong khi nó không thể được chứng minh, có vẻ như, đó là tất cả để tính toán.

Vì vậy, các hàm đệ quy nguyên thủy rất quan trọng vì chúng là

  1. hình thức đơn giản
  2. cơ sở cho định nghĩa đệ quy

Không chắc chắn - có thể người khác sẽ biết - nhưng tôi nghĩ trước khi Ackermann đưa ra chức năng của mình, các nhà toán học đã nghĩ rằng computable = đệ quy nguyên thủy + hàm một phần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.