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:A→B→AS:(A→B→C)→(A→B)→(A→C)
A,BC

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

z:Nsucc:N→Niter:N→(N→N)→N→N

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

iterifz=iiterif(succe)=f(iterife)

iter:A→(A→A)→N→A
iter

iter

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

N≃N×N


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

2
SK

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

0↦0(succx)↦x

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