92 research outputs found

    Cogent: uniqueness types and certifying compilation

    Get PDF
    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

    Get PDF
    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

    Welcome from the Chair

    No full text

    Heterogeneous binary random-access lists

    No full text

    First Class Syntax, Semantics and Their Composition

    No full text
    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

    No full text
    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

    No full text
    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
    corecore