หลบหนีจากผ้าใบกันน้ำ (ตำรวจ)


9

มันคือ ความท้าทายจากการนิยามภาษาและการพิสูจน์ว่าทัวริงสมบูรณ์

นี่คือด้ายของตำรวจ ด้ายโจรอยู่ที่นี่

ตำรวจ

ในฐานะตำรวจคุณจะเตรียมสองสิ่ง:

  • สเปคอย่างเป็นทางการของภาษาการเขียนโปรแกรมหรือระบบการคำนวณอื่น ๆ (ระบบการคำนวณมีการกำหนดไว้ด้านล่าง)

  • หลักฐานที่แสดงว่าระบบของคุณกำลังทัวริงสมบูรณ์ตามคำจำกัดความที่เข้มงวดด้านล่าง

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

มันคือ ดังนั้นผู้ชนะจะเป็นคำตอบที่มีคะแนนโหวตมากที่สุดและไม่แตกหรือเป็นโมฆะ ความท้าทายคือปลายเปิด - ฉันจะไม่ยอมรับคำตอบ

เพื่อความท้าทายนี้ระบบการคำนวณจะถูกกำหนดเป็นสี่สิ่ง:

  • A P"ชุดโปรแกรม" นี่จะเป็นชุดที่ไม่มีที่สิ้นสุดนับได้เช่นสตริงจำนวนเต็มต้นไม้ไบนารีการกำหนดค่าพิกเซลบนกริดเป็นต้น (แต่ดูข้อ จำกัด ทางเทคนิคด้านล่าง)

  • "ชุดอินพุต" Iซึ่งจะเป็นชุดที่ไม่มีที่สิ้นสุดนับไม่ได้และไม่จำเป็นต้องเป็นชุดเดียวกันกับP(แม้ว่าจะเป็น)

  • "ชุดเอาต์พุต" Oซึ่งในทำนองเดียวกันจะเป็นชุดที่ไม่มีที่สิ้นสุดนับและอาจหรืออาจจะไม่เหมือนPหรือI

  • กำหนดขั้นตอนกลไกสำหรับการผลิตออกoจากโปรแกรมpและใส่iที่p, iและoเป็นสมาชิกของP, IและOตามลำดับ ขั้นตอนนี้ควรเป็นไปตามหลักการสามารถนำไปใช้กับเครื่องทัวริงหรือแบบจำลองนามธรรมอื่น ๆ ของการคำนวณ แน่นอนว่ากระบวนการอาจไม่สามารถหยุดได้ทั้งนี้ขึ้นอยู่กับโปรแกรมและอินพุตของโปรแกรม

ชุดP, IและOจะต้องเป็นเช่นที่คุณสามารถแสดงให้พวกเขาเป็นสตริงในลักษณะที่คำนวณ (สำหรับตัวเลือกที่เหมาะสมที่สุดสิ่งนี้จะไม่สำคัญกฎนี้มีอยู่เพื่อป้องกันคุณจากการเลือกชุดแปลก ๆ เช่นชุดของเครื่องจักรทัวริงที่ไม่หยุด)

ทัวริงสมบูรณ์จะถูกกำหนดดังต่อไปนี้:

  • สำหรับฟังก์ชั่นบางส่วนที่คำนวณได้fจากIถึงOมีโปรแกรมpในPลักษณะที่กำหนดpและอินพุตiเอาต์พุตคือf(i)ถ้าf(i)มีค่า (มิฉะนั้นโปรแกรมจะไม่หยุดทำงาน)

คำว่า "คำนวณ" ในคำนิยามข้างต้นหมายถึง "สามารถคำนวณได้โดยใช้เครื่องทัวริง"

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

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


9
ขออภัยที่การประกวดความนิยม เป็นเกณฑ์การชนะอย่างมีวัตถุประสงค์ การเป็นป๊อป - คอนไม่ได้ท้าทายกับหัวข้อและไม่เคยทำ การสนทนาเมตาครั้งล่าสุดมีความเห็นเป็นเอกฉันท์ที่ +27 ซึ่งเป็นประโยชน์กับเรื่องนี้ดังนั้นแม้ว่าคุณห้าคนอาจจะชอบที่จะแตกต่างกันคุณจริงๆไม่มีขาที่จะยืน เนื่องจากคำถามนี้ถูกปิดกับนโยบายที่ตกลงกันฉันจึงขอให้เปิดใหม่
นาธาเนียล

2
(โปรดทราบว่า WhatWizard ปิดด้วยเหตุผลอื่น)
user202729

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

1
@Mego ฉันลงคะแนนให้ปิดสิ่งนี้ให้กว้างเกินไป แต่ฉันคิดว่านี่เป็นหัวข้อนอกกฎที่มีอยู่สำหรับป๊อป - คอน เราคาดว่าการแข่งขันความนิยมจะมี "สเปคที่ชัดเจนของเป้าหมายที่ต้องทำให้สำเร็จ" คำถามนี้คือการทำ X ในวิธีที่สร้างสรรค์ที่สุด เป็นที่ชัดเจนสำหรับฉันว่าไม่มีวัตถุประสงค์อื่นนอกเหนือจากการเป็นคำตอบที่ถูกต้องและมีการแนบแท็กป๊อปคอนเพื่อเปิดมัน
Ad Hoc Garf Hunter

