Preface
Basics: Functional programming and reasoning about programs
- Enumerated Types
- Proof By Simplification
- The intros tactic
- Proof by rewriting
- Case analysis
- Naming cases
- Induction
- Formal vs. informal proof
- Proofs Within Proofs
- Extra Exercises
Lists: Products, Lists and Options
- Pairs of numbers
- Lists of numbers
- Reasoning about lists
- Options
- The apply tactic
- Varying the Induction Hypothesis
- Additional Exercises
Poly: Polymorphism and Higher-Order Functions
Ind: Propositions and Evidence
- Review
- Programming with Propositions
- Evidence
- Inductively Defined Propositions
- The Curry-Howard Correspondence
- Implication
- Induction Axioms for Inductively Defined Types
- Induction Hypotheses
- A Closer Look at the induction Tactic
- Reasoning by Induction Over Evidence
- Why Define Propositions Inductively?
- Induction Principles in Prop
- Proofs About Inductively Defined Propositions
- The Big Picture: Coq's Two Universes
- Generalizing Induction Hypotheses
- Additional Exercises
Logic: Logic in Coq
- Quantification and Implication
- Conjunction
- Disjunction
- Falsehood
- Negation
- Existential Quantification
- Equality
- Relations as Propositions
- Informal Proofs, Again
Rel: Properties of Relations
Template: Patterns for Inductive Proofs
SfLib: Software Foundations Library
Imp: Simple Imperative Programs
- Arithmetic and Boolean Expressions
- Coq Automation
- Expressions With Variables
- Commands
- Evaluation
- Reasoning about programs
- Additional Exercises
ImpParser: Lexing and Parsing in Coq
Equiv: Program Equivalence
- Behavioral equivalence
- Case Study: Constant Folding
- Proving That Programs Are Not Equivalent
- Reasoning about Imp programs
- Additional exercises
Hoare: Hoare Logic
MoreHoare: Hoare Logic with Lists; Formalizing Decorated Programs
Smallstep: Small-step Operational Semantics
Stlc: The Simply Typed Lambda-Calculus
- More Automation
- Typed Arithmetic Expressions
- The Simply Typed Lambda-Calculus
- Exercise: STLC with Arithmetic
MoreStlc: More on the Simply Typed Lambda-Calculus
References: Typing Mutable References
Subtyping: Subtyping
Records
This page has been generated by coqdoc