PART I Algorithmic Problem Solving
C H A P T E R 1 – Introduction
1.2 Algorithmic Problem Solving
2.1.2 The Mathematical Solution
2.3.1 Non-deterministic Choice
C H A P T E R 3 – Crossing a River
3.3.3 Denoting States and Transitions
3.4 Rule of Sequential Composition
4.2.3 Formulating Requirements
C H A P T E R 5 – Knights and Knaves
5.3 Equivalence and Continued Equalities
5.3.1 Examples of the Associativity of Equivalence
6.6 From Verification to Construction
C H A P T E R 7 – Fake-Coin Detection
C H A P T E R 8 – The Tower of Hanoi
8.1 Specification and Solution
C H A P T E R 9 – Principles of Algorithm Design
9.1 Iteration, Invariants and Making Progress
9.4 Sam Loyd’s Chicken-Chasing Problem
C H A P T E R 10 – The Bridge Problem
10.5 Choosing Settlers and Nomads
C H A P T E R 11 – Knight’s Circuit
PART II Mathematical Techniques
C H A P T E R 12 – The Language of Mathematics
12.1 Variables, Expressions and Laws
12.2.1 The Membership Relation
12.4.1 Cartesian Product and Disjoint Sum
12.5.5 Distributivity/Factorisation
12.8.2 Relations between Steps
C H A P T E R 13 – Boolean Algebra
13.5.1 Definitions and Basic Properties
C H A P T E R 14 – Quantifiers
14.2 Introducing Quantifier Notation
14.2.2 Free and Bound Variables
14.2.3 Properties of Summation
14.3 Universal and Existential Quantification
14.3.1 Universal Quantification
14.3.2 Existential Quantification
14.4.2 Free and Bound Variables
14.4.7 Distributivity Properties
C H A P T E R 15 – Elements of Number Theory
15.4.2 Remainders and Modulo Arithmetic
C H A P T E R 16 – Relations, Graphs and Path Algebras
16.1 Paths in a Directed Graph
16.2.4 Reflexive Transitive Closure
16.3 Functional and Total Relations