Last Updated on May 22, 2022
4. Mathematical Components by Assia Mahboubi and Enrico Tassi with contributions by Yves Bertot and Georges Gonthie
Mathematical Components is the name of a library of formalized mathematics for the Coq proof assistants. It covers a variety of topics, from the theory of basic data structures (e.g., numbers, lists, finite sets) to more advanced results in various flavors of algebra. This library constitutes the infrastructure for the machine checked proofs of the Four Color Theorem and of the Odd Order Theorem.
This book aims at providing an introducing to the design patterns used throughout this library, so as to ease its use for other projects. While there are several books around covering the usage of the Coq system and the theory it is based on, the Mathematical Components library uses a few design patterns that differ from the methodology propose in other sources. As a consequence, this book provides a slightly non-standard presentation of Coq, putting upfront the formalization choices and the proof style that are the pillars of the library.
5. Programs and Proofs: Mechanizing Mathematics with Dependent Types by Ilya Sergey
These lecture notes are the result of the author’s personal experience of learning how to structure formal reasoning using the Coq proof assistant and employ Coq in large-scale research projects.
The present manuscript offers a brief and practically-oriented introduction to the basic concepts of mechanized reasoning and interactive theorem proving.
The primary audience of this text are the readers with expertise in software development and programming and knowledge of discrete mathematics disciplines on the level of an undergraduate university program
6. Computer Arithmetic and Formal Proofs by Sylvie Boldo and Guillaume Melquiond
Floating-point arithmetic is ubiquitous in modern computing, as it is the tool of choice to approximate real numbers. Due to its limited range and precision, its use can become quite involved and potentially lead to numerous failures. One way to greatly increase confidence in floating-point software is by computer-assisted verification of its correctness proofs.
This book provides a comprehensive view of how to formally specify and verify tricky floating-point algorithms with the Coq proof assistant. It describes the Flocq formalization of floating-point arithmetic and some methods to automate theorem proofs. It then presents the specification and verification of various algorithms, from error-free transformations to a numerical scheme for a partial differential equation. The examples cover not only mathematical algorithms but also C programs as well as issues related to compilation.
Pages in this article:
Page 1 – Reference Manual
Page 2 – Mathematical Components and more books
All books in this series:
Free Programming Books | |
---|---|
Ada | ALGOL-like programming language, extended from Pascal and other languages |
Agda | Dependently typed functional language based on intuitionistic Type Theory |
Arduino | Inexpensive, flexible, open source microcontroller platform |
Assembly | As close to writing machine code without writing in pure hexadecimal |
Awk | Versatile language designed for pattern scanning and processing language |
Bash | Shell and command language; popular both as a shell and a scripting language |
BASIC | Beginner’s All-purpose Symbolic Instruction Code |
C | General-purpose, procedural, portable, high-level language |
C++ | General-purpose, portable, free-form, multi-paradigm language |
C# | Combines the power and flexibility of C++ with the simplicity of Visual Basic |
Clojure | Dialect of the Lisp programming language |
ClojureScript | Compiler for Clojure that targets JavaScript |
COBOL | Common Business-Oriented Language |
CoffeeScript | Transcompiles into JavaScript inspired by Ruby, Python and Haskell |
Coq | Dependently typed language similar to Agda, Idris, F* and others |
Crystal | General-purpose, concurrent, multi-paradigm, object-oriented language |
CSS | CSS (Cascading Style Sheets) specifies a web page’s appearance |
D | General-purpose systems programming language with a C-like syntax |
Dart | Client-optimized language for fast apps on multiple platforms |
Dylan | Multi-paradigm language supporting functional and object-oriented coding |
ECMAScript | Best known as the language embedded in web browsers |
Eiffel | Object-oriented language designed by Bertrand Meyer |
Elixir | Relatively new functional language running on the Erlang virtual machine |
Erlang | General-purpose, concurrent, declarative, functional language |
F# | Uses functional, imperative, and object-oriented programming methods |
Factor | Dynamic stack-based programming language |
Forth | Imperative stack-based programming language |
Fortran | The first high-level language, using the first compiler |
Go | Compiled, statically typed programming language |
Groovy | Powerful, optionally typed and dynamic language |
Haskell | Standardized, general-purpose, polymorphically, statically typed language |
HTML | HyperText Markup Language |
Icon | Wide variety of features for processing and presenting symbolic data |
J | Array programming language based primarily on APL |
Java | General-purpose, concurrent, class-based, object-oriented, high-level language |
JavaScript | Interpreted, prototype-based, scripting language |
Julia | High-level, high-performance language for technical computing |
Kotlin | More modern version of Java |
LabVIEW | Designed to enable domain experts to build power systems quickly |
LaTeX | Professional document preparation system and document markup language |
Lisp | Unique features - excellent to study programming constructs |
Logo | Dialect of Lisp that features interactivity, modularity, extensibility |
Lua | Designed as an embeddable scripting language |
Markdown | Plain text formatting syntax designed to be easy-to-read and easy-to-write |
Objective-C | Object-oriented language that adds Smalltalk-style messaging to C |
OCaml | The main implementation of the Caml language |
Pascal | Imperative and procedural language designed in the late 1960s |
Perl | High-level, general-purpose, interpreted, scripting, dynamic language |
PHP | PHP has been at the helm of the web for many years |
PostScript | Interpreted, stack-based and Turing complete language |
Prolog | A general purpose, declarative, logic programming language |
PureScript | Small strongly, statically typed language compiling to JavaScript |
Python | General-purpose, structured, powerful language |
QML | Hierarchical declarative language for user interface layout - JSON-like syntax |
R | De facto standard among statisticians and data analysts |
Racket | General-purpose, object-oriented, multi-paradigm, functional language |
Raku | Member of the Perl family of programming languages |
Ruby | General purpose, scripting, structured, flexible, fully object-oriented language |
Rust | Ideal for systems, embedded, and other performance critical code |
Scala | Modern, object-functional, multi-paradigm, Java-based language |
Scheme | A general-purpose, functional language descended from Lisp and Algol |
Scratch | Visual programming language designed for 8-16 year-old children |
SQL | Access and manipulate data held in a relational database management system |
Standard ML | General-purpose functional language characterized as "Lisp with types" |
Swift | Powerful and intuitive general-purpose programming language |
Tcl | Dynamic language based on concepts of Lisp, C, and Unix shells |
TeX | Markup and programming language - create professional quality typeset text |
TypeScript | Strict syntactical superset of JavaScript adding optional static typing |
Vala | Object-oriented language, syntactically similar to C# |
VHDL | Hardware description language used in electronic design automation |
VimL | Powerful scripting language of the Vim editor |
XML | Rules for defining semantic tags describing structure ad meaning |