Abstract

The first thesis introduces a formal programming model with temporal logic operators to express progress and safety criteria. The presented refinement rules are proved to be sound. These rules form the basis of the algorithm that can be used to check the correctness of derivation sequences expressed in the model. A embedded language in Haskell is introduced to facilitate the practical use of the formal model. In connection with this, the thesis analyse the language embedding techniques possible in Haskell. Specification of selected C++ instructions and the derivation of simple, correct-by-construction C++ program fragments demonstrate the use of the system. The second thesis is motivated by a shortcoming of the pattern matching of functional languages. Different possibilities of pattern matching on embedded programs in functional languages are analysed in depth, and it is shown that, none of these provide satisfactory solutions. The first step of the solution is to introduce the notion of restricted function patterns, being a limited version of function patterns known from the Curry language. The semantics and implementation of restricted function patterns can be based on the classical pattern matching in functional languages. The restricted function patterns are suitable to provide list prefix patterns, n+k patterns and polymorphic numeric literals in a consistent way. The thesis proves that the restricted function pattern property is undecidable. For this reason, the second step of the solution is the introduction of decidable function patterns. This notion is based on a decision algorithm, which is guaranteed to terminate, and accepts a proper subset of the restricted function patterns. All earlier listed use cases fall into the accepted category, and the decision algorithm could be built into compilers. It is even possible to use the language extension without proper compiler support via a library. The third thesis uses these elaborated techniques to solve non-trivial problems of formal software development. The thesis argues that metaprogramming is a safe and performant technique, if used for the generation of proofs. Proof templates are defined for classical proof techniques and program derivation. The system is expressive enough to be used to derive programs using dynamic memory management and pointers in the powerful style of separation logic. Axioms of selected container and iterator instructions of the C++ Standard Template Library are also given.

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call

Disclaimer: All third-party content on this website/platform is and will remain the property of their respective owners and is provided on "as is" basis without any warranties, express or implied. Use of third-party content does not indicate any affiliation, sponsorship with or endorsement by them. Any references to third-party content is to identify the corresponding services and shall be considered fair use under The CopyrightLaw.