Preface
Functional Programming in Coq (Basics)
Proof by Induction (Induction)
- Top
- Review
- Separate Compilation
- Proof by Induction
- Proofs Within Proofs
- Formal vs. Informal Proof
- More Exercises
Working with Structured Data (Lists)
Polymorphism and Higher-Order Functions (Poly)
More Basic Tactics (Tactics)
- Top
- The apply Tactic
- The apply with Tactic
- The injection and discriminate Tactics
- Using Tactics on Hypotheses
- Varying the Induction Hypothesis
- Unfolding Definitions
- Using destruct on Compound Expressions
- Micro Sermon
Logic in Coq (Logic)
- Top
- Logical Connectives
- Programming with Propositions
- Applying Theorems to Arguments
- Coq vs. Set Theory
Inductively Defined Propositions (IndProp)
- Top
- Inductively Defined Propositions
- Using Evidence in Proofs
- Inductive Relations
- Case Study: Regular Expressions
- Case Study: Improving Reflection
Total and Partial Maps (Maps)
The Curry-Howard Correspondence (ProofObjects)
- Top
- Proof Scripts
- Quantifiers, Implications, Functions
- Programming with Tactics
- Logical Connectives as Inductive Types
- Equality
Induction Principles (IndPrinciples)
- Top
- Basics
- Induction Principles in Prop
- Explicit Proof Objects for Induction (Optional)
- The Coq Trusted Computing Base
Properties of Relations (Rel)
Simple Imperative Programs (Imp)
- Top
- Arithmetic and Boolean Expressions
- Coq Automation
- Evaluation as a Relation
- Expressions With Variables
- Commands
- Evaluating Commands
- Additional Exercises
Lexing and Parsing in Coq (ImpParser)
An Evaluation Function for Imp (ImpCEvalFun)
- Top
- A Broken Evaluator
- A Step-Indexed Evaluator
- Relational vs. Step-Indexed Evaluation
- Determinism of Evaluation Again
Extracting ML from Coq (Extraction)
- Top
- Basic Extraction
- Controlling Extraction of Specific Types
- A Complete Example
- Discussion
- Going Further