ภาษาทัวริงทั้งหมดล้วนใช้แทนกันได้


26

หมายเหตุในขณะที่ฉันรู้วิธีการเขียนโปรแกรมฉันค่อนข้างเป็นผู้เริ่มต้นในทฤษฎี CS

ตามคำตอบนี้

ทัวริงสมบูรณ์เป็นแนวคิดนามธรรมของการคำนวณ หากภาษาทัวริงสมบูรณ์แล้วก็สามารถทำการคำนวณใด ๆ ที่ภาษาทัวริงอื่น ๆ สามารถทำได้

และโปรแกรมที่เขียนด้วยภาษาทัวริงที่สมบูรณ์สามารถเขียนใหม่ในภาษาอื่นได้

ตกลง. มันสมเหตุสมผลแล้ว ฉันสามารถแปล (คอมไพล์) C เป็นแอสเซมบลี (และฉันทำมันทุกวัน!) และสามารถแปลแอสเซมบลีเป็น C (คุณสามารถเขียนเครื่องเสมือนใน C) และเช่นเดียวกันกับภาษาอื่น ๆ - คุณสามารถรวบรวมภาษาใด ๆ ในแอสเซมบลีแล้วเรียกใช้ใน VM ที่เขียนในภาษาอื่น

แต่สามารถใด ๆโปรแกรมที่เขียนในภาษาทัวริงสมบูรณ์นำมาเขียนใหม่อีก?

เกิดอะไรขึ้นถ้าสมัชชาของฉันมี opcode LIGHTBUTTON? ฉันไม่สามารถเลียนแบบภาษานั้นในระบบ (ภาษา) โดยไม่ใช้หลอดไฟ

ตกลง. คุณจะบอกว่าเนื่องจากเรากำลังเผชิญกับทฤษฎีคอมพิวเตอร์เราไม่ได้พูดถึงข้อ จำกัด ของอุปกรณ์ทางกายภาพ

แต่ถ้าเป็นอุปกรณ์ที่ไม่มีการคูณล่ะ แผนก? เพื่อความรู้ที่ดีที่สุดของฉัน (แม้ว่านี่จะเป็นคำถามสำหรับคณิตศาสตร์.) เราไม่สามารถเลียนแบบการคูณ (และไม่หารแน่นอน) ด้วยการบวกและการลบ [1]

ดังนั้น "ภาษาทัวริงที่สมบูรณ์" (ซึ่งสามารถเพิ่มลบและกระโดด) เลียนแบบภาษาอื่นซึ่งสามารถเพิ่มลบคูณและกระโดดได้อย่างไร

แก้ไข

[1] เมื่อตัวเลขจริงโดยพลการ


33
ตัวเลขจริงเป็นของอาณาจักรของ Hyper-Turing-Computation เครื่องทัวริงไม่สามารถจัดการกับตัวเลขจริงดังนั้นพวกเขาจะไม่เกี่ยวข้องกับทัวริงสมบูรณ์
Jörg W Mittag

3
ที่เกี่ยวข้อง: การชุมนุมภาษาการเรียนการสอนชุดที่มีเพียงหนึ่งการเรียนการสอนยังคงพอมีประสิทธิภาพในการสร้างคอมพิวเตอร์สากล: en.wikipedia.org/wiki/One_instruction_set_computer ตัวอย่างเช่น "ลบและสาขาถ้าน้อยกว่าหรือเท่ากับศูนย์" ด้วยตัวถูกดำเนินการหน่วยความจำ มันจะช้ากว่าเมื่อเทียบกับ x86 ที่ทันสมัย ​​แต่อัตราส่วนประสิทธิภาพนั้นมี จำกัด สำหรับโปรแกรมใด ๆ
Peter Cordes

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

2
@PeterCordes: ฉันคิดว่าเมื่อคุณบอกว่าอัตราส่วนมี จำกัด คุณก็หมายความว่างานใด ๆ ที่เสร็จสิ้นในเวลา จำกัด ทั้งจะทำในเวลา จำกัด ทั้งสอง - ไม่ว่าสำหรับเครื่องใด ๆ (ไม่รวมอินพุต) จะมี ขีด จำกัด อัน จำกัด ใด ๆ ที่อัตราส่วนจะสูงขึ้นสำหรับอินพุตบางตัว ฉันคิดว่าเราสามารถสร้างเครื่องจักรทัวริงที่สมบูรณ์ซึ่งเราสามารถเลือกอินพุตที่จะทำให้อัตราส่วนสูงตามอำเภอใจ - อาจไม่ใช่ฟังก์ชั่นที่คำนวณได้ของขนาดอินพุต
supercat

