Combinators สำหรับฟังก์ชั่นการเรียกซ้ำแบบดั้งเดิม


19

เป็นที่ทราบกันดีว่า Combinators S และ K นั้นสมบูรณ์แบบสำหรับทัวริง มี combinators ที่เพียงพอที่จะให้ผลตอบแทน (เฉพาะ) ฟังก์ชันเรียกซ้ำแบบดั้งเดิมหรือไม่?


1
นี่คือสิ่งที่คุณถาม mathoverflow.net/questions/48006/…
Andrej Bauer

คำตอบ:


17

ใช่ แต่คุณต้องพิจารณาผู้ตีพิมพ์ นั่นคือคุณต้องให้และK schema ประเภทต่อไปนี้: K : A B A S : ( A B C ) ( A B ) ( A C ) โดยที่A , BและCเป็นตัวแปรเมตาซึ่งสามารถสร้างอินสแตนซ์ให้กับคอนกรีตทุกประเภทที่ใช้งานSK

K:ABAS:(ABC)(AB)(AC)
A,BC

จากนั้นคุณต้องการเพิ่มชนิดจำนวนธรรมชาติภาษาประเภทและเพิ่ม combinators ต่อไปนี้: Z : N s ยู: NNฉันทีอีR : N( NN ) Nยังไม่มีข้อความN

z:Nsucc:NNiter:N(NN)NN

กฎความเสมอภาคสำหรับการเพิ่มเติมคือ:

iterifz=iiterif(succe)=f(iterife)

iter:A(AA)NA
iter

iter

pred=λk.iter(z,z)(λ(n,n).(succn,n))kpred=λk.snd(predk)

NN×N


ดังนั้นนี่คือน้อยกว่าทัวริงที่สมบูรณ์โดยอาศัยข้อ จำกัด ของ combinators พิมพ์? ตัวแปรประเภท (เรียกซ้ำ) สามารถแสดงฟังก์ชันเหนือตัวแปรประเภท (เช่น A = D -> E สำหรับบางประเภท D และ E) ได้หรือไม่?
NietzscheanAI

2
SK

Neel ขอบคุณ ฉันจะถูกคิดว่าเป็นไปได้ที่จะเป็นตัวแทนของ z, succ และ iter ในแง่ของ S และ K ผ่านการเข้ารหัสตัวเลขของคริสตจักร?
NietzscheanAI

00(succx)x

@Xoff: iterฟังก์ชั่นรุ่นก่อนมีที่รู้จักกันดีนิยามเชิงเส้นเวลาในแง่ของ นี่อาจเป็นจุดประสงค์ของคำถามบน cs.stackexchange.com ...
cody
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.