Xác định các hàm đệ quy nguyên thủy trên các kiểu dữ liệu chung


9

Các hàm đệ quy nguyên thủy được xác định trên các số tự nhiên. Tuy nhiên, có vẻ như khái niệm này nên khái quát hóa cho các loại dữ liệu khác, cho phép người ta nói về các hàm đệ quy nguyên thủy mà ánh xạ liệt kê thành cây nhị phân, chẳng hạn. Bằng cách tương tự, các hàm đệ quy một phần so với các số tự nhiên tổng quát hóa các hàm tính toán trên bất kỳ loại dữ liệu nào và tôi muốn hiểu cách tạo ra một loại khái quát hóa tương tự cho các hàm đệ quy nguyên thủy.

Theo trực giác, nếu tôi định nghĩa một ngôn ngữ mệnh lệnh đơn giản cho phép các thao tác cơ bản trên, hãy nói các danh sách (như nối, lấy đầu và đuôi, so sánh các yếu tố) và một hình thức lặp lại đòi hỏi phải biết trước bao nhiêu lần lặp lại sẽ xảy ra ( chẳng hạn như lặp lại các phần tử trong một danh sách không thay đổi), thì ngôn ngữ đó hầu như có thể tính toán các hàm đệ quy nguyên thủy qua các danh sách. Nhưng làm thế nào tôi có thể hiểu điều này một cách chính thức, và cụ thể hơn, làm thế nào để tôi chứng minh rằng ngôn ngữ của tôi tính toán tất cả các hàm đệ quy nguyên thủy qua các danh sách chứ không chỉ là một tập hợp con của chúng?

Để rõ ràng, tôi quan tâm đến việc hiểu các hàm đệ quy nguyên thủy như là một lớp các hàm được xác định rõ (nếu thực sự là chúng), thay vì chỉ hoạt động của đệ quy nguyên thủy, có vẻ đơn giản. Tôi quan tâm đến con trỏ tới bất cứ điều gì được viết trên đệ quy nguyên thủy đối với các cấu trúc dữ liệu chung, hoặc thực sự trong bất kỳ bối cảnh nào khác ngoài các số tự nhiên.

cập nhật: Tôi có thể đã tìm thấy một câu trả lời, trong một bài báo có tên Walther Recursion , của McAllester và Arkoudas. (Kỷ yếu của CADE 1996. ) Điều này dường như chứa một phiên bản tổng quát của đệ quy nguyên thủy cũng như đệ quy Walther mạnh hơn. Tôi dự định tự viết một câu trả lời một khi tôi đã tiêu hóa được điều này, nhưng trong khi đó, ghi chú này có thể hữu ích cho những người khác có cùng câu hỏi.


1
Tôi không rõ chính xác những gì bạn đang tìm kiếm. Có vẻ như bạn chỉ đang cố gắng tìm loại W , nhưng đó có thể không phải là nó.
Andrej Bauer

3
Có lẽ rất hữu ích khi lưu ý rằng các kiểu dữ liệu "thông thường" (giống như cây) có thể được mã hóa theo cách khá đơn giản thành các số tự nhiên, và sau đó các hàm PR trên tự nhiên là một đại diện khá tốt cho những gì bạn có thể muốn. Thay phiên, bạn có thể sử dụng Hệ thống T của Gôdel được mở rộng cho các loại dữ liệu thứ tự đầu tiên tích cực nghiêm ngặt với các đệ quy "thông thường".
cody

1
Bạn có thể giới hạn các loại đầu ra của bộ khử là loại cơ bản nếu bạn muốn loại bỏ "tính năng" này.
cody

1
Dường như đối với tôi, một dạng loại W bị hạn chế là thứ bạn đang tìm kiếm. Một cái gì đó giống như kiểu W với phân nhánh hữu hạn và các đệ quy giới hạn trong việc loại bỏ thành các loại W bị hạn chế khác.
Andrej Bauer

1
Hội nghị CADE 1996 ghé thăm tại đây: dblp.org/db/conf/cade/cade96
John Fisher

Câu trả lời:


5

