นิพจน์ "ทัวริงสมบูรณ์" หมายถึงอะไร
คุณสามารถให้คำอธิบายง่ายๆโดยไม่ต้องลงรายละเอียดทางทฤษฎีมากเกินไปได้ไหม
นิพจน์ "ทัวริงสมบูรณ์" หมายถึงอะไร
คุณสามารถให้คำอธิบายง่ายๆโดยไม่ต้องลงรายละเอียดทางทฤษฎีมากเกินไปได้ไหม
คำตอบ:
นี่คือคำอธิบายสั้น ๆ :
ระบบทัวริงที่สมบูรณ์หมายถึงระบบที่สามารถเขียนโปรแกรมที่จะหาคำตอบ (แม้ว่าจะไม่มีการรับประกันเกี่ยวกับรันไทม์หรือหน่วยความจำ)
ดังนั้นหากมีคนพูดว่า "สิ่งใหม่ของฉันคือการทำให้เสร็จสมบูรณ์" ซึ่งหมายความว่าในหลักการ (แม้ว่ามักจะไม่ได้ใช้ในทางปฏิบัติ) ก็สามารถใช้เพื่อแก้ปัญหาการคำนวณใด ๆ
บางครั้งมันเป็นเรื่องตลก ... ผู้ชายคนหนึ่งเขียนเครื่องมือจำลองทัวริงใน vi ดังนั้นจึงเป็นไปได้ที่จะบอกว่า vi เป็นเครื่องมือคำนวณเพียงอย่างเดียวที่จำเป็นในโลก
นี่คือคำอธิบายที่ง่ายที่สุด
Alan Turing สร้างเครื่องที่สามารถใช้โปรแกรมรันโปรแกรมนั้นและแสดงผลลัพธ์บางอย่าง แต่เขาต้องสร้างเครื่องจักรต่าง ๆ สำหรับโปรแกรมต่าง ๆ ดังนั้นเขาจึงสร้าง "Universal Turing Machine" ที่สามารถใช้โปรแกรมใด ๆ และเรียกใช้
ภาษาการเขียนโปรแกรมคล้ายกับเครื่องเหล่านั้น (แม้ว่าเสมือน) พวกเขาใช้โปรแกรมและเรียกใช้ ตอนนี้ภาษาการเขียนโปรแกรมเรียกว่า "ทัวริงสมบูรณ์" ถ้ามันสามารถเรียกใช้โปรแกรมใด ๆ (โดยไม่คำนึงถึงภาษา) ว่าเครื่องทัวริงสามารถเรียกใช้เวลาและหน่วยความจำเพียงพอ
ตัวอย่างเช่นสมมติว่ามีโปรแกรมที่ใช้ตัวเลข 10 ตัวและเพิ่มเข้าไป เครื่องทัวริงสามารถเรียกใช้โปรแกรมนี้ได้อย่างง่ายดาย แต่ตอนนี้ลองนึกดูว่าด้วยเหตุผลบางประการภาษาการเขียนโปรแกรมของคุณไม่สามารถทำการเพิ่มเติมที่เหมือนกันได้ สิ่งนี้จะทำให้ "ทัวริงไม่สมบูรณ์" (เพื่อพูด) ในทางตรงกันข้ามถ้ามันสามารถเรียกใช้โปรแกรมใด ๆ ที่เครื่องทัวริงสากลสามารถเรียกใช้แล้วก็ทัวริงเสร็จสมบูรณ์
ภาษาการเขียนโปรแกรมที่ทันสมัยส่วนใหญ่ (เช่น Java, JavaScript, Perl, ฯลฯ ) ล้วนเป็นทัวริงที่สมบูรณ์เพราะพวกเขาแต่ละคนใช้คุณสมบัติทั้งหมดที่จำเป็นในการเรียกใช้โปรแกรมเช่นการเพิ่มการคูณเงื่อนไขอื่น ๆ คำสั่งส่งคืน ข้อมูลและอื่น ๆ
อัปเดต: คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับโพสต์บล็อกของฉัน: "JavaScript เสร็จสมบูรณ์แล้ว" - อธิบาย
จากวิกิพีเดีย :
ทัวริงสมบูรณ์ชื่อหลังจากอลันทัวริงมีความสำคัญในทุก ๆ การออกแบบที่เป็นไปได้สำหรับอุปกรณ์คอมพิวเตอร์จนถึงขั้นสูงที่สามารถจำลองโดยเครื่องจักรทัวริงทัวริง - การสังเกตที่เป็นที่รู้จักกันในชื่อวิทยานิพนธ์โบสถ์ทัวริง ดังนั้นโดยทั่วไปเครื่องที่สามารถทำหน้าที่เป็นเครื่องทัวริงสากลสามารถทำการคำนวณใด ๆ ที่คอมพิวเตอร์โปรแกรมอื่น ๆ ที่มีความสามารถ อย่างไรก็ตามสิ่งนี้ไม่เกี่ยวข้องกับความพยายามในการเขียนโปรแกรมสำหรับเครื่องเวลาที่ใช้ในการคำนวณเครื่องหรือความสามารถใด ๆ ที่เครื่องอาจมีซึ่งไม่เกี่ยวข้องกับการคำนวณ
ในขณะที่เครื่องจักรทัวริงที่สมบูรณ์แบบมีความเป็นไปได้ทางร่างกายไม่มากนักเนื่องจากพวกมันต้องการพื้นที่เก็บข้อมูลไม่ จำกัด แต่ทัวริงสมบูรณ์มักเกิดจากเครื่องจักรทางกายภาพหรือภาษาโปรแกรมที่เป็นสากลหากพวกเขามีพื้นที่เก็บข้อมูลไม่ จำกัด คอมพิวเตอร์สมัยใหม่ทุกเครื่องมีความสมบูรณ์แบบในลักษณะนี้
ฉันไม่ทราบว่าคุณสามารถเป็นคนที่ไม่ใช่ด้านเทคนิคได้มากไปกว่านั้นยกเว้นว่าการพูดว่า "การทำให้สมบูรณ์หมายถึง" สามารถตอบปัญหาที่คำนวณได้ซึ่งให้เวลาและพื้นที่เพียงพอ ""
ภาษาทัวริงที่สมบูรณ์เป็นสิ่งที่สามารถทำการคำนวณได้ วิทยานิพนธ์โบสถ์ทัวริงระบุว่าการคำนวณใด ๆ performable สามารถทำได้โดยเครื่องทัวริง เครื่องทัวริงเป็นเครื่องที่มีหน่วยความจำเข้าถึงโดยสุ่มอนันต์และแน่นอน 'โปรแกรมที่สั่งเมื่อมันควรอ่านการเขียนและการย้ายข้ามหน่วยความจำที่เมื่อมันควรจะยุติมีผลบางอย่างและสิ่งที่มันควรจะทำอย่างไรต่อไป อินพุตไปยังเครื่องทัวริงจะถูกใส่ในหน่วยความจำก่อนที่จะเริ่ม
เครื่องทัวริงสามารถตัดสินใจบนพื้นฐานของสิ่งที่จะได้เห็นในความทรงจำ - The 'ภาษา' ที่สนับสนุนเท่านั้น+
, -
, *
และ/
ในจำนวนเต็มไม่ได้ทัวริงสมบูรณ์เพราะมันไม่สามารถให้ทางเลือกบนพื้นฐานของข้อมูลของตน แต่เครื่องทัวริงสามารถ
เครื่องทัวริงสามารถทำงานได้ตลอดไป - ถ้าเราใช้ Java, Javascript, หรือ Python และลบความสามารถในการวนลูป, GOTO หรือการเรียกใช้ฟังก์ชั่นใด ๆ มันจะไม่สมบูรณ์แบบเพราะมันไม่สามารถทำการคำนวณเองได้ ไม่เคยเสร็จสิ้น Coqเป็นนักทฤษฎีบทที่ไม่สามารถแสดงโปรแกรมที่ไม่ยุติดังนั้นจึงไม่สมบูรณ์ทัวริง
เครื่องทัวริงสามารถใช้หน่วยความจำที่ไม่มีที่สิ้นสุด - ภาษาที่เหมือนกับจาวา แต่จะยุติลงเมื่อใช้หน่วยความจำมากกว่า 4 กิกะไบต์จะไม่สมบูรณ์เนื่องจากเครื่องทัวริงสามารถใช้หน่วยความจำที่ไม่มีที่สิ้นสุด นี่คือเหตุผลที่เราไม่สามารถสร้างเครื่องทัวริงได้จริงแต่ Java ยังคงเป็นภาษาทัวริงที่สมบูรณ์เพราะภาษา Java ไม่มีข้อ จำกัด ที่ป้องกันไม่ให้ใช้หน่วยความจำที่ไม่มีที่สิ้นสุด นี่เป็นเหตุผลหนึ่งที่ทำให้นิพจน์ทั่วไปไม่สมบูรณ์
เครื่องทัวริงมีหน่วยความจำเข้าถึงโดยสุ่ม - ภาษาที่ให้คุณทำงานกับหน่วยความจำผ่านเท่านั้นpush
และpop
การทำงานกับสแต็กจะไม่สมบูรณ์ทัวริง ถ้าฉันมี 'ภาษา' ที่อ่านสตริงครั้งเดียวและสามารถใช้หน่วยความจำโดยการผลักดันและ popping จากกองก็สามารถบอกได้ว่าทุกคน(
ในสตริงมีของตัวเอง)
ในภายหลังโดยการผลักดันเมื่อเห็น(
และ popping )
เมื่อเห็น อย่างไรก็ตามมันไม่สามารถบอกฉันได้ว่าทุกคน(
มีของตัวเองใน)
ภายหลังและทุกคน[
มีของตัวเองใน]
ภายหลัง (โปรดทราบว่า([)]
ตรงตามเกณฑ์นี้ แต่([]]
ไม่ได้) เครื่องทัวริงสามารถใช้หน่วยความจำเข้าถึงโดยสุ่มเพื่อติดตาม()
และ[]
แยกจากกัน แต่ภาษานี้ที่มีเพียงสแต็กไม่สามารถทำได้
เครื่องทัวริงสามารถจำลองเครื่องทัวริงอื่น ๆ - เครื่องทัวริงเมื่อได้รับ 'โปรแกรม' ที่เหมาะสมสามารถใช้ 'โปรแกรม' ของโปรแกรมทัวริงอีกเครื่องหนึ่งและจำลองบนอินพุตโดยพลการ หากคุณมีภาษาที่ไม่ได้รับอนุญาตให้ใช้งานล่าม Python มันจะไม่ทำให้ทัวริงสมบูรณ์
หากภาษาของคุณมีหน่วยความจำเข้าถึงโดยสุ่มไม่สิ้นสุดการดำเนินการตามเงื่อนไขและการดำเนินการซ้ำในบางรูปแบบอาจเป็นไปได้ว่าทัวริงสมบูรณ์ มีระบบที่แปลกใหม่มากขึ้นที่ยังสามารถบรรลุทุกสิ่งที่เครื่องทัวริงสามารถทำได้ซึ่งทำให้ทัวริงสมบูรณ์เช่นกัน:
cyclic tag system
universal cyclic tag system
ดังนั้น - บทความไม่ได้พิสูจน์ความสมบูรณ์ของ SQL ทัวริง (หรือฉันเข้าใจผิดบางอย่าง)
ทัวริงสมบูรณ์เป็นหนึ่งข้อกำหนดที่รัดกุมการสอบถามซ้ำไม่ จำกัด
ไม่ จำกัด ด้วยหน่วยความจำ
ฉันคิดเกี่ยวกับเรื่องนี้อย่างอิสระ แต่นี่คือการสนทนาของการยืนยัน คำจำกัดความของฉันของ LSPให้บริบทเพิ่มเติม
คำตอบอื่น ๆ ที่นี่ไม่ได้กำหนดสาระสำคัญพื้นฐานของทัวริงสมบูรณ์
while (p) { /* ... */ }
หมายถึง "ฉันกำลังระบุความเท่าเทียมกันระหว่างการเรียกซ้ำแบบทั่วไปและความสามารถในการคำนวณใด ๆ ที่เป็นไปได้" วิทยานิพนธ์คริสตจักรเป็นเรื่องที่แตกต่างกันมากและควรจริงๆจะกล่าวถึงแยกต่างหาก
ทัวริงหมายที่สมบูรณ์แบบที่มันเป็นอย่างน้อยที่มีประสิทธิภาพเป็นเครื่องทัวริง นี่หมายความว่าทุกสิ่งที่สามารถคำนวณได้โดยเครื่องทัวริงสามารถคำนวณได้โดยระบบทัวริงที่สมบูรณ์
ยังไม่มีใครพบระบบที่ทรงพลังยิ่งกว่าเครื่องทัวริง ดังนั้นในขณะนี้การพูดว่าระบบคือทัวริงสมบูรณ์เหมือนกับการพูดว่าระบบนั้นทรงพลังเท่ากับระบบคอมพิวเตอร์ใด ๆ ที่รู้จัก (ดูวิทยานิพนธ์คริสตจักรทัวริง )
ในแง่ที่ง่ายที่สุดระบบทัวริงสมบูรณ์สามารถแก้ปัญหาการคำนวณใด ๆ ที่เป็นไปได้
หนึ่งในข้อกำหนดหลักคือขนาดรอยขีดข่วนจะไม่ถูก จำกัด และเป็นไปได้ที่จะย้อนกลับเพื่อเข้าถึงการเขียนก่อนหน้าไปยัง Scratchpad
ดังนั้นในทางปฏิบัติไม่มีระบบทัวริงสมบูรณ์
ค่อนข้างบางระบบประมาณทัวริงสมบูรณ์โดยการสร้างแบบจำลองหน่วยความจำที่ไม่ได้ จำกัด และดำเนินการคำนวณใด ๆ ที่เป็นไปได้ที่สามารถพอดีกับหน่วยความจำของระบบ
ฉันคิดว่าความสำคัญของแนวคิด "ทัวริงสมบูรณ์" อยู่ในความสามารถในการระบุเครื่องคอมพิวเตอร์ (ไม่จำเป็นต้องเป็นคอมพิวเตอร์ "เครื่องกล" / ไฟฟ้า ") ที่สามารถมีกระบวนการที่จะแยกแยะคำแนะนำ" ง่าย "ประกอบด้วยเรียบง่ายและเรียบง่ายขึ้น คำแนะนำที่เครื่อง Universal สามารถตีความและดำเนินการได้
ฉันขอแนะนำ The Annotated Turing
@ Mark ฉันคิดว่าสิ่งที่คุณกำลังอธิบายคือการผสมผสานระหว่างคำอธิบายของ Universal Turing Machine และ Turing Complete
สิ่งที่ทัวริงเสร็จสมบูรณ์ในทางปฏิบัติจะเป็นเครื่อง / กระบวนการ / การคำนวณที่สามารถเขียนและแสดงเป็นโปรแกรมที่จะดำเนินการโดย Universal Machine (คอมพิวเตอร์เดสก์ท็อป) แม้ว่าจะไม่คำนึงถึงเวลาหรือการจัดเก็บ แต่อย่างอื่น
สิ่งที่ฉันเข้าใจในคำง่าย ๆ :
Turing Complete:ภาษาโปรแกรม / โปรแกรมที่สามารถทำการคำนวณได้คือ Turing complete
ตัวอย่างเช่น :
คุณสามารถเพิ่มตัวเลขสองตัวโดยใช้ Just HTMLได้หรือไม่ (ตอบคือ ' ไม่ ' คุณต้องใช้จาวาสคริปต์เพื่อทำการเพิ่ม) ดังนั้น HTML จึงไม่สมบูรณ์
ภาษาเช่น Java, C ++, Python, Javascript, Solidity สำหรับ Ethereum และ Turing Complete เพราะคุณสามารถทำการคำนวณได้เช่นการเพิ่มตัวเลขสองตัวโดยใช้ภาษานี้
หวังว่านี่จะช่วยได้
มันสมบูรณ์ถ้ามันสามารถทดสอบและสาขา (มี 'ถ้า')
เครื่องทัวริงต้องการให้โปรแกรมใด ๆ สามารถทำการทดสอบสภาพได้ นั่นคือพื้นฐาน
พิจารณาผู้เล่นเปียโนม้วน เปียโนผู้เล่นสามารถเล่นเพลงที่มีความซับซ้อนสูง แต่ไม่มีเหตุผลใด ๆ ที่มีเงื่อนไขในเพลง มันทัวริงเสร็จสมบูรณ์
ตรรกะเชิงเงื่อนไขเป็นทั้งพลังและอันตรายของเครื่องจักรที่ทัวริงสมบูรณ์
เปียโนม้วนรับประกันว่าจะหยุดทุกครั้ง ไม่มีการรับประกันดังกล่าวสำหรับ TM สิ่งนี้เรียกว่า“ ปัญหาการหยุดชะงัก”
ดังที่Waylon Flinn กล่าวว่า :
ทัวริงสมบูรณ์หมายความว่าอย่างน้อยก็มีประสิทธิภาพเท่ากับเครื่องทัวริง
ฉันเชื่อว่าสิ่งนี้ไม่ถูกต้องระบบจะทัวริงเสร็จสมบูรณ์หากมันมีประสิทธิภาพเท่ากับเครื่องทัวริงนั่นคือการคำนวณทุกอย่างที่ทำโดยเครื่องสามารถทำได้โดยระบบ .
ในแง่ของภาษาเชิงปฏิบัติที่คุ้นเคยกับโปรแกรมเมอร์ส่วนใหญ่วิธีการตรวจสอบทัวริงสมบูรณ์คือถ้าภาษาอนุญาตหรืออนุญาตให้จำลองแบบซ้อนกันในขณะที่งบ (เมื่อเทียบกับภาษาปาสกาลสไตล์สำหรับงบกับขอบเขตคงที่)
สามารถป้อนค่าละติจูดและลองจิจูดของฐานข้อมูลเชิงสัมพันธ์ของสถานที่และถนนและคำนวณเส้นทางที่สั้นที่สุดระหว่างพวกเขา - ไม่ นี่เป็นปัญหาหนึ่งที่แสดงให้เห็นว่า SQL นั้นไม่ได้ทำให้เสร็จ
แต่ C ++ สามารถทำได้และสามารถแก้ไขปัญหาใด ๆ ได้ ดังนั้นมันจึงเป็น