圖片來源:福賽集團
形式化方法是用於設計、驗證和規範軟體和硬體問題的數學技術。這些本質上是程式語言理論研究的一個子集,用於研究複雜的電腦科學問題。
形式化方法分析基本上涉及以下步驟:
Formal Specification
Formal Proofs
Model Checking
Abstraction
形式證明開發和模型檢查主要使用互動式定理證明器(通常稱為證明助手)來完成。抽像是在模型各部分之間創造結構上合理的關係。
這是我嘗試整理的一系列有用的閱讀材料、影片和工具,以及該領域即將面臨的一些挑戰。
我試著讓內容更加關注目前的研究和工業應用。尋找純粹學術收藏的人必須參考《正式教育方法》——傑里米·阿維加德 (Jeremy Avigad)。
希望讀者俱備類型理論的一些基本知識。更多學術見解可以在這裡找到 learn-tt。
軟體基礎:我強烈建議將此作為深入研究該領域的起始材料。這本書對於建立基本概念非常有幫助,並且是對該領域的非常完善的介紹。整個過程中提供了精美插圖的概念和練習範例,使互動式定理證明學習變得有趣。
FRAP - Adam Chlipala :一本幫助您理解和推理程序形式正確性的書。命令式語言( C )啟發的資料結構和演算法範例極大地幫助我們開始思考它們的形式驗證。
Certified Programming with Dependent Types - Adam Chlipala :使用 coq 學習定理證明的最佳theoretical books
之一。
形式驗證 - Jacques Fleuriot :這門課程涉及使用一些更發達的工具(如 SAT 和 SMT 求解器)進行定理證明。
抽象解釋 - Patrick Cousot有關抽象解釋理論的最佳可用資料。它給出了程序突變的完整而純粹的數學分析。程序行為作為不同抽象數學結構之間不斷修改的關係得到了解釋和證明!
邏輯與證明 - CMU 與精實簡介:這是在 CMU 設計的課程,也可作為精實定理證明的入門資料
如果您覺得需要更多理論見解,請參閱上面的註釋。
coq:最受歡迎和最廣泛使用的定理證明器。它支援許多功能,包括 ML 提取、專案打包(專案和 Makefile 創建)。有大量使用 coq 進行形式化的how-to
材料。任何人都可能會發現 Coq 中的 100 個定理非常有趣。
精實:微軟研究院的一個相當新的定理證明器。有一個很好的互動式教程,很容易上手。
PRISM模型檢查器:它是由牛津大學開發的模型檢查器。
Nuprl:康乃爾大學證明細化邏輯計畫下的定理證明器。
Agda:相當成熟的證明助手。具有與 Coq 類似的功能。經過一些 coq 經驗後很容易學習。
伊莎貝爾:這是一個古老的定理證明者。具有很好的核心邏輯實現,但缺乏其他與使用者體驗相關的功能。
VCC:Microsoft 的並發 C 程式的機械驗證器。
TLA+:用於建模語言和系統的高階語言(尤其是並發和分散式)。
Z3
CVC4
數學SAT5
SMT國際刑警組織
公主
證明助手對程式邏輯有非常強大的實作。有時僅通過使用它們來進行複雜的證明在戰術上可能是不可能的。因此,目前的研究將這種基於強邏輯的推理原理與強大的 SMT 和 SMC 求解器相結合,以簡化證明開發。下面是一些範例:
F星(F*)
SMTCoq
大多數專案或多或少都是各自定理證明器或 SAT/SMT/SMC/求解器的開發,因此可以在那裡找到。這些是積極開發的其他一些項目。
DeepSpec 是一個傘式項目,專注於建立經過驗證的軟體系統。正在積極進行以下主要子項目:
ikos 是一個基於抽象解釋理論的可靠、無錯誤的C 編譯器。
Project Everest:這是一個旨在創建安全且經過驗證的 HTTPS 生態系統的研究計畫。
CertiCrypt:這是一個專注於使用 coq 證明助手對公鑰加密進行建模的專案。
Iris:Iris 是一個在證明助手 Coq 中實現和驗證的高階並發分離邏輯框架。
VeriDeep - 深度神經網路的安全驗證
VeHICal:專案重點是為人類網路物理系統的介面和控制的經過驗證的協同設計奠定基礎。
FastSMT - 透過學習最佳化公式資料集效能來增強 SMT 求解器的工具。它由蘇黎世聯邦理工學院 SRI 實驗室開發,基於 Z3 SMT 求解器。
fm4cps - 資訊物理系統的形式化方法,INRIA 和華東師範大學上海分校共同努力。
區塊鏈的形式化方法:這是有史以來第一個專注於在區塊鏈技術中使用形式化方法的研討會。日期為2019 年 10 月 11 日。
CertiK :這是一家專注於使用正式方法使區塊鏈可驗證安全的新創公司。
FLoC 2018-機器學習高峰會遇見形式化方法
驗證機器學習 - Radboud University Nijmegen :關於在機器學習中使用驗證方法的大學課程。
形式化方法與機器學習的結合 - 亞琛工業大學:2018 年關於使用形式化方法實現可驗證安全機器學習進展的研討會。
讀物
影片
VeHICal :專案重點是為人類網路物理系統的介面和控制的經過驗證的協同設計奠定基礎。
fm4cps - 資訊物理系統的形式化方法,INRIA 和華東師範大學上海分校共同努力。
這特別涉及改進現有程式語言的某些屬性(例如並行性和並發性)。關於這一點可以很容易地查到很多,因為畢竟這是研究 PL 理論的唯一最重要的原因。這裡列出的所有會議 ACM SIGPLAN 都包含有關程式語言開發的大部分研究論文,請查看它們。
歡迎任何建議。如果您願意,請考慮提交拉取請求!