มีใครเคยเขียนระบบ (ซอฟต์แวร์หรือคำอธิบายโดยละเอียดบนกระดาษพร้อมตัวอย่างง่ายๆ) ที่สร้างโปรแกรมคอมพิวเตอร์หรือไม่? ฉันป้อนและสร้างโปรแกรมที่แสดงรายการหมายเลขเฉพาะน้อยกว่า 10 ถูกกำหนดเป็น อาจารย์บอกว่าพวกเขาทำได้ แต่ไม่มีใครให้ตัวอย่างที่สมบูรณ์จริง ๆ
มีใครเคยเขียนระบบ (ซอฟต์แวร์หรือคำอธิบายโดยละเอียดบนกระดาษพร้อมตัวอย่างง่ายๆ) ที่สร้างโปรแกรมคอมพิวเตอร์หรือไม่? ฉันป้อนและสร้างโปรแกรมที่แสดงรายการหมายเลขเฉพาะน้อยกว่า 10 ถูกกำหนดเป็น อาจารย์บอกว่าพวกเขาทำได้ แต่ไม่มีใครให้ตัวอย่างที่สมบูรณ์จริง ๆ
คำตอบ:
นี่เป็นหัวข้อการวิจัยที่กระฉับกระเฉงแม้ว่าจะเป็นระบบอัตโนมัติเต็มรูปแบบของการสร้างโปรแกรมอาจมีข้อ จำกัด ที่แท้จริง (แต่มนุษย์เป็นสิ่งที่ดีกว่าหรือไม่) แต่แนวคิดนี้ยังคงมีประโยชน์อย่างมากในการช่วยเหลืออย่างมากในการสร้างโปรแกรมโดยใช้กลไกหลายขั้นตอนและตรวจสอบความถูกต้องของการสร้างโปรแกรมโดยอัตโนมัติ
มันเกี่ยวข้องอย่างยิ่งกับผลลัพธ์ในตรรกะเรียกว่าCurry-Howard correspondance (หรือ isomorphism) ที่แสดงว่าโปรแกรมคอมพิวเตอร์และการพิสูจน์ทางคณิตศาสตร์มีความคล้ายคลึงกันมาก
ดังนั้นแนวคิดก็คือระบบจะใช้ข้อกำหนดของโปรแกรมของคุณเป็นทฤษฎีบทที่จะพิสูจน์ ในกรณีที่เป็นตัวอย่างของคุณมันจะเป็นอย่างไร (อย่างไม่เป็นทางการ): "มีชุดของจำนวนเฉพาะทั้งหมดที่น้อยกว่า 10"
จากนั้นคุณจะพยายามพิสูจน์ทฤษฎีบทนั้นและระบบที่มีอยู่จะช่วยคุณในการทำข้อพิสูจน์โดยอัตโนมัติบางส่วนอาจเป็นข้อพิสูจน์ทั้งหมดและทำให้แน่ใจว่าคุณจะไม่ทำผิดพลาด
จากหลักฐานนั้นสามารถแยกโปรแกรมที่คำนวณรายการสำคัญที่ต้องการซึ่งระบุไว้ในตอนแรก
หลายระบบได้รับการพัฒนาในอดีตเพื่ออธิบายแนวคิดเหล่านี้ หนึ่งในสิ่งที่รู้จักกันดีคือLCFโดยRobin Milnerผู้สร้างภาษา MLเพื่อจุดประสงค์นั้น หนึ่งในระบบที่ทันสมัยที่สุดในปัจจุบันคือ Coq
มีตัวอย่างที่สมบูรณ์แบบบางอันค่อนข้างซับซ้อน คุณอาจพบบางอย่างในบทความต่อไปนี้แม้ว่ามันจะไม่ง่ายในการอ่านและต้องใช้ความรู้ขั้นสูงของลอจิก
คำตอบที่กระดิก: ใช่ แต่ในขณะที่เขียนสำหรับโปรแกรมที่ไม่สำคัญที่สุดข้อมูลจำเพาะดูเหมือนจะยากที่จะเขียนและแก้ปัญหาตามที่โปรแกรมจะเป็น
อย่างจริงจังคำตอบของ babou นั้นดี แต่ฉันก็จะแนะนำให้ตรวจสอบพื้นที่ของประเภทที่ขึ้นอยู่กับ มีหนังสือที่ค่อนข้างดีโดยใช้ Coq (ข้อจำกัดความรับผิดชอบฉบับเต็ม: เขียนโดยเพื่อนของฉัน) แต่ก็มี Epigram, Agda และ Idris Isabelle / HOL ก็คุ้มค่าที่จะเช็คเอาท์
ทั้งหมดนี้ขึ้นอยู่กับแคลคูลัสของสิ่งก่อสร้าง หากคุณต้องการทราบพื้นฐานทางทฤษฎีให้ค้นหาทฤษฎีประเภท Martin-Löf มีการแนะนำที่ดีรอบ ๆ
การออกไปสัมผัสกันที่นี่ผู้สร้างโปรแกรม (เช่นระบบที่ให้คำอธิบายระดับสูงของบางสิ่งบางอย่างในภาษาพิเศษบางอย่าง) นั้นอยู่ตลอดไป คอมไพเลอร์ใด ๆ เป็นหนึ่งในนั้นเช่นเดียวกับเครื่องแยกวิเคราะห์จำนวนมาก ย้อนกลับไปในระบบวันที่เรียกว่า "ภาษารุ่นที่สาม" ซึ่งสร้าง (ส่วนใหญ่) รหัสของแอปพลิเคชันทางธุรกิจทั่วไปที่ให้คำอธิบายระดับสูงและแคตตาล็อกของข้อมูลที่มีอยู่เป็นที่นิยม
การเขียนโปรแกรมลอจิกและโดยทั่วไปแล้วการเขียนโปรแกรมปฎิบัติการเป็นเสมือนสิ่งที่คุณเสนอ: กล่าวคือจากสเปคเชิงตรรกะให้ส่งกลับผลลัพธ์ที่ตอบสนองสเปคนั้น
หนึ่งในพื้นที่ที่ดูเหมือนจะกล่าวถึง "ตัวอย่างที่มีค่าน้อยกว่า 10" ที่คุณให้ไว้โดยเฉพาะคือการจำกัด การเขียนโปรแกรมซึ่งพยายามค้นหาวิธีแก้ไขปัญหาที่เกี่ยวข้องกับข้อ จำกัด บางประการ
คุณอาจต้องการลองใช้ECLiPSeสำหรับการนำระบบดังกล่าวไปใช้ (โอเพ่นซอร์ส) โดยเฉพาะ