Why Use Logic? Why Prove Programs Correct? / Part 0: |
Propositions / Part 1: |
Reasoning Using Equivalence Transformations / 2: |
A Natural Deduction System / 3: |
Predicates / 4: |
Notations and Conventions for Arrays / 5: |
Using Assertions to Document Programs / 6: |
The Semantics of a Small Language / Part 2: |
The Predicate Transformer wp / 7: |
The Commands Skip, Abort and Composition / 8: |
The Assignment Command / 9: |
The Alternative Command / 10: |
Procedure Call / 12: |
The Iterative Command / 11: |
The Development of Programs / Part 3: |
Introduction / 13: |
Programming as a Goal-Oriented Activity / 14: |
Developing Loops From Invariants and Bounds / 15: |
Developing Invariants / 16: |
Notes on Bound Functions / 17: |
Using Iteration Instead of Recursion / 18: |
Efficiency Considerations / 19: |
Two Larger Examples of Program Development / 20: |
Inverting Programs / 21: |
Notes on Documentation / 22: |
Historical / 23: |
Notes |
Appendix 1-4 |
Answers to Exercises |
References |
Index |
Why Use Logic? Why Prove Programs Correct? / Part 0: |
Propositions / Part 1: |
Reasoning Using Equivalence Transformations / 2: |