Show simple item record

dc.rights.licenseCC-BY-NC-ND
dc.contributor.advisorSwiersta, W.S.
dc.contributor.advisorHage, J.
dc.contributor.advisorGoodloe, A.E.
dc.contributor.authorDedden, F.H.
dc.date.accessioned2018-06-25T17:01:32Z
dc.date.available2018-06-25T17:01:32Z
dc.date.issued2018
dc.identifier.urihttps://studenttheses.uu.nl/handle/20.500.12932/29176
dc.description.abstractElectronics and computers are all around us, ranging from cellphones to aircraft avionics. Some systems, including aircraft and nuclear powerplants, are considered safety-critical: failure can lead to the injury or death of humans. These ultra-critical systems require a very small probability of failure (<10^-9), and are strictly certified by regulatory bodies. Static software verification can aid in improving the safety of these systems, but only scales for a limited number of properties. Functional verification often requires the use of interactive theorem provers and are not practical for industrial scale systems. There is also a push to apply highly nondeterministic techniques such as machine learning in safety-critical systems, which cannot be verified using traditional proof techniques. Runtime verification, where specifications are checked during execution can allow us to verify software systems that cannot be verified by other means. The Haskell based Copilot runtime verification framework has been developed as part of a NASA project applying runtime verification to real-time embedded C programs. A lack of first class support for arrays and structs limited Copilot's practical usability. By replacing the current Atom and SBV-based code generation back-ends by a new, custom designed one, we are able to implement both arrays and structs as first class members of our specification. Both C structs and arrays are not straightforward to represent in Haskell, and require special attention. In particular type literals have been used to implement a safer array than Haskell normally allows. Having native support for structs and arrays simplifies monitor specifications, and makes writing them easier and quicker. In addition, a tailored code generator also allows us to improve on the readability of the generated output code, making debugging and tracing easier, which in the end aids in making systems safer.
dc.description.sponsorshipUtrecht University
dc.format.extent1722103
dc.format.mimetypeapplication/pdf
dc.language.isoen
dc.titleCompiling an Haskell EDSL to C: A new C back-end for the Copilot runtime verification framework
dc.type.contentMaster Thesis
dc.rights.accessrightsOpen Access
dc.subject.keywordsfunctional programming, runtime verification, haskell, dependent types, types, embedded, embedded systems, avionics, safety-critical, ultra-critical, ultra-reliable, hard real-time, verification, copilot, compiler, code generation, structs, arrays, domain specific language, C, monitoring
dc.subject.courseuuComputing Science


Files in this item

Thumbnail

This item appears in the following Collection(s)

Show simple item record