2
@WhatWizard เป้าหมายที่ต้องทำให้สำเร็จนั้นคือการทำให้ทัวริงไม่ชัดเจนโดยการประเมินที่ไม่ชัดเจนโดยไม่ถูกถอดรหัสภายในหนึ่งสัปดาห์ นั่นไม่ชัดเจนหรือ
นาธาเนียล

คำตอบ:


10

เลขคณิตปิดตา

อาจเป็นภาษาที่ค่อนข้างง่ายที่จะเริ่มด้วยพูดค่อนข้าง (มีข้อ จำกัด ว่าภาษาใดที่ฉันสามารถทำได้ยากเพราะฉันต้องพิสูจน์ว่าทัวริงทำให้ตัวเองสมบูรณ์!)

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

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

สเปค

Blindfolded Arithmetic เป็นภาษาโปรแกรมลึกลับที่มีข้อกำหนดดังต่อไปนี้:

การจัดเก็บข้อมูล

สถานะของโปรแกรมคำนวณทางคณิตศาสตร์ที่ปิดตาประกอบด้วยหกตัวแปรแต่ละตัวสามารถเก็บจำนวนเต็มได้ (ไม่มีการ จำกัด ว่าใหญ่หรือเล็กจำนวนเต็มเหล่านี้จะได้รับคือ. โดยเฉพาะอย่างยิ่งพวกเขาสามารถไปลบ) ตัวแปรที่เรียกว่าa, b, c, d, และe i

ที่จุดเริ่มต้นของโปรแกรมaการeรวมเป็นแต่ละค่าเริ่มต้นเป็น 0 และiเริ่มต้นเป็นจำนวนเต็มบวกที่นำมาจากการป้อนข้อมูลของผู้ใช้ (หากไม่มีอินพุตให้iเตรียมใช้งานเป็น 1)

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

โปรแกรม

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

  • v = v + v
  • v = v - v
  • v = v * v
  • v = v / v

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

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

แต่ละคำสั่งมีความหมายเช่นเดียวกับที่คุณคาดหวังจากสัญกรณ์ซึ่งไม่แตกต่างจากที่ใช้โดยภาษาการเขียนโปรแกรมที่ใช้งานได้จริงส่วนใหญ่: ค่าของตัวแปรที่สองและสามที่กำหนดในคำสั่งจะถูกดำเนินการ / multiply / หารตามลำดับสำหรับคำสั่งทั้งสี่รูปแบบ) ถูกนำไปใช้กับพวกเขาและค่าผลลัพธ์ที่เก็บไว้ในตัวแปรแรก Division ที่นี่คือการหารจำนวนเต็มปัดเศษเป็น 0

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


คุณช่วยตรวจสอบได้ไหมว่าคำตอบของฉันไม่มีอะไรเลย?
user202729

@ user202729: (แสดงความคิดเห็นที่นี่เนื่องจากฉันไม่มีตัวแทนที่จะแสดงความคิดเห็นที่นั่น) คุณไม่สามารถจำลอง "ย้ายถ้าเป็นเท็จ" จาก "พลิก" และ "ย้ายถ้าเป็นจริง" เพราะคุณไม่สามารถเลิกทำการพลิกได้ หลังจากที่คุณย้าย ดังนั้นคุณจะต้องมีวิธีอื่นในการจัดการ (เช่นวิธีการทดสอบการกลับด้านที่ไม่ควรยาก) แม้ว่าจะเป็นข้อพิสูจน์ที่ทัวริงสมบูรณ์ในแง่ของพฤติกรรมที่หยุดชะงัก แต่คำจำกัดความในคำถามต้องให้คุณสามารถทำ I / O ได้เช่นกันดังนั้นคุณต้องพิสูจน์ว่าคุณสามารถทำได้
ais523

ฉันหวังว่าส่วน I / O (ตอนนี้) ก็โอเค ในฐานะที่เป็นปัญหาอื่น ๆ ฉันรู้ว่าภายในถ้าไม่จำเป็นแม้กระทั่งรัฐระดับกลางแก้ปัญหาทั้งหมด (แม้ว่าฉันไม่แน่ใจว่าวิธีการที่คำว่า)
user202729

@ user202729: ยังไม่สมบูรณ์ (เช่นคำถามที่คุณต้องสามารถส่งออกจำนวนลบและคุณยังต้องเปลี่ยนวัตถุประสงค์iเพื่อให้หมายเลขรัฐ - ซึ่งจะ "หยุด" เสมอ - จะไม่ เป็นส่วนหนึ่งของผลลัพธ์) แต่ก็ใกล้พอที่ฉันจะไม่ทำเครื่องหมายสิ่งนี้ว่าปลอดภัยเพราะคุณจะได้รับรอยแตกเต็มเวลาและมีการชี้แจงกฎที่เพียงพอ ฉันไม่ต้องการชนะการท้าทายด้านเทคนิค
ais523

สิ่งนี้อยู่ใกล้กับข้อ จำกัด ที่de.ioccc.org/years-spoiler.html#1992_buzzard.1ใช้ การใช้งานนั้นใช้จำนวนเต็มขนาดคงที่และไม่สมบูรณ์ทัวริงและสิ่งนี้ถูก จำกัด อย่างจริงจังในจำนวนตัวแปรที่คุณมี แต่ฉันคิดว่าการพิสูจน์นั้นคล้ายกัน
b_jonas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.