Là lớp của các hàm đệ quy nguyên thủy có tương đương với lớp các hàm mà Fetus chứng minh là chấm dứt không?


9

Thai nhi, nếu bạn chưa nghe về nó, có thể đọc ở đây . Nó sử dụng một hệ thống 'ma trận gọi' và 'biểu đồ cuộc gọi' để tìm tất cả 'hành vi đệ quy' của các cuộc gọi đệ quy trong một hàm. Để chỉ ra rằng một hàm chấm dứt, nó cho thấy rằng tất cả các hành vi đệ quy của các cuộc gọi đệ quy được thực hiện đối với một hàm tuân theo một 'trật tự từ điển' nhất định. Trình kiểm tra chấm dứt của nó cho phép tất cả các hàm và hàm đệ quy nguyên thủy như hàm Ackermann. Về cơ bản nó cho phép đệ quy nguyên thủy đa đối số. Về cơ bản, đây cũng là công cụ kiểm tra chấm dứt của Agda; Tôi tin rằng Coq cũng có một số cơ sở tương tự mặc dù có lẽ nói chung hơn.

Từ việc đọc bài báo "Lập trình chức năng tổng thể" của DA Turner . Ông giải thích rằng ngôn ngữ được đề xuất của ông sẽ có thể diễn đạt tất cả "các chức năng đệ quy nguyên thủy" như được thấy trong Hệ thống T được nghiên cứu bởi Godel. Ông tiếp tục nói rằng hệ thống này "được biết là bao gồm mọi hàm đệ quy mà tổng số có thể được chứng minh theo logic thứ tự đầu tiên".

Liều lượng thai nhi cho phép tất cả các chức năng đệ quy nguyên thủy? Nếu vậy nó có cho phép các hàm không phải là hàm đệ quy nguyên thủy không? Một trích dẫn có thể được cung cấp cho câu trả lời cho điều này? (điều này thực sự không cần thiết vì tôi chỉ quan tâm; chỉ là một số đọc hôn nhân về vấn đề này sẽ tốt đẹp)

Câu hỏi thưởng: Các hàm đệ quy nguyên thủy có một định nghĩa rất ngắn gọn về các tổ hợp: gõ S và K (không thể biểu thị các tổ hợp điểm cố định), 0, hàm kế tiếp và hàm lặp; đó là nó. Có những ngôn ngữ khác chung chung hơn như vậy có định nghĩa ngắn gọn như vậy và trong đó tất cả các biểu thức chấm dứt?


Trên Agda vs Coq: Tôi luôn đọc trình kiểm tra chấm dứt của Agda để nâng cao hơn và chấp nhận nhiều chức năng hơn, đây là yêu cầu đầu tiên của bạn ngược lại (đây là một quy tắc tốt khi so sánh Agda với Coq, ngoại trừ việc Agda thiếu chiến thuật: Agda được nghiên cứu nhiều hơn và mở cho các phần mở rộng có độ ổn định ít được thiết lập hơn). Andreas Abel đã làm việc trên các công cụ kiểm tra chấm dứt tiên tiến hơn dựa trên các loại có kích thước, xem công việc của ông trên MiniAgda và cả bài báo này .
Blaisorblade

Có "chấp nhận nhiều định nghĩa hàm" và "có một lớp hàm tính toán lớn hơn". Hai là không thể so sánh được. Agda thắng ở lần đầu tiên, nhưng Coq rõ ràng thắng ở lần thứ hai.
cody

Tôi nên làm rõ rằng tôi đã không sử dụng Coq chút nào và Agda chỉ một chút. Dường như từ những gì tôi ít đọc Coq có khả năng xác định một lớp chức năng tính toán rộng hơn nhưng tôi không biết nên tôi nói "Tôi tin rằng Coq cũng có một số cơ sở tương tự mặc dù có lẽ chung chung hơn"; "Belive" và "có lẽ" đã được sử dụng để truyền đạt mà tôi không biết.
Jake

Câu trả lời:


7

Có, trình kiểm tra Fetus có thể đánh máy mọi thứ trong T. của Goedel. Bạn có thể hiển thị điều này bằng cách sử dụng trình kiểm tra để hiển thị rằng toán tử lặp trong T đang kết thúc. Ví dụ: định nghĩa sau sẽ hoạt động:

