คำถามติดแท็ก formal-methods

5
มีระบบตรวจสอบอย่างเป็นทางการที่มีคำอธิบายประกอบสำหรับภาษาการเขียนโปรแกรมที่ใช้งานได้จริงหรือไม่?
ACSL (ภาษาข้อกำหนดของ Ansi C) เป็นข้อกำหนดสำหรับรหัส C ซึ่งมีหมายเหตุประกอบเป็นความคิดเห็นพิเศษที่ช่วยให้สามารถตรวจสอบรหัส C ได้อย่างเป็นทางการ ฉันไม่ได้ดูมัน แต่ฉันคิดว่าวิธีการอย่างเป็นทางการที่ใช้ในการตรวจสอบACSLจะคล้ายกับ Hoare Logic สำหรับภาษาที่ใช้งานได้จริงเช่น Haskell ฉันไม่สามารถจินตนาการได้ว่าจะใช้วิธีการแบบใดในการยืนยันที่เป็นทางการ มีใครทำสิ่งที่คล้ายกับACSLแต่สำหรับภาษาทำงานบริสุทธิ์? ถ้าไม่ได้มีการวิจัยใด ๆ เกี่ยวกับการตรวจสอบอย่างเป็นทางการในรูปแบบคำอธิบายประกอบข้อมูลจำเพาะสำหรับภาษาทำงาน ฉันรู้ว่ามีการพิมพ์ที่ต้องพึ่งพาซึ่งรองรับหลายภาษา (Agda, Idris, ฯลฯ ... ) แต่ในการพิมพ์ที่ขึ้นอยู่กับ Haskell นั้นเป็นเรื่องยากโดยไม่ต้องใช้ตัวช่วยพิมพ์ (ไม่สามารถอ่านได้บ้าง) ด้วยความคิดนั้นและเนื่องจาก Haskell มีการสนับสนุนห้องสมุดที่ดีกว่า Agda และ Idris ฉันจึงเชื่อว่าระบบดังกล่าวสำหรับการตรวจสอบการทำงานอย่างเป็นทางการอาจมีประโยชน์ แต่ฉันไม่ทราบว่ามีการทำวิจัยนี้หรือไม่

2
อัลกอริทึมสามารถทำนายความซับซ้อนของเวลาในระดับใดที่โปรแกรมอินพุตโดยพลการ
ลังเลปัญหากล่าวว่ามันเป็นไปไม่ได้ที่จะเขียนโปรแกรมที่สามารถตรวจสอบว่าหยุดโปรแกรมอื่นสำหรับโปรแกรมการป้อนข้อมูลเป็นไปได้ทั้งหมด อย่างไรก็ตามฉันสามารถเขียนโปรแกรมที่สามารถคำนวณเวลาทำงานของโปรแกรมที่ชอบได้อย่างแน่นอน for(i=0; i<N; i++) { x = 1; } และคืนค่าความซับซ้อนของเวลาเป็นโดยไม่ต้องเรียกใช้NNN สำหรับโปรแกรมอินพุตอื่น ๆ ทั้งหมดมันจะคืนค่าสถานะที่ระบุว่าไม่สามารถระบุเวลาที่ซับซ้อนได้ คำถามของฉันคือ: ต้องมีเงื่อนไขอะไรเช่นนี้เราสามารถกำหนดขั้นตอนวิธีความซับซ้อนของเวลาของโปรแกรมที่กำหนดได้ * หากมีการอ้างอิงที่เป็นที่ยอมรับหรือตรวจสอบบทความนี้ฉันจะขอบคุณลิงค์ไปในความคิดเห็น

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

