เมื่อใดที่เราสามารถพูดได้ว่าสองโปรแกรมนั้นแตกต่างกัน


15

ไตรมาสที่ 1 เมื่อใดที่เราสามารถพูดได้ว่าสองโปรแกรม (เขียนด้วยภาษาโปรแกรมบางอย่างเช่น C ++) แตกต่างกันอย่างไร

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

ไตรมาสที่ 2 โปรแกรมและอัลกอริทึมเป็นวัตถุชนิดเดียวกันหรือไม่ ถ้าไม่คำจำกัดความของอัลกอริทึมคืออะไรและแตกต่างจากคำจำกัดความของโปรแกรมอย่างไร เมื่อใดที่เราสามารถบอกได้ว่าอัลกอริธึมทั้งสองนั้นเท่ากัน?


ปัญหามอร์ฟิซึ่มส์ของโปรแกรม? ไม่มีใครถามว่า "โปรแกรมนี้ isomorphic กับโปรแกรมที่หยุดหรือไม่" และกู้คืนปัญหาการหยุดชะงักหรือไม่ หากเรา จำกัด ตัวเองให้เข้าสู่ปัญหาโปรแกรมการกระโดดเชือกนี่ไม่ใช่แค่กราฟมอร์ฟิซึม?
user834

5
เมื่อสองอัลกอริทึมเหมือนกันคืออะไร? arxiv.org/abs/0811.0811
sdcvvc

1
มันจะไม่ขึ้นอยู่กับบริบททั้งหมดเหรอ? การได้รับปรัชญาเล็กน้อยที่นี่ แต่เก้าอี้สลักเกลียวและเก้าอี้สลักเกลียวคว่ำเป็นสิ่งเดียวกันทางร่างกาย แต่ไม่เหมือนกันในแง่ของความคิดของเก้าอี้
Rei Miyasaka

ปิดหัวข้อเล็กน้อย แต่เนื่องจากบทพิสูจน์เป็นโปรแกรม ... gowers.wordpress.com/2007/10/04/…
Radu GRIGore

1
บทความต่อไปนี้เกี่ยวข้องมาก เมื่อไม่นานมานี้ฉันเพิ่งผ่านมันไปได้ แต่ Blass และ Gurevic มักจะเขียนได้ดีมาก (ฉันแค่จำการอ่านสิ่งอื่นไม่ได้โดย Dershowitz โดยที่ไม่ได้บอกว่ามันอ่านไม่ออก) research.microsoft.com/en-us/um/people/gurevich/Opera/192.pdfเมื่ออัลกอร์ทสองคนเป็นเช่นเดียวกัน ANDREAS BLASS, NACHUM DERSHOWITZ และ Yuri GUREVICH
kasterma

คำตอบ:


18

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

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


โดยทั่วไปแล้ว IO และผลข้างเคียงไม่ได้รับการกล่าวถึงในขั้นตอนวิธีดั้งเดิม
กราฟิลส์

15

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

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

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

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

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

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


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

α

1
αα

1
@ SamTobin-Hochstadt ตกลงให้เราลืม "ปกติ" ความรู้สึกที่ฉันได้รับคือคุณกำลังพูดในสิ่งเดียวกันกับที่นีลพูดซึ่งค่อนข้างดีในความคิดของฉัน ความคิดของคุณซึ่งยังคลุมเครือสำหรับฉันสามารถทำให้เป็นทางการได้ในกรอบของ Neel โดยเลือกประเภทของการสังเกตที่ถูกต้องและบริบทของโปรแกรมที่ถูกต้อง
Uday Reddy

1
λλx.xλY.Y

2

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

ฉันขอโทษถ้านี่ไร้เดียงสา ฉันไม่ได้ทำการวิจัย PL


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