Nói chung, trong một ngôn ngữ có kiểu dữ liệu (như danh sách, cây, v.v.), thật dễ dàng để mô tả một ngôn ngữ của các hàm hoạt động chính xác như chúng ta mong đợi đệ quy nguyên thủy hành xử.

Ví dụ, nếu datatype là , và các nhà thầu c 1 , ... , c n có loạiDc1,Giáo dục,cn

cTôi:T1TôiT2TôiGiáo dụcTk1TôiDGiáo dụcD

thì người nhận cho loại đầu ra O sẽ có loạirecDÔiÔi

recDO:(T11Tk11DDOO)DÔi

và ngữ nghĩa hoạt động sẽ là:

recDÔi f1 Giáo dục fn (cTôi t1Giáo dụctkTôi d1Giáo dụcdm)fTôi t1Giáo dụctkTôi (recDÔi f1Giáo dục fn d1)Giáo dục(recDÔi f1Giáo dụcfn dm)

cho mỗi .Tôi

Một cái gì đó đầy miệng! Ít nhất là đối với các số tự nhiên, chúng ta thực sự nhận được

recNÔi:(NÔiÔi)ÔiNÔi

r e c O N f 0 f 1 (Sn) f 0 n( r e c O N f 0 f 1 n)

recNÔi f0 f1 0f1 0
recNÔi f0 f1 (S n)f0 n (recNÔi f0 f1 n)

như hy vọng (lưu ý rằng hàm tạo không có đối số bằng 0!).

recDÔiÔi

TTôij


Nó sẽ là tốt đẹp để có một mô tả thanh lịch hơn của quá trình này mặc dù. Đó là câu trả lời của Carlos xuất hiện: những kiểu dữ liệu này có thể được mô tả một cách tao nhã hơn trong lý thuyết thể loại như là đại số ban đầu của một hàm tử nhất định, thường được gọi là hàm đa thức . Sau đó, người nhận lại chỉ là (một biến thể của) hình thái ban đầu của đại số này, đôi khi được gọi là dị hình bởi những người cố gắng gây nhầm lẫn mọi thứ. Hình thái này tồn tại bằng cách xây dựng đại số ban đầu.

Một đa hình chỉ là biến thể cụ thể mà tôi đã mô tả ở trên.


recNÔi:(NÔiÔi)ÔiNÔi

recN

Tôi không có bất kỳ tài liệu tham khảo cơ bản nào, mặc dù tôi đoán những slide này giới thiệu khá hay và chương 3 của luận án Ralph Mattes đi sâu vào chi tiết kỹ thuật lớn, mặc dù nó cho phép các loại quy nạp không "đặt hàng đầu tiên".
cody

2

Gần đây tôi đã hỏi câu hỏi này và tôi đã tìm thấy một số bài viết quan tâm:

Các logic logic được trình bày hoàn hảo : (a) định nghĩa một logic cung cấp một khái niệm chung về đệ quy nguyên thủy đối với bất kỳ kiểu dữ liệu nào thỏa mãn các yêu cầu nhất định (b) chứng minh logic này là một phần mở rộng bảo thủ của số học đệ quy nguyên thủy.

Độ phức tạp của các chương trình vòng lặp : chứng minh quan niệm của họ về chương trình vòng lặp tương đương với các hàm đệ quy nguyên thủy.

Các chương trình logic cho các bộ đệ quy nguyên thủy : chứng minh lớp các chương trình logic của chúng tương đương với các hàm đệ quy nguyên thủy.

Một đặc tính lý thuyết bằng chứng của các hàm đệ quy nguyên thủy : chứng minh tất cả các hàm đệ quy nguyên thủy trên một tập đã cho chỉ là những hàm có thể xác định trong một lý thuyết tập rất yếu.


0

Có lẽ bạn đang nghĩ về khái niệm của một chủ nghĩa đa hình ?

Từ lập trình chức năng với chuối, ống kính, phong bì và dây thép gai :

h= =(b,)

h0= =bh(n+1)= =n(hn)

b= =1nm= =(n+1)×m

h

hkhông= =bh(khuyết điểmmộtb)= =một(b,hb)
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.