7
เราจะรู้ได้อย่างไรว่าวิธีการทางการทำงาน
เป้าหมายสำคัญของวิธีการที่เป็นทางการคือการพิสูจน์ความถูกต้องของระบบไม่ว่าจะด้วยวิธีอัตโนมัติหรือโดยมนุษย์ อย่างไรก็ตามดูเหมือนว่าแม้ว่าคุณจะสามารถให้การพิสูจน์ความถูกต้องคุณอาจไม่สามารถรับประกันได้ว่าระบบจะไม่ล้มเหลว ตัวอย่างเช่น: ข้อมูลจำเพาะอาจไม่เป็นแบบอย่างของระบบอย่างถูกต้องหรือระบบการผลิตอาจซับซ้อนเกินกว่าที่จะเป็นแบบจำลองหรือระบบอาจมีข้อบกพร่องโดยเนื้อแท้เนื่องจากข้อกำหนดที่ขัดแย้งกัน เทคนิคใดที่เป็นที่รู้จักในการทดสอบว่าข้อกำหนดนั้นเหมาะสมหรือไม่? กระบวนการพิสูจน์อาจมีข้อบกพร่องเช่นกัน! ใครจะรู้ว่ากฎการอนุมานเหล่านั้นถูกต้องและถูกต้องตามกฎหมาย นอกจากนี้การพิสูจน์อาจมีขนาดใหญ่มากและเราจะรู้ได้อย่างไรว่าพวกเขาไม่มีข้อผิดพลาด? นี่คือหัวใจของการวิจารณ์ในเดอมิลโลลิปตันและ "กระบวนการทางสังคมและบทพิสูจน์ทฤษฎีบทและโปรแกรมของ Perlis" นักวิจัยวิธีการอย่างเป็นทางการที่ทันสมัยตอบสนองต่อการวิจารณ์นี้ได้อย่างไร ณ รันไทม์มีเหตุการณ์และปัจจัยหลายอย่างที่อาจส่งผลกระทบต่อระบบอย่างจริงจัง ยกตัวอย่างเช่นรังสีคอสมิกสามารถเปลี่ยนแปลงแรมในรูปแบบที่ไม่สามารถคาดเดาได้และโดยทั่วไปเราไม่รับประกันว่าฮาร์ดแวร์จะไม่ประสบกับข้อผิดพลาดของไบเซนไทน์ซึ่ง Lamport ได้พิสูจน์แล้วว่าเป็นเรื่องยากที่จะทนทาน ดังนั้นความถูกต้องของระบบคงไม่รับประกันว่าระบบจะไม่ล้มเหลว! มีเทคนิคใดที่ทราบกันดีว่ามีความผิดพลาดของฮาร์ดแวร์จริงหรือไม่? ในปัจจุบันการทดสอบเป็นเครื่องมือที่สำคัญที่สุดที่เรามีในการสร้างซอฟต์แวร์นั้น ดูเหมือนว่ามันควรจะเป็นเครื่องมือเสริมที่มีวิธีการอย่างเป็นทางการ อย่างไรก็ตามฉันส่วนใหญ่เห็นการวิจัยซึ่งเน้นทั้งวิธีการหรือการทดสอบอย่างเป็นทางการ สิ่งที่เป็นที่รู้จักกันเกี่ยวกับการรวมทั้งสองเข้าด้วยกัน?

7
ตัวชี้สำหรับแอปพลิเคชัน CS ของตรรกะ
ฉันเป็นนักเรียนที่จบการศึกษาในวิชาคณิตศาสตร์ที่มีพื้นฐานด้านตรรกะที่มั่นคง ฉันเรียนหลักสูตรตรรกะเป็นเวลาหนึ่งปีพร้อมกับหลักสูตรระดับบัณฑิตศึกษาในทฤษฎีแบบ จำกัด และอีกหลักสูตรหนึ่งเป็นการบังคับและตั้งทฤษฎี ตำรา CS ส่วนใหญ่ดูเหมือนจะสมมติเพียงภูมิหลังที่เรียบง่ายมากในตรรกะซึ่งส่วนใหญ่ครอบคลุมพื้นฐานของตรรกะเชิงประพจน์และตรรกะลำดับแรก ฉันต้องการรับพอยน์เตอร์สำหรับใช้งาน CS ที่มีการใช้วัสดุที่หนักกว่าจากตรรกะ สิ่งที่น่าสนใจอย่างหนึ่งของฉันก็คือทฤษฎีประเภทและวิธีการที่เป็นทางการโดยทั่วไป ใครช่วยแนะนำการอ่านที่ดีผ่านหนังสือเบื้องต้นเกี่ยวกับการตรวจสอบรูปแบบและภาษาการเขียนโปรแกรม?

9
จะสร้าง Mission Critical Software ได้อย่างไร
ฉันเรียนรู้วิธีการอย่างเป็นทางการด้วยตนเอง ฉันได้ยินมาว่ามีการใช้วิธีการอย่างเป็นทางการ (และมักใช้เท่านั้น) เพื่อสร้างซอฟต์แวร์ที่มีความสำคัญต่อภารกิจ (เช่นตัวควบคุมเครื่องปฏิกรณ์นิวเคลียร์ตัวควบคุมการบินของอากาศยานตัวควบคุมโพรบอวกาศ) นั่นเป็นเหตุผลที่ฉันสนใจที่จะเรียนรู้: p อย่างไรก็ตามหลังจากเรียนรู้วิธีการที่เป็นทางการ (โดยเฉพาะอย่างยิ่ง LTL, CTL และพี่น้องของพวกเขา) ฉันรู้สึกว่าพวกเขาสามารถใช้เพื่อตรวจสอบความถูกต้องของสเปคเท่านั้น (ความปลอดภัย, ความมีชีวิตชีวา, ความเป็นธรรม ฯลฯ ) แต่วิธีการตรวจสอบว่าซอฟต์แวร์ (ไม่เพียง แต่สเปค) ถูกต้องแน่นอน? ข้อจำกัดความรับผิดชอบ: ฉันเป็นคนงี่เง่า 90% เมื่อพูดถึงวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี ดังนั้นโปรดเมตตาในขณะตอบรับ

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