Results 1 - 10
of
19
A new notation for arrows
- In International Conference on Functional Programming (ICFP ’01
, 2001
"... The categorical notion of monad, used by Moggi to structure denotational descriptions, has proved to be a powerful tool for structuring combinator libraries. Moreover, the monadic programming style provides a convenient syntax for many kinds of computation, so that each library defines a new sublang ..."
Abstract
-
Cited by 40 (1 self)
- Add to MetaCart
The categorical notion of monad, used by Moggi to structure denotational descriptions, has proved to be a powerful tool for structuring combinator libraries. Moreover, the monadic programming style provides a convenient syntax for many kinds of computation, so that each library defines a new sublanguage. Recently, several workers have proposed a generalization of monads, called variously “arrows ” or Freyd-categories. The extra generality promises to increase the power, expressiveness and efficiency of the embedded approach, but does not mesh as well with the native abstraction and application. Definitions are typically given in a point-free style, which is useful for proving general properties, but can be awkward for programming specific instances. In this paper we define a simple extension to the functional language Haskell that makes these new notions of computation more convenient to use. Our language is similar to the monadic style, and has similar reasoning properties. Moreover, it is extensible, in the sense that new combining forms can be defined as expressions in the host language. 1.
Categories, Allegories and Circuit Design
- In Ninth Annual IEEE Symposium on Logic in Computer Science
, 1994
"... 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 ..."
Abstract
-
Cited by 16 (1 self)
- Add to MetaCart
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 components. 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. 1: Introduction Hardware circuit design involves translating abstract specifications of programs into efficient circuits which compute those programs. Pictures are widely used as an informal means of translating a specification into an imple...
Between Functions and Relations in Calculating Programs
, 1992
"... This thesis is about the calculational approach to programming, in which one derives programs from specifications. One such calculational paradigm is Ruby, the relational calculus developed by Jones and Sheeran for describing and designing circuits. We identify two shortcomings with derivations made ..."
Abstract
-
Cited by 15 (4 self)
- Add to MetaCart
This thesis is about the calculational approach to programming, in which one derives programs from specifications. One such calculational paradigm is Ruby, the relational calculus developed by Jones and Sheeran for describing and designing circuits. We identify two shortcomings with derivations made using Ruby. The first is that the notion of a program being an implementation of a specification has never been made precise. The second is to do with types. Fundamental to the use of type information in deriving programs is the idea of having types as special kinds of programs. In Ruby, types are partial equivalence relations (pers). Unfortunately, manipulating some formulae involving types has proved difficult within Ruby. In particular, the preconditions of the `induction' laws that are much used within program derivation often work out to be assertions about types; such assertions have typically been verified either by informal arguments or by using predicate calculus, rather than by ap...
Arrows and computation
- The Fun of Programming
, 2003
"... With this machinery, we can give a common structure to programs based on different notions of computation. The generality of arrows tends to force one into a point-free style, which is useful for proving general properties. However it is not to everyone's taste, and can be awkward for programming sp ..."
Abstract
-
Cited by 12 (0 self)
- Add to MetaCart
With this machinery, we can give a common structure to programs based on different notions of computation. The generality of arrows tends to force one into a point-free style, which is useful for proving general properties. However it is not to everyone's taste, and can be awkward for programming specific instances. The solution is a point-wise notation for arrows, which is automatically translated to the functional language Haskell. Each notion of computation thus defines a special sublanguage of Haskell. 1 Notions of computation We shall explore what we mean by a notion of computation using four varied examples. As a point of comparison, we shall consider how the following operator on functions may be generalized to the various types of `function-like ' components.
Overview of Hydra: A concurrent language for synchronous digital circuit design
- In Proceedings of the 16th International Parallel and Distributed Processing Symposium. IEEE Computer
, 2002
"... www.dcs.gla.ac.uk/∼jtod/ Hydra is a computer hardware description language that integrates several kinds of software tool (simulation, netlist generation and timing analysis) within a single circuit specification. The design language is inherently concurrent, and it offers black box abstraction and ..."
Abstract
-
Cited by 11 (0 self)
- Add to MetaCart
www.dcs.gla.ac.uk/∼jtod/ Hydra is a computer hardware description language that integrates several kinds of software tool (simulation, netlist generation and timing analysis) within a single circuit specification. The design language is inherently concurrent, and it offers black box abstraction and general design patterns that simplify the design of circuits with regular structure. Hydra specifications are concise, allowing the complete design of a computer system as a digital circuit within a few pages. This paper discusses the motivations behind Hydra, and illustrates the system with a significant portion of the design of a basic RISC processor.
Program Construction by Parts
, 1995
"... . Given a specification that includes a number of user requirements, we wish to focus on the requirements in turn, and derive a partly defined program for each; then combine all the partly defined programs into a single program that satisfies all the requirements simultaneously. In this paper we int ..."
Abstract
-
Cited by 8 (5 self)
- Add to MetaCart
. Given a specification that includes a number of user requirements, we wish to focus on the requirements in turn, and derive a partly defined program for each; then combine all the partly defined programs into a single program that satisfies all the requirements simultaneously. In this paper we introduces a mathematical basis for solving this problem; and we illustrate it by means of a simple example. 1 Introduction and Motivation We propose a program construction method whereby, given a specification that includes a number of user requirements, we focus on the requirements in turn, and derive a partly defined program for each; then combine all the partly defined programs into a single program that satisfies all the requirements simultaneously. In this paper we discuss this programming paradigm, which we call program construction by parts, and introduce a mathematical foundation for this paradigm. Our paradigm is based on the premise that program specifications are represented by hom...
A Relational Basis for Program Construction by Parts
, 1995
"... Program construction by parts consists in tackling a complex specification one component at a time, developing a partially defined solution for each component, then combining the partial solutions into a global solution for the aggregate specification. This method is desirable whenever the specifica ..."
Abstract
-
Cited by 7 (3 self)
- Add to MetaCart
Program construction by parts consists in tackling a complex specification one component at a time, developing a partially defined solution for each component, then combining the partial solutions into a global solution for the aggregate specification. This method is desirable whenever the specification at hand is too complex to be grasped in all its detail. It is feasible whenever the specification at hand is structured as an aggregate of clearly defined subspecifications ---where each subspecification represents a simple functional requirement. Our approach is based on relational specifications, whereby a specification is described by a binary relation. The set of relational specifications is naturally ordered by the refinement ordering, which provides a lattice-like structure. The join of two specifications S and S 0 is the specification that carries all the functional features of S and all the functional features of S 0 . Complex specifications are naturally structured as the j...
The Ruby Interpreter
, 1994
"... Ruby is a relational language developed by Jones and Sheeran for describing and designing circuits. This document is a guide to the Ruby interpreter, which allows Ruby programs to be executed. Contents 1 Introduction 2 2 Ruby 3 3 Executable terms 10 4 Worked examples 14 5 Reference material 24 5.1 ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
Ruby is a relational language developed by Jones and Sheeran for describing and designing circuits. This document is a guide to the Ruby interpreter, which allows Ruby programs to be executed. Contents 1 Introduction 2 2 Ruby 3 3 Executable terms 10 4 Worked examples 14 5 Reference material 24 5.1 LML syntax for Ruby terms : : : : : : : : : : : : : : : : : : : : : 24 5.2 Logical and arithmetic primitives : : : : : : : : : : : : : : : : : : 25 5.3 Wiring primitives : : : : : : : : : : : : : : : : : : : : : : : : : : : 25 5.4 Combining forms : : : : : : : : : : : : : : : : : : : : : : : : : : : 27 1 Chapter 1 Introduction Ruby is a relational language developed by Jones and Sheeran for describing and designing circuits [6, 3, 4]. Ruby programs denote binary relations, and programs are built-up inductively from primitive relations using a pre-defined set of relational operators. Ruby programs also have a geometric interpretation as networks of primitive relations connected by wires,...
Modeling a Hardware Synthesis Methodology in Isabelle
- In Theorem Proving in Higher Order Logics (TPHOLs'96), volume 1125 of LNCS
, 1996
"... . Formal Synthesis is a methodology developed at Kent for combining circuit design and verification, where a circuit is constructed from a proof that it meets a given formal specification. We have reinterpreted this methodology in Isabelle's theory of higher-order logic so that circuits are incremen ..."
Abstract
-
Cited by 6 (4 self)
- Add to MetaCart
. Formal Synthesis is a methodology developed at Kent for combining circuit design and verification, where a circuit is constructed from a proof that it meets a given formal specification. We have reinterpreted this methodology in Isabelle's theory of higher-order logic so that circuits are incrementally built during proofs using higher-order resolution. Our interpretation simplifies and extends Formal Synthesis both conceptually and in implementation. It also supports integration of this development style with other proof-based synthesis methodologies and leads to techniques for developing new classes of circuits, e.g., recursive descriptions of parametric designs. Keywords: Hardware verification and synthesis, theorem proving, higher-order logic, higherorder unification. 1. Introduction Verification by formal proof is time intensive and this is a burden in bringing formal methods into software and hardware design. One approach to reducing the verification burden is to combine develop...
Back to Basics: Deriving Representation Changers Functionally
- Journal of Functional Programming
, 1993
"... A representation changer is a function that converts a concrete representation of an abstract value into a different concrete representation of that value. Many useful functions can be recognised as representation changers; examples include compilers, and arithmetic functions such as addition and mu ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
A representation changer is a function that converts a concrete representation of an abstract value into a different concrete representation of that value. Many useful functions can be recognised as representation changers; examples include compilers, and arithmetic functions such as addition and multiplication. Functions that can be specified as the right inverse of other functions are special cases of representation changers. In recent years, a number of authors have used a relational calculus to derive representation changers from their specifications. In this paper we show that the generality of relations is not essential, and representation changers can be derived within the more basic setting of functional programming. We illustrate our point by deriving a carry-save adder and a base-converter, two functions which have previously been derived relationally. 1 Introduction In the calculational approach to programming the aim is to derive programs from their specifications by a p...