6
ฉันไม่ทราบว่าคุณได้รับความคิดที่ว่า "ไม่มีใครเลียนแบบการคูณ (และไม่หารอย่างแน่นอน) ด้วยการบวกและการลบ" มันถูกสอนจากโรงเรียนประถมเมื่อเราเรียนรู้วิธีการคูณ
phuclv

คำตอบ:


55

ทัวริงสมบูรณ์บอกว่าสิ่งหนึ่งและสิ่งเดียวเท่านั้น: รูปแบบของการคำนวณคือทัวริงสมบูรณ์หากการคำนวณใด ๆ ที่สามารถสร้างแบบจำลองโดยเครื่องทัวริงยังสามารถเป็นแบบจำลองโดยรูปแบบที่

ดังนั้นการคำนวณแบบจำลองของทัวริงจักรคืออะไร? อลันทัวริงและเพื่อนร่วมงานทุกคนสนใจฟังก์ชั่นตัวเลขธรรมชาติเป็นอย่างแรกและสำคัญที่สุด ดังนั้นเครื่องทัวริง (และλ-แคลคูลัส, แคลคูลัส SK combinator, ฟังก์ชั่นμ-recursive, ... ) พูดถึงความสามารถในการคำนวณของฟังก์ชันบนตัวเลขธรรมชาติเท่านั้น หากคุณไม่ได้พูดถึงฟังก์ชั่นเกี่ยวกับตัวเลขธรรมชาติแนวคิดของทัวริงสมบูรณ์ไม่แม้แต่จะสมเหตุสมผลก็ไม่สามารถใช้ได้

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

และแน่นอนว่าไม่ใช่ทุกฟังก์ชั่นของตัวเลขธรรมชาติที่คำนวณ เครื่องทัวริงสามารถคำนวณฟังก์ชั่นบางอย่างบนตัวเลขธรรมชาติเท่านั้นλ-แคลคูลัสสามารถคำนวณฟังก์ชันบางอย่างกับตัวเลขธรรมชาติได้แคลคูลัส SK combinator สามารถคำนวณฟังก์ชันบางอย่างบนตัวเลขธรรมชาติได้เท่านั้น น่าแปลกที่ (หรือไม่) ปรากฎว่าแบบจำลองการคำนวณทุกรูปแบบ (ที่จริง ๆ แล้วในจักรวาลทางกายภาพของเรา) สามารถคำนวณฟังก์ชันเดียวกันกับตัวเลขธรรมชาติ (อย่างน้อยสำหรับแบบจำลองทั้งหมดที่เราพบจนถึงปัจจุบัน) [หมายเหตุ: เห็นได้ชัดว่ามีรูปแบบการคำนวณที่อ่อนแอกว่าแต่เรายังไม่พบรุ่นที่แข็งแกร่งกว่ายกเว้นบางอย่างที่ไม่สอดคล้องกับจักรวาลทางกายภาพของเราเช่นแบบจำลองที่ใช้ตัวเลขจริงหรือการเดินทางข้ามเวลา]

ความจริงนี้ว่าหลังจากใช้เวลานานในการค้นหาแบบจำลองที่แตกต่างกันจำนวนมากเราพบว่าทุกครั้งที่พวกเขาสามารถคำนวณฟังก์ชั่นที่เหมือนกันได้อย่างแน่นอนเป็นพื้นฐานสำหรับวิทยานิพนธ์คริสตจักรทัวริงซึ่งกล่าวว่า แบบจำลองการคำนวณนั้นมีพลังเท่าเทียมกันและทุกคนก็จับความคิด "อุดมคติ" ของสิ่งที่มันหมายถึงการ "คำนวณ" (นอกจากนี้ยังมีแง่มุมที่สองที่มากกว่าด้านปรัชญาของ CTT นั่นคือมนุษย์ที่ติดตามอัลกอริธึมยังสามารถคำนวณฟังก์ชั่นเดียวกับที่ TM สามารถคำนวณได้และไม่มีอีกต่อไป)

