Results 11  20
of
105
A Mixed Linear and NonLinear Logic: Proofs, Terms and Models (Preliminary Report)
, 1994
"... Intuitionistic linear logic regains the expressive power of intuitionistic logic through the ! (`of course') modality. Benton, Bierman, Hyland and de Paiva have given a term assignment system for ILL and an associated notion of categorical model in which the ! modality is modelled by a comonad satis ..."
Abstract

Cited by 96 (3 self)
 Add to MetaCart
Intuitionistic linear logic regains the expressive power of intuitionistic logic through the ! (`of course') modality. Benton, Bierman, Hyland and de Paiva have given a term assignment system for ILL and an associated notion of categorical model in which the ! modality is modelled by a comonad satisfying certain extra conditions. Ordinary intuitionistic logic is then modelled in a cartesian closed category which arises as a full subcategory of the category of coalgebras for the comonad. This paper attempts to explain the connection between ILL and IL more directly and symmetrically by giving a logic, term calculus and categorical model for a system in which the linear and nonlinear worlds exist on an equal footing, with operations allowing one to pass in both directions. We start from the categorical model of ILL given by Benton, Bierman, Hyland and de Paiva and show that this is equivalent to having a symmetric monoidal adjunction between a symmetric monoidal closed category and a cartesian closed category. We then derive both a sequent calculus and a natural deduction presentation of the logic corresponding to the new notion of model.
Lively Linear Lisp  'Look Ma, No Garbage!'
 ACM Sigplan Notices
, 1992
"... Linear logic has been proposed as one solution to the problem of garbage collection and providing efficient "updatein place" capabilities within a more functional language. Linear logic conserves accessibility, and hence provides a mechanical metaphor which is more appropriate for a distributedme ..."
Abstract

Cited by 92 (6 self)
 Add to MetaCart
Linear logic has been proposed as one solution to the problem of garbage collection and providing efficient "updatein place" capabilities within a more functional language. Linear logic conserves accessibility, and hence provides a mechanical metaphor which is more appropriate for a distributedmemory parallel processor in which copying is explicit. However, linear logic's lack of sharing may introduce significant inefficiencies of its own. We show an efficient implementation of linear logic called Linear Lisp that runs within a constant factor of nonlinear logic. This Linear Lisp allows RPLACX operations, and manages storage as safely as a nonlinear Lisp, but does not need a garbage collector. Since it offers assignments but no sharing, it occupies a twilight zone between functional languages and imperative languages. Our Linear Lisp Machine offers many of the same capabilities as combinator/graph reduction machines, but without their copying and garbage collection problems. Intr...
Is there a use for linear logic?
, 1991
"... Past attempts to apply Girard's linear logic have either had a clear relation to the theory (Lafont, Holmstrom, Abramsky) or a clear practical value (Guzm'an and Hudak, Wadler), but not both. This paper defines a sequence of languages based on linear logic that span the gap between theory and practi ..."
Abstract

Cited by 88 (7 self)
 Add to MetaCart
Past attempts to apply Girard's linear logic have either had a clear relation to the theory (Lafont, Holmstrom, Abramsky) or a clear practical value (Guzm'an and Hudak, Wadler), but not both. This paper defines a sequence of languages based on linear logic that span the gap between theory and practice. Type reconstruction in a linear type system can derive information about sharing. An approach to linear type reconstruction based on use types is presented. Applications to the array update problem are considered.
Resource Usage Analysis
, 2002
"... program accesses resources in a valid manner. For example, a memory region that has been allocated should be eventually deallocated, and after the deallocation, the region should no longer be accessed. A file that has been opened should be eventually closed. So far, most of the methods to analyze th ..."
Abstract

Cited by 85 (6 self)
 Add to MetaCart
program accesses resources in a valid manner. For example, a memory region that has been allocated should be eventually deallocated, and after the deallocation, the region should no longer be accessed. A file that has been opened should be eventually closed. So far, most of the methods to analyze this kind of property have been proposed in rather specific contexts (like studies of memory management and verification of usage of lock primitives), and it was not so clear what is the essence of those methods or how methods proposed for individual problems are related. To remedy this situation, we formalize a general problem of analyzing resource usage as a resource usage analysis problem, and propose a typebased method as a solution to the problem.
Once Upon a Type
 In Functional Programming Languages and Computer Architecture
, 1995
"... A number of useful optimisations are enabled if we can determine when a value is accessed at most once. We extend the HindleyMilner type system with uses, yielding a typeinference based program analysis which determines when values are accessed at most once. Our analysis can handle higherorder fun ..."
Abstract

Cited by 81 (2 self)
 Add to MetaCart
A number of useful optimisations are enabled if we can determine when a value is accessed at most once. We extend the HindleyMilner type system with uses, yielding a typeinference based program analysis which determines when values are accessed at most once. Our analysis can handle higherorder functions and data structures, and admits principal types for terms. Unlike previous analyses, we prove our analysis sound with respect to callbyneed reduction. Callbyname reduction does not provide an accurate model of how often a value is used during lazy evaluation, since it duplicates work which would actually be shared in a real implementation. Our type system can easily be modified to analyse usage in a callbyvalue language. 1 Introduction This paper describes a method for determining when a value is used at most once. Our method is based on a simple modification of the HindleyMilner type system. Each type is labelled to indicate whether the corresponding value is used at most onc...
A syntax for linear logic
 Presented at Conference on Mathematical Foundations of Programming Language Semantics
, 1993
"... Abstract. This tutorial paper provides an introduction to intuitionistic logic and linear logic, and shows how they correspond to type systems for functional languages via the notion of ‘Propositions as Types’. The presentation of linear logic is simplified by basing it on the Logic of Unity. An app ..."
Abstract

Cited by 72 (5 self)
 Add to MetaCart
Abstract. This tutorial paper provides an introduction to intuitionistic logic and linear logic, and shows how they correspond to type systems for functional languages via the notion of ‘Propositions as Types’. The presentation of linear logic is simplified by basing it on the Logic of Unity. An application to the array update problem is briefly discussed. 1
Conventional and Uniqueness Typing in Graph Rewrite Systems (Extended Abstract)
 In Proceedings of the 13th Conference on the Foundations of Software Technology and Theoretical Computer Science
, 1993
"... In this paper we describe a Currylike type system for graphs and extend it with uniqueness information to indicate that certain objects are only `locally accessible'. The correctness of type assignment guarantees that no external access on such an object will take place in the future. We prove that ..."
Abstract

Cited by 69 (5 self)
 Add to MetaCart
In this paper we describe a Currylike type system for graphs and extend it with uniqueness information to indicate that certain objects are only `locally accessible'. The correctness of type assignment guarantees that no external access on such an object will take place in the future. We prove that types are preserved under reduction (for both type systems) for a large class of rewrite systems. Adding uniqueness information provides a solution to two problems in implementations of functional languages: efficient space management and interfacing with nonfunctional operations.
Safemem: Exploiting ECCmemory for detecting memory leaks and memory corruption during production runs
 In Proceedings of the 11th International Symposium on HighPerformance Computer Architecture
, 2005
"... Memory leaks and memory corruption are two major forms of software bugs that severely threaten system availability and security. According to the USCERT Vulnerability Notes Database, 68 % of all reported vulnerabilities in 2003 were caused by memory leaks or memory corruption. Dynamic monitoring to ..."
Abstract

Cited by 67 (11 self)
 Add to MetaCart
Memory leaks and memory corruption are two major forms of software bugs that severely threaten system availability and security. According to the USCERT Vulnerability Notes Database, 68 % of all reported vulnerabilities in 2003 were caused by memory leaks or memory corruption. Dynamic monitoring tools, such as the stateoftheart Purify, are commonly used to detect memory leaks and memory corruption. However, most of these tools suffer from high overhead, with up to a 20 times slowdown, making them infeasible to be used for productionruns. This paper proposes a tool called SafeMem to detect memory leaks and memory corruption onthefly during productionruns. This tool does not rely on any new hardware support. Instead, it makes a novel use of existing ECC memory technology and exploits intelligent dynamic memory usage behavior analysis to detect memory leaks and corruption. We have evaluated SafeMem with seven realworld applications that contain memory leak or memory corruption bugs. SafeMem detects all tested bugs with low overhead (only 1.6%14.4%), 23 orders of magnitudes smaller than Purify. Our results also show that ECCprotection is effective in pruning false positives for memory leak detection, and in reducing the amount of memory waste (by a factor of 6474) used for memory monitoring in memory corruption detection compared to pageprotection. 1
SafeJava: A Unified Type System for Safe Programming
, 2004
"... Making software reliable is one of the most important technological challenges facing our society today. This thesis presents a new type system that addresses this problem by statically preventing several important classes of programming errors. If a program type checks, we guarantee at compile time ..."
Abstract

Cited by 58 (2 self)
 Add to MetaCart
Making software reliable is one of the most important technological challenges facing our society today. This thesis presents a new type system that addresses this problem by statically preventing several important classes of programming errors. If a program type checks, we guarantee at compile time that the program does not contain any of those errors. We designed our type system in the context of a Javalike objectoriented language; we call the resulting system SafeJava. The SafeJava type system offers significant software engineering benefits. Specifically, it provides a statically enforceable way of specifying object encapsulation and enables local reasoning about program correctness; it combines effects clauses with encapsulation to enable modular checking of methods in the presence of subtyping; it statically prevents data races and deadlocks in multithreaded programs, which are known to be some of the most difficult programming errors to detect, reproduce, and
Linear Logic Without Boxes
, 1992
"... Girard's original definition of proof nets for linear logic involves boxes. The box is the unit for erasing and duplicating fragments of proof nets. It imposes synchronization, limits sharing, and impedes a completely local view of computation. Here we describe an implementation of proof nets withou ..."
Abstract

Cited by 53 (0 self)
 Add to MetaCart
Girard's original definition of proof nets for linear logic involves boxes. The box is the unit for erasing and duplicating fragments of proof nets. It imposes synchronization, limits sharing, and impedes a completely local view of computation. Here we describe an implementation of proof nets without boxes. Proof nets are translated into graphs of the sort used in optimal calculus implementations; computation is performed by simple graph rewriting. This graph implementation helps in understanding optimal reductions in the calculus and in the various programming languages inspired by linear logic. 1 Beyond the calculus The calculus is not entirely explicit about the operations of erasing and duplicating arguments. These operations are important both in the theory of the  calculus and in its implementations, yet they are typically treated somewhat informally, implicitly. The proof nets of linear logic [1] provide a refinement of the calculus where these operations become explici...