92 research outputs found
Cogent: uniqueness types and certifying compilation
This paper presents a framework aimed at significantly reducing the cost of proving functional correctness for low-level operating systems components. The framework is designed around a new functional programming language, Cogent. A central aspect of the language is its uniqueness type system, which eliminates the need for a trusted runtime or garbage collector while still guaranteeing memory safety, a crucial property for safety and security. Moreover, it allows us to assign two semantics to the language: The first semantics is imperative, suitable for efficient C code generation, and the second is purely functional, providing a user-friendly interface for equational reasoning and verification of higher-level correctness properties. The refinement theorem connecting the two semantics allows the compiler to produce a proof via translation validation certifying the correctness of the generated C code with respect to the semantics of the Cogent source program. We have demonstrated the effectiveness of our framework for implementation and for verification through two file system implementations
Navigation and Exploration in 3D-Game Automated Play Testing
To enable automated software testing, the ability to automatically navigate
to a state of interest and to explore all, or at least sufficient number of,
instances of such a state is fundamental. When testing a computer game the
problem has an extra dimension, namely the virtual world where the game is
played on. This world often plays a dominant role in constraining which logical
states are reachable, and how to reach them. So, any automated testing
algorithm for computer games will inevitably need a layer that deals with
navigation on a virtual world. Unlike e.g. navigating through the GUI of a
typical web-based application, navigating over a virtual world is much more
challenging. This paper discusses how concepts from geometry and graph-based
path finding can be applied in the context of game testing to solve the problem
of automated navigation and exploration. As a proof of concept, the paper also
briefly discusses the implementation of the proposed approach
Report on the Workshop on Sustainable Software Sustainability 2019 (WOSSS19)
This report is based on the discussions and presentations that took place at the Workshop on Sustainable Software Sustainability (www.software.ac.uk/wosss19) in April 2019 (WOSSS19). It captures the state of the art for a range of Software Sustainability themes that were brought up by the organisers and attendees of the workshop
A well-known representation of monoids and its application to the function 'vector reverse': Functional Pearl
First Class Syntax, Semantics and Their Composition
Ideally complexity is managed by composing a system out of quite a few, more or less independent, and much smaller descriptions of various aspects of the overall artifact. When describing (extensible) programming languages, attribute grammars have turned out to be an excellent tool for modular definition and integration of their different aspects. In this thesis we show how to construct a programming language implementation by composing a collection of attribute grammar fragments describing separate aspects of the language. More specifically we describe a coherent set of libraries and tools which together make this possible in Haskell, \emph{where the correctness of the composition is enforced through the Haskell type system}'s ability to represent attribute grammars as plain Haskell values and their interfaces as Haskell types. Semantic objects thus constructed can be combined with parsers which are constructed on the fly out of parser fragments and are also represented as typed Haskell values. Again the type checker prevents insane compositions. As a small case study of the techniques proposed in this thesis, we implemented a compiler for the (Pascal-like) imperative language Oberon0. Through an incremental design, we show the modularity capacities of our techniques
T3i: A Tool for Generating and Querying Test Suites for Java
T3i is an automated unit-testing tool to test Java classes. To expose interactions T3i generates test-cases in the form of sequences of calls to the methods of the target class. What separates it from other testing tools is that it treats test suites as first class objects and allows users to e.g. combine, query, and filter them. With these operations, the user can construct a test suite with specific properties. Queries can be used to check correctness properties. Hoare triples, LTL formulas, and algebraic equations can be queried. T3i can be used interactively, thus facilitating more exploratory testing, as well as through a script. The familiar Java syntax can be used to control it, or alternatively one can use the much lighter Groovy syntax
Descent data and absolute Kan extensions
The fundamental construction underlying descent theory, the lax descent category, comes with a functor that forgets the descent data. We prove that, in any 2-category A with lax descent objects, the forgetful morphisms create all Kan extensions that are preserved by certain morphisms. As a consequence, in the case A = Cat, we get a monadicity theorem which says that a right adjoint functor is monadic if it is, up to the composition with an equivalence, (naturally isomorphic to) a functor that forgets descent data. In particular, within the classical context of descent theory, we show that, in a fibred category, the forgetful functor between the category of internal actions of a precategory a and the category of internal actions of the underlying discrete precategory is monadic if and only if it has a left adjoint. More particularly, this shows that one of the implications of the celebrated Bénabou-Roubaud theorem does not depend on the so called Beck-Chevalley condition. Namely, we prove that, in indexed categories, whenever an effective descent morphism induces a right adjoint functor, the induced functor is monadic
- …
