ฉันไตร่ตรองสักครู่ว่าจะเพิ่มอีกคำตอบไหม คำตอบอื่น ๆ ให้ความสนใจกับคำถามกลางของเขา (เกี่ยวกับ "การทำให้สมบูรณ์", "ซ้ำซาก" และอื่น ๆ ) ให้ฉันคว้าส่วนแรกและส่วนสุดท้ายและทำให้ภาพที่ใหญ่และปรัชญาเล็กน้อย:
แต่มันหมายความว่าอะไร?
ทัวริงสมบูรณ์หมายถึงอะไร
มีวิธีในการกำหนดความสามารถของทัวริงโดยไม่ต้องพูดว่า "การจำลองเครื่องทัวริงอื่น" ได้หรือไม่?
การพูดอย่างไม่เป็นทางการการทัวริงสมบูรณ์หมายความว่ากลไกของคุณสามารถเรียกใช้อัลกอริทึมใด ๆ ที่คุณคิดได้ไม่ว่ามันจะซับซ้อนซับซ้อนลึกซ้ำซากซับซ้อนยาว (ในแง่ของรหัส) และไม่ว่าจะใช้เวลานานเท่าใด จำเป็นต้องประเมินมัน มันจะไปโดยไม่บอกว่ามันจะประสบความสำเร็จถ้าปัญหาคือคำนวณ แต่ถ้ามันเป็นคำนวณก็จะประสบความสำเร็จ (หยุด)
(หมายเหตุ: เพื่อค้นหาว่าทำไมนี่คือ "ไม่เป็นทางการ" ให้ตรวจสอบวิทยานิพนธ์ของโบสถ์ที่ทัวริงไปตามบรรทัดเหล่านั้นพร้อมกับถ้อยคำที่ละเอียดยิ่งขึ้นการทำวิทยานิพนธ์อาจเป็นไปได้หรือไม่ถูกต้องขอบคุณ @DavidRicherby สำหรับ ชี้การละเว้นเล็กน้อยนี้ในความคิดเห็น)
"อัลกอริทึม" หมายถึงสิ่งที่เราเข้าใจกันโดยทั่วไปว่าเป็นอัลกอริทึมของคอมพิวเตอร์ในปัจจุบัน นั่นคือชุดของขั้นตอนที่ไม่ต่อเนื่องซึ่งจัดการกับหน่วยเก็บข้อมูลโดยมีตรรกะควบคุมบางอย่างผสมกันเข้าด้วยกันไม่ใช่เช่นเครื่องของ Oracle นั่นคือไม่สามารถ "เดา" ได้
ตัวอย่างสำหรับภาษาที่ไม่ใช่ TC ในทางปฏิบัติ
หากคุณตั้งโปรแกรมด้วยตัวเองคุณอาจรู้จักนิพจน์ทั่วไปที่ใช้จับคู่สตริงกับรูปแบบบางอย่าง
นี่คือตัวอย่างหนึ่งของการสร้างที่ไม่ทัวริงเสร็จสมบูรณ์ คุณสามารถหาแบบฝึกหัดที่เป็นไปไม่ได้ที่จะสร้างสำนวนปกติที่ตรงกับวลี
ยกตัวอย่างเช่น (และนี้ได้เดือดร้อนแน่นอนโปรแกรมเมอร์จำนวนมากในการใช้งานจริงที่เกิดขึ้นจริง) มันเป็นทฤษฎีและเป็นไปไม่ได้ในทางปฏิบัติเพื่อสร้างการแสดงออกปกติที่ตรงกับภาษาการเขียนโปรแกรมหรือเอกสาร XML: มันเป็นไปไม่ได้สำหรับ regexp เพื่อหาโครงสร้างบล็อก ( do ... end
หรือ{ ... }
ในภาษาเปิดและปิดแท็กในเอกสาร XML) หากพวกเขาได้รับอนุญาตให้ลึกโดยพลการ หากมีข้อ จำกัด อยู่ที่นั่นตัวอย่างเช่นคุณสามารถมี "การเรียกซ้ำ" เพียง 3 ระดับจากนั้นคุณสามารถค้นหานิพจน์ทั่วไปได้ แต่ถ้ามันไม่ถูก จำกัด ก็ไม่เป็นไร
เห็นได้ชัดว่ามันเป็นไปได้ที่จะสร้างโปรแกรมในภาษาทัวริงสมบูรณ์ (เช่น C) ในการแยกวิเคราะห์ซอร์สโค้ด (คอมไพเลอร์ตัวใดก็ได้) นิพจน์ทั่วไปจะไม่สามารถจำลองโปรแกรมดังกล่าวได้
แรงจูงใจ
ความคิดของเครื่องจักรทัวริงในตัวเองนั้นไม่มีประโยชน์อะไรเลย กล่าวคือทัวริงไม่ได้สร้างมันขึ้นมาเพื่อสร้างคอมพิวเตอร์จริงหรืออะไรทำนองนั้นเมื่อเทียบกับ Charles Babbage หรือ von Neumann เป็นต้น จุดที่มีแนวความคิดของเครื่องทัวริงที่เป็นที่เป็นเหลือเกินที่เรียบง่าย ประกอบด้วยเกือบไม่มีอะไร จะลดคอมพิวเตอร์ที่เป็นไปได้ (และจริง) ให้น้อยที่สุดเท่าที่จะเป็นไปได้
ประเด็นของการทำให้เข้าใจง่ายในทางกลับกันก็คือสิ่งนี้ทำให้ง่าย (ish) ในการไตร่ตรองเกี่ยวกับคำถามเชิงทฤษฎี (เช่นปัญหาการหยุดพักคลาสที่ซับซ้อนและสิ่งใดก็ตามที่วิทยาการคอมพิวเตอร์เชิงทฤษฎีรบกวนจิตใจด้วย) คุณสมบัติอย่างหนึ่งคือโดยปกติแล้วมันง่ายมากที่จะตรวจสอบว่าภาษาหรือคอมพิวเตอร์ที่กำหนดสามารถจำลองเครื่องทัวริงได้ง่ายๆเพียงเขียนโปรแกรม Turing Machine (ซึ่งง่ายมาก!) ในภาษานั้น
ไม่มีที่สิ้นสุด
โปรดทราบว่าคุณไม่ต้องการเวลาหรือการจัดเก็บข้อมูลที่ไม่มีที่สิ้นสุด แต่ทั้งเวลาและพื้นที่เก็บข้อมูลไม่ได้ จำกัด ไว้ พวกเขาจะมีค่าสูงสุดสำหรับการคำนวณที่คำนวณได้ทุกครั้ง แต่ไม่มีข้อ จำกัด ว่าค่านั้นจะมีขนาดใหญ่เพียงใด ความจริงที่ว่าคอมพิวเตอร์จริงจะหมด RAM ในที่สุดมันวาวที่นี่; แน่นอนว่านี่เป็นข้อ จำกัด สำหรับคอมพิวเตอร์ทางกายภาพใด ๆ แต่ก็เห็นได้ชัดและไม่สนใจทฤษฎี "กำลังคำนวณ" ของเครื่อง นอกจากนี้เราไม่สนใจว่าต้องใช้เวลานานแค่ไหนจริง ๆ ดังนั้นเครื่องขนาดเล็กของเราสามารถใช้เวลาและสถานที่จำนวนเท่าใดก็ได้
... และอื่น ๆ
หนึ่งจุดสุดท้ายที่น่าประหลาดใจก็คือว่าเช่นง่ายๆสิ่งที่ง่ายสามารถทำทุกอย่างคอมพิวเตอร์จริงใด ๆ เท่าที่จะนึกออกอาจเคยในจักรวาลทั้งประสบความสำเร็จ (เพียงมากช้าลง) - อย่างน้อยเท่าที่เรารู้ว่าวันนี้