{'fraction_non_alphanumeric': 0.019128586609989374, 'fraction_numerical': 0.0, 'mean_word_length': 6.029850746268656, '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}}
Correctness Proofs for Abstract Implementations

Abstract New syntax and semantics for implementation of abstract data types are presented in this paper. This formalism leads to a simple, exhaustive description of the abstract implementation correctness criteria. These correctness criteria are expressed in terms of sufficient completeness and hierarchical consistency . Thus, correctness proofs of abstract implementations can be handled using classical tools such as term rewriting methods, structural induction methods, or syntactical methods (e.g., fair presentations). The main idea of this approach is a fundamental distinction between descriptive and constructive specifications, using both abstraction and representation functions. Moreover, we show that the composition of several correct abstract implementations is always correct. This provides a formal foundation for a methodology of program development by stepwise refinement.