Image Courtsey : กลุ่ม Forsyte
วิธีการอย่างเป็นทางการเป็นเทคนิคทางคณิตศาสตร์ที่ใช้ในการออกแบบ การตรวจสอบ และข้อกำหนดเฉพาะของปัญหาซอฟต์แวร์และฮาร์ดแวร์ สิ่งเหล่านี้เป็นส่วนย่อยของ การวิจัยทฤษฎีภาษาการเขียนโปรแกรม ที่ใช้ศึกษาปัญหาวิทยาการคอมพิวเตอร์ที่ซับซ้อน
การวิเคราะห์โดยวิธีทางการโดยทั่วไปเกี่ยวข้องกับขั้นตอนเหล่านี้:
Formal Specification
Formal Proofs
Model Checking
Abstraction
การพัฒนาการพิสูจน์อย่างเป็นทางการและการตรวจสอบแบบจำลองจะดำเนินการโดยใช้ผู้พิสูจน์ทฤษฎีบทเชิงโต้ตอบซึ่งมักเรียกว่าผู้ช่วยการพิสูจน์ นามธรรมคือการสร้างความสัมพันธ์ที่ดีเชิงโครงสร้างระหว่างส่วนต่างๆ ของแบบจำลอง
นี่คือความพยายามของฉันในการรวบรวมรายการสื่อการอ่าน วิดีโอ และเครื่องมือที่เป็นประโยชน์ ควบคู่ไปกับความท้าทายที่จะเกิดขึ้นในภาคสนาม
ฉันพยายามทำให้เนื้อหาเน้นไปที่การวิจัยในปัจจุบันและการประยุกต์ใช้ในอุตสาหกรรมมากขึ้น ผู้ที่กำลังมองหาคอลเลคชันทางวิชาการล้วนๆ ต้องอ้างอิงวิธีการอย่างเป็นทางการในการศึกษา - Jeremy Avigad
ผู้อ่านคาดว่าจะมีความรู้พื้นฐานเกี่ยวกับ ทฤษฎีประเภท อยู่บ้าง สามารถดูข้อมูลเชิงลึกทางวิชาการเพิ่มเติมได้ที่นี่ Learn-tt
รากฐานซอฟต์แวร์ : ฉันขอแนะนำอย่างยิ่งให้สิ่งนี้เป็นเนื้อหาเริ่มต้นสำหรับการดำน้ำลึกในสาขานี้ หนังสือเล่มนี้มีประโยชน์มากในการสร้างแนวคิดพื้นฐานและเป็นการแนะนำที่ดีในสาขานี้ แนวคิดที่มีภาพประกอบสวยงามพร้อมตัวอย่างให้ฝึกฝนตลอดทั้งการสร้างทฤษฎีบทแบบโต้ตอบพิสูจน์ความสนุกสนานในการเรียนรู้
FRAP - Adam Chlipala : หนังสือที่ช่วยให้คุณเข้าใจและให้เหตุผลถึงความถูกต้องของโปรแกรมอย่างเป็นทางการ ตัวอย่างโครงสร้างข้อมูลและอัลกอริธึมที่ได้รับแรงบันดาลใจจากภาษาที่จำเป็น ( C ) ช่วยได้อย่างมากในการเริ่มคิดถึงการตรวจสอบอย่างเป็นทางการ
การเขียนโปรแกรมที่ผ่านการรับรองพร้อมประเภทการพึ่งพา - Adam Chlipala : หนึ่งใน theoretical books
ที่ดีที่สุดในการเรียนรู้ทฤษฎีบทการพิสูจน์โดยใช้ coq
การตรวจสอบอย่างเป็นทางการ - Jacques Fleuriot : หลักสูตรนี้เกี่ยวข้องกับการพิสูจน์ทฤษฎีบทโดยใช้เครื่องมือที่ได้รับการพัฒนาเพิ่มเติม เช่น ตัวแก้ปัญหา SAT และ SMT
การตีความบทคัดย่อ - Patrick Cousot เนื้อหาที่ดีที่สุดที่มีอยู่ในทฤษฎีการตีความบทคัดย่อ ให้การวิเคราะห์ทางคณิตศาสตร์ที่สมบูรณ์และบริสุทธิ์ของการกลายพันธุ์ของโปรแกรม พฤติกรรมของโปรแกรมซึ่งเป็นการปรับเปลี่ยนความสัมพันธ์อย่างต่อเนื่องระหว่างโครงสร้างทางคณิตศาสตร์เชิงนามธรรมต่างๆ ได้รับการอธิบายและพิสูจน์แล้ว!!
ตรรกะและการพิสูจน์ - การแนะนำ CMU และแบบลีน : หลักสูตรนี้ออกแบบที่ CMU และยังทำหน้าที่เป็นสื่อเบื้องต้นสำหรับการพิสูจน์ทฤษฎีบทแบบลีน
หากคุณรู้สึกว่าต้องการข้อมูลเชิงลึกทางทฤษฎีเพิ่มเติม โปรดดูหมายเหตุด้านบน
coq: เครื่องพิสูจน์ทฤษฎีบทที่ได้รับความนิยมและใช้กันอย่างแพร่หลาย รองรับฟีเจอร์มากมายรวมถึงการแยก ML, การทำแพ็กเกจโปรเจ็กต์ (การสร้างโปรเจ็กต์และ Makefile) มีสื่อ how-to
มากมายที่ใช้ coq ในการทำให้เป็นทางการ ใครๆ ก็อาจพบว่าทฤษฎีบท 100 ข้อใน Coq น่าสนใจมาก
ยัน: Theorem Prover ที่ค่อนข้างใหม่โดย Microsoft Research มีบทช่วยสอนแบบโต้ตอบที่ดี เริ่มต้นได้ง่าย
เครื่องตรวจสอบแบบจำลอง PRISM : เป็นเครื่องตรวจสอบแบบจำลองที่พัฒนาโดย University of Oxford
Nuprl : เครื่องพิสูจน์ทฤษฎีบท โดย Cornell ภายใต้โครงการ Proof Refinement Logic
Agda: ผู้ช่วยพิสูจน์อักษรที่ค่อนข้างเป็นผู้ใหญ่ มีคุณสมบัติคล้ายกับ Coq เรียนรู้ได้ง่ายหลังจากมีประสบการณ์ใน coq มาบ้างแล้ว
อิสซาเบล: มันเป็นทฤษฎีบทอันเก่าแก่ มีการใช้งานคอร์ลอจิกที่ดีแต่ขาดคุณสมบัติอื่นๆ ที่เกี่ยวข้องกับ UX
VCC : เครื่องมือตรวจสอบเชิงกลสำหรับโปรแกรม C ที่ทำงานพร้อมกันโดย Microsoft
TLA+ : ภาษาระดับสูงสำหรับการสร้างแบบจำลองภาษาและระบบ (โดยเฉพาะที่เกิดขึ้นพร้อมกันและกระจาย)
Z3
ซีวีซี4
คณิตSAT5
อินเตอร์โพล
เจ้าหญิง
Proof Assitants มีการใช้งานลอจิกโปรแกรมที่แข็งแกร่งมาก บางครั้งอาจเป็นไปไม่ได้ในเชิงกลยุทธ์ที่จะดำเนินการพิสูจน์ที่ซับซ้อนโดยใช้เพียงสิ่งเหล่านั้นเท่านั้น ดังนั้น การวิจัยในปัจจุบันจึงรวมหลักการของการให้เหตุผลตามตรรกะที่แข็งแกร่งนี้เข้ากับตัวแก้ปัญหา SMT และ SMC ที่ทรงพลัง เพื่อความสะดวกในการพัฒนาการพิสูจน์ ตัวอย่างบางส่วนอยู่ที่นี่ด้านล่าง:
ฟสตาร์(F*)
SMTCoq
โครงการส่วนใหญ่มีการพัฒนาผู้พิสูจน์ทฤษฎีบทหรือตัวแก้ SAT/SMT/SMC/ ตามลำดับไม่มากก็น้อย ดังนั้นจึงสามารถค้นหาได้จากที่นั่น เหล่านี้คือโครงการอื่นๆ บางส่วนที่ได้รับการพัฒนาอย่างแข็งขัน
DeepSpec เป็นโครงการหลักที่มุ่งเน้นการสร้างระบบซอฟต์แวร์ที่ได้รับการตรวจสอบแล้ว โครงการย่อยที่สำคัญต่อไปนี้มีการดำเนินการอย่างแข็งขันเมื่อ:
ikos เป็นคอมไพเลอร์ C ที่ปราศจากจุดบกพร่อง ที่เชื่อถือได้ โดยอิงตามทฤษฎีการตีความเชิงนามธรรม
โครงการ Everest: เป็นโครงการวิจัยที่มีจุดมุ่งหมายเพื่อสร้างระบบนิเวศ HTTPS ที่ปลอดภัยและตรวจสอบได้
CertiCrypt: เป็นโปรเจ็กต์ที่มุ่งเน้นการสร้างแบบจำลองการเข้ารหัสคีย์สาธารณะโดยใช้ตัวช่วยพิสูจน์ coq
ไอริส: ไอริสเป็นเฟรมเวิร์กลอจิกการแยกพร้อมกันที่มีลำดับสูงกว่าที่นำไปใช้และตรวจสอบในผู้ช่วยพิสูจน์ Coq
VeriDeep - การตรวจสอบความปลอดภัยของเครือข่าย Deep Neural
VeHICal : โครงการมุ่งเน้นไปที่การพัฒนารากฐานของการออกแบบร่วมอินเทอร์เฟซและการควบคุมสำหรับระบบไซเบอร์กายภาพของมนุษย์ที่ได้รับการตรวจสอบแล้ว
FastSMT - เครื่องมือเพื่อเพิ่มประสิทธิภาพของตัวแก้ปัญหา SMT โดยการเรียนรู้เพื่อเพิ่มประสิทธิภาพให้กับชุดข้อมูลสูตรของคุณ ได้รับการพัฒนาโดยห้องปฏิบัติการ SRI โดยมี ETH Zurich สร้างขึ้นบนตัวแก้ปัญหา Z3 SMT
fm4cps - วิธีการอย่างเป็นทางการสำหรับระบบกายภาพไซเบอร์ ความพยายามร่วมกันโดย INRIA และ ECNU เซี่ยงไฮ้
วิธีการอย่างเป็นทางการสำหรับบล็อกเชน : นี่เป็นเวิร์คช็อปครั้งแรกที่เน้นการใช้วิธีการที่เป็นทางการในเทคโนโลยีบล็อกเชน จะเป็นวันที่ 11 ตุลาคม 2562
CertiK : เป็นสตาร์ทอัพที่เน้นการใช้วิธีการที่เป็นทางการเพื่อทำให้บล็อกเชนมีความปลอดภัยในการตรวจสอบยืนยัน
FLoC 2018- การประชุมสุดยอด Machine Learning เป็นไปตามวิธีการที่เป็นทางการ
Verified Machine Learning - Radboud University Nijmegen : หลักสูตรมหาวิทยาลัยเกี่ยวกับการใช้วิธีการยืนยันใน Machine Learning
วิธีการอย่างเป็นทางการพบกับการเรียนรู้ของเครื่อง - RWTH Aachen University : การสัมมนาในปี 2018 เกี่ยวกับความก้าวหน้าในการเรียนรู้ของเครื่องที่ปลอดภัยที่ตรวจสอบได้โดยใช้วิธีการอย่างเป็นทางการ
การอ่าน
วิดีโอ
VeHICal : โครงการมุ่งเน้นไปที่การพัฒนารากฐานของการออกแบบร่วมอินเทอร์เฟซและการควบคุมสำหรับระบบไซเบอร์กายภาพของมนุษย์ที่ได้รับการตรวจสอบแล้ว
fm4cps - วิธีการอย่างเป็นทางการสำหรับระบบกายภาพไซเบอร์ ความพยายามร่วมกันโดย INRIA และ ECNU เซี่ยงไฮ้
โดยเฉพาะอย่างยิ่งเกี่ยวข้องกับการปรับปรุงคุณสมบัติบางอย่าง (เช่น Parallelism & Concurrency) ของภาษาโปรแกรมที่มีอยู่ สามารถค้นหาสิ่งต่างๆ มากมายเกี่ยวกับเรื่องนี้ได้อย่างง่ายดาย เนื่องจากท้ายที่สุดแล้ว นี่คือเหตุผลที่สำคัญที่สุดเพียงอย่างเดียวในการศึกษาทฤษฎี PL การประชุมทั้งหมดที่ระบุไว้ในที่นี้ ACM SIGPLAN มีงานวิจัยส่วนใหญ่เกี่ยวกับการพัฒนาภาษาการเขียนโปรแกรม ลองเข้าไปดูสิ
ข้อเสนอแนะใด ๆ ยินดีต้อนรับ โปรดพิจารณาส่งคำขอดึงหากคุณรู้สึกว่า !!