My Account Log in

1 option

Verified functional programming in Agda / Aaron Stump.

ACM Book collection I Available online

View online
Format:
Book
Author/Creator:
Stump, Aaron, author.
Series:
ACM books ; 2374-6777 #9.
ACM books, 2374-6777 ; #9
Language:
English
Subjects (All):
Agda (Computer program language).
Functional programming languages.
Type theory.
Physical Description:
1 online resource (xxiv, 258 pages)
Edition:
First edition.
Place of Publication:
[New York] : Association for Computing Machinery ; [San Rafael, California] : Morgan & Claypool, 2016.
System Details:
Mode of access: World Wide Web.
System requirements: Adobe Acrobat Reader.
Summary:
Agda is an advanced programming language based on Type Theory. Agda's type system is expressive enough to support full functional verification of programs, in two styles. In external verification, we write pure functional programs and then write proofs of properties about them. The proofs are separate external artifacts, typically using structural induction. In internal verification, we specify properties of programs through rich types for the programs themselves. This often necessitates including proofs inside code, to show the type checker that the specified properties hold. The power to prove properties of programs in these two styles is a profound addition to the practice of programming, giving programmers the power to guarantee the absence of bugs, and thus improve the quality of software more than previously possible. The book begins with an introduction to functional programming through familiar examples like booleans, natural numbers, and lists, and techniques for external verification. Internal verification is considered through the examples of vectors, binary search trees, and Braun trees. More advanced material on type-level computation, explicit reasoning about termination, and normalization by evaluation is also included. The book also includes a medium-sized case study on Huffman encoding and decoding.
Contents:
9. Reasoning about termination
9.1 Termination proofs
9.2 Operational semantics for SK combinators
9.3 Conclusion
Exercises
3. Natural numbers
3.1 Peano natural numbers
3.2 Addition
3.3 Multiplication
3.4 Arithmetic comparison
3.5 Even/odd and mutually recursive definitions
3.6 Conclusion
5. Internal verification
5.1 Vectors
5.2 Binary search trees
5.3 Sigma types
5.4 Braun trees
5.5 Discussion: internal vs. external verification
5.6 Conclusion
7. Generating Agda parsers with gratr
7.1 A primer on grammars
7.2 Generating parsers with gratr
7.3 Conclusion
4. Lists
4.1 The list datatype and type parameters
4.2 Basic operations on lists
4.3 Reasoning about list operations
4.4 Conclusion
2. Introduction to constructive proof
2.1 A first theorem about the Booleans
2.2 Universal theorems
2.3 Another example, and more on implicit arguments
2.4 Theorems with hypotheses
2.5 Going deeper: Curry-Howard and constructivity
2.6 Further examples
2.7 Conclusion
8. A case study: Huffman encoding and decoding
8.1 The files
8.2 The input formats
8.3 Encoding textual input
8.4 Decoding encoded text
8.5 Conclusion
1. Functional programming with the Booleans
1.1 Declaring the datatype of Booleans
1.2 First steps interacting with Agda
1.3 Syntax declarations
1.4 Defining Boolean operations by pattern matching: negation
1.5 Defining Boolean operations by pattern matching: and, or
1.6 The if-then-else operation
1.7 Conclusion
6. Type-level computation
6.1 Integers
6.2 Formatted printing
6.3 Proof by reflection
6.4 Conclusion
Appendix A. Quick guide to symbols
Appendix B. Commonly used Emacs control commands
Appendix C. Some extra Emacs definitions
References
Index
Author's biography.
10. Intuitionistic logic and Kripke semantics
10.1 Positive propositional intuitionistic logic (PPIL)
10.2 Kripke structures
10.3 Kripke semantics for PPIL
10.4 Soundness of PPIL
10.5 Completeness
10.6 Conclusion
Notes:
Includes bibliographical references (pages 253-256) and index.
Title from PDF title page (viewed on February 19, 2016).
Other Format:
Print version:
ISBN:
9781970001259
OCLC:
939937303
Access Restriction:
Restricted for use by site license.

The Penn Libraries is committed to describing library materials using current, accurate, and responsible language. If you discover outdated or inaccurate language, please fill out this feedback form to report it and suggest alternative language.

Find

Home Release notes

My Account

Shelf Request an item Bookmarks Fines and fees Settings

Guides

Using the Find catalog Using Articles+ Using your account