มีใครสร้างระบบจริงที่เขียนโปรแกรมคอมพิวเตอร์จากสเปค?


17

มีใครเคยเขียนระบบ (ซอฟต์แวร์หรือคำอธิบายโดยละเอียดบนกระดาษพร้อมตัวอย่างง่ายๆ) ที่สร้างโปรแกรมคอมพิวเตอร์หรือไม่? ฉันป้อนและสร้างโปรแกรมที่แสดงรายการหมายเลขเฉพาะน้อยกว่า 10 ถูกกำหนดเป็น อาจารย์บอกว่าพวกเขาทำได้ แต่ไม่มีใครให้ตัวอย่างที่สมบูรณ์จริง ๆPRผมม.อี(x)x<10PRผมม.อี(x)

1<xAs.เสื้อ.1<AA<xx=A×B, กับ A,Bยังไม่มีข้อความ

13
คุณหมายถึงคอมไพเลอร์สำหรับภาษาโปรแกรมทั่วไปหรือไม่?
Sasho Nikolov

1
สวัสดี - ยินดีต้อนรับสู่ cstheory! น่าเสียดายที่คำถามของคุณไม่ใช่คำถามระดับการวิจัยทางวิทยาการคอมพิวเตอร์เชิงทฤษฎีและอยู่นอกหัวข้อในเว็บไซต์นี้

จริงๆแล้วนี่เป็นคำถามที่ดีที่อยู่ด้านบนของการวิจัยในปัจจุบันและมีแนวโน้มมาก อย่างไรก็ตามบ่อยครั้งยากที่จะระบุสิ่งที่คุณต้องการอย่างแม่นยำ หากคุณจัดการเพื่อระบุมันแล้วคุณต้องมีระบบที่จะพิสูจน์ว่ามันทำให้รู้สึกว่ามันเป็นไปได้และที่จะต้องมีการพิสูจน์ทางคณิตศาสตร์ จากหลักฐานที่แสดงว่าโปรแกรมที่ทำนั้นสามารถดึงข้อมูลได้ แต่การวิจัยสำหรับการพิสูจน์อัตโนมัติและการแยกโปรแกรมยังอยู่ในช่วงวัยทารกแม้ว่าจะก้าวหน้าไปมาก คุณอาจมองหาตัวอย่างที่Coqบน wikipedia.- - - cc @LevReyzin
babou

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

2
สาขาวิทยาการคอมพิวเตอร์ที่รวบรวมสิ่งที่ฉันถามคุณเรียกว่าการสังเคราะห์โปรแกรมและเป็นงานวิจัยที่กระตือรือร้น
Huck Bennett

คำตอบ:


11

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

มันเกี่ยวข้องอย่างยิ่งกับผลลัพธ์ในตรรกะเรียกว่าCurry-Howard correspondance (หรือ isomorphism) ที่แสดงว่าโปรแกรมคอมพิวเตอร์และการพิสูจน์ทางคณิตศาสตร์มีความคล้ายคลึงกันมาก

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

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

จากหลักฐานนั้นสามารถแยกโปรแกรมที่คำนวณรายการสำคัญที่ต้องการซึ่งระบุไว้ในตอนแรก

หลายระบบได้รับการพัฒนาในอดีตเพื่ออธิบายแนวคิดเหล่านี้ หนึ่งในสิ่งที่รู้จักกันดีคือLCFโดยRobin Milnerผู้สร้างภาษา MLเพื่อจุดประสงค์นั้น หนึ่งในระบบที่ทันสมัยที่สุดในปัจจุบันคือ Coq

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


9

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

อย่างจริงจังคำตอบของ babou นั้นดี แต่ฉันก็จะแนะนำให้ตรวจสอบพื้นที่ของประเภทที่ขึ้นอยู่กับ มีหนังสือที่ค่อนข้างดีโดยใช้ Coq (ข้อจำกัดความรับผิดชอบฉบับเต็ม: เขียนโดยเพื่อนของฉัน) แต่ก็มี Epigram, Agda และ Idris Isabelle / HOL ก็คุ้มค่าที่จะเช็คเอาท์

ทั้งหมดนี้ขึ้นอยู่กับแคลคูลัสของสิ่งก่อสร้าง หากคุณต้องการทราบพื้นฐานทางทฤษฎีให้ค้นหาทฤษฎีประเภท Martin-Löf มีการแนะนำที่ดีรอบ ๆ


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

4

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


1

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

หนึ่งในพื้นที่ที่ดูเหมือนจะกล่าวถึง "ตัวอย่างที่มีค่าน้อยกว่า 10" ที่คุณให้ไว้โดยเฉพาะคือการจำกัด การเขียนโปรแกรมซึ่งพยายามค้นหาวิธีแก้ไขปัญหาที่เกี่ยวข้องกับข้อ จำกัด บางประการ

คุณอาจต้องการลองใช้ECLiPSeสำหรับการนำระบบดังกล่าวไปใช้ (โอเพ่นซอร์ส) โดยเฉพาะ


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