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
- The Big Picture: Coq's Two Universes
- Generalizing Induction Hypotheses
- Templates for Informal Proofs by Induction
- Additional Exercises
Logic: Logic in Coq
- Quantification and Implication
- Conjunction
- Disjunction
- Falsehood
- Negation
- Existential Quantification
- Equality
- Relations as Propositions
- Informal Proofs, Again
- Explicit Proof Objects for Induction.
- The Coq Trusted Computing Base.
Rel: Properties of Relations
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
Records: Adding Records to STLC
References: Typing Mutable References
Subtyping: Subtyping
RecordSub: Subtyping with Records
Norm: Normalization of STLC
This page has been generated by coqdoc