Results 1  10
of
16
Unification via Explicit Substitutions: The Case of HigherOrder Patterns
 PROCEEDINGS OF JICSLP'96
, 1998
"... In [6] we have proposed a general higherorder unification method using a theory of explicit substitutions and we have proved its completeness. In this paper, we investigate the case of higherorder patterns as introduced by Miller. We show that our general algorithm specializes in a very convenient ..."
Abstract

Cited by 64 (18 self)
 Add to MetaCart
In [6] we have proposed a general higherorder unification method using a theory of explicit substitutions and we have proved its completeness. In this paper, we investigate the case of higherorder patterns as introduced by Miller. We show that our general algorithm specializes in a very convenient way to patterns. We also sketch an efficient implementation of the abstract algorithm and its generalization to constraint simplification, which has yielded good experimental results at the core of a higherorder constraint logic programming language.
Explaining Type Inference
 Science of Computer Programming
, 1995
"... Type inference is the compiletime process of reconstructing missing type information in a program based on the usage of its variables. ML and Haskell are two languages where this aspect of compilation has enjoyed some popularity, allowing type information to be omitted while static type checking is ..."
Abstract

Cited by 63 (0 self)
 Add to MetaCart
(Show Context)
Type inference is the compiletime process of reconstructing missing type information in a program based on the usage of its variables. ML and Haskell are two languages where this aspect of compilation has enjoyed some popularity, allowing type information to be omitted while static type checking is still performed. Type inference may be expected to have some application in the prototyping and scripting languages which are becoming increasingly popular. A difficulty with type inference is the confusing and sometimes counterintuitive diagnostics produced by the type checker as a result of type errors. A modification of the HindleyMilner type inference algorithm is presented, which allows the specific reasoning which led to a program variable having a particular type to be recorded for type explanation. This approach is close to the intuitive process used in practice for debugging type errors. 1 Introduction Type inference refers to the compiletime process of reconstructing missing t...
Solving HigherOrder Equations: From Logic to Programming
, 1995
"... Higherorder constructs provide the necessary level of abstraction for concise and natural formulations in many areas of computer science. We present constructive methods for higherorder equational reasoning with applications ranging from theorem proving to novel programming concepts. A major probl ..."
Abstract

Cited by 34 (7 self)
 Add to MetaCart
Higherorder constructs provide the necessary level of abstraction for concise and natural formulations in many areas of computer science. We present constructive methods for higherorder equational reasoning with applications ranging from theorem proving to novel programming concepts. A major problem of higherorder programming is the undecidability of higherorder unification. In the first part, we develop several classes with decidable secondorder unification. As the main result, we show that the unification of a linear higherorder pattern s with an arbitrary secondorder term that shares no variables with s is decidable and finitely solvable. This is the unification needed for secondorder functionallogic programming. The second main contribution is a framework for solving higherorder equational problems by narrowing. In the firstorder case, narrowing is the underlying computation rule for the integration of logic programming and functional programming. We argue that there are...
Foundational Aspects of Syntax
, 1999
"... Introduction A large variety of computing systems, such as compilers, interpreters, static analyzers, and theorem provers, need to manipulate syntactic objects like programs, types, formulas, and proofs. A common characteristic of these syntactic objects is that they contain variable binders, such ..."
Abstract

Cited by 13 (7 self)
 Add to MetaCart
Introduction A large variety of computing systems, such as compilers, interpreters, static analyzers, and theorem provers, need to manipulate syntactic objects like programs, types, formulas, and proofs. A common characteristic of these syntactic objects is that they contain variable binders, such as quantifiers, scoping operators, and parameters. The presence of binders complicates formal specifications and symbolic processing. Consider, for example, a function definition of the form f(x) = let y = e in x + y: When analyzing or transforming a program containing the call f(e 0 ), we might wish to replace f(e 0 ) with the body of f in which x is substituted by e 0 . But we cannot simply apply the substitution [x 7! e<
From Interpreter to Compiler using Staging and Monads
, 1998
"... In writing this paper we had two goals. First, to promote MetaML, a programming language for writing staged programs, and second, to demonstrate that staging a program can have significant benefits. We do this by example: the derivation of an executable compiler for a small language. We derive the c ..."
Abstract

Cited by 3 (0 self)
 Add to MetaCart
(Show Context)
In writing this paper we had two goals. First, to promote MetaML, a programming language for writing staged programs, and second, to demonstrate that staging a program can have significant benefits. We do this by example: the derivation of an executable compiler for a small language. We derive the compiler in a rigorous fashion from a semantic description of the language. This is done by staging a denotational semantics, expressed as a monadic interpreter. The compiler is a program generator, taking a program in the source language "a whileprogram" as input and producing an ML program as target. The ML program produced is in a restricted subset of ML over which the programmer has complete control. It is encapsulated in a special datastructure called code. The metaprogramming capabilities of MetaML allow this datastructure to be directly executed "runtime code generation", or to be analysed. We illustrate this analysis of generated code to build a source to source transf...
Observations About Using Logic as a Specification Language
, 1995
"... This extended abstract contains some nontechnical observations about the roles that logic can play in the specification of computational systems. In particular, computationasdeduction, metaprogramming, and higherorder abstract syntax are briefly discussed. 1 Two approaches to specifications In ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
This extended abstract contains some nontechnical observations about the roles that logic can play in the specification of computational systems. In particular, computationasdeduction, metaprogramming, and higherorder abstract syntax are briefly discussed. 1 Two approaches to specifications In the specification of computational systems, logics are generally used in one of two approaches. In one approach, computations are mathematical structures, containing such items as nodes, transitions, and state, and logic is used in an external sense to make statements about those structures. That is, computations are used as models for logical expressions. Intensional operators, such as the modals of temporal and dynamic logics or the triples of Hoare logic, are often employed to express propositions about the change in state. For example, nexttime modal operators are used to describe the possible evolution of state; expressions in the HennesseyMilner are evaluated against the transitions...
Refinements of Lazy Narrowing for LeftLinear FullyExtended Pattern Rewrite Systems Mircea Marin
, 2001
"... Lazy narrowing is a general Eunification procedure for equational theories presented by confluent term rewriting systems. It has been deeply studied in the first order case and various higherorder extensions have been proposed in an attempt to improve its expressive power. Such extensions suffer f ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
Lazy narrowing is a general Eunification procedure for equational theories presented by confluent term rewriting systems. It has been deeply studied in the first order case and various higherorder extensions have been proposed in an attempt to improve its expressive power. Such extensions suffer from huge search space in guessing the solutions of variables of functional type. For practical purposes, the need to reduce the search space of solutions is of paramount importance. In this paper we introduce HOLN, a higherorder lazy narrowing calculus for Eunification in theories presented by pattern rewrite systems. The calculus is designed to deal with both oriented and unoriented equations, and keeps track of the variables which are to be bound to normalized solutions. We discuss the operating principle of HOLN, its main properties, and propose refinements to reduce its search space for solutions. Our refinements are defined for classes of leftlinear fullyextended pattern rewrite systems which are widely used in higherorder functional logic programming.
Refinements of lazy narrowing for leftlinear fully extened pattern rewrite systems
, 2001
"... Abstract. Lazy narrowing is a general Eunification procedure for equational theories presented by confluent term rewriting systems. It has been deeply studied in the first order case and various higherorder extensions have been proposed in an attempt to improve its expressive power. Such extension ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
(Show Context)
Abstract. Lazy narrowing is a general Eunification procedure for equational theories presented by confluent term rewriting systems. It has been deeply studied in the first order case and various higherorder extensions have been proposed in an attempt to improve its expressive power. Such extensions suffer from huge search space in guessing the solutions of variables of functional type. For practical purposes, the need to reduce the search space of solutions is of paramount importance. In this paper we introduce HOLN, a higherorder lazy narrowing calculus for Eunification in theories presented by pattern rewrite systems. The calculus is designed to deal with both oriented and unoriented equations, and keeps track of the variables which are to be bound to normalized solutions. We discuss the operating principle of HOLN, its main properties, and propose refinements to reduce its search space for solutions. Our refinements are defined for classes of leftlinear fullyextended pattern rewrite systems which are widely used in higherorder functional logic programming. 1
Algebraic System Specification and Development: Survey and Annotated Bibliography  Second Edition 
, 1997
"... Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.5.4 Special Approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.6 Semantics of Programming Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.6.1 Semantics of Ada . . . ..."
Abstract
 Add to MetaCart
Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.5.4 Special Approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.6 Semantics of Programming Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.6.1 Semantics of Ada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.6.2 Action Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.7 Specification Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.7.1 Early Algebraic Specification Languages . . . . . . . . . . . . . . . . . . . . . . . . 53 4.7.2 Recent Algebraic Specification Languages . . . . . . . . . . . . . . . . . . . . . . . 55 4.7.3 The Common Framework Initiative. . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5 Methodology 57 5.1 Development Phases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.1.1 Applica...