อย่างไรก็ตามสิ่งนี้ไม่ได้พูดอะไรเกี่ยวกับ

  • รุ่นต่างๆนั้นมีประสิทธิภาพเพียงใด
  • วิธีที่สะดวกพวกเขาจะใช้
  • สิ่งอื่น ๆ ที่พวกเขาสามารถทำนอกเหนือจากฟังก์ชั่นการประมวลผลในจำนวนธรรมชาติ

และนั่นคือจุดที่ความแตกต่างระหว่างโมเดลการคำนวณ (และภาษาการเขียนโปรแกรม) ที่แตกต่างกันเข้ามาเล่น

O(sizearray)O(sizearray2)sizearraysizearray

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

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

ในการตอบคำถามเฉพาะของคุณ:

แต่สามารถใด ๆโปรแกรมที่เขียนในภาษาทัวริงสมบูรณ์นำมาเขียนใหม่อีก?

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

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

เกิดอะไรขึ้นถ้าสมัชชาของฉันมี opcode LIGHTBUTTON? ฉันไม่สามารถเลียนแบบภาษานั้นในระบบ (ภาษา) โดยไม่ใช้หลอดไฟ

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

เมื่อตัวเลขจริงโดยพลการ

ทัวริงสมบูรณ์เกี่ยวข้องเฉพาะกับฟังก์ชั่นคำนวณตัวเลขธรรมชาติมันไม่ได้เกี่ยวข้องกับตัวเลขจริง

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

  1. มันไม่ได้เป็นอุปสรรค์ที่สูงมาก ทั้งหมดที่คุณต้องIF, GOTO, WHILEและตัวแปรจำนวนเต็มเดียว (สมมติตัวแปรสามารถถือจำนวนเต็มขนาดใหญ่โดยพล) หรือการเรียกซ้ำ มีหลายสิ่งหลายอย่างที่ทัวริงสมบูรณ์ การ์ดเกมเวทย์มนตร์: การรวบรวมทัวริงเสร็จสมบูรณ์ CSS3 เสร็จสมบูรณ์แล้ว sendmailแฟ้มการกำหนดค่าเป็นทัวริงสมบูรณ์ Intel x86 MMU นั้นได้รับการพัฒนาอย่างสมบูรณ์ MOVคำสั่งIntel x86 นั้นเสร็จสมบูรณ์แล้ว ภาพเคลื่อนไหว PowerPoint นั้นสมบูรณ์แบบทัวริง Excel (ไม่มีสคริปต์ใช้เฉพาะสูตร) ​​เท่านั้นทัวริงสมบูรณ์ โปรโตคอลการกำหนดเส้นทาง BGP นั้นเสร็จสมบูรณ์แล้ว sedทัวริงเสร็จสมบูรณ์ mod_rewriteกฎApache เป็นทัวริงที่สมบูรณ์ Google สำหรับ " (โดยบังเอิญหรือน่าประหลาดใจ) ทำให้สมบูรณ์"เพื่อค้นหาตัวอย่างที่น่าสนใจอื่น ๆ หากเกือบทุกอย่างเป็นทัวริงสมบูรณ์การทัวริงสมบูรณ์หยุดเป็นคุณสมบัติที่น่าสนใจ
  2. ไม่จำเป็นต้องมีประโยชน์ สิ่งที่มีประโยชน์มากมายไม่สมบูรณ์ทัวริง CSS ก่อน 3 รุ่นไม่ทัวริงสมบูรณ์ (และความจริงที่ว่า CSS3 คือไม่ได้ใช้จริงโดยทุกคน) SQL ก่อนปี 1999 ยังไม่เสร็จสมบูรณ์ แต่ก็มีประโยชน์อย่างมาก ภาษา C Programming โดยไม่ต้องห้องสมุดเพิ่มเติมดูเหมือนจะไม่เป็นทัวริงสมบูรณ์ ภาษาที่พิมพ์ขึ้นอยู่กับความหมายมากหรือน้อยตามคำนิยามไม่ใช่ทัวริงที่สมบูรณ์ แต่คุณสามารถเขียนระบบปฏิบัติการเว็บเซิร์ฟเวอร์และเกมในภาษาเหล่านั้นได้

