{'fraction_non_alphanumeric': 0.018115942028985508, 'fraction_numerical': 0.0, 'mean_word_length': 5.242937853107344, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Designing and Refining Specifications with Modules

Specifications have a dual existence: on the one hand they constitute a contract between the customer and the vendor, and on the other hand they are the instructions from the vendor to his programmers. From the former viewpoint, we would like to have methods for incrementally constructing specifications, and from the second viewpoint we would like to have mechanisms for systematically "calculating" an implementation of a specification. Here we seek to develop a methodology that can give formal support to both these activities within a model-oriented framework. Indeed, these two activities, which we may call designing and refining, have much in common, and to some extent we may also "calculate" parts of a specification. The basic theoretical notion underlying our approach is that programs and specifications are more or less the same thing: a programming language is the implementable subset of a specification language. The basic practical tool we outline is a notion of modules that su pports the incremental construction of specifications.