ฟังก์ชันใดที่ System F ไม่สามารถคำนวณได้


28

ในบทความวิกิพีเดียว่าด้วยทัวริงครบถ้วนระบุว่า:

แคลคูลัสแลมบ์ดาที่ยังไม่พิมพ์คือทัวริงสมบูรณ์ แต่แคลคูลัสแลมบ์ดาที่พิมพ์ไว้จำนวนมากรวมถึง System F ไม่ใช่ ค่าของระบบที่พิมพ์นั้นขึ้นอยู่กับความสามารถในการแสดงโปรแกรมคอมพิวเตอร์ทั่วไปส่วนใหญ่ในขณะที่ตรวจพบข้อผิดพลาดเพิ่มเติม

ตัวอย่างของฟังก์ชันที่คำนวณได้ทั้งหมดที่ไม่สามารถคำนวณได้โดยระบบ Fคืออะไร

นอกจากนี้เนื่องจาก hindley-milner คือ:

ข้อ จำกัด ของระบบ F

เพราะความจริงที่ว่า:

การตรวจสอบประเภทไม่สามารถอธิบายได้สำหรับตัวแปรสไตล์แกงกะหรี่ของ System F กล่าวคือสิ่งหนึ่งที่ขาดคำอธิบายประกอบการพิมพ์ที่ชัดเจน

นี่หมายความว่าระบบแคลคูลัสแลมบ์ดาต้นแบบของฮินด์ลีย์ - มิลเนอร์นั้นไม่ได้สมบูรณ์เหมือนกันหรือไม่?

หากเป็นจริงเนื่องจากhaskellนั้นได้รับการทำให้สมบูรณ์อย่างสมบูรณ์และเรารู้ว่ามันเป็นพื้นฐานคือแคลคูลัสแลมบ์ดาและระบบการพิมพ์ฮินด์ลีย์ - มิลเนอร์คุณสมบัติใดที่ไม่ได้ปรากฏในแคลคูลัสแลมบ์ดา



ตัวอย่างของคุณสมบัติที่ทำให้ Haskell ทัวริงสมบูรณ์คืออินเตอร์เฟสของโค้ดเนทีฟ
Trismegistos

@ โคดี้ขอบคุณสำหรับความคิดเห็นของคุณ ฉันไม่คุ้นเคยกับระบบ T. ฉันคิดถูกหรือเปล่าว่าเป็นระบบ T ที่กล่าวถึงที่นี่ ระบบ T เปรียบเทียบและตรงกันข้ามกับระบบอย่างไร
Mike HR

หมายเหตุใน googling สำหรับsystem T vs. system Fฉันพบสิ่งที่ตอบคำถามย่อยสุดท้ายของฉันที่ rephrased ที่นี่เป็นอย่างไร haskell เพิ่มทัวริงสมบูรณ์เพื่อระบบ F
Mike HR

1
ฉันคิดว่า @Trismegistos ยกประเด็นปรัชญาที่น่าสนใจ: Haskell คืออะไรขอบเขตของมันอยู่ที่ไหน
Martin Berger

คำตอบ:


45

ระบบค่อนข้างแสดงออก ในฐานะที่ได้รับการพิสูจน์โดยราร์ดที่นี่ฟังก์ชั่นชนิดที่ไม่มีN (ที่ไม่มีถูกกำหนดให้เป็นX . X ( X X ) X ) จะตรงฟังก์ชั่นที่กำหนด ( NN ) ในลำดับที่สอง Heyting เลขคณิตH 2 . โปรดทราบว่านี้เป็นเช่นเดียวกับฟังก์ชั่นที่กำหนดในลำดับที่สองอาโน่คณิตศาสตร์FNNNX. X(XX)XNNHA2

คุณอาจต้องการตรวจสอบหลักฐานและประเภทเป็นข้อมูลอ้างอิงที่สามารถอ่านได้มากขึ้น หมายเหตุว่านี้หมายความว่าจำนวนมากของโปรแกรมที่สามารถเขียนได้ในระบบ F จากฟังก์ชั่น Ackermann ล่ามสำหรับระบบของGödel Tสำหรับภาษาโปรแกรมทั้งหมด (ที่มีเงื่อนไขเล็กน้อย) ระบบFไม่สามารถใช้ตัวแปลภาษาเองได้เช่นฟังก์ชั่นe v a l : NNซึ่งใช้เป็นรหัสป้อนสำหรับเทอมtของระบบFและส่งคืนรหัส (สำหรับ a) แบบฟอร์มปกติสำหรับtTFeval:NNtFt. การพิสูจน์เกี่ยวข้องกับการแปรผันของเคล็ดลับการทแยงมุมที่ใช้สำหรับความลังเลของปัญหาการหยุดชะงัก Andrej อธิบายได้อย่างสวยงามที่นี่

เพื่อที่จะตอบคำถามอื่น ๆ ของคุณ: แคลคูลัสพื้นฐาน Hindley-มิลเนอร์ (HM) ภาษานี้ยังไม่ทัวริงสมบูรณ์ ในความเป็นจริงมันเป็นอย่างมีนัยสำคัญที่อ่อนแอกว่าระบบFใกล้ชิดในการแสดงออกไปเพียงแค่พิมพ์λแคลคูลัสλF λ

Haskell เป็นทัวริงที่สมบูรณ์ คุณลักษณะที่โดดเด่นที่สุดที่เปิดใช้งานสิ่งนี้ (แม้ว่าจะมีอื่น ๆ ) คือการมีอยู่ของการเรียกซ้ำแบบไม่ จำกัด : นิยามของโปรแกรมใด ๆ (ฟังก์ชั่น) สามารถอ้างถึงตัวโปรแกรมเอง สิ่งนี้คล้ายกับการเพิ่ม combinator เช่นทำในคำจำกัดความของPCFซึ่งพิมพ์ได้ง่าย แต่ยังคงรักษาทัวริงสมบูรณ์กับY combinatorYY

โปรดทราบว่ามีคุณสมบัติอื่น ๆ ที่ทำให้ Haskell Turing สมบูรณ์ แต่โดยปกติจะไม่ได้เป็นส่วนหนึ่งของภาษาหลักเช่นการอ้างอิงฟังก์ชันฟังก์ชันประเภทข้อมูลที่ไม่ จำกัด เป็นต้น


1
ว้าวนี่เป็นคำตอบที่น่าอัศจรรย์และตอบทุกอย่างได้อย่างสมบูรณ์แบบ ขอขอบคุณ!
Mike HR

"สำหรับภาษาการเขียนโปรแกรมทั้งหมด ... " นี่ไม่ถูกต้องนัก มีล่ามตัวเองสำหรับภาษาทั้งหมดที่ทำงานได้โดยไม่รวมโปรแกรมที่ไม่สิ้นสุดตามที่เข้าใจผิดโดยความเข้าใจของฉัน ดูกระดาษนี้
jmite

@jmite ตามที่ระบุไว้การเรียกร้องของฉันถูกต้อง บทความนี้ถูกกล่าวถึงในการอภิปรายที่เชื่อมโยงกันและ Andrej มีคำพูดติดตามในบล็อกของเขา: math.andrej.com 2016/01/01/4/…
cody

11

มันค่อนข้างทำให้เข้าใจผิดว่าระบบการพิมพ์ของ Haskell คือ "ระบบพิมพ์ hinley-milner" ประเภทของ Haskell นั้นมีประสิทธิภาพมากกว่าเช่นประเภทที่สูงกว่า อันที่จริงระบบการพิมพ์ที่มีประสิทธิภาพเพื่อให้คุณสามารถฝังภาษาโปรแกรมทัวริงสมบูรณ์ในระบบการพิมพ์ให้ดูที่นี่ นี่ไม่ใช่เหตุผลเดียวสำหรับพลังของ Haskell โคดี้ได้พูดถึงคนอื่น


ขอบคุณ การเปิดเผยหลักของฉันต่อ hindley-milner นั้นผ่านมาแล้วดังนั้นฉันคิดว่าฉันอาจสันนิษฐานว่าประเภทที่สูงกว่านั้นเป็นส่วนหนึ่งของมัน hindley-milner เป็นเพียงการอ้างถึงการอนุมานประเภท (ดังนั้นอัลกอริทึมที่เป็นไปได้มากที่สุด W)? หรือเป็นอะไรเพิ่มเติม ฉันเข้าใจว่ามีพื้นฐานทางคณิตศาสตร์ของมันในแคลคูลัสแลมบ์ดาฉันแค่พยายามทำความเข้าใจว่าขอบเขตเชิงตรรกะระหว่างระบบประเภททรงพลังของฮาเซลล์และสิ่งที่การใช้งานน้อยที่สุดของระบบ "ฮินด์ลีย์ - มิลเนอร์"
Mike HR

NB หากใครสนใจพลังของระบบประเภทHaskellฉันขอแนะนำวิดีโอของ Edward Kmett บน Haskซึ่งจะแยกทฤษฎีลึกในหมวดหมู่โดยใช้ระบบประเภท Haskell
Mike HR

1
λW
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.