Edwin Brady ผู้เขียน Idris ใช้คำว่า "Tetris-complete" เพื่อพูดคุยเกี่ยวกับบางแง่มุมเหล่านี้ การเป็นเกมเตตริสเสร็จสมบูรณ์นั้นไม่ได้มีการกำหนดอย่างเข้มงวด (นอกเหนือจาก "สามารถใช้ในการติดตั้งเกมเตทริส" ได้อย่างชัดเจน) แต่มันครอบคลุมสิ่งต่าง ๆ เช่นการอยู่ในระดับสูงพอและชัดเจนพอที่จะเขียนเกมได้โดยไม่ต้องบ้า โต้ตอบกับโลกภายนอก (อินพุทและเอาท์พุท) ความสามารถในการแสดงผลข้างเคียงความสามารถในการเขียนเหตุการณ์วนรอบสามารถแสดงปฏิกิริยาโต้ตอบแบบอะซิงโครนัสและการเขียนโปรแกรมพร้อมกันสามารถโต้ตอบกับระบบปฏิบัติการได้ เพื่อโต้ตอบกับห้องสมุดต่างประเทศ (ในคำอื่น ๆ : ความสามารถในการโทรและถูกเรียกด้วยรหัส C) และอื่น ๆ สิ่งเหล่านี้เป็นคุณสมบัติที่น่าสนใจของภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไปมากกว่าทัวริง


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


7
ฉันชอบคำตอบนี้จริง ๆ แต่ฉันคิดว่ามันคุ้มค่าที่จะสังเกตว่าเราสามารถนำเสนอสิ่งต่าง ๆ ที่น่าสนใจด้วยตัวเลขตามธรรมชาติ ตัวอย่างเช่นเราสามารถแสดงสตริงตามจำนวนธรรมชาติเราสามารถแสดงกราฟตามจำนวนธรรมชาติเราสามารถแสดงสถานะทั้งหมดของหน่วยความจำของคอมพิวเตอร์ด้วยจำนวนธรรมชาติ จำนวนจริงสามารถเขียนเป็นฟังก์ชั่นกับตัวเลขธรรมชาติและ (หลาย ๆ ) ฟังก์ชั่นกับตัวเลขธรรมชาติสามารถเขียนได้ด้วยตัวเลขธรรมชาติ ดังนั้นการ จำกัด ฟังก์ชั่นจากตัวเลขธรรมชาติถึงตัวเลขธรรมชาติไม่ใช่ข้อ จำกัด ที่ยิ่งใหญ่ - เว้นแต่จะมืดและคุณต้องการให้คอมพิวเตอร์เปิดไฟ
Theodore Norvell

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

ทัวริงและเพื่อนร่วมงานของเขาสนใจฟังก์ชั่นเกี่ยวกับตัวเลขธรรมชาติ แต่เครื่องทัวริงไม่ได้จัดการกับตัวเลขจริงๆพวกเขาจัดการกับสตริงของสัญลักษณ์ เห็นได้ชัดว่าคุณสามารถตีความสัญลักษณ์เส้นขอบ จำกัด ในตัวอักษร จำกัด ที่รู้จักกันว่าเป็นตัวเลขธรรมชาติ แต่ TM ไม่ได้ทำสิ่ง "ตัวเลข" โดยตรงกับอินพุตของพวกเขาพวกเขาเพียงแค่จัดการ "หลัก" จริง ๆ แล้วมันต้องการตรรกะสักเล็กน้อยเพื่อเปลี่ยนจากคำอธิบายมาตรฐานของ TM ไปเป็น "ฟังก์ชั่นกับจำนวนธรรมชาติ"; เมื่อทำงานกับ TM คุณเข้ารหัสตัวเลขธรรมชาติเป็นสตริงไม่ใช่สตริงเป็นตัวเลข
Ben

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

9
@ TheodoreNorvell ในเรื่องของการเข้ารหัสตัวเลขจริงด้วยจำนวนธรรมชาติ ในความเป็นจริงตัวเลขจริงเกือบทั้งหมดไม่สามารถเข้ารหัสด้วยตัวเลขธรรมชาติได้ ชุดของจำนวนจริงที่สามารถเข้ารหัสด้วยตัวเลขธรรมชาติโดยอาศัยการเข้ารหัสด้วยตัวเลขธรรมชาตินั้นนับไม่ถ้วน และเนื่องจากมันนับไม่ถ้วนนับไม่ถ้วนชุดจึงมีค่าเป็นศูนย์ มันค่อนข้างไม่ตรงไปตรงมาที่จะบอกว่าเราสามารถแสดงจำนวนจริงโดยทั่วไปด้วยจำนวนธรรมชาติเนื่องจากเราสามารถแสดงเศษส่วนเล็ก ๆ น้อย ๆ ของพวกเขาหรือแม่นยำยิ่งขึ้น: 0%
Shufflepants

