8.1. Guaranteeing equivalence of data with equality types8.1.1. Implementing exactLength, first attempt8.1.2. Expressing equality of Nats as a type8.1.3. Testing for equality of Nats8.1.4. Functions as proofs: manipulating equalities8.1.5. Implementing exactLength, second attempt8.1.6. Equality in general: the = type8.2. Equality in practice: types and reasoning8.2.1. Reversing a vector8.2.2. Type checking and evaluation8.2.3. The rewrite construct: rewriting a type using equality8.2.4. Delegating proofs and rewriting to holes8.2.5. Appending vectors, revisited8.3. The empty type and decidability8.3.1. Void: a type with no values8.3.2. Decidability: checking properties with precision8.3.3. DecEq: an interface for decidable equality8.4. Summary