iter:A(AA)NAiterif0=iiterif(n+1)=f(iterifn)

Điều này rất dễ dàng cho trình kiểm tra thai nhi (hoặc hầu hết mọi trình kiểm tra chấm dứt khác) để kiểm tra, bởi vì đây là một định nghĩa đệ quy có cấu trúc rõ ràng.

Cả Agda và Coq đều cho phép chứng minh chấm dứt các hàm vượt xa tổng số có thể chứng minh được trong số học bậc nhất. Tính năng cho phép điều này là chúng cho phép xác định các loại bằng cách đệ quy trên dữ liệu, được gọi là "loại bỏ lớn". (Trong lý thuyết tập hợp ZF, sơ đồ thay thế tiên đề phục vụ cho cùng một mục đích.)

Một ví dụ dễ hiểu về một thứ vượt ra ngoài T là tính nhất quán của chính T của Goedel! Chúng ta có thể đưa ra cú pháp dưới dạng kiểu dữ liệu:

data T : Set where 
   N : T 
   _⇒_ : T → T → T

data Term : T → Set where 
   zero : Term N
   succ : Term (N ⇒ N)
   k    : {A B : T} → Term (A ⇒ B ⇒ A)
   s    : {A B C : T} → Term ((A ⇒ B ⇒ C) ⇒ (A ⇒ B) ⇒ A ⇒ C)
   r    : {A : T} → Term (A ⇒ (A ⇒ A) ⇒ N ⇒ A)
   _·_  : {A B : T} → Term (A ⇒ B) → Term A → Term B

Lưu ý rằng phụ thuộc loại cho phép chúng tôi xác định kiểu dữ liệu của các thuật ngữ chỉ chứa các thuật ngữ được gõ tốt của T. Sau đó chúng tôi có thể cung cấp chức năng diễn giải cho các loại:

interp-T : T → Set 
interp-T N       = Nat 
interp-T (A ⇒ B) = (interp-T A) → (interp-T B)

Điều này nói rằng đó Nphải là số tự nhiên Agda và mũi tên của T nên được hiểu là không gian hàm Agda. Đây là một loại bỏ "lớn", bởi vì chúng tôi xác định một tập hợp bằng cách đệ quy trên cấu trúc của kiểu dữ liệu T.

Sau đó, chúng ta có thể định nghĩa một chức năng diễn giải, cho thấy rằng mọi thuật ngữ của T của Goedel có thể được diễn giải bằng thuật ngữ Agda:

interp-term : {A : T} → Term A → interp-T A
interp-term zero    = 0 
interp-term succ    = \n → n + 1
interp-term k       = \x y → x
interp-term s       = \x y z → x z (y z)
interp-term r       = Data.Nat.fold 
interp-term (f · t) = (interp-term f) (interp-term t)

(Tôi không có Agda trên máy này, vì vậy chắc chắn sẽ có một số nhập khẩu bị thiếu, khai báo sửa lỗi và lỗi chính tả. Sửa lỗi đó là một bài tập cho người đọc, người cũng có thể là một biên tập viên, nếu họ thích.)

Tôi không biết sức mạnh nhất quán của Agda là gì, nhưng Benjamin Werner đã chỉ ra rằng Công thức xây dựng quy nạp (tính toán nhân của Coq) tương đương với ZFC cộng với vô số các hồng y không thể tiếp cận.


Lưu ý rằng bạn đã không sử dụng loại bỏ lớn trong ví dụ của bạn. Loại bỏ lớn không thực sự thêm sức mạnh tính toán. Tính không phù hợp: hệ thống F không có hệ thống trước, nhưng có thể biểu thị các chức năng không thể biểu thị trong hệ thống T.
cody

@cody: Hàm interp-T tính toán một tập hợp từ một thuật ngữ, có vẻ như là một sự loại bỏ lớn đối với tôi! Đó chắc chắn là trường hợp loại bỏ lớn thêm sức mạnh: lý thuyết loại Martin-Loef thậm chí không thể có được sự không nhất quán từ 0 = 1 mà không có sự loại bỏ lớn. (Để thấy điều này, lưu ý rằng không có vũ trụ / sự loại bỏ lớn, bạn có thể xóa tất cả các phụ thuộc và có một thuật ngữ được gõ đơn giản: đây là những gì Harper và Pfenning đã làm trong bằng chứng đầy đủ của họ cho LF.)
Neel Krishnaswami