9

แน่นอนคุณสามารถใช้การคูณด้วยการบวกและการลบ:

/* Assume b is positive for simplicity */
int multiply(int a, int b) {
  int res = 0;
  while (b > 0) { res += a; b -= 1; }
  return res;
}

ความจริงที่ว่าคุณอาจจะไม่ทำเช่นนั้นไม่ได้ทำให้น้อยลง

การหารยากกว่า:

/* Assume a and b are positive for simplicity */
int divide(int a, int b) {
  int res = 0;
  while (a >= b) { res += 1; a -= b; }
  return res;
}

และคุณคิดว่าการคูณและการหารนั้นดำเนินการโดยวงจรของ CPU จริงหรือไม่ คำแนะนำ: มันไม่ใช่ตารางการค้นหาขนาดใหญ่ มันมีประสิทธิภาพมากกว่าข้างต้นเนื่องจากมีการใช้การเลื่อนบิต แต่ก็มีการใช้งานพื้นฐานในแง่ของการบวกและลบ


4
2precision

7
@Touring: คุณรู้ไหมว่าเลขทศนิยมนั้นมีให้ก่อนที่จะมีตัวประมวลผลร่วมจุดลอยตัว
rici

6

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

จากนี้ไปคำตอบที่ยืนยันว่าเครื่องนามธรรมสองเครื่องนั้นเทียบเท่ากันไม่ได้ช่วยให้คุณตอบคำถามว่าเครื่องทั้งสองนั้นมีความใกล้เคียงกันหรือไม่

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


แต่คำถามถามเกี่ยวกับภาษา มันกล่าวถึงเครื่องจักรโดยเฉพาะ แต่เพียงเพราะเขาไม่ได้ตระหนักว่าแทบจะไม่มีเครื่องจักรจริงทำงานกับจำนวนจริง
Shufflepants

3

nm=n+n(m1)m/n=1+(mn)/n n

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

22n=n+n) ใช้การคูณด้วย2การวนซ้ำและการลบเราสามารถใช้อัลกอริทึมแบบยุคลิดสำหรับการหารด้วยสองได้อย่างง่ายดาย ด้วยการคูณและการหารด้วยสองเราสามารถใช้อัลกอริทึมรัสเซียสำหรับการคูณโดยสังเกตว่าม.×2n=2ม.×n และ ม.×(2n+1)=ม.+2ม.×n. ด้วยการคูณโดยพลการในที่สุดเราก็สามารถใช้อัลกอริทึมแบบยุคลิดแบบเต็มสำหรับการหาร


3

tl; dr - เครื่องทัวริงเป็นเพียงคำอธิบายเชิงตรรกะขั้นพื้นฐานสำหรับการทำงานของระบบโลจิคัลทั่วไป พวกเขาสามารถทำสิ่งต่าง ๆ ส่วนใหญ่ที่เราสามารถอธิบายรวมถึงการเรียก opcodes พิเศษและสร้างการดำเนินการทางคณิตศาสตร์


เกิดอะไรขึ้นถ้าสมัชชาของฉันมี opcode LIGHTBUTTON? ฉันไม่สามารถเลียนแบบภาษานั้นในระบบ (ภาษา) โดยไม่ใช้หลอดไฟ

ในโมเดลทัวริงสัญลักษณ์เช่นLIGHTBUTTONopcode เป็นเพียงสตริงในสิ่งที่ตัวอักษรคอมพิวเตอร์ทัวริงใช้

ดังนั้นเครื่องทัวริงจะรับผิดชอบในการผลิตสตริง"LIGHTBUTTON"หรือค่าจำนวนเต็มบางส่วนที่สอดคล้องกับ opcode นั้น ไม่ว่ากิจการภายนอกจะทำหน้าที่หรือไม่ไม่ใช่ธุรกิจของทัวริง

โปรแกรม C มีข้อ จำกัด เหมือนกัน นี่คือโปรแกรม C เท่านั้นที่สามารถเรียกใช้ opcode ได้LIGHTBUTTONแต่ไม่ว่า CPU จริง ๆ จะทำการดำเนินการที่เกี่ยวข้องกับ opcode นั้นขึ้นอยู่กับ CPU หรือไม่


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

