Software Foundations Logo
Volume 1: Logical Foundations
  • Table of Contents
  • Index
  • Roadmap

Preface

  • Welcome
  • Overview
    • Logic
    • Proof Assistants
    • Functional Programming
    • Further Reading
  • Practicalities
    • System Requirements
    • Exercises
    • Downloading the Coq Files
    • Chapter Dependencies
    • Recommended Citation Format
  • Resources
    • Sample Exams
    • Lecture Videos
  • Note for Instructors and Contributors
  • Translations
  • Thanks

Functional Programming in Coq    (Basics)

  • Introduction
  • Data and Functions
    • Enumerated Types
    • Days of the Week
    • Homework Submission Guidelines
    • Booleans
    • Types
    • New Types from Old
    • Modules
    • Tuples
    • Numbers
  • Proof by Simplification
  • Proof by Rewriting
  • Proof by Case Analysis
    • More on Notation (Optional)
    • Fixpoints and Structural Recursion (Optional)
  • More Exercises
    • Warmups
    • Course Late Policies, Formalized
    • Binary Numerals
  • Testing Your Solutions

Proof by Induction    (Induction)

  • Separate Compilation
  • Proof by Induction
  • Proofs Within Proofs
  • Formal vs. Informal Proof
  • More Exercises
  • Nat to Bin and Back to Nat
  • Bin to Nat and Back to Bin (Advanced)

Working with Structured Data    (Lists)

  • Pairs of Numbers
  • Lists of Numbers
  • Reasoning About Lists
    • Induction on Lists
    • Search
    • List Exercises, Part 1
    • List Exercises, Part 2
  • Options
  • Partial Maps

Polymorphism and Higher-Order Functions    (Poly)

  • Polymorphism
    • Polymorphic Lists
    • Polymorphic Pairs
    • Polymorphic Options
  • Functions as Data
    • Higher-Order Functions
    • Filter
    • Anonymous Functions
    • Map
    • Fold
    • Functions That Construct Functions
  • Additional Exercises
    • Church Numerals (Advanced)

More Basic Tactics    (Tactics)

  • The apply Tactic
  • The apply with Tactic
  • The injection and discriminate Tactics
  • Using Tactics on Hypotheses
  • Specializing Hypotheses
  • Varying the Induction Hypothesis
  • Unfolding Definitions
  • Using destruct on Compound Expressions
  • Review
  • Additional Exercises

Logic in Coq    (Logic)

  • Logical Connectives
    • Conjunction
    • Disjunction
    • Falsehood and Negation
    • Truth
    • Logical Equivalence
    • Setoids and Logical Equivalence
    • Existential Quantification
  • Programming with Propositions
  • Applying Theorems to Arguments
  • Working with Decidable Properties
  • The Logic of Coq
    • Functional Extensionality
    • Classical vs. Constructive Logic

Inductively Defined Propositions    (IndProp)

  • Inductively Defined Propositions
    • Example: The Collatz Conjecture
    • Example: Ordering
    • Example: Transitive Closure
    • Example: Permutations
    • Example: Evenness (yet again)
  • Using Evidence in Proofs
    • Inversion on Evidence
    • Induction on Evidence
  • Inductive Relations
  • A Digression on Notation
  • Case Study: Regular Expressions
    • The remember Tactic
  • Case Study: Improving Reflection
  • Additional Exercises
    • Extended Exercise: A Verified Regular-Expression Matcher

Total and Partial Maps    (Maps)

  • The Coq Standard Library
  • Identifiers
  • Total Maps
  • Partial maps

The Curry-Howard Correspondence    (ProofObjects)

  • Proof Scripts
  • Quantifiers, Implications, Functions
  • Programming with Tactics
  • Logical Connectives as Inductive Types
    • Conjunction
    • Disjunction
    • Existential Quantification
    • True and False
  • Equality
    • Inversion, Again
  • Coq's Trusted Computing Base
  • More Exercises
  • Proof Irrelevance (Advanced)

Induction Principles    (IndPrinciples)

  • Basics
  • Polymorphism
  • Induction Hypotheses
  • More on the induction Tactic
  • Induction Principles for Propositions
  • Another Form of Induction Principles on Propositions (Optional)
  • Formal vs. Informal Proofs by Induction
    • Induction Over an Inductively Defined Set
    • Induction Over an Inductively Defined Proposition
  • Explicit Proof Objects for Induction (Optional)

Properties of Relations    (Rel)

  • Relations
  • Basic Properties
  • Reflexive, Transitive Closure

Simple Imperative Programs    (Imp)

  • Arithmetic and Boolean Expressions
    • Syntax
    • Evaluation
    • Optimization
  • Coq Automation
    • Tacticals
    • Defining New Tactics
    • The lia Tactic
    • A Few More Handy Tactics
  • Evaluation as a Relation
    • Inference Rule Notation
    • Equivalence of the Definitions
    • Computational vs. Relational Definitions
  • Expressions With Variables
    • States
    • Syntax
    • Notations
    • Evaluation
  • Commands
    • Syntax
    • Desugaring Notations
    • Locate Again
    • More Examples
  • Evaluating Commands
    • Evaluation as a Function (Failed Attempt)
    • Evaluation as a Relation
    • Determinism of Evaluation
  • Reasoning About Imp Programs
  • Additional Exercises

Lexing and Parsing in Coq    (ImpParser)

  • Internals
    • Lexical Analysis
    • Parsing
  • Examples

An Evaluation Function for Imp    (ImpCEvalFun)

  • A Broken Evaluator
  • A Step-Indexed Evaluator
  • Relational vs. Step-Indexed Evaluation
  • Determinism of Evaluation Again

Extracting OCaml from Coq    (Extraction)

  • Basic Extraction
  • Controlling Extraction of Specific Types
  • A Complete Example
  • Discussion
  • Going Further

More Automation    (Auto)

  • The auto Tactic
  • Searching For Hypotheses
  • The eapply and eauto tactics
  • Constraints on Existential Variables

A Streamlined Treatment of Automation    (AltAuto)

  • Tacticals
    • The try Tactical
    • The Sequence Tactical ; (Simple Form)
    • The Sequence Tactical ; (Local Form)
    • The repeat Tactical
    • An Optimization Exercise
  • Tactics that Make Mentioning Names Unnecessary
    • The assumption tactic
    • The contradiction tactic
    • The subst tactic
    • The constructor tactic
  • Automatic Solvers
    • Linear Integer Arithmetic: The lia Tactic
    • Equalities: The congruence Tactic
    • Propositions: The intuition Tactic
    • Exercises with Automatic Solvers
  • Search Tactics
    • The auto Tactic
    • The eauto variant
  • Ltac: The Tactic Language
    • Ltac Functions
    • Ltac Pattern Matching
    • Using match goal to Prove Tautologies
  • Review

Postscript

  • Looking Back
  • Looking Forward
  • Resources

Bibliography    (Bib)

  • Resources cited in this volume