Tôi xin lỗi: có, chức năng interp-T thực sự sử dụng loại bỏ lớn. Tôi cũng đồng ý rằng việc chứng minh 0! = 1 thực sự đòi hỏi điều đó. Tuy nhiên, việc xác định các hàm tính toán không giống như chứng minh các câu lệnh toán học . Câu trả lời của tôi làm rõ điều này một chút. Ví dụ, Công cụ tính toán thuần túy không thể chứng minh 0! = 1. Tuy nhiên, nó có thể xác định hàm Ackermann một cách dễ dàng.
cody

Điều này cho thấy Agda có ý nghĩa chung hơn, nó có thể viết một trình thông dịch cho hệ thống T nhưng nó không hiển thị thời tiết hay không Fetus, một ngôn ngữ không được gõ phụ thuộc, nói chung hơn. Thai nhi có thể làm điều này? Agda vẫn có thể làm điều này nếu không phải là "loại bỏ lớn"?
Jake

1
Tài liệu của Agda cho biết trình kiểm tra chấm dứt của nó sử dụng thuật toán Fetus. Nếu bạn đã lấy T và mở rộng nó với các định nghĩa khớp mẫu và đệ quy được kiểm tra bởi Fetus, bạn sẽ không thể viết trình thông dịch cho T trong đó. Trên thực tế, bạn hoàn toàn không thay đổi các hàm có thể tính toán được bằng T - tất cả các lệnh chấm dứt Tính toán của thai nhi đều có cơ sở rõ ràng trong số học Peano. (Xem câu trả lời của cody.) Thuật toán Fetus cho phép bạn viết thêm các định nghĩa mà không cần thay đổi tập hợp các hàm bạn có thể tính toán. Loại bỏ lớn của Agda thực sự làm tăng tập hợp các chức năng.
Neel Krishnaswami

3

Để làm rõ, tôi nên lưu ý rằng Fetus được phát triển bởi Andreas Abel , người cũng đã phát triển trình kiểm tra chấm dứt ban đầu cho Agda , và đã làm việc trên các kỹ thuật chấm dứt tiên tiến hơn kể từ đó.

Câu trả lời cho câu hỏi của bạn có thể hơi thất vọng: lớp hàm từ đến chính xác là các hàm có thể được định nghĩa trong system . Lý do cho điều này: lớp đã nói ở trên bằng với các hàm kết thúc có thể chứng minh được trong Số học bậc hai ( ) lần lượt bằng với các hàm có thể xác định trong hệ thống (xem ví dụ Chứng minh và loại , chương 11). Hơn nữa, nếu bạn loại bỏ tính đa hình, thì bạn sẽ rơi vào các hàm có thể xác định trong , điều này xảy ra trùng khớp với các hàm có thể xác định trong hệ thống .N F P A 2 F P A TNNFPA2FPAT

Một lần nữa, reson cho điều này là sự sụt giảm bắt bởi "ma trận gọi là" được provably có cơ sở , và chứng minh rằng có thể được thực hiện hoàn toàn bằng .PA

Tuy nhiên, điều này không có nghĩa là Fetus không hữu ích hơn system ! Trong thực tế, các phân tích chấm dứt phức tạp hơn được yêu cầu để có thể chấp nhận các bài thuyết trình nhất định về các chức năng tính toán. Bạn không muốn phải làm một bằng chứng phức tạp về Số học Peano mỗi khi bạn viết một hàm thống nhất, chẳng hạn. Vì vậy, về mặt này, Fetus rất mạnh mẽ và cho phép bạn xác định các chức năng theo cách không được chấp nhận bởi Coq, Agda hoặc bất kỳ hệ thống bằng chứng phổ biến nào khác.T


