{"title":"Foundational program verification in Coq with automated proofs","authors":"A. Chlipala","doi":"10.1145/1863597.1863603","DOIUrl":null,"url":null,"abstract":"Most people who know of the proof assistant Coq associate it with long, manual proofs via tactic scripts. In contrast, classical verification tools, based on automated theorem-provers for first-order logic, are well established as supporting program verification without any manual proof steps. However, there is a price to pay: program verifiers are large, complex bodies of code, and believing their outputs requires believing in much more than the correct implementation of Coq's proof-checking kernel.\n In this tutorial, I will demonstrate how to use the Bedrock Coq library to get the best of both worlds. Our focus will be on the kinds of programs with the most tedious detail and the most opportunity to benefit from automation: namely, those written in assembly language. I will show how to build automated correctness proofs of simple imperative data structures, while dealing with first-class code pointers and producing Coq proof terms for theorems whose statements depend on little beyond operational semantics of machine code.","PeriodicalId":355206,"journal":{"name":"MSFP '10","volume":"15 8 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"2010-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"0","resultStr":null,"platform":"Semanticscholar","paperid":null,"PeriodicalName":"MSFP '10","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1145/1863597.1863603","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 0
Abstract
Most people who know of the proof assistant Coq associate it with long, manual proofs via tactic scripts. In contrast, classical verification tools, based on automated theorem-provers for first-order logic, are well established as supporting program verification without any manual proof steps. However, there is a price to pay: program verifiers are large, complex bodies of code, and believing their outputs requires believing in much more than the correct implementation of Coq's proof-checking kernel.
In this tutorial, I will demonstrate how to use the Bedrock Coq library to get the best of both worlds. Our focus will be on the kinds of programs with the most tedious detail and the most opportunity to benefit from automation: namely, those written in assembly language. I will show how to build automated correctness proofs of simple imperative data structures, while dealing with first-class code pointers and producing Coq proof terms for theorems whose statements depend on little beyond operational semantics of machine code.