本課程將講授程式語言領域之入門理論與知識,希望培養學生以型式邏輯進行清晰思考的能力,了解邏輯與程式語言、型別系統的密切關係,以及型別系統在程式語言中扮演的角色,使學生能以遞迴/迭構方式理解並解決程式設計問題,能運用軟體工具輔助邏輯推理及證明程式正確性,並具備進一步探索程式語言相關領域的知識基礎。
本次特別講題將重返中研院資訊所講師群鑽研已久的主題「依值型別編程」(dependently typed programming),接力呈現其各個面向。
依值型別之表達能力遠超過主流語言的型別系統,一些原先需要另外證明的程式性質可直接編寫為依值型別,程式只要通過型別檢查即可保證性質成立。
當程式員透過依值型別提供更多資訊給型別檢查器 (type-checker),後者就能反過來隨時告訴程式員當下已知與尚待滿足的條件,互動地寫出正確程式。
依值型別語言的表達能力強到能夠將數學型式化,數學定理與證明在依值型別語言中表達出來後,不僅能保證推論過程正確無誤,還一定具有計算意義。
歡迎一同來體驗數學、邏輯、計算融為一體的舒暢感!
形式化驗證是透過數理邏輯來對程式正確性進行推論的一套方法。由於這套方法通常被認為不易實現且需大量人力,因此也被認為只適用於小型程式或是與生命攸關的系統。然而,隨著理論與工具的發展,許多像是編譯器和作業系統這類我們在日常生活中會接觸的系統,都在最近這十年內成功地被驗證。在這演講的前半段,我會先討論怎麼樣算是一個「正確的程式」,再介紹一些驗證的技術,最後以示範驗證一個小程式作結。演講的後半段,我會分享在中研院進行形式化驗證的經驗:我們驗證了位於許多固態硬碟內部,一個叫作快閃轉換層的核心軟體元件。內容將包括它的形式規格、斷電的行為模型、我們採用的驗證方法以及驗證時遇到的挑戰。
第一週 | 星期一 | 星期二 | 星期三 | 星期四 | 星期五 |
---|---|---|---|---|---|
上午 | 程式語言導論 0Introduction | 邏輯 0Natural deduction and intuitionistic propositional logic | 函數編程 1Functional program derivation | 邏輯 1Classical semantics and meta-theoretic properties | 函數編程 2TBA |
下午 | 函數編程 0Inductive functions and equational reasoning | 程式語言導論 1Untyped λ-calculus | 程式語言導論 2Simply typed λ-calculus | 程式語言導論 3Imperative language constructs | 程式語言導論 4What's out there / Agda Installation |
第二週 | 星期一 | 星期二 | 星期三 | 星期四 | 星期五 |
---|---|---|---|---|---|
上午 | 依值型別編程 0Agda basics | 依值型別編程 1Shallow and deep embeddings of intuitionistic logic | 依值型別編程 2Intrinsic representation of simply typed lambda calculus | 依值型別編程 3McBride's razor | 考試 |
下午 | 邏輯 2Curry–Howard correspondence | 程式語言導論 5Polymorphic lambda calculus | 程式語言導論 6Hoare logic | 特別演講Verification of a Snapshot-Consistent Flash Translation Layer |