Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Robbert Krebbers is active.

Publication


Featured researches published by Robbert Krebbers.


symposium on principles of programming languages | 2014

An operational and axiomatic semantics for non-determinism and sequence points in C

Robbert Krebbers

The C11 standard of the C programming language does not specify the execution order of expressions. Besides, to make more effective optimizations possible (eg. delaying of side-effects and interleaving), it gives compilers in certain cases the freedom to use even more behaviors than just those of all execution orders. Widely used C compilers actually exploit this freedom given by the C standard for optimizations, so it should be taken seriously in formal verification. This paper presents an operational and axiomatic semantics (based on separation logic) for non-determinism and sequence points in C. We prove soundness of our axiomatic semantics with respect to our operational semantics. This proof has been fully formalized using the Coq proof assistant.


certified programs and proofs | 2013

Aliasing Restrictions of C11 Formalized in Coq

Robbert Krebbers

The C11 standard of the C programming language describes dynamic typing restrictions on memory operations to make more effective optimizations based on alias analysis possible. These restrictions are subtle due to the low-level nature of C, and have not been treated in a formal semantics before. We present an executable formal memory model for C that incorporates these restrictions, and at the same time describes required low-level operations. Our memory model and essential properties of it have been fully formalized using the Coq proof assistant.


foundations of software science and computation structure | 2013

Separation logic for non-local control flow and block scope variables

Robbert Krebbers; Freek Wiedijk

We present an approach for handling non-local control flow (goto and return statements) in the presence of allocation and deallocation of block scope variables in imperative programming languages. We define a small step operational semantics and an axiomatic semantics (in the form of a separation logic) for a small C-like language that combines these two features, and which also supports pointers to block scope variables. Our operational semantics represents the program state through a generalization of Huets zipper data structure. We prove soundness of our axiomatic semantics with respect to our operational semantics. This proof has been fully formalized in Coq.


certified programs and proofs | 2015

A Typed C11 Semantics for Interactive Theorem Proving

Robbert Krebbers; Freek Wiedijk

We present a semantics of a significant fragment of the C programming language as described by the C11 standard. It consists of a small step semantics of a core language, which uses a structured memory model to capture subtleties of C11, such as strict-aliasing restrictions related to unions, that have not yet been addressed by others. The semantics of actual C programs is defined by translation into this core language. We have an explicit type system for the core language, and prove type preservation and progress, as well as type correctness of the translation. Due to unspecified order of evaluation, our operational semantics is non-deterministic. To explore all defined and undefined behaviors, we present an executable semantics that computes a stream of finite sets of reachable states. It is proved sound and complete with respect to the operational semantics. Both the translation into the core language and the executable semantics are defined as Coq programs. Extraction to OCaml is used to obtain a C interpreter to run and test the semantics on actual C programs. All proofs are fully formalized in Coq.


interactive theorem proving | 2014

Formal C Semantics: CompCert and the C Standard

Robbert Krebbers; Xavier Leroy; Freek Wiedijk

We discuss the difference between a formal semantics of the C standard, and a formal semantics of an implementation of C that satisfies the C standard. In this context we extend the CompCert semantics with end-of-array pointers and the possibility to byte-wise copy objects. This is a first and necessary step towards proving that the CompCert semantics refines the formal version of the C standard that is being developed in the Formalin project in Nijmegen.


International Journal of Human-computer Studies \/ International Journal of Man-machine Studies | 2010

Pure Type Systems without Explicit Contexts

Herman Geuvers; Robbert Krebbers; James McKinna; Freek Wiedijk

We present an approach to type theory in which the typing judgments do not have explicit contexts. Instead of judgments of shape G‘ A : B, our systems just have judgments of shape A : B. A key feature is that we distinguish free and bound variables even in pseudo-terms. Specifically we give the rules of the ‘Pure Type System’ class of type theories in this style. We prove that the typing judgments of these systems correspond in a natural way with those of Pure Type Systems as traditionally formulated. I.e., our systems have exactly the same well-typed terms as traditional presentations of type theory. Our system can be seen as a type theory in which all type judgments share an identical, infinite, typing context that has infinitely many variables for each possible type. For this reason we call our system G¥. This name means to suggest that our type judgment A : B should be read as G¥‘ A : B, with a fixed infinite type context called G¥.


verified software theories tools experiments | 2014

Separation Algebras for C Verification in Coq

Robbert Krebbers

Separation algebras are a well-known abstraction to capture common structure of both permissions and memories in programming languages, and form the basis of models of separation logic. As part of the development of a formal version of an operational and axiomatic semantics of the C11 standard, we present a variant of separation algebras that is well suited for C verification.


Annals of Pure and Applied Logic | 2013

The λμT-calculus

Herman Geuvers; Robbert Krebbers; James McKinna

Abstract Calculi with control operators have been studied as extensions of simple type theory. Real programming languages contain datatypes, so to really understand control operators, one should also include these in the calculus. As a first step in that direction, we introduce λ μ T , a combination of Parigotʼs λμ-calculus and Godelʼs T, to extend a calculus with control operators with a datatype of natural numbers with a primitive recursor. We consider the problem of confluence on raw terms, and that of strong normalization for the well-typed terms. Observing some problems with extending the proofs of Baba et al. and Parigotʼs original confluence proof, we provide new, and improved, proofs of confluence (by complete developments) and strong normalization (by reducibility and a postponement argument) for our system. We conclude with some remarks about extensions, choices, and prospects for an improved presentation.


Journal of Automated Reasoning | 2016

A Formal C Memory Model for Separation Logic

Robbert Krebbers

The core of a formal semantics of an imperative programming language is a memory model that describes the behavior of operations on the memory. Defining a memory model that matches the description of C in the C11 standard is challenging because C allows both high-level (by means of typed expressions) and low-level (by means of bit manipulation) memory accesses. The C11 standard has restricted the interaction between these two levels to make more effective compiler optimizations possible, at the expense of making the memory model complicated. We describe a formal memory model of the (non-concurrent part of the) C11 standard that incorporates these restrictions, and at the same time describes low-level memory operations. This formal memory model includes a rich permission model to make it usable in separation logic and supports reasoning about program transformations. The memory model and essential properties of it have been fully formalized using the Coq proof assistant.


arXiv: Logic in Computer Science | 2012

A call-by-value lambda-calculus with lists and control

Robbert Krebbers

Calculi with control operators have been studied to reason about control in programming languages and to interpret the computational content of classical proofs. To make these calculi into a real programming language, one should also include data types. As a step into that direction, this paper defines a simply typed call-by-value lambda calculus with the control operators catch and throw, a data type of lists, and an operator for primitive recursion (a la Goedels T). We prove that our system satisfies subject reduction, progress, confluence for untyped terms, and strong normalization for well-typed terms.

Collaboration


Dive into the Robbert Krebbers's collaboration.

Top Co-Authors

Avatar

Freek Wiedijk

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

Herman Geuvers

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

Bas Spitters

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

James McKinna

University of St Andrews

View shared research outputs
Researchain Logo
Decentralizing Knowledge