Yup, เครื่องจักรทัวริงสามารถทำสิ่งเหล่านั้นได้แม้ในจำนวนจริงเท่าที่ตรรกะที่มนุษย์สามารถอธิบายได้ เครื่องทัวริงอาจจะเป็นง่ายๆเป็นกฎข้อที่ 110 โทรศัพท์มือถืออัตโนมัติ

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

ดังนั้นในการรับอุปกรณ์ทัวริงสมบูรณ์ในการทำคณิตศาสตร์เพียงแค่ต้องเขียนโปรแกรมด้วยวิธีนั้น

ในความเป็นจริงคุณสามารถคำนวณได้จริงบนเครื่องทัวริง! เพื่อแสดงสิ่งนี้นี่คือ WolframAlpha กำลังคำนวณπ-π=0. ฉันหมายถึงแน่นอนเครื่องจักรทัวริงไม่สามารถขยายได้อย่างไม่ จำกัดπในเวลา จำกัด แต่ก็ไม่เป็นไร ไม่มีใครขยายอนันต์πรวมถึงมนุษย์ด้วย แต่ถ้าเราให้เครดิตมนุษย์กับการทำคณิตศาสตร์ด้วยจำนวนจริงเช่นπ-π=0จากนั้นเราจะต้องให้เครดิตเครื่องจักรทัวริงด้วยเหมือนกัน


3

แต่โปรแกรมที่เขียนด้วยภาษาทัวริงสมบูรณ์สามารถเขียนใหม่เป็นภาษาอื่นได้หรือไม่?

หากอินพุตไปยังโปรแกรมเป็นลำดับของบิตยาวโดยพลการและเอาต์พุตเป็นลำดับของบิตยาวโดยพลการดังนั้น YES สมมติว่าคุณมีเวลาและพลังงานในการเขียนใหม่และคุณไม่สนใจเกี่ยวกับประสิทธิภาพและคุณมีหน่วยความจำกายภาพเพียงพอสำหรับการใช้งานทั้งสอง

ข้อพิจารณาเชิงปฏิบัติที่หมายถึงสองภาษาทัวริงที่สมบูรณ์ไม่สามารถใช้แทนกันได้ ได้แก่ :

  • รองรับอินพุตและเอาต์พุตชนิดต่าง ๆ (เช่นการเข้าถึงฐานข้อมูล SQL)

  • พวกเขามีไลบรารีประเภทข้อมูลที่แตกต่างกัน (เช่นการสนับสนุนสตริง Unicode)

  • พวกเขาให้กระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกันเหมาะสำหรับงานที่แตกต่างกัน (เช่นวัตถุ, กระทู้, coroutines, ฟังก์ชั่นชั้นหนึ่ง)

  • พวกเขามีห้องสมุดฟังก์ชั่นที่แตกต่างกัน (เช่นการแยกวิเคราะห์ XML และอนุกรม)


1

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

คุณสามารถขยายภาษาทัวริงที่สมบูรณ์ด้วยการทำงานของฮาร์ดแวร์ใด ๆ ที่คุณต้องการ (ในทางเทคนิคนี่คือวิธีfputcและการfgetcทำงานใน C) หากคุณใช้สองภาษาทัวริงที่สมบูรณ์และขยายด้วยการดำเนินการเฉพาะฮาร์ดแวร์ที่เหมือนกันพวกเขายังคงใช้แทนกันได้ ดังนั้นภาษาแอสเซมบลีของคุณพร้อมLIGHTBULBการทำงานจึงมีประสิทธิภาพมากกว่าทัวริง คุณอาจจะบอกว่ามันมากกว่าทัวริงสมบูรณ์ LIGHTBULBในการทำให้ภาษาอื่นเหมือนกันกับภาษานั้นก็ต้องทำการทัวริงให้สมบูรณ์LIGHTBULBด้วย วิธีที่ง่ายที่สุดในการทำเช่นนั้นคือการเพิ่มLIGHTBULBแบบดั้งเดิม / คำสั่ง / ฟังก์ชั่น / ฯลฯ เข้าไป

นี่คือเหตุผลที่การใช้งาน C โดยทั่วไปสนับสนุนการประกอบแบบอินไลน์หรือเอกสารวิธีการเรียกฟังก์ชั่นที่เขียนในแอสเซมเบลอร์และทำไมการใช้งานของภาษาอื่นโดยทั่วไปให้วิธีการเรียกฟังก์ชั่น

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