làm thế nào một lớp chức năng có thể chấm dứt (PA ^ 2) có thể tương đương với lớp chức năng trong hệ thống F mà không thể chứng minh được để kết thúc theo như tôi biết? Ngoài ra tôi không hiểu làm thế nào bạn trả lời câu hỏi của tôi. Bạn đang nói hệ thống T có một lớp lớn hơn các chức năng tính toán hay bạn đang nói rằng thai nhi là? Tôi nghĩ rằng có một bước nhảy vọt trong logic của bạn mà tôi mong đợi tôi có nhiều nền tảng hơn tôi thực sự làm. Ngoài ra, liên kết bạn cung cấp dường như dẫn đến một trang xấu không hiển thị chính xác.
Jake

Các chức năng trong hệ thống F đều chấm dứt. Fetus nắm bắt một lớp chức năng tính toán lớn hơn hệ thống T, nhưng "tình cờ", nếu bạn loại bỏ đa hình, thì Fetus chỉ nắm bắt chính xác hệ thống T. Bạn có thể cho tôi biết liên kết nào không phù hợp với bạn không? (và trình duyệt nào bạn đang sử dụng :)
cody

1

Nếu theo các hàm đệ quy nguyên thủy, bạn có nghĩa là các hàm đệ quy nguyên thủy và bạn biết rằng Fetus chứa hàm Ackermann thì Fetus không trùng với lớp các hàm pr vì hàm Ackermann không phải là đệ quy nguyên thủy. Điều này đã được Ackermann thể hiện và sau đó, một bằng chứng đơn giản đã được Rosza Peter đưa ra trong " Konstruktion nichtrekursiver Funktionen " năm 1935 (tiếc là chỉ bằng tiếng Đức theo như tôi biết).

Nếu bạn tìm kiếm các lớp hàm đệ quy lớn hơn được đảm bảo chấm dứt có thể trùng với lớp hàm được Fetus nắm bắt thì một số công việc khác của Rosza Peter có thể khiến bạn quan tâm.

Hàm Ackermann được chứa trong lớp nhiều hàm đệ quy như Rosza Peter đã định nghĩa trong " Uber die mehrfache Rekursion " 1937. Về mặt thông tin, ý tưởng đằng sau nhiều đệ quy là bạn có thể có nhiều biến đệ quy có thể thay đổi sau một bước đệ quy. Ví dụ có thể gọi hoặc .f(a,b)f(a,b1)f(a1,b)

Tuy nhiên, một lớp mạnh hơn được đưa ra bởi khái niệm đệ quy vô hạn được mô tả trong " Zusammenhang der mehrfachen und transfiniten Rekursion " của Rosza Peter. Đối với đệ quy vô hạn, bạn có một biến đệ quy có thể gọi wrt của người tiền nhiệm đến một thứ tự đặc biệt<

Ví dụ: bạn có thể hiểu một số nguyên là một cặp số nguyên và sử dụng thứ tự Điều này có thể được khái quát cho bộ ba số nguyên, v.v. Peter gọi những thứ tự này là , v.v. Bạn có thể tiến thêm một bước và diễn giải một số nguyên dưới dạng số nguyên tùy ý. Đặt là số nguyên tố thứ . Sau đó, chúng ta có thể xem xét trong đó biểu thị số lượng số nguyên được mã hóa trong và 's chứa resp. giá trị. Cô biểu thị một đơn đặt hàng cho một danh sách các số nguyên nhưω 2 , ω 3 p i i z = p n 1p x 1 2p x 2 3... n z x i ω ω

(a,b)<(c,d)(a<cbd)(acb<d)
ω2,ω3piiz=p1np2x1p3x2nzxiωω và cho thấy bằng cách chéo hóa rằng loại đệ quy này mạnh hơn đệ quy nhiều lần. Tuy nhiên, tôi không chắc có đặc tính cú pháp của lớp này không.

[sửa] Các hàm đệ quy nguyên thủy không giống như các hàm đệ quy nguyên thủy như đã ghi chú trong bình luận bên dưới. Tuy nhiên, tôi nghĩ rằng người ta có thể chuyển khái niệm đệ quy vô hạn sang các chức năng. Tuy nhiên, không rõ liệu nó có còn mạnh mẽ hơn khi cài đặt chức năng hay không.


2
lớp các hàm đệ quy nguyên thủy thuộc loại hữu hạn là tổng quát hơn lớp các hàm đệ quy nguyên thủy. Nó có thể biểu thị chức năng Ackermann chẳng hạn và có thể được nhìn thấy trong hệ thống của Godel T.
Jake
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.