000 05459nam a2200613 a 4500
001 011452841316
003 MOCL
005 20260528133338.0
006 m eo d
007 cr cn |||m|||a
008 160219s2016 nyu fob 000 0deng d
020 _z9781970001273
_qhardcover
020 _z9781970001242
_qpaperback
020 _a9781970001259
_qebook
020 _z9781970001266
_qePub
024 7 _a10.1145/2841316
_2doi
035 _a(CaBNVSL)swl00406212
035 _a(OCoLC)939937303
040 _aCaBNVSL
_beng
_erda
_cCaBNVSL
_dCaBNVSL
050 4 _aQA76.62
_b.S788 2016
082 0 4 _a005.13
_223
100 1 _aStump, Aaron.,
_eauthor.
245 1 0 _aVerified functional programming in Agda /
_cAaron Stump.
250 _aFirst edition.
264 1 _a[New York] :
_bAssociation for Computing Machinery ;
_a[San Rafael, California] :
_bMorgan & Claypool,
_c2016.
300 _a1 PDF (xxiv, 258 pages)
336 _atext
_2rdacontent
337 _aelectronic
_2isbdmedia
338 _aonline resource
_2rdacarrier
490 1 _aACM books,
_x2374-6777 ;
_v#9
538 _aMode of access: World Wide Web.
538 _aSystem requirements: Adobe Acrobat Reader.
504 _aIncludes bibliographical references (pages 253-256) and index.
505 8 _a9. Reasoning about termination -- 9.1 Termination proofs -- 9.2 Operational semantics for SK combinators -- 9.3 Conclusion -- Exercises --
505 8 _a3. 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 -- Exercises --
505 8 _a5. 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 -- Exercises --
505 8 _a7. Generating Agda parsers with gratr -- 7.1 A primer on grammars -- 7.2 Generating parsers with gratr -- 7.3 Conclusion -- Exercises --
505 8 _a4. Lists -- 4.1 The list datatype and type parameters -- 4.2 Basic operations on lists -- 4.3 Reasoning about list operations -- 4.4 Conclusion -- Exercises --
505 8 _a2. 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 -- Exercises --
505 8 _a8. 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 -- Exercises --
505 0 _a1. 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 -- Exercises --
505 8 _a6. Type-level computation -- 6.1 Integers -- 6.2 Formatted printing -- 6.3 Proof by reflection -- 6.4 Conclusion -- Exercises --
505 8 _aAppendix A. Quick guide to symbols -- Appendix B. Commonly used Emacs control commands -- Appendix C. Some extra Emacs definitions -- References -- Index -- Author's biography.
505 8 _a10. 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 -- Exercises --
520 3 _aAgda 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.
530 _aAlso available in print.
588 _aTitle from PDF title page (viewed on February 19, 2016).
650 0 _aAgda (Computer program language)
650 0 _aFunctional programming languages.
650 0 _aType theory.
776 0 8 _iPrint version:
_z9781970001273
_z9781970001242
830 0 _aACM books ;
_v#9.
_x2374-6777
856 4 8 _3Abstract with links to full text
_uhttp://dl.acm.org/citation.cfm?id=2841316
999 _c359
_d359