{'fraction_non_alphanumeric': 0.015045135406218655, 'fraction_numerical': 0.0, 'mean_word_length': 5.438709677419355, '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}}
Proving the Correctness of Program Transformations

Given a formal specification S of a problem, we wish to obtain a computer program that solves this problem. The traditional approach used to obtain such a program has been to give the formal specification to a programmer. The programmer’s task is to study the specification, and after he fully understands it, to write a computer program satisfying the specification. For critical applications, formally proving that the program satisfies the specification is highly desirable. Unfortunately, proving that a program satisfies a formal specification is very difficult, especially when the program is obtained from the formal specification in the traditional manner. In this thesis we explore a paradigm that allows one to obtain programs from formal specifications through automatable transformations. In this paradigm, if the transformations can be shown to be correctness preserving then it follows that the program satisfies the specification.