ทำไมฟังก์ชั่นทั้งหมดถึงไม่สามารถนับได้?


29

เราเรียนรู้เกี่ยวกับแนวคิดของฟังก์ชั่นการแจกแจง ในทางปฏิบัติมันสอดคล้องกับภาษาการเขียนโปรแกรม

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

แล้วเราจะต้องยอมรับศักยภาพของการไม่เลิกจ้างอย่างไรถ้าเราต้องการพลังการคำนวณที่เหมาะสม?

คำตอบ:


24

เพราะเส้นทแยงมุม ถ้าเป็นการนับจำนวนฟังก์ชั่นที่คำนวณได้ทั้งหมดจากNถึงNเช่นว่าทุกf eเป็นผลรวมแล้วg ( i ) = f i ( i ) + 1ก็จะคำนวณได้ทั้งหมด ฟังก์ชั่น แต่มันจะไม่อยู่ในการแจงนับ ที่จะขัดแย้งกับสมมติฐานเกี่ยวกับลำดับ ดังนั้นจึงไม่มีการคำนวณฟังก์ชั่นการคำนวณที่สามารถประกอบด้วยฟังก์ชั่นการคำนวณทั้งหมด(fe:eN)NNfeg(i)=fi(i)+1

สมมติว่าเราคิดถึงฟังก์ชันสากลที่คำนวณได้โดยที่ "universal" หมายถึงคือฟังก์ชันเลขฐานสองที่คำนวณได้และสำหรับทุก ๆ ฟังก์ชันฟังก์ชันที่คำนวณได้ของh f ( n )h(e,i)hf(n)มีบางที่f ( i ) = h ( E , ฉัน)สำหรับทุกฉัน จากนั้นจะต้องมีeเช่นนั้นที่g ( n ) = h ( e , n )ไม่ใช่ฟังก์ชันทั้งหมดเนื่องจากย่อหน้าก่อนหน้า มิฉะนั้นชั่วโมงef(i)=h(e,i)ieg(n)=h(e,n)h จะให้การนับจำนวนของฟังก์ชันยูนารีที่คำนวณได้ทั้งหมดซึ่งรวมถึงฟังก์ชันยูนารีที่คำนวณได้ทั้งหมด

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


ฉันแค่อยากจะเพิ่มว่าใครบางคนพบสิ่งที่ดูเหมือนจะเป็นช่องโหว่ในแนวทแยงมุม หากคุณใช้การเป็นตัวแทนแบบพิมพ์สำหรับโปรแกรมคุณสามารถใช้ระบบชนิดเพื่อไม่อนุญาตให้ทำเส้นทแยงมุมและสร้างตัวแปลภาษาด้วยตนเองทั้งหมด ดูการฝ่าอุปสรรคมาตรฐาน: ล่ามด้วยตนเองสำหรับ F-omegaสำหรับรายละเอียด
hatch22

แน่นอนว่า System F ไม่ใช่ระบบที่สมบูรณ์แบบของทัวริง กระดาษที่คุณเชื่อมโยงนั้นน่าสนใจ ดูเหมือนว่าพวกเขาจะใช้ประโยชน์จากความไม่ครบถ้วนทัวริงในวิธีที่น่าสนใจ
Carl Mummert

g(i)=fi(i)+1gk,fk=gg(k)g(k)=fk(k)+1=g(k)+1gg

และแม้กระทั่งการใช้เส้นทแยงมุมขยับเพื่อหลีกเลี่ยงปัญหานี้ดูเหมือนว่าจะนำไปสู่ความขัดแย้ง
agemO

10

เพียงเพื่อจะชัดเจนเราต้องแยกแยะความแตกต่างฟังก์ชั่นทางคณิตศาสตร์ (ฉันจะเรียกพวกเขาฟังก์ชั่นและมักจะมี uncountably มากของพวกเขาดังนั้นพวกเขาจะไม่ได้นับทั้งหมด) และฟังก์ชั่นที่คุณสามารถเขียน: ฉันจะเรียกพวกเขาโปรแกรมหรือยังฟังก์ชันคำนวณ

SExExSxSS

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

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

แต่นี่ไม่ได้หมายความว่าไม่ดี:

  1. ตัวอย่างเช่นการตั้งค่าหากโปรแกรมทั้งหมดที่พิสูจน์ได้ทั้งหมดนั้นนับได้เพราะคุณสามารถระบุการพิสูจน์ทั้งหมดและตรวจสอบโดยอัตโนมัติหากพวกเขาพิสูจน์ว่าโปรแกรมของคุณนั้นสมบูรณ์

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

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

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


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

จริง ฉันไม่ได้อ้างว่ามันเป็นข้อพิสูจน์ (เช่นเคยคุณต้องสร้างอาร์กิวเมนต์แนวทแยงมุม) และบางทีฉันไม่ควรใช้คำว่า "เพราะ" ฉันพยายามที่จะตอบคำถามของคุณซึ่ง (ฉันคิดว่า) ไม่ได้เกี่ยวกับหลักฐานของคำกล่าวของอาจารย์ แต่เกี่ยวกับสาเหตุที่การเลิกจ้างขัดแย้งกับพลังการคำนวณ
jmad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.