ฉันรู้ว่าในภาษาการเขียนโปรแกรมที่จำเป็นห่วงในขณะที่ทำก็เพียงพอในการสร้างโฟลว์การควบคุมเพื่อสร้างภาษาทัวริงที่สมบูรณ์ (เท่าที่โฟลว์การควบคุมดำเนินไป . ส่วนสำคัญของคำถามของฉันคือ: วนรอบในขณะที่ทำมีอำนาจการคำนวณเช่นเดียวกับวนรอบขณะทำ? กล่าวอีกนัยหนึ่งคือภาษาทัวริงจะสมบูรณ์หากไม่สามารถข้ามคำแนะนำทั้งหมดได้
ฉันรู้ว่าความหมายบางอย่างของที่นี่อาจจะคลุมเครือเล็กน้อยดังนั้นขอให้ฉันวลีคำถามจริงด้วยตัวอย่างเฉพาะ:
Brainfuck (BF) เป็น Turing tarpit ที่มีการควบคุมการไหลเพียงลูปแบบ while-do ซึ่งแสดงว่า[...]
(มีสเป็คภาษาสมบูรณ์ที่ด้านล่างของคำถามในกรณีที่คุณไม่คุ้นเคยกับ Brainfuck) ลองกำหนด * ภาษา BF ใหม่ที่,.+-<>
มีความหมายเช่นเดียวกับใน BF แต่แทนที่จะ[]
เรามี{}
ซึ่งหมายถึงการทำในขณะที่ห่วง นั่นคือความแตกต่างเพียงอย่างเดียวของ BF คือว่าทุกลูปจะถูกดำเนินการอย่างน้อยหนึ่งครั้งก่อนที่จะข้ามการทำซ้ำต่อไป
BF * ทัวริงเสร็จสมบูรณ์หรือไม่ ถ้าเป็นเช่นนั้นฉันจะสนใจว่าฉันจะแปล BF เป็น BF * ได้อย่างไร ถ้าไม่ใช่ฉันจะพิสูจน์ได้อย่างไร
ข้อสังเกตของฉัน:
- ไม่ใช่ทุกโปรแกรม BF ที่สามารถแปลเป็น BF * ตัวอย่างเช่นเป็นไปไม่ได้ที่จะเขียนโปรแกรมใน BF * ซึ่งอาจจะหรืออาจไม่อ่านหรือพิมพ์ค่า - หากโปรแกรมอาจพิมพ์ค่าหนึ่งค่าหรือมากกว่านั้นมันจะพิมพ์อย่างน้อยหนึ่งค่าเสมอ อย่างไรก็ตามอาจมีชุดย่อยของทัวริงที่สมบูรณ์ซึ่งสามารถแปลเป็น BF * ได้
- เราไม่สามารถแปล
[f]
(ซึ่งf
บางโปรแกรมโดยเฉพาะ Brainfuck ซึ่งประกอบด้วยเท่านั้น+-[]<>
) เป็น(ในความพยายามที่จะยกเลิกผลกระทบของการวนซ้ำครั้งแรก) เนื่องจาก) การทำงานที่คำนวณไม่ได้ทุกอันมีค่าผกผันและ b) แม้ว่ามันจะทำไม่จำเป็นต้องมีลูปน้อยกว่าดังนั้นการใช้ขั้นตอนนี้ซ้ำ ๆ จะไม่รับประกันว่าจะยุติในครั้งแรกf-1{f}
f-1
f
นี่คือภาพรวมโดยย่อของภาษา Brainfuck Brainfuck ทำงานบนเทปที่ไม่มีที่สิ้นสุดซึ่งแต่ละเซลล์มีค่าไบต์เริ่มแรกเป็นศูนย์ มีโอเวอร์โฟลว์พันรอบดังนั้นการเพิ่ม 255 จะให้ 0 และในทางกลับกัน ภาษาประกอบด้วย 8 คำแนะนำ:
+ Increment the current cell.
- Decrement the current cell.
> Move tape head to the right.
< Move tape head to the left.
, Input a character from STDIN into the current cell.
. Output the current cell as a character to STDOUT.
[ If the current cell is zero, jump past the matching ].
] If the current cell is non-zero, jump back to just behind the matching [.
[]
ไม่ได้กำหนดวง "ในขณะที่" ใน BF อย่างแน่นอน เช่นเดียวกับในตารางของคุณวงเล็บปีกกาซ้ายและขวาประเมินเซลล์ปัจจุบันเป็นศูนย์ / ไม่เป็นศูนย์ ดังนั้นคำอธิบายที่แน่นอนของ{}
ตรรกะการประเมินผลที่สอดคล้องกันคืออะไร? แนะนำเพิ่มเติมโต้ตอบ / การอภิปรายในวิทยาการคอมพิวเตอร์สำหรับการพูดคุย นอกจากนี้ "การสังเกต" ของคุณก็เหมือน "สมมุติฐาน" หรือ "ข้อเสนอ" โดยไม่มีข้อพิสูจน์
{}
จะทำให้{
ไม่มีอะไรทำเลยและเช่นเดียวกับ}
]
ฉันจะไม่มีเวลามากในสองสามวันถัดไป แต่ฉันจะเข้าร่วมแชทเมื่อฉันหาเวลา
{}
และรับไป[]
เป็น BF * ทัวริงเสร็จสมบูรณ์ ด้วยความเข้าใจว่า BF []
เป็นสิ่งก่อสร้างเพียงบางสิ่งบางอย่างที่ค่อนข้างเหมือน / คล้ายคลึงกับห่วงในขณะที่ทำในทัวริง