Nick Benton

dblp:b/NickBenton · also P. N. Benton · DBLP profile ↗
← Back
33ranked-venue papers
24as first author
0since 2021 · last 2018
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 28 · 21 first-authorTheory of computation · 10 · 8 first-authorArtificial intelligence and machine learning · 2 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
8 papers
Programming languages and type systems · 73% Program verification · 19% Program analysis · 3%
Theoretical computer science
1 paper
Logic in computer science · 100%

Topics — the 25 heaviest of 26, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Programming languages and type systems › language semantics › formal semantics
denotational semantics
0.322014
Abstract effects and proof-relevant logical relations · POPL 2014
Ultrametric Semantics of Reactive Programs · LICS 2011
Program verification › program logic
separation logic
0.322013
High-level separation logic for low-level code · POPL 2013
Ultrametric Semantics of Reactive Programs · LICS 2011
Programming languages and type systems › programming paradigms
functional reactive programming
0.322012
Higher-order functional reactive programming in bounded space · POPL 2012
Ultrametric Semantics of Reactive Programs · LICS 2011
Programming languages and type systems
type systems
0.232014
Abstract effects and proof-relevant logical relations · POPL 2014
Linear Logic, Monads and the Lambda Calculus · LICS 1996
Simple relational correctness proofs for static analyses and program transformations · POPL 2004
Programming languages and type systems › type theory
dependent types
0.212015
Integrating Linear and Dependent Types · POPL 2015
Programming languages and type systems › type systems › substructural type systems
linear types
0.212015
Integrating Linear and Dependent Types · POPL 2015
Programming languages and type systems › computational effects
effect systems
0.212014
Abstract effects and proof-relevant logical relations · POPL 2014
Programming languages and type systems
language semantics
0.212014
Abstract effects and proof-relevant logical relations · POPL 2014
Programming languages and type systems
logical relations
0.212014
Abstract effects and proof-relevant logical relations · POPL 2014
Programming languages and type systems › type systems
type abstraction
0.212014
Abstract effects and proof-relevant logical relations · POPL 2014
Program verification › code-level verification
machine code verification
0.212013
High-level separation logic for low-level code · POPL 2013
Programming languages and type systems › type theory
linear type theory
0.112012
Higher-order functional reactive programming in bounded space · POPL 2012
Programming languages and type systems › type theory
guarded recursion
0.112011
Ultrametric Semantics of Reactive Programs · LICS 2011
Program verification › program logic
hoare logic
0.112015
Integrating Linear and Dependent Types · POPL 2015
Program verification
correctness proof
0.012004
Simple relational correctness proofs for static analyses and program transformations · POPL 2004
Compilers and program optimization
dead code elimination
0.012004
Simple relational correctness proofs for static analyses and program transformations · POPL 2004
Concurrent programming › concurrency theory › process calculi
join calculus
0.012004
Modern concurrency abstractions for C# · ACM Trans. Program. Lang. Syst. 2004
Compilers and program optimization
program transformation
0.012004
Simple relational correctness proofs for static analyses and program transformations · POPL 2004
Program analysis › static analysis › abstract interpretation
relational analysis
0.012004
Simple relational correctness proofs for static analyses and program transformations · POPL 2004
Program verification › program logic
relational hoare logic
0.012004
Simple relational correctness proofs for static analyses and program transformations · POPL 2004
Program analysis
static analysis
0.012004
Simple relational correctness proofs for static analyses and program transformations · POPL 2004
Programming languages and type systems
lambda calculus
0.011996
Linear Logic, Monads and the Lambda Calculus · LICS 1996
Programming languages and type systems › computational effects
monadic metalanguage
0.011996
Linear Logic, Monads and the Lambda Calculus · LICS 1996
Logic in computer science › proof theory › substructural logic
linear logic
0.011996
Linear Logic, Monads and the Lambda Calculus · LICS 1996
Program analysis › static analysis
dependency analysis
0.012004
Simple relational correctness proofs for static analyses and program transformations · POPL 2004

Methods — techniques the papers use, named apart from their topics

realizability model · 0.2proof irrelevance · 0.2setoids · 0.2proof-relevant logical relations · 0.2kripke logical relations · 0.2linear types · 0.1higher-order functions · 0.1ultrametric spaces · 0.1normalization · 0.1non-expansive maps · 0.1call-by-value · 0.0call-by-name · 0.0adjoint presentation · 0.0
YearPublicationVenuePosition
2018 Semantic Equivalence Checking for HHVM Bytecode
abstract
We describe a semantic differencing tool used to compare the byte-codes generated by two different compilers for Hack/PHP at Facebook. The tool is a prover for a simple relational Hoare logic for low-level code and is used in testing, allowing the developers to focus on semantically significant differences between the outputs of the two compilers.
Nick Benton
PPDP1
2018 Proof-Relevant Logical Relations for Name Generation
Nick Benton, Martin Hofmann 0001, Vivek Nigam
Log. Methods Comput. Sci.1
2018 Effect-dependent transformations for concurrent programs
Nick Benton, Martin Hofmann 0001, Vivek Nigam
Sci. Comput. Program.1
2017 Correctness of compiling polymorphism to dynamic typing
abstract
Abstract The connection between polymorphic and dynamic typing was originally considered by Curry et al. (1972, Combinatory Logic , vol. ii) in the form of “polymorphic type assignment” for untyped λ-terms. Types are assigned after the fact to what is, in modern terminology, a dynamic language. Interest in type assignment was revitalized by the proposals of Bracha et al. (1998, OOPSLA) and Bank et al. (1997, POPL) to enrich Java with polymorphism (generics), which in turn sparked the development of other languages, such as Scala, with similar combinations of features. In such a setting, where the target language already has a monomorphic type system, it is desirable to compile polymorphism to dynamic typing in such a way that as much static typing as possible is preserved, relying on dynamics only insofar as genericity is actually required. The basic approach is to compile polymorphism using embeddings from each type into a universal “top” type, ${\mathbb{D}}$ , and partial projections that go in the other direction. This scheme is intuitively reasonable, and, indeed, has been used in practice many times. Proving its correctness, however, is non-trivial. This paper studies the compilation of System F to an extension of Moggi's computational meta-language with a dynamic type and shows how the compilation may be proved correct using a logical relation.
Kuen-Bang Hou (Favonia), Nick Benton, Robert Harper 0001
J. Funct. Program.2
2016 Effect-dependent transformations for concurrent programs
abstract
We describe a denotational semantics for an abstract effect system for a higher-order, shared-variable concurrent language. The semantics validates general effect-based program equivalences, including sufficient conditions for replacing sequential composition with parallel composition. Effect annotations refer to abstract locations, specified by contracts, rather than physical footprints, allowing us to also show soundness of some transformations involving fine-grained concurrent data structures, such as Michael-Scott queues.
Nick Benton, Martin Hofmann 0001, Vivek Nigam
PPDP1
2015 Integrating Linear and Dependent Types
abstract
In this paper, we show how to integrate linear types with type dependency, by extending the linear/non-linear calculus of Benton to support type dependency. Next, we give an application of this calculus by giving a proof-theoretic account of imperative programming, which requires extending the calculus with computationally irrelevant quantification, proof irrelevance, and a monad of computations. We show the soundness of our theory by giving a realizability model in the style of Nuprl, which permits us to validate not only the beta-laws for each type, but also the eta-laws. These extensions permit us to decompose Hoare triples into a collection of simpler type-theoretic connectives, yielding a rich equational theory for dependently-typed higher-order imperative programs. Furthermore, both the type theory and its model are relatively simple, even when all of the extensions are considered.
Neelakantan R. Krishnaswami, Cécilia Pradic, Nick Benton
POPL3
2014 Abstract effects and proof-relevant logical relations
abstract
We give a denotational semantics for a region-based effect system that supports type abstraction in the sense that only externally visible effects need to be tracked: non-observable internal modifications, such as the reorganisation of a search tree or lazy initialisation, can count as 'pure' or 'read only'. This 'fictional purity' allows clients of a module to validate soundly more effect-based program equivalences than would be possible with previous semantics. Our semantics uses a novel variant of logical relations that maps types not merely to partial equivalence relations on values, as is commonly done, but rather to a proof-relevant generalisation thereof, namely setoids. The objects of a setoid establish that values inhabit semantic types, whilst its morphisms are understood as proofs of semantic equivalence. The transition to proof-relevance solves twoawkward problems caused by naïve use of existential quantification in Kripke logical relations, namely failure of admissibility and spurious functional dependencies.
Nick Benton, Martin Hofmann 0001, Vivek Nigam
POPL1
2013 The Proof Assistant as an Integrated Development Environment
Nick Benton
APLAS1
2013 High-level separation logic for low-level code
abstract
Separation logic is a powerful tool for reasoning about structured, imperative programs that manipulate pointers. However, its application to unstructured, lower-level languages such as assembly language or machine code remains challenging. In this paper we describe a separation logic tailored for this purpose that we have applied to x86 machine-code programs.
Jonas Braband Jensen, Nick Benton, Andrew Kennedy
POPL2
2013 Coq: the world's best macro assembler?
abstract
We describe a Coq formalization of a subset of the x86 architecture. One emphasis of the model is brevity: using dependent types, type classes and notation we give the x86 semantics a makeover that counters its reputation for baroqueness. We model bits, bytes, and memory concretely using functions that can be computed inside Coq itself; concrete representations are mapped across to mathematical objects in the SSReflect library (naturals, and integers modulo 2n) to prove theorems. Finally, we use notation to support conventional assembly code syntax inside Coq, including lexically-scoped labels. Ordinary Coq definitions serve as a powerful "macro" feature for everything from simple conditionals and loops to stack-allocated local variables and procedures with parameters. Assembly code can be assembled within Coq, producing a sequence of hex bytes. The assembler enjoys a correctness theorem relating machine code in memory to a separation-logic formula suitable for program verification.
Andrew Kennedy, Nick Benton, Jonas Braband Jensen, Pierre-Évariste Dagand
PPDP2
2012 Adding Equations to System F Types
Neelakantan R. Krishnaswami, Nick Benton
ESOP2
2012 Higher-order functional reactive programming in bounded space
abstract
Functional reactive programming (FRP) is an elegant and successful approach to programming reactive systems declaratively. The high levels of abstraction and expressivity that make FRP attractive as a programming model do, however, often lead to programs whose resource usage is excessive and hard to predict. In this paper, we address the problem of space leaks in discrete-time functional reactive programs. We present a functional reactive programming language that statically bounds the size of the dataflow graph a reactive program creates, while still permitting use of higher-order functions and higher-type streams such as streams of streams. We achieve this with a novel linear type theory that both controls allocation and ensures that all recursive definitions are well-founded.
Neelakantan R. Krishnaswami, Nick Benton, Jan Hoffmann 0002
POPL2
2012 Strongly Typed Term Representations in Coq
Nick Benton, Chung-Kil Hur, Andrew Kennedy, Conor McBride
J. Autom. Reason.1
2011 A semantic model for graphical user interfaces
abstract
We give a denotational model for graphical user interface (GUI) programming using the Cartesian closed category of ultrametric spaces. The ultrametric structure enforces causality restrictions on reactive systems and allows well-founded recursive definitions by a generalization of guardedness. We capture the arbitrariness of user input (e.g., a user gets to decide the stream of clicks she sends to a program) by making use of the fact that the closed subsets of an ultrametric space themselves form an ultrametric space, allowing us to interpret nondeterminism with a "powerspace" monad.
Neelakantan R. Krishnaswami, Nick Benton
ICFP2
2011 Ultrametric Semantics of Reactive Programs
abstract
We describe a denotational model of higher-order functional reactive programming using ultra metric spaces and non expansive maps, which provide a natural Cartesian closed generalization of causal stream functions and guarded recursive definitions. We define a type theory corresponding to this semantics and show that it satisfies normalization. Finally, we show how to efficiently implement reactive programs written in this language using an imperatively updated data flow graph, and give a separation logic proof that this low-level implementation is correct with respect to the high-level semantics.
Neelakantan R. Krishnaswami, Nick Benton
LICS2
2009 Biorthogonality, step-indexing and compiler correctness
abstract
We define logical relations between the denotational semantics of a simply typed functional language with recursion and the operational behaviour of low-level programs in a variant SECD machine. The relations, which are defined using biorthogonality and stepindexing, capture what it means for a piece of low-level code to implement a mathematical, domain-theoretic function and are used to prove correctness of a simple compiler. The results have been formalized in the Coq proof assistant.
Nick Benton, Chung-Kil Hur
ICFP1
2009 Relational semantics for effect-based program transformations: higher-order store
abstract
We give a denotational semantics to a type and effect system tracking reading and writing to global variables holding values that may include higher-order effectful functions. Refined types are modelled as partial equivalence relations over a recursively-defined domain interpreting the untyped language, with effect information interpreted in terms of the preservation of certain sets of binary relations on the store.
Nick Benton, Andrew Kennedy, Lennart Beringer, Martin Hofmann 0001
PPDP1
2008 Diagrammatic Reasoning in Separation Logic
M. Ridsdale, Mateja Jamnik, Nick Benton, Josh Berdine
Diagrams3
2007 Relational semantics for effect-based program transformations with dynamic allocation
abstract
We give a denotational semantics to a region-based effect system tracking reading, writing and allocation in a higher-order language with dynamically allocated integer references.
Nick Benton, Andrew Kennedy, Lennart Beringer, Martin Hofmann 0001
PPDP1
2007 Formalizing and verifying semantic type soundness of a simple compiler
abstract
We describe a semantic type soundness result, formalized in the Coq proof assistant, for a compiler from a simple imperative language with heap-allocated data into an idealized assembly language. Types in the high-level language are interpreted as binary relations, built using both second-order quantification and a form of separation structure, over stores and code pointers in the low-level machine.
Nick Benton, Uri Zarfaty
PPDP1
2006 Reading, Writing and Relations
Nick Benton, Andrew Kennedy, Martin Hofmann 0001, Lennart Beringer
APLAS1
2005 A Typed, Compositional Logic for a Stack-Based Abstract Machine
Nick Benton
APLAS1
2005 Embedded interpreters
abstract
This is a tutorial on using type-indexed embedding/projection pairs when writing interpreters in statically-typed functional languages. The method allows (higher-order) values in the interpreting language to be embedded in the interpreted language and values from the interpreted language may be projected back into the interpreting one. This is particularly useful when adding command-line interfaces or scripting languages to applications written in functional languages. We first describe the basic idea and show how it may be extended to languages with recursive types and applied to elementary meta-programming. We then show how the method combines with Filinski's continuation-based monadic reflection operations to define an [lsquor]extensional[rsquor] version of the call-by-value monadic translation and hence to allow values to be mapped bidirectionally between the levels of an interpreter for a functional language parameterized by an arbitrary monad. Finally, we show how SML functions may be embedded into, and projected from, an interpreter for an asynchronous $\pi$ -calculus via an ‘extensional’ variant of a standard translation from $\lambda$ into $\pi$ .
Nick Benton
J. Funct. Program.1
2004 Simple relational correctness proofs for static analyses and program transformations
abstract
We show how some classical static analyses for imperative programs, and the optimizing transformations which they enable, may be expressed and proved correct using elementary logical and denotationaltechniques. The key ingredients are an interpretation of program properties as relations, rather than predicates, and a realization that although many program analyses are traditionally formulated in very intensional terms, the associated transformations are actually enabled by more liberal extensional properties.We illustrate our approach with formal systems for analysing and transforming while-programs. The first is a simple type system which tracks constancy and dependency information and can be used to perform dead-code elimination, constant propagation and program slicing as well as capturing a form of secure information flow. The second is a relational version of Hoare logic, which significantly generalizes our first type system and can also justify optimizations including hoisting loop invariants. Finally we show how a simple available expression analysis and redundancy elimination transformation may be justified by translation into relational Hoare logic.
Nick Benton
POPL1
2004 Adventures in interoperability: the SML.NET experience
abstract
SML.NET is a compiler for Standard ML that targets the Common Language Runtime and is integrated into the Visual Studio development environment. It supports easy interoperability with other .NET languages via a number of language extensions, which go considerably beyond those of our earlier compiler, MLj.This paper describes the new language extensions and the features of the Visual Studio plugin, including syntax highlighting, Intellisense, continuous type inference and debugger support. We discuss our experiences using SML.NET to write SML programs that interoperate with other .NET languages, libraries and frameworks. Examples include the Visual Studio plugin itself (written in SML.NET, using .NET's COM interop features to integrate in a C++ application) and writing ASP.NET and Pocket PC applications in SML.
Nick Benton, Andrew Kennedy, Claudio V. Russo
PPDP1
2004 Modern concurrency abstractions for C#
abstract
Polyphonic C ♯ is an extension of the C ♯ language with new asynchronous concurrency constructs, based on the join calculus. We describe the design and implementation of the language and give examples of its use in addressing a range of concurrent programming problems.
Nick Benton, Luca Cardelli, Cédric Fournet
ACM Trans. Program. Lang. Syst.1
2002 Modern Concurrency Abstractions for C#
Nick Benton, Luca Cardelli, Cédric Fournet
ECOOP1
2001 Exceptional Syntax Journal of Functional Programming
abstract
From the points of view of programming pragmatics, rewriting and operational semantics, the syntactic construct used for exception handling in ML-like programming languages, and in much theoretical work on exceptions, has subtly undesirable features. We propose and discuss a more well-behaved construct.
Nick Benton, Andrew Kennedy
J. Funct. Program.1
1999 Interlanguage Working Without Tears: Blending SML with Java
abstract
A good foreign-language interface is crucial for the success of any modern programming language implementation. Although all serious compilers for functional languages have some facility for interlanguage working, these are often limited and awkward to use.This article describes the features for bidirectional interlanguage working with Java that are built into the latest version of the MLj compiler. Because the MLj foreign interface is to another high-level typed language which shares a garbage collector with compiled ML code, and because we are willing to extend the ML language, we are able to provide unusually powerful, safe and easy to use interlanguage working features. Indeed, rather then being a traditional foreign interface, our language extensions are more a partial integration of Java features into SML.We describe this integration of Standard ML and Java, first informally with example program fragments, and then formally in the notation used by The Definition of Standard ML.
Nick Benton, Andrew Kennedy
ICFP1
1998 Compiling Standard ML to Java Bytecodes
abstract
MLJ compiles SML'97 into verifier-compliant Java bytecodes. Its features include type-checked interlanguage working extensions which allow ML and Java code to call each other, automatic recompilation management, compact compiled code and runtime performance which, using a `just in time' compiling Java virtual machine, usually exceeds that of existing specialised bytecode interpreters for ML. Notable features of the compiler itself include whole-program optimisation based on rewriting, compilation of polymorphism by specialisation, a novel monadic intermediate lang...
Nick Benton, Andrew Kennedy, George Russell
ICFP1
1998 Computational Types from a Logical Perspective
abstract
Moggi's computational lambda calculus is a metalanguage for denotational semantics which arose from the observation that many different notions of computation have the categorical structure of a strong monad on a cartesian closed category. In this paper we show that the computational lambda calculus also arises naturally as the term calculus corresponding (by the Curry–Howard correspondence) to a novel intuitionistic modal propositional logic. We give natural deduction, sequent calculus and Hilbert-style presentations of this logic and prove strong normalisation and confluence results.
Nick Benton, Gavin M. Bierman, Valeria de Paiva
J. Funct. Program.1
1996 Linear Logic, Monads and the Lambda Calculus
abstract
Models of intuitionistic linear logic also provide models of Moggi's computational metalanguage. We use the adjoint presentation of these models and the associated adjoint calculus to show that three translations, due mainly to Moggi, of the lambda calculus into the computational metalanguage (direct, call-by-name and call-by-value) correspond exactly to three translations, due mainly to Girard, of intuitionistic logic into intuitionistic linear logic. We also consider extending these results to languages with recursion.
Nick Benton, Philip Wadler
LICS1
1995 Strong Normalisation for the Linear Term Calculus
abstract
Abstract We prove a strong normalisation result for the linear term calculus of Benton, Bierman, Hyland and de Paiva. Rather than prove the result from first principles, we give a translation of linear terms into terms in the second-order polymorphic lambda calculus (λ2) which allows the result to be proved by appealing to the well-known strong normalisation property of λ2. An interesting feature of the translation is that it makes use of the λ2 coding of a coinductive datatype as the translation of the !-types (exponentials) of the linear calculus.
Nick Benton
J. Funct. Program.1