ทฤษฎี Realizability: ความแตกต่างของพลังระหว่างแคลคูลัสแลมบ์ดาและทัวริงเครื่องจักร


48

ฉันมีสามคำถามย่อยที่เกี่ยวข้องซึ่งถูกเน้นด้วยสัญลักษณ์แสดงหัวข้อย่อยด้านล่าง (ไม่พวกเขาไม่สามารถแยกได้ถ้าคุณสงสัย) Andrej Bauer เขียนที่นี่ว่าฟังก์ชั่นบางอย่างสามารถทำได้ผ่านเครื่องทัวริง แต่ไม่ใช่ผ่านแลมบ์ดาแคลคูลัส ขั้นตอนสำคัญในการให้เหตุผลของเขาคือ:

อย่างไรก็ตามถ้าเราใช้แคลคูลัสแลมบ์ดา [โปรแกรม] c ควรคำนวณตัวเลขที่แสดงถึงเครื่องทัวริงจากเทอมแลมบ์ดาซึ่งเป็นฟังก์ชัน f สิ่งนี้ไม่สามารถทำได้ (ฉันสามารถอธิบายได้ว่าทำไมหากคุณถามเป็นคำถามแยกต่างหาก)

  • ฉันต้องการดูคำอธิบาย / หลักฐานที่ไม่เป็นทางการ

ฉันไม่เห็นวิธีการใช้ทฤษฎีบทของไรซ์ที่นี่ มันจะนำไปใช้กับปัญหา "เครื่องจักรทัวริง T นี้และ L- คำศัพท์เทียบเท่า L lda นี้หรือไม่" เพราะการใช้คำกริยานี้กับคำที่เทียบเท่าจะให้ผลลัพธ์ที่เหมือนกัน อย่างไรก็ตามฟังก์ชั่นที่ต้องการอาจคำนวณต่างกัน แต่เทียบเท่า TM สำหรับเงื่อนไขแลมบ์ดาที่ต่างกัน แต่เทียบเท่า

  • ยิ่งกว่านั้นถ้าปัญหาเกิดขึ้นจากการวิปัสสนาของแลมบ์ดาฉันคิดว่าการผ่านการเข้ารหัสเทอมของแลมบ์ดาจะต้องเป็นที่ยอมรับเช่นกันใช่ไหม?

ในอีกด้านหนึ่งเนื่องจากตัวอย่างของเขาเกี่ยวข้องกับการคำนวณในแลมบ์ดาแคลคูลัสจำนวนขั้นตอนที่ Turing Machine ต้องการเพื่อให้งานเสร็จสมบูรณ์ฉันไม่แปลกใจมาก

  • แต่เนื่องจากแลมบ์ดาแคลคูลัสไม่สามารถแก้ปัญหาที่เกี่ยวข้องกับทัวริงได้ฉันสงสัยว่าใครสามารถกำหนดปัญหาที่คล้ายกันสำหรับแลมบ์ดาแคลคูลัสและพิสูจน์ว่ามันไม่สามารถแก้ไขได้สำหรับเครื่องจักรทัวริง เครื่องจักรทัวริง (ซึ่งจะทำให้ฉันประหลาดใจ)

คำตอบ:


56

จอห์น Longley มีบทความที่กว้างขวางมากสำรวจการอภิปรายประเด็นต่างๆที่เกี่ยวข้องกับ"พัฒนาการของ Computability ที่ประเภทที่สูงขึ้น"

แนวคิดพื้นฐานคือการทำวิทยานิพนธ์ของทัวริสต์เกี่ยวกับฟังก์ชั่นจาก - และมีการคำนวณมากกว่านั้น! โดยเฉพาะอย่างยิ่งเมื่อเราเขียนโปรแกรมเราใช้ประโยชน์จากฟังก์ชันประเภทที่สูงกว่า (เช่น )NN(NN)N

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

ความแตกต่างในการเข้ารหัสหมายความว่าคุณสามารถวิเคราะห์ไวยากรณ์ของอาร์กิวเมนต์ด้วยการเข้ารหัสสไตล์ TM และคุณไม่สามารถใช้การแทนแลมบ์ดาแคลคูลัสมาตรฐานได้ ดังนั้นถ้าคุณได้รับแลมบ์ดาระยะสำหรับฟังก์ชั่นประเภทคุณสามารถทดสอบพฤติกรรมของมันโดยผ่านมันโดยเฉพาะอย่างยิ่ง 's - คุณไม่สามารถวิเคราะห์โครงสร้างของ คำใด ๆ นี่เป็นข้อมูลที่ไม่เพียงพอที่จะค้นหารหัสของคำแลมบ์ดาNNn

สิ่งหนึ่งที่ควรสังเกตคือประเภทที่สูงกว่าถ้าภาษามีความหมายน้อยกว่าในหนึ่งคำสั่งมันจะมีความหมายมากกว่าคำสั่งเดียวเนื่องจากหน้าที่ต่างกัน ในทำนองเดียวกันมีฟังก์ชั่นที่คุณสามารถเขียนด้วย LC ที่คุณไม่สามารถใช้การเข้ารหัสแบบ TM ได้ (เพราะมันขึ้นอยู่กับความจริงที่ว่าคุณสามารถส่งผ่านอาร์กิวเมนต์ที่ใช้งานได้และรู้ว่าผู้รับไม่สามารถมองเข้าไปในฟังก์ชันที่คุณให้ได้) .

แก้ไข: นี่คือตัวอย่างของฟังก์ชั่นที่สามารถนิยามได้ใน PCF แต่ไม่ใช่ในการเข้ารหัส TM + Goedel ฉันจะประกาศisAlwaysTrueฟังก์ชั่น

 isAlwaysTrue : ((unit → bool) → bool) → bool

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

isAlwaysTrue p = p (λ(). true) ∧ p (λ(). false) ∧ p (λ(). ⊥)

การคำนวณวนลูปอยู่ที่ไหนและเป็นและโอเปอเรเตอร์ของบูลีน สิ่งนี้ใช้ได้เพราะมีเพียงสามคนunit → boolใน PCF และเราสามารถระบุได้อย่างละเอียด อย่างไรก็ตามในโมเดลรูปแบบการเข้ารหัส TM + Goedel pสามารถทดสอบได้ว่าอาร์กิวเมนต์ใช้เวลานานแค่ไหนในการส่งคืนคำตอบและส่งคืนคำตอบต่าง ๆ ตามนั้น ดังนั้นการดำเนินการisAlwaysTrueกับ TMs จะล้มเหลวตามข้อกำหนด


1
นี่เป็นการสำรวจที่ยอดเยี่ยม ขอบคุณสำหรับลิงค์!
Suresh Venkat

ฉันเพิ่งรู้ว่าฉันลืมยอมรับคำตอบแม้ว่าฉันจะยอมรับคำตอบของคุณก็ตาม ขออภัย!
Blaisorblade

“ ความแตกต่างในการเข้ารหัสหมายความว่าคุณสามารถวิเคราะห์ไวยากรณ์ของการโต้แย้งด้วยการเข้ารหัสแบบ TM และคุณไม่สามารถใช้การแทนแลมบ์ดาแคลคูลัสมาตรฐานได้”: แต่ถ้าคุณมีการจัดองค์ประกอบของฟังก์ชั่น? นอกจากนี้สิ่งที่คุณพูดดูเหมือนว่าจะแนะนำ HOL เป็นมากกว่าทฤษฎีของแคลคูลัสแลมบ์ดาที่พิมพ์แล้วมันมากกว่านั้น?
Hibou57

นอกจากนี้สิ่งที่เกี่ยวกับเรื่องนี้: cs.virginia.edu/~evans/cs150/classes/class39/lecture39.pdf นี่เป็นสิ่งที่ผิดหรือเปล่า?
Hibou57

ถึง Neel คุณมีตัวอย่างของฟังก์ชันที่สามารถรับรู้ได้ในโมเดลแคลคูลัสแลมบ์ดา แต่ไม่ใช่ในโมเดลทัวริงหรือไม่?
Ingo Blechschmidt

29

สิ่งที่นีลพูดและยังมีดังต่อไปนี้

ผมอยากจะเน้น ( อีกครั้ง , อีกครั้งและอีกครั้ง ) เป็นตัวแทนของอินพุตและเอาต์พุตเรื่องที่ หากเราได้รับอนุญาตให้เปลี่ยนการเป็นตัวแทนเราสามารถทำสิ่งใดสิ่งหนึ่งได้ (ตัวอย่างเช่นสร้างฟังก์ชันที่คำนวณได้) ดังนั้นผ่านจากการเป็นตัวแทนของฟังก์ชั่นโดย -terms ไปยังการแสดงโดยตัวเลขGödel ไม่เป็นที่ยอมรับถ้าแบบจำลองการคำนวณของเราคือ -calculus (เพราะการดำเนินการแกง ไม่สามารถคำนวณได้โดย -calculus)NNλλλ

คำแถลงการณ์ที่สามารถพบได้ใน -term model แต่ไม่ใช่ในโมเดลทัวริงของเครื่องคือ "ไม่ใช่ทุกฟังก์ชั่นมีรหัสGödel" ซึ่งเป็นเรื่องโง่ ฉันจะพยายามหาคำตอบที่ดีกว่าและแก้ไขคำตอบนี้λNN


แก้ไขเมื่อวันที่ 2013-10-07:นี่คือสิ่งที่ฉันหมายถึงโดย "currying กลายเป็น uncomputable" สมมติว่าเราใช้ untyped -calculus เป็นแบบจำลองการคำนวณของเรา แต่จากนั้นเราตัดสินใจว่าเราควรแสดงแผนที่ด้วยรหัสGödel (ของเครื่องจักรทัวริงเข้ารหัสเป็นตัวเลขของคริสตจักร) ฟังดูไม่เป็นอันตรายใช่มั้ย หลังจากทั้งหมดเราเชื่อว่ามนต์ "เครื่องจักรทัวริงและ -calculus เทียบเท่ากัน"λNNλ

ทีนี้, สำหรับการเป็นตัวแทนใหม่นี้จริง ๆ แล้วเป็นตัวแทนที่ถูกต้องของ , เราจำเป็นต้องตระหนักถึงการใช้งานและการแก้ปัญหาด้วยเช่นกันเพราะเพราะ "หมายถึงฟังก์ชั่น" หมายถึงสิ่งเดียวกันกับ วัตถุเอ็กซ์โปเนนเชียล ") โดยเฉพาะเราต้องระยะดังกล่าวว่าเมื่อใดก็ตามที่คริสตจักรเลขหมายถึงแล้วเป็นตัวแทนจาก{K} (ที่นี่ฉันเขียนสำหรับเลขคริสตจักรที่แสดงถึงจำนวน .)NNλappn¯f:NNf(k)appn¯k¯n¯nappพร้อมใช้งานเนื่องจากมีจำนวนเป็นล่ามสำหรับเครื่องทัวริงซึ่งติดตั้งใน -calculusλ

แต่วิธีการเกี่ยวกับการแกง? สำหรับสิ่งที่เราต้องการดังต่อไปนี้ สมมติว่าเป็นชุดที่แสดง รับแผนที่คำนวณโดย -termเราต้องแสดงให้เห็นว่าการขนย้ายนอกจากนี้ยังมีการคำนวณโดยบางระยะsแต่ลองพิจารณาตัวอย่างโดยที่คือ set o fmapsแสดงโดย -terms และคือแอปพลิเคชัน จากนั้นจะเป็นแผนที่ซึ่งทำหน้าที่เป็นตัวตนของ: X × NN λ T ~ F : X ( NN ) λ s X NN λ ~ NN λ λ NN λXf:X×NNλtf~:X(NN)λsXNNλff~NNแต่ realizer ของมันคือ -term ที่แปลง -terms ที่แสดงถึงแผนที่กับรหัสGödelที่สอดคล้องกัน -term ดังกล่าวไม่มีอยู่ (ตัวอย่างเช่นเนื่องจากจะไม่ต่อเนื่องในรูปแบบความหมายแบบทอพอโลยี)λλNNλ

คุณอาจพยายามคัดค้านว่าฉันไม่ควรใช้ชุดเป็นตัวแทนเฉพาะของแผนที่แสดงโดยเทอมเพราะเรา "ตกลง" ว่าควรจะเป็นตัวแทนของรหัสGödel . แต่คุณจะผิด ก่อนอื่นฉันอาจใช้แตกต่างกับหลักฐานที่ซับซ้อนกว่าซึ่งจะหลบหลีกคุณ แต่ก็ยังบรรลุผลเหมือนเดิม ประการที่สองมีอยู่ในหมวดหมู่และคำจำกัดความของเอ็กซ์โปเนนเชียลกำหนดว่าต้องทำงานในส่วนที่เกี่ยวกับวัตถุทั้งหมด คุณต้องเคารพหมวดหมู่ คุณไม่สามารถเขียงมันแบบสุ่มและเอาวัตถุบางอย่างออกมาได้ (อย่างคุณก็ทำได้ แต่คุณเป็นคนขายเนื้อ)NN λ X XXNNλXX


2
ยังคงรอตัวอย่างที่ดีที่ ...
ฌาคส์ Carette

1
ฉันสามารถคิดได้หลายประโยคซึ่งสามารถใช้กับเครื่องทัวริง แต่ไม่ใช่กับ -terms ฉันคิดว่าคุณต้องการตรงกันข้าม อืมม λ
Andrej Bauer

ฉันไม่เข้าใจวิธีการที่แกงจะไม่สามารถคำนวณได้ คุณควรจะสามารถนำทฤษฎีบท smn กลับมาใช้ใหม่ได้เนื่องจากการพิสูจน์จะสร้างฟังก์ชันบนข้อมูลลำดับที่หนึ่ง (naturals) โดยวิทยานิพนธ์คริสตจักรทัวริงพฤติกรรมนี้เกี่ยวกับธรรมชาติสามารถนำมาใช้เป็นคำแลมบ์ดา (ซึ่งใช้ฟังก์ชั่นพื้นเมืองภายใน แต่ฉันไม่เห็นว่ามันเป็นสิ่งต้องห้าม) หนึ่งสามารถพิสูจน์ทฤษฎีบท utm ในทำนองเดียวกันดังนั้นตามโพสต์ของคุณเราควรจะทำ ฉันพลาดอะไรไป
Blaisorblade

1
ฉันอธิบายในคำตอบความหมายของการแกงนั้นไม่สามารถคำนวณได้นั่นคือวัตถุที่แนะนำไม่ใช่เลขยกกำลังในหมวดหมู่ของชุดตัวแทน
Andrej Bauer

ขอบคุณสำหรับคำอธิบาย! น่าเสียดายที่ฉันไม่สามารถโหวตได้อีก ฉันสามารถติดตามรายละเอียดทางเทคนิคส่วนใหญ่; ฉันไม่คุ้นเคยกับโมเดลทอพอโลยี แต่ฉันคุ้นเคยกับ "คุณไม่สามารถตรวจสอบฟังก์ชันในการเขียนโปรแกรมใช้งานได้ / λ-แคลคูลัส" ย่อหน้าสุดท้ายของคุณยังอธิบายว่าทำไมฉันไม่สามารถผ่าน smn ได้เนื่องจากการให้คำสั่ง smn สร้างรหัสGödelอีกครั้งไม่ใช่ฟังก์ชั่นมาตรฐานตามที่คุณต้องการ ฉันจะนั่งสมาธิในย่อหน้านั้น
Blaisorblade
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.