The design of computing systems can only properly succeed if it is well-grounded in theory, and … the important concepts in a theory can only emerge through protracted exposure to application.
It has long been my personal view that the separation of practical and theoretical work is artificial and injurious. Much of the practical work done in computing, both in software and in hardware design, is unsound and clumsy because the people who do it have not any clear understanding of the fundamental design principles of their work. Most of the abstract mathematical and theoretical work is sterile because it has no point of contact with real computing.
This part offers a rigorous foundation for LePUS3, the language of Codecharts. We define precisely the relation between programs and specifications, and provide an answer to the verification question. We also describe Class-Z, an equivalent specification language to LePUS3. We conclude with the subject of reasoning on Codecharts.
Most formal statements provided in this chapter (propositions and lemmas) will include sketched “proofs”, the simplest of which will be omitted. Formal definitions can be found in Appendix II.
The following writing conventions are adopted throughout this chapter: