Graham Hutton

dblp:80/6729 · DBLP profile ↗
← Back
59ranked-venue papers
38as first author
21since 2021 · last 2026
0000-0001-9584-5150ORCID · verified

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

Software engineering, systems software and programming languages · 52 · 35 first-author · 20 since 2021Theory of computation · 6 · 2 first-author · 1 since 2021Databases, data management, data science and information retrieval · 2 · 2 first-authorArtificial intelligence and machine learning · 1 · 1 first-author
YearPublicationVenuePosition
2026 Quotient Polymorphism
abstract
Quotient types increase the power of type systems by allowing types to include equational properties. However, two key practical issues arise: code being duplicated, and valid code being rejected. Specifically, function definitions often need to be repeated for each quotient of a type, and valid functions may be rejected if they include subterms that do not respect the quotient. This article addresses these reusability and expressivity issues by introducing a notion of quotient polymorphism that we call choice polymorphism . We give practical examples of its use, develop the underlying theory, and implement it in Quotient Haskell.
Brandon Hewer, Graham Hutton
Proc. ACM Program. Lang.2
2025 The Calculated Typer (Functional Pearl)
abstract
We present a calculational approach to the design of type checkers, showing how they can be derived from behavioural specifications using equational reasoning. We focus on languages whose semantics can be expressed as a fold, and show how the calculations can be simplified using fold fusion. This approach enables the compositional derivation of correct-by-construction type checkers based on solving and composing fusion preconditions. We introduce our approach using a simple expression language, to which we then add support for exception handling and checked exceptions.
Zac Garby, Patrick Bahr, Graham Hutton
Haskell3
2025 PhD Abstracts
Graham Hutton
J. Funct. Program.1
2025 PhD Abstracts
abstract
The goal of this thesis is to verify smart contracts in Blockchain.In particular, we focus on smart contracts in Bitcoin and Solidity.In order to specify the correctness of smart contracts, we use weakest preconditions.For this, we develop a model of smart contracts in the interactive theorem prover and dependent type programming language Agda and prove the correctness of smart contracts in it.In the context of Bitcoin, our verification of Bitcoin scripts consists of non-conditional and conditional scripts.For Solidity, we refer to programs using object-oriented features of Solidity, such as calling of other contracts, full recursion, and the use of gas in order to guarantee termination while having a Turingcomplete language.We have developed a simulator for Solidity-style smart contracts.As a main example, we executed a reentrancy attack in our model.We have verified smart contracts in Bitcoin and Solidity using weakest precondition in Agda.Furthermore, Agda, combined with the fact that it is a theorem prover and programming language, allows the writing of verified programs, where the verification takes place in the same language in which the program is written, avoiding the problem of translation from one language to another (with possible translation mistakes).
Graham Hutton
J. Funct. Program.1
2025 JFP special issue on program calculation
Graham Hutton, Nicolas Wu
J. Funct. Program.1
2024 Calculating Compilers Effectively (Functional Pearl)
abstract
Much work in the area of compiler calculation has focused on pure languages. While this simplifies the reasoning, it reduces the applicability. In this article, we show how an existing compiler calculation methodology can be naturally extended to languages with side effects. We achieve this by exploiting an algebraic approach to effects, which keeps the reasoning simple and provides flexibility in how effects are interpreted. To make the ideas accessible we only use elementary functional programming techniques.
Zac Garby, Graham Hutton, Patrick Bahr
Haskell2
2024 PhD Abstracts
abstract
Although Abstracting Gradual Typing provides a systematic approach to design gradual languages, the original framework has limitations: first, it accepts design choices that lead to type inconsistencies sneaking through evaluation.Second, when a type inconsistency is identified at run time, evaluation halts without providing any feedback on the parts of the program related to the failure, a safe approach yet unhelpful for debugging.This dissertation addresses these two limitations of the Abstracting Gradual Typing framework.For the first limitation, I impose an extra constraint on the acceptable designs for gradual types: forward completeness of every type operation.This stricter constraint guarantees that, throughout evaluation, gradual types and runtime evidence objects cannot lose precision and will only represent information consistent with the original static type system.I introduce a new design for a gradual language with record subtyping that fulfills this restriction.For the second limitation, I provide a specification for runtime program slicing that can be systematically applied to languages designed using Abstracting Gradual Typing.Slicing can separate the portions of a program that are guaranteed to be uninvolved in a runtime failure.Unlike the standard blame approach, slicing does not assume that types are correct.The slicing semantics can be used to provide a debugging tool, and I apply empirical research methods to explore whether this runtime type slicing approach is useful to developers.
Graham Hutton
J. Funct. Program.1
2024 Beyond Trees: Calculating Graph-Based Compilers (Functional Pearl)
abstract
Bahr and Hutton recently developed an approach to compiler calculation that allows a wide range of compilers to be derived from specifications of their correctness. However, a limitation of the approach is that it results in compilers that produce tree-structured code. By contrast, realistic compilers produce code that is essentially graph-structured, where the edges in the graph represent jumps that transfer the flow of control to other locations in the code. In this article, we show how their approach can naturally be adapted to calculate compilers that produce graph-structured code, without changing the underlying calculational methodology, by using a higher-order abstract syntax representation of graphs.
Patrick Bahr, Graham Hutton
Proc. ACM Program. Lang.2
2024 Quotient Haskell: Lightweight Quotient Types for All
abstract
Subtypes and quotient types are dual type abstractions. However, while subtypes are widely used both explicitly and implicitly, quotient types have not seen much practical use outside of proof assistants. A key difficulty to wider adoption of quotient types lies in the significant burden of proof-obligations that arises from their use. In this article, we address this issue by introducing a class of quotient types for which the proof-obligations are decidable by an SMT solver. We demonstrate this idea in practice by presenting Quotient Haskell , an extension of Liquid Haskell with support for quotient types.
Brandon Hewer, Graham Hutton
Proc. ACM Program. Lang.2
2023 Programming language semantics: It's easy as 1,2,3
abstract
Abstract Programming language semantics is an important topic in theoretical computer science, but one that beginners often find challenging. This article provides a tutorial introduction to the subject, in which the language of integers and addition is used as a minimal setting in which to present a range of semantic concepts in simple manner. In this setting, it is easy as 1,2,3.
Graham Hutton
J. Funct. Program.1
2023 PhD Abstracts
abstract
series editor for further details.
Graham Hutton
J. Funct. Program.1
2023 PhD Abstracts
abstract
series editor for further details.
Graham Hutton
J. Funct. Program.1
2023 Calculating Compilers for Concurrency
abstract
Choice trees have recently been introduced as a general structure for defining the semantics of programming languages with a wide variety of features and effects. In this article we focus on concurrent languages, and show how a codensity version of choice trees allows the semantics for such languages to be systematically transformed into compilers using equational reasoning techniques. The codensity construction is the key ingredient that enables a high-level, algebraic approach. As a case study, we calculate a compiler for a concurrent lambda calculus with channel-based communication.
Patrick Bahr, Graham Hutton
Proc. ACM Program. Lang.2
2022 Subtyping Without Reduction
Brandon Hewer, Graham Hutton
MPC2
2022 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, twice per year the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year. The abstracts are made freely available on the JFP website, i.e. not behind any paywall. They do not require any transfer of copyright, merely a license from the author. A dissertation is eligible for inclusion if parts of it have or could have appeared in JFP, that is, if it is in the general area of functional programming. The abstracts are not reviewed. We are delighted to publish five abstracts in this round and hope that JFP readers will find many interesting dissertations in this collection that they may not otherwise have seen. If a student or advisor would like to submit a dissertation abstract for publication in this series, please contact the series editor for further details. Graham Hutton PhD Abstract Editor
Graham Hutton
J. Funct. Program.1
2022 PhD Abstracts
abstract
A dissertation is eligible for inclusion if parts of it have or could have appeared in JFP, that is, if it is in the general area of functional programming.The abstracts are not reviewed.
Graham Hutton
J. Funct. Program.1
2022 PhD Abstracts
abstract
A dissertation is eligible for inclusion if parts of it have or could have appeared in JFP, that is, if it is in the general area of functional programming.The abstracts are not reviewed.
Graham Hutton
J. Funct. Program.1
2022 Monadic compiler calculation (functional pearl)
abstract
Bahr and Hutton recently developed a new approach to calculating correct compilers directly from specifications of their correctness. However, the methodology only considers converging behaviour of the source language, which means that the compiler could potentially produce arbitrary, erroneous code for source programs that diverge. In this article, we show how the methodology can naturally be extended to support the calculation of compilers that address both convergent and divergent behaviour simultaneously , without the need for separate reasoning for each aspect. Our approach is based on the use of the partiality monad to make divergence explicit, together with the use of strong bisimilarity to support equational-style calculations, but also generalises to other forms of effect by changing the underlying monad.
Patrick Bahr, Graham Hutton
Proc. ACM Program. Lang.2
2021 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, twice per year the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2021 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, twice per year the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year. The abstracts are made freely available on the JFP website, i.e. not behind any paywall. They do not require any transfer of copyright, merely a license from the author. A dissertation is eligible for inclusion if parts of it have or could have appeared in JFP, that is, if it is in the general area of functional programming. The abstracts are not reviewed.
Graham Hutton
J. Funct. Program.1
2021 Calculating dependently-typed compilers (functional pearl)
abstract
Compilers are difficult to write, and difficult to get right. Bahr and Hutton recently developed a new technique for calculating compilers directly from specifications of their correctness, which ensures that the resulting compilers are correct-by-construction. To date, however, this technique has only been applicable to source languages that are untyped. In this article, we show that moving to a dependently-typed setting allows us to naturally support typed source languages, ensure that all compilation components are type-safe, and make the resulting calculations easier to mechanically check using a proof assistant.
Mitchell Pickard, Graham Hutton
Proc. ACM Program. Lang.2
2020 Calculating correct compilers II: Return of the register machines
abstract
Abstract In ‘Calculating Correct Compilers’ (Bahr & Hutton, 2015), we developed a new approach to calculating compilers directly from specifications of their correctness. Our approach only required elementary reasoning techniques and has been used to calculate compilers for a wide range of language features and their combination. However, the methodology was focused on stack-based target machines, whereas real compilers often target register-based machines. In this article, we show how our approach can naturally be adapted to calculate compilers for register machines.
Patrick Bahr, Graham Hutton
J. Funct. Program.2
2020 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, twice per year the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2020 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, twice per year the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2020 Liquidate your assets: reasoning about resource usage in liquid Haskell
abstract
Liquid Haskell is an extension to the type system of Haskell that supports formal reasoning about program correctness by encoding logical properties as refinement types. In this article, we show how Liquid Haskell can also be used to reason about program efficiency in the same setting. We use the system's existing verification machinery to ensure that the results of our cost analysis are valid, together with custom invariants for particular program contexts to ensure that the results of our analysis are precise. To illustrate our approach, we analyse the efficiency of a wide range of popular data structures and algorithms, and in doing so, explore various notions of resource usage. Our experience is that reasoning about efficiency in Liquid Haskell is often just as simple as reasoning about correctness, and that the two can naturally be combined.
Martin A. T. Handley, Niki Vazou, Graham Hutton
Proc. ACM Program. Lang.3
2019 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, twice per year the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2019 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, twice per year the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2019 Call-by-need is clairvoyant call-by-value
abstract
Call-by-need evaluation, also known as lazy evaluation, provides two key benefits: compositional programming and infinite data. The standard semantics for laziness is Launchbury’s natural semantics DBLP:conf/popl/Launchbury93, which uses a heap to memoise the results of delayed evaluations. However, the stateful nature of this heap greatly complicates reasoning about the operational behaviour of lazy programs. In this article, we propose an alternative semantics for laziness, clairvoyant evaluation , that replaces the state effect with nondeterminism, and prove this semantics equivalent in a strong sense to the standard semantics. We show how this new semantics greatly simplifies operational reasoning, admitting much simpler proofs of a number of results from the literature, and how it leads to the first denotational cost semantics for lazy evaluation.
Jennifer Hackett, Graham Hutton
Proc. ACM Program. Lang.2
2018 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2018 Parametric polymorphism and operational improvement
abstract
Parametricity, in both operational and denotational forms, has long been a useful tool for reasoning about program correctness. However, there is as yet no comparable technique for reasoning about program improvement , that is, when one program uses fewer resources than another. Existing theories of parametricity cannot be used to address this problem as they are agnostic with regard to resource usage. This article addresses this problem by presenting a new operational theory of parametricity that is sensitive to time costs, which can be used to reason about time improvement properties. We demonstrate the applicability of our theory by showing how it can be used to prove that a number of well-known program fusion techniques are time improvements, including fixed point fusion, map fusion and short cut fusion.
Jennifer Hackett, Graham Hutton
Proc. ACM Program. Lang.2
2017 Failing Faster: Overlapping Patterns for Property-Based Testing
Jonathan Fowler, Graham Hutton
PADL2
2017 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2017 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2017 Compiling a 50-year journey
abstract
Abstract Fifty years ago, John McCarthy and James Painter (1967) published the first paper on compiler verification, in which they showed how to formally prove the correctness of a compiler that translates arithmetic expressions into code for a register-based machine. In this article, we revisit this example in a modern context, and show how such a compiler can now be calculated directly from a specification of its correctness using simple equational reasoning techniques.
Graham Hutton, Patrick Bahr
J. Funct. Program.1
2016 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2016 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2015 Programs for Cheap!
abstract
Write down the definition of a recursion operator on a piece of paper. Tell me its type, but be careful not to let me see the operator's definition. I will tell you an optimization theorem that the operator satisfies. As an added bonus, I will also give you a proof of correctness for the optimisation, along with a formal guarantee about its effect on performance. The purpose of this paper is to explain these tricks.
Jennifer Hackett, Graham Hutton
LICS2
2015 Calculating correct compilers
abstract
Abstract In this article, we present a new approach to the problem of calculating compilers. In particular, we develop a simple but general technique that allows us to derive correct compilers from high-level semantics by systematic calculation, with all details of the implementation of the compilers falling naturally out of the calculation process. Our approach is based upon the use of standard equational reasoning techniques, and has been applied to calculate compilers for a wide range of language features and their combination, including arithmetic expressions, exceptions, state, various forms of lambda calculi, bounded and unbounded loops, non-determinism and interrupts. All the calculations in the article have been formalised using the Coq proof assistant, which serves as a convenient interactive tool for developing and verifying the calculations.
Patrick Bahr, Graham Hutton
J. Funct. Program.2
2015 PhD abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2015 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year. As a service to the community, the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year.
Graham Hutton
J. Funct. Program.1
2015 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year, but there is currently no common location in which to promote and advertise the resulting work. The Journal of Functional Programming would like to change that!
Graham Hutton
J. Funct. Program.1
2014 Worker/wrapper/makes it/faster
abstract
Much research in program optimization has focused on formal approaches to correctness: proving that the meaning of programs is preserved by the optimisation. Paradoxically, there has been comparatively little work on formal approaches to efficiency: proving that the performance of optimized programs is actually improved. This paper addresses this problem for a general-purpose optimization technique, the worker/wrapper transformation. In particular, we use the call-by-need variant of improvement theory to establish conditions under which the worker/wrapper transformation is formally guaranteed to preserve or improve the time performance of programs in lazy languages such as Haskell.
Jennifer Hackett, Graham Hutton
ICFP2
2014 PhD Abstracts
abstract
Many students complete PhDs in functional programming each year, but there is currently no common location in which to promote and advertise the resulting work. The Journal of Functional Programming would like to change that!
Graham Hutton
J. Funct. Program.1
2014 Work it, wrap it, fix it, fold it
abstract
Abstract The worker/wrapper transformation is a general-purpose technique for refactoring recursive programs to improve their performance. The two previous approaches to formalising the technique were based upon different recursion operators and different correctness conditions. In this paper we show how these two approaches can be generalised in a uniform manner by combining their correctness conditions, extend the theory with new conditions that are both necessary and sufficient to ensure the correctness of the worker/wrapper technique, and explore the benefits that result. All the proofs have been mechanically verified using the Agda system.
Neil Sculthorpe, Graham Hutton
J. Funct. Program.2
2010 Factorising folds for faster functions
abstract
Abstract The worker/wrapper transformation is a general technique for improving the performance of recursive programs by changing their types. The previous formalisation (A. Gill & G. Hutton, J. Funct. Program. , vol. 19, 2009, pp. 227–251) was based upon a simple fixed-point semantics of recursion. In this paper, we develop a more structured approach, based upon initial-algebra semantics. In particular, we show how the worker/wrapper transformation can be applied to programs defined using the structured pattern of recursion captured by fold operators, and illustrate our new technique with a number of examples.
Graham Hutton, Mauro Jaskelioff, Andy Gill
J. Funct. Program.1
2009 The worker/wrapper transformation
abstract
Abstract The worker/wrapper transformation is a technique for changing the type of a computation, usually with the aim of improving its performance. It has been used by compiler writers for many years, but the technique is little known in the wider functional programming community, and has never been described precisely. In this article we explain, formalise and explore the generality of the worker/wrapper transformation. We also provide a systematic recipe for its use as an equational reasoning technique for improving the performance of programs, and illustrate the power of this recipe using a range of examples.
Andy Gill, Graham Hutton
J. Funct. Program.2
2007 What is the meaning of these constant interruptions?
abstract
Abstract Asynchronous exceptions, or interrupts , are important for writing robust, modular programs, but are traditionally viewed as being difficult from a semantic perspective. In this article, we present a simple, formally justified, semantics for interrupts. Our approach is to show how a high-level semantics for interrupts can be justified with respect to a low-level implementation, by means of a compiler and its correctness theorem. In this manner we obtain two different perspectives on the problem, formally shown to be equivalent, which gives greater confidence in the correctness of our semantics.
Graham Hutton, Joel J. Wright
J. Funct. Program.1
2005 Proof Methods for Corecursive Programs
Jeremy Gibbons, Graham Hutton
Fundam. Informaticae2
2004 Compiling Exceptions Correctly
Graham Hutton, Joel J. Wright
MPC1
2002 The countdown problem
abstract
We systematically develop a functional program that solves the countdown problem , a numbers game in which the aim is to construct arithmetic expressions satisfying certain constraints. Starting from a formal specification of the problem, we present a simple but inefficient program that solves the problem, and prove that this program is correct. We then use program fusion to calculate an equivalent but more efficient program, which is then further improved by exploiting arithmetic properties.
Graham Hutton
J. Funct. Program.1
2001 The generic approximation lemma
Graham Hutton, Jeremy Gibbons
Inf. Process. Lett.1
1999 A Tutorial on the Universality and Expressiveness of Fold
abstract
In functional programming, fold is a standard operator that encapsulates a simple pattern of recursion for processing lists. This article is a tutorial on two key aspects of the fold operator for lists. First of all, we emphasize the use of the universal property of fold both as a proof principle that avoids the need for inductive proofs, and as a definition principle that guides the transformation of recursive functions into definitions using fold. Secondly, we show that even though the pattern of recursion encapsulated by fold is simple, in a language with tuples and functions as first-class values the fold operator has greater expressive power than might first be expected.
Graham Hutton
J. Funct. Program.1
1998 Fold and Unfold for Program Semantics
abstract
In this paper we explain how recursion operators can be used to structure and reason about program semantics within a functional language. In particular, we show how the recursion operator fold can be used to structure denotational semantics, how the dual recursion operator unfold can be used to structure operational semantics, and how algebraic properties of these operators can be used to reason about program semantics. The techniques are explained with the aid of two main examples, the first concerning arithmetic expressions, and the second concerning Milner's concurrent language CCS. The aim of the paper is to give functional programmers new insights into recursion operators, program semantics, and the relationships between them.
Graham Hutton
ICFP1
1998 Monadic Parsing in Haskell
abstract
This paper is a tutorial on defining recursive descent parsers in Haskell. In the spirit of one-stop shopping , the paper combines material from three areas into a single source. The three areas are functional parsers (Burge, 1975; Wadler, 1985; Hutton, 1992; Fokker, 1995), the use of monads to structure functional programs (Wadler, 1990, 1992a, 1992b), and the use of special syntax for monadic programs in Haskell (Jones, 1995; Peterson et al ., 1996). More specifically, the paper shows how to define monadic parsers using do notation in Haskell. Of course, recursive descent parsers defined by hand lack the efficiency of bottom-up parsers generated by machine (Aho et al ., 1986; Mogensen, 1993; Gill and Marlow, 1995). However, for many research applications, a simple recursive descent parser is perfectly sufficient. Moreover, while parser generators typically offer a fixed set of combinators for describing grammars, the method described here is completely extensible: parsers are first-class values, and we have the full power of Haskell available to define new combinators for special applications. The method is also an excellent illustration of the elegance of functional programming.
Graham Hutton, Erik Meijer 0001
J. Funct. Program.1
1997 A Strategy for On-line Interpretation of Sketched Engineering Drawings
abstract
This paper describes a strategy for online interpretation of sketched engineering drawings. It represents the design for The Designer's Apprentice-a pen-based system for producing detailed mechanical engineering drawings on a realistic electronic drawing board. The paper examines the problems of interpreting scanned drawings and assesses how such problems affect online systems. It is therefore relevant to online and offline systems. The strategy is enhanced by making an early distinction between annotation and the object outline. This discrimination shapes the subsequent processing: the object outline is subjected to node connecting, face-finding and beautification whereas annotation is classified according to the BS308 engineering standard.
Graham Hutton, M. Cripps, Dave Elliman, Colin Higgins
ICDAR1
1996 Back to Basics: Deriving Representation Changers Functionally
Graham Hutton, Erik Meijer 0001
J. Funct. Program.1
1994 Categories, Allegories and Circuit Design
abstract
Relational languages such as RUBY are used to derive hardware circuits from abstract specifications of their behaviour. Much reasoning is done informally in RUBY using pictorial representations of relational terms. We formalise this use of pictures in circuit design. We show that pictures naturally form a unitary pretabular allegory. Homomorphisms of pictures correspond to adding new wires or circuit comments. Two pictures are mutually homomorphic if and only if they represent equal allegorical terms. We prove soundness and completeness results which guarantee that deriving circuits using pictures does not lead to errors. We illustrate the use of pictures by deriving the ripple adder implementation from a high level, behavioural specification.>
Carolyn Brown, Graham Hutton
LICS2
1994 Book Review: Introduction to HOL: A Theorem Proving Environment for Higher Order Logic by Mike Gordon and Tom Melham (eds.), Cambridge University Press, 1993, ISBN 0-521-44189-7
Graham Hutton
J. Funct. Program.1
1992 Higher-Order Functions for Parsing
abstract
Abstract In combinator parsing , the text of parsers resembles BNF notation. We present the basic method, and a number of extensions. We address the special problems presented by white-space, and parsers with separate lexical and syntactic phases. In particular, a combining form for handling the ‘offside rule’ is given. Other extensions to the basic method include an ‘into’ combining form with many useful applications, and a simple means by which combinator parsers can produce more informative error messages.
Graham Hutton
J. Funct. Program.1