Hạn chế được nêu đơn giản về ngôn ngữ lập trình mệnh lệnh nắm bắt các chức năng cơ bản?


8

Ngôn ngữ của whilecác chương trình có thể diễn tả các chức năng có thể tính toán được. (Điều này đúng ngay cả khi các phép toán số học duy nhất trên các biến là, giả sử, tăng và giảm.)

Nếu whileđược thay thế bằng for, làm cho các vòng lặp luôn bị giới hạn, thì ngôn ngữ chỉ có thể biểu thị các hàm đệ quy nguyên thủy.

Gần đây tôi đã nhận thức được lớp các hàm cơ bản , nằm dưới các hàm đệ quy nguyên thủy, nhưng vẫn nằm trên hệ thống phân cấp theo cấp số nhân.

Rõ ràng là có thể định nghĩa một ngôn ngữ lập trình mệnh lệnh nắm bắt chính xác các hàm cơ bản, bằng cách giới thiệu các toán tử cho tổng và sản phẩm bị ràng buộc. Tuy nhiên, câu hỏi của tôi là,

Có sự thay đổi cú pháp đối với ngôn ngữ của whilecác chương trình giới hạn nó với các chức năng cơ bản và có thể được nói đơn giản là hạn chế ( while-> for) đối với các hàm đệ quy nguyên thủy không?

forDĩ nhiên, một hạn chế đối với các chương trình cũng đủ, và có lẽ tôi nên làm rõ rằng tôi không tìm kiếm thứ gì đó hoàn toàn như đã nêu, chỉ là thứ gì đó đơn giản tương đương mà không cần thêm toán tử bổ sung hoặc tương tự .

Chỉnh sửa : Một ví dụ về forngôn ngữ đại diện là PL- {GOTO} từ "Lý thuyết tính toán" của Brainerd và Landwebeller (1974), trong đó mỗi chương trình có số lượng biến hữu hạn nhưng không giới hạn, mỗi biến có thể chứa một số tự nhiên và trong đó bao gồm chủ yếu các lệnh sau:

  • X <- 0 (gán 0 cho một biến)
  • X <- Y(gán giá trị của Yđể X)
  • X <- Y + 1(gán sự kế thừa giá trị Yđến X)
  • LOOP X; ... END;(lặp lại khối chứa Xthời gian mã ; không thay đổi X)

Các tác giả đưa ra một bằng chứng rằng điều này có thể diễn tả chính xác các hàm đệ quy nguyên thủy. Ngôn ngữ PL không khớp hoàn hảo với câu hỏi, vì nó sử dụng GOTOthay vì whilevà PL- {GOTO} có nguồn gốc từ PL bằng cách xóa GOTOkhỏi câu hỏi. Tuy nhiên, các chương trình PL cũng mạnh mẽ như whilecác chương trình và sự GOTOchuyển đổi -removal này chỉ đơn giản là được nêu như thay thế whilebằng for. (Có thể cho rằng có lẽ đơn giản hơn một chút.)

Chỉnh sửa 2 : http://en.wikipedia.org/wiki/Total_Turing_machine gợi ý kết quả này quay trở lại: Meyer, AR, Ritchie, DM (1967), Sự phức tạp của các chương trình vòng lặp , Proc. của các cuộc họp quốc gia ACM, 465.


Ngôn ngữ của bạn có mảng không? Có lẽ chỉ các biến giữ số tự nhiên và booleans. Nhưng dù sao, tôi luôn nghĩ rằng các hàm đệ quy nguyên thủy tương ứng với forcác vòng lặp, nhưng tôi chưa bao giờ thấy một bằng chứng nào. Có bạn không
Andrej Bauer

@AndrejBauer: Tôi không có một bản sao với tôi ngay bây giờ, nhưng tôi tin Brainerd và Landweber đưa ra một bằng chứng trong sách giáo khoa Lý thuyết tính toán (1974) của họ. Chúng hiển thị một ngôn ngữ đồ chơi, PL, có cả hai LOOP(cái mà tôi đã gọi for) và GOTO, là Turing-Complete, nhưng không GOTOcó ngôn ngữ này chỉ có thể diễn tả các chức năng pr. Tôi sẽ chỉnh sửa câu hỏi để bao gồm một mô tả ngắn gọn về ngôn ngữ này.
Chris Pressey

Theo dõi câu trả lời của Jan, điều này rất hữu ích: vi.wikipedia.org/wiki/Grzegorchot_hierarchy
usul

Câu trả lời:


8

Theo một kết quả kinh điển của Meyer và Ritchie (được đề cập trong bài báo được trích dẫn trong câu hỏi), các chức năng cơ bản được đặc trưng bởi các chương trình LOOP trong đó độ sâu lồng của các vòng lặp được giới hạn tối đa là 2.


3
Cảm ơn bạn. Theo dõi tiếp theo của usul, với n > = 2, các chương trình LOOP với độ sâu n lồng nhau tương ứng với _n_ + 1-set trong hệ thống phân cấp Grzegorchot.
Chris Pressey

1

Tôi đoán hoàn toàn dựa trên định nghĩa: một câu trả lời có thể là "hạn chế các vòng lặp đối với for các vòng lặp song song ".

Định nghĩa làm việc của tôi về " forvòng lặp song song " là một trong đó không lặp lại có bất kỳ sự phụ thuộc dữ liệu nào vào bất kỳ lần lặp nào khác và có một hàm giảm nhị phân để tổng hợp đầu ra (cùng với trường hợp cơ sở). Điểm bối rối tiền thưởng nếu chức năng giảm là kết hợp, nhưng tôi không biết nếu sự khác biệt đó sẽ hạn chế sức mạnh của ngôn ngữ.

Nếu chúng tôi giới hạn các bộ giảm cho phép đối với phép cộng và phép nhân, thì dường như bất kỳ chương trình nào được thực hiện theo các hạn chế này đều có thể được viết dưới dạng hàm đệ quy cơ bản (và ngược lại). Tôi ít chắc chắn hơn về giảm tốc chung.

Vì vậy, một cách thú vị để nói rằng đó là cấu trúc lặp duy nhất của ngôn ngữ của bạn là MapReduce.

Tôi không phải là chuyên gia trong lĩnh vực này, nhưng tôi muốn đề xuất đây là một giả thuyết và xem ý kiến ​​của mọi người là gì.

O(22n)k

Điều này dường như đúng với forcác chương trình song song khi chức năng giảm tốc bị giới hạn trong phép cộng hoặc nhân, nhưng dường như không đúng với sự lựa chọn rộng hơn của bộ giảm tốc. Tôi muốn thấy rằng chúng ta có thể có được các hàm cơ bản bất cứ khi nào chúng ta hạn chế bộ giảm tốc chạy trong thời gian đa thức (phép nhân là tuyến tính trong mô hình này), nhưng tôi sẽ phải cố gắng thực hiện.

Chỉnh sửa 2 . Đúng vậy, có vẻ như chúng ta nên cho phép chính xác các hàm giảm tốc chạy trong thời gian đa thức để phục hồi các hàm đệ quy cơ bản. [1] Sau đó, chúng tôi nhận thấy rằng hạn chế này không thú vị lắm, bởi vì các hàm đa thức trong mô hình này chỉ là những hàm có thể biểu thị bằng các chương trình có một forvòng lặp đơn hoặc một forvòng lặp song song có chức năng giảm vòng lặp. Vì vậy, về cơ bản chúng tôi đã khôi phục các hạn chế rằng các chương trình có tối đa hai forvòng lặp lồng nhau , nhưng chúng tôi vừa chuyển giới hạn đó vào chức năng giảm tốc.

Tóm tắt: Đặc tính dường như đúng với các bộ giảm tốc chạy trong thời gian đa thức. Không rõ điều này có thú vị không.

nO(nk)kfor22n

fornnf(n)f(n)O(22n)

pfornpf(n)p(f(n),p(f(n),))xxkO(f(n)kn)f(n)22nf(n)2n

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.