Certified programming with dependent types : a pragmatic introduction to the Coq proof assistant /
The technology of mechanized program verification can play a supporting role in many kinds of research projects in computer science, and related tools for formal proof-checking are seeing increasing adoption in mathematics and engineering. This book provides an introduction to the Coq software for w...
Saved in:
Main Author: | |
---|---|
Format: | Electronic eBook |
Language: | English |
Published: |
Cambridge, MA :
The MIT Press,
[2013]
|
Subjects: | |
Online Access: | CONNECT CONNECT CONNECT |
MARC
LEADER | 00000cam a2200000 i 4500 | ||
---|---|---|---|
001 | mig00005954506 | ||
006 | m o d | ||
007 | cr ||||||||||| | ||
008 | 140309s2013 mau ob 001 0 eng d | ||
005 | 20230824151505.7 | ||
019 | |a 881288988 | ||
020 | |a 9780262317870 | ||
020 | |a 0262317877 | ||
020 | |a 9780262317863 |q (electronic bk.) | ||
020 | |a 0262317869 |q (electronic bk.) | ||
020 | |z 9780262026659 |q (hardcover ; |q alk. paper) | ||
020 | |z 0262026651 |q (hardcover ; |q alk. paper) | ||
024 | 3 | |a 9780262317870 | |
035 | |a 1WRLDSHRocn872996245 | ||
035 | |a (OCoLC)872996245 |z (OCoLC)881288988 | ||
037 | |a 9153 |b MIT Press | ||
037 | |a 9780262317870 |b MIT Press | ||
040 | |a COO |b eng |e pn |c COO |d CUS |d IEEEE |d OCLCF |d CEF |d MERER |d VTS |d OCLCQ |d AU@ |d MITPR |d YOU |d LEAUB |d EBLCP |d UKKNU |d YDX |d UKAHL |d OCLCQ |d OCLCO |d K6U |d OCLCQ |d OCL | ||
049 | |a TXMM | ||
050 | 4 | |a QA76.9.A96 | |
082 | 0 | 4 | |a 005.1 |2 23 |
100 | 1 | |a Chlipala, Adam, |d 1981- | |
245 | 1 | 0 | |a Certified programming with dependent types : |b a pragmatic introduction to the Coq proof assistant / |c Adam Chlipala. |
264 | 1 | |a Cambridge, MA : |b The MIT Press, |c [2013] | |
264 | 4 | |c ©2013 | |
300 | |a 1 online resource (xii, 424 pages) | ||
336 | |a text |b txt |2 rdacontent | ||
337 | |a computer |b c |2 rdamedia | ||
338 | |a online resource |b cr |2 rdacarrier | ||
504 | |a Includes bibliographical references (pages 413-417) and index. | ||
588 | 0 | |a Online resource; title from PDF title page (IEEE Xplore, viewed April 21, 2014). | |
520 | 8 | |a The technology of mechanized program verification can play a supporting role in many kinds of research projects in computer science, and related tools for formal proof-checking are seeing increasing adoption in mathematics and engineering. This book provides an introduction to the Coq software for writing and checking mathematical proofs. It takes a practical engineering focus throughout, emphasizing techniques that will help users to build, understand, and maintain large Coq developments and minimize the cost of code change over time. Two topics, rarely discussed elsewhere, are covered in detail: effective dependently typed programming (making productive use of a feature at the heart of the Coq system) and construction of domain-specific proof tactics. Almost every subject covered is also relevant to interactive computer theorem proving in general, not just program verification, demonstrated through examples of verified programs applied in many different sorts of formalizations. The book develops a unique automated proof style and applies it throughout; even experienced Coq users may benefit from reading about basic Coq concepts from this novel perspective. The book also offers a library of tactics, or programs that find proofs, designed for use with examples in the book. Readers will acquire the necessary skills to reimplement these tactics in other settings by the end of the book. All of the code appearing in the book is freely available online. | |
505 | 0 | |a : 1. Introduction -- 1.1. Whence This Book? -- 1.2. Why Coq? -- 1.2.1. Based on a Higher-Order Functional Programming Language -- 1.2.2. Dependent Types -- 1.2.3. An Easy-to-Check Kernel Proof Language -- 1.2.4. Convenient Programmable Proof Automation -- 1.2.5. Proof by Reflection -- 1.3. Why Not a Different Dependently Typed Language? -- 1.4. Engineering with a Proof Assistant -- 1.5. Prerequisites -- 1.6. Using This Book -- 1.6.1. Reading This Book -- 1.6.2. The Tactic Library -- 1.6.3. Installation and Emacs Setup -- 2. Some Quick Examples -- 2.1. Arithmetic Expressions over Natural Numbers -- 2.1.1. Source Language -- 2.1.2. Target Language -- 2.1.3. Translation -- 2.1.4. Translation Correctness -- 2.2. Typed Expressions -- 2.2.1. Source Language -- 2.2.2. Target Language -- 2.2.3. Translation -- 2.2.4. Translation Correctness -- I. Basic Programming and Proving -- 3. Introducing Inductive Types -- 3.1. Proof Terms -- 3.2. Enumerations -- 3.3. Simple Recursive Types -- 3.4. Parameterized Types -- 3.5. Mutually Inductive Types -- 3.6. Reflexive Types -- 3.7. An Interlude on Induction Principles -- 3.8. Nested Inductive Types -- 3.9. Manual Proofs about Constructors -- 4. Inductive Predicates -- 4.1. Propositional Logic -- 4.2. What Does It Mean to Be Constructive? -- 4.3. First-Order Logic -- 4.4. Predicates with Implicit Equality -- 4.5. Recursive Predicates -- 5. Infinite Data and Proofs -- 5.1.Computing with Infinite Data -- 5.2. Infinite Proofs -- 5.3. Simple Modeling of Nonterminating Programs -- II. Programming with Dependent Types -- 6. Subset Types and Variations -- 6.1. Introducing Subset Types -- 6.2. Decidable Proposition Types -- 6.3. Partial Subset Types -- 6.4. Monadic Notations -- 6.5.A Type-Checking Example -- 7. General Recursion -- 7.1. Well-Founded Recursion -- 7.2.A Nontermination Monad Inspired by Domain Theory -- 7.3. Co-inductive Nontermination Monads -- 7.4.Comparing the Alternatives -- 8. More Dependent Types -- 8.1. Length-Indexed Lists -- 8.2. The One Rule of Dependent Pattern Matching in Coq -- 8.3.A Tagless Interpreter -- 8.4. Dependently Typed Red-Black Trees -- 8.5.A Certified Regular Expression Matcher -- 9. Dependent Data Structures -- 9.1. More Length-Indexed Lists -- 9.2. Heterogeneous Lists -- 9.2.1.A Lambda Calculus Interpreter -- 9.3. Recursive Type Definitions -- 9.4. Data Structures as Index Functions -- 9.4.1. Another Interpreter Example -- 9.5. Choosing between Representations -- 10. Reasoning about Equality Proofs -- 10.1. The Definitional Equality -- 10.2. Heterogeneous Lists Revisited -- 10.3. Type Casts in Theorem Statements -- 10.4. Heterogeneous Equality -- 10.5. Equivalence of Equality Axioms -- 10.6. Equality of Functions -- 11. Generic Programming -- 11.1. Reifying Datatype Definitions -- 11.2. Recursive Definitions -- 11.2.1. Pretty-Printing -- 11.2.2. Mapping -- 11.3. Proving Theorems about Recursive Definitions -- 12. Universes and Axioms -- 12.1. The Type Hierarchy -- 12.1.1. Inductive Definitions -- 12.1.2. Deciphering Baffling Messages about Inability to Unify -- 12.2. The Prop Universe -- 12.3. Axioms -- 12.3.1. The Basics -- 12.3.2. Axioms of Choice -- 12.3.3. Axioms and Computation -- 12.3.4. Methods for Avoiding Axioms -- III. Proof Engineering -- 13. Proof Search by Logic Programming -- 13.1. Introducing Logic Programming -- 13.2. Searching for Underconstrained Values -- 13.3. Synthesizing Programs -- 13.4. More on auto Hints -- 13.5. Rewrite Hints -- 14. Proof Search in Ltac -- 14.1. Some Built-in Automation Tactics -- 14.2. Ltac Programming Basics -- 14.3. Functional Programming in Ltac -- 14.4. Recursive Proof Search -- 14.5. Creating Unification Variables -- 15. Proof by Reflection -- 15.1. Proving Evenness -- 15.2. Reifying the Syntax of a Trivial Tautology Language -- 15.3.A Monoid Expression Simplifier -- 15.4.A Smarter Tautology Solver -- 15.4.1. Manual Reification of Terms with Variables -- 15.5. Building a Reification Tactic That Recurses under Binders -- IV. The Big Picture -- 16. Proving in the Large -- 16.1. Ltac Antipatterns -- 16.2. Debugging and Maintaining Automation -- 16.3. Modules -- 16.4. Build Processes -- 17. Reasoning about Programming Language Syntax -- 17.1. Dependent de Bruijn Indices -- 17.2. Parametric Higher-Order Abstract Syntax -- 17.2.1. Functional Programming with PHOAS -- 17.2.2. Verifying Program Transformations -- 17.2.3. Establishing Term Well-Formedness -- 17.2.4.A Few Additional Remarks. | |
500 | |a KU Open Research Library |5 TMurS | ||
500 | |a MIT Press Direct to Open Backfile Complete Monographs |5 TMurS | ||
500 | |a MIT Press Direct Books Open Access |5 TMurS | ||
630 | 0 | 0 | |a Coq (Electronic resource) |
630 | 0 | 7 | |a Coq (Electronic resource) |2 fast |0 (OCoLC)fst02058476 |
650 | 0 | |a Automatic theorem proving |x Computer programs. | |
650 | 0 | |a Computer programming. | |
730 | 0 | |a WORLDSHARE SUB RECORDS | |
776 | 0 | 8 | |i Print version: |a Chlipala, Adam, 1981- |t Certified programming with dependent types. |d Cambridge, MA : The MIT Press, [2013] |z 9780262026659 |w (DLC) 2013012837 |w (OCoLC)844774277 |
856 | 4 | 0 | |u https://openresearchlibrary.org/viewer/1b87295a-aad9-4230-80fe-59107d614832 |z CONNECT |3 Knowledge Unlatched |t 0 |
856 | 4 | 0 | |u https://ezproxy.mtsu.edu/login?url=https://doi.org/10.7551/mitpress/9153.001.0001?locatt=mode:legacy |z CONNECT |3 MIT Press |
856 | 4 | 0 | |u https://doi.org/10.7551/mitpress/9153.001.0001?locatt=mode:legacy |z CONNECT |3 MIT Press |
949 | |a ho0 | ||
994 | |a 92 |b TXM | ||
998 | |a wi |d z | ||
999 | f | f | |s 0e338448-1c12-4c43-abb7-f156962dd0eb |i 71a52730-a2e1-4c5b-b0ac-f01378b18388 |t 0 |
952 | f | f | |a Middle Tennessee State University |b Main |c James E. Walker Library |d Electronic Resources |t 0 |e QA76.9.A96 |h Library of Congress classification |