Book Description
The hierarchical decomposition of programs into smaller ones is generally considered imperative to master the complexity of large programs. The impact of this principle of program decomposition on the specification and verification of parallel executed programs is the subject of this monograph. Two important yardsticks for verification methods, those of compositionality and modularity, are made precise. The problem of reusing software is addressed by the introduction of the notion of specification adaptation. Within this context, different methods for specifying the observable behavior with respect to partial correctness of communicating processes are considered, and in particular the contrast between the "programs are predicates" and the "programs are predicate transformers" paradigms is shown. The associated formal proof systems are proven sound and complete in various senses with respect to the denotational semantics of the programming language, and they are related to each other to give an in-depth comparison between the different styles of program verification. The programming language TNP used here is near to actual languages like Occam. It combines CCS/CSP style communication based programming with state based programming, and allows dynamically expanding and shrinking networks of processes.