18 research outputs found

    Structuring Interactive Correctness Proofs by Formalizing Coding Idioms

    Get PDF
    This paper examines a novel strategy for developing correctness proofs in interactive software verification for C programs. Rather than proceeding backwards from the generated verification conditions, we start by developing a library of the employed data structures and related coding idioms. The application of that library then leads to correctness proofs that reflect informal arguments about the idioms. We apply this strategy to the low-level memory allocator of the L4 microkernel, a case study discussed in the literature

    High-level Proofs about Low-level Programs

    Get PDF
    Functional verification of low-level code requires abstractions over the memory model to be effective, since the number of side-conditions induced by byte-addressed memory is prohibitive even with modern automated reasoners. We propose a flexible solution to this challenge: assertions contain explicit memory layouts which carry the necessary side-conditions as invariants. The memory-related proof obligations arising during verification can then be solved using specialized automatic proof procedures. The remaining verification conditions about the content of data structures directly reflect a developer's understanding. The development is formalized in Isabelle/HOL

    Erweitertes Literatur- und Archivalienverzeichnis zu: Holger Gast, Antonia Leugers, August H. Leugers-Scherzberg, Uwe Sandfuchs: Katholische Missionsschulen in Deutschland 1887-1940, Bad Heilbrunn: Verlag Julius Klinkhardt 2013

    Get PDF
    Bei dieser Online-Ressource handelt es sich um das erweiterte Literatur- und Archivalienverzeichnis zu der Studie: Holger Gast, Antonia Leugers, August H. Leugers-Scherzberg, Uwe Sandfuchs: Katholische Missionsschulen in Deutschland 1887-1940, Bad Heilbrunn: Verlag Julius Klinkhardt 201

    How to use objects: code and concepts

    No full text

    Ein Generator für Typchecker

    No full text
    Compiler-compilers are tools that generate substitutes for hand-written compiler components from high-level formal specifications. Such tools exist for lexical, syntactic and semantic analysis, optimizers and code generation. The established benefits are reduced development time and increased confidence in the correctness of the resulting software. This thesis presents a generator for type checkers. Given a description of the type system by typing rules, the generator yields a type checker that constructs proofs using the typing rules. Unlike earlier approaches, we derive suitable notions of proof and typing rule from an analysis of type systems and from corresponding constructs in mathematical proof theory. The approach thus respects the structure and intention of the typing rules, rather than expressing the rules in some pre-existing formalism. The given applications comprise type checkers for imperative, object-oriented and functional languages, including ML type inference. The typing rules for these checkers directly represent those found in the literature. They naturally describe the typing of single language constructs and they can be re-used in different checkers. We use the generator to develop the language Saga for generic programming. Generic programming has become a standard approach to creating reusable and reliable software, particularly through the wide-spread use of the C++ Standard Template Library (STL). Existing C++ compilers cannot type-check generic algorithms before instances are generated, hence errors manifest themselves only when the algorithms are used. Saga overcomes this problem by a novel language design that enables generic algorithms as found in the C++ STL to be type-checked such that the correctness requirements stated in algorithm interfaces are obeyed and instantiation never fails. It therefore turns the aims of the earlier proposal SuchThat into a concrete language design.Compiler-compiler generieren aus formalen Spezifikationen Komponenten für Compiler, um dort handgeschriebenen Code ersetzen. Solche Generatoren existieren für die lexikalische, syntaktische und semantische Anlayse, für Optimierer und die Coderzeugung. Es hat sich gezeigt, daß die Entwicklungszeit abnimmt und gleichzeitig das Vertrauen in die Korrektheit der Software steigt. Die vorliegende Dissertation beschreibt einen Generator für Typchecker. Er erzeugt aus einer Spezifikation eines Typsystems, die in Form vom Typregeln gegeben ist, einen ablauffähigen Typchecker, der Typherleitungen mit Hilfe der gegebenen Regeln konstruiert. Abweichend von früheren Vorschlägen werden passende Definitionen für Typherleitung und Typregel durch Analyse existierender Typsysteme und der mathematischen Beweistheorie gewonnen. Auf diese Weise reflektiert der Ansatz die Struktur und Intention der Typsysteme, anstatt die Typregeln in einem bereits vorhandenen Formalismus auszudrücken. Als Anwendungen werden Typchecker für imperative, objekt-orientierte und funktionale Sprachen, einschließlich der ML Typinferenz, formalisiert. Die Typregeln dieser Checker korrespondieren direkt mit den aus der Literatur bekannten. Da sie sich einzelnen Sprachkonstrukten zuordnen lassen, können sie in verschiedenen Checkern wiederverwendet werden. Eine spezielle Anwendung ist die Sprache Saga für die Generische Programmierung. Die Generische Programmierung ist zu einem Standardansatz zur Erstellung verläßlicher und wiederverwendbarer Software geworden, insbesondere durch die weite Verbreitung der C++ Standard Template Library (STL). Der C++ Compiler kann allerdings die generischen Algorithmen erst dann prüfen, wenn konkrete Instanzen generiert werden. Fehler in den Algorithmen manifestieren sich daher erst bei der Benutzung. Saga löst dieses Problem durch eine neues Sprachdesign, das es erlaubt, generische Algorithmen der STL so zu überprüfen, daß die deklarierten Korrektheitsbedingungen erfüllt sind und die Instanzgenerierung nie fehlschlägt, wenn der Typchecker die Algorithmen akzeptiert. Damit realisiert Saga die Ziele des früheren Sprachvorschlags SuchThat in einem konkreten Sprachdesign

    Considerations on genericity for programming language design

    Get PDF
    Veröffentlichung des Wilhelm-Schickard-Institut für Informatik Universität Tübinge

    An Architecture for Extensible Click’n Prove Interfaces

    No full text
    Abstract. We present a novel software architecture for graphical interfaces to interactive theorem provers. It provides click’n prove functionality at the interface level without requiring support from the underlying theorem prover and enables users to extend that functionality through light-weight plugins. Building on established architectural and design patterns for interactive and extensible systems, the architecture also clarifies the relationship between the special application of theorem proving and conventional designs.
    corecore