A technique for the specification of TCSP processes based upon the concepts of guards and livenes... more A technique for the specification of TCSP processes based upon the concepts of guards and liveness rules is presented. It is shown how safety and liveness properties can be proved for processes specified in this way. A technique related to bisimulations is proposed to prove refinements correct. The technique is extended to handle the concealment of events in the implementing process. The refinement relation preserves the safety and liveness properties already proved for the specification. Parallel composition of specifications is also defined preserving the failures semantics. To illustrate the technique, an example is used throughout the paper,
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming - PPDP '03, 2003
Starting from P. Sestoft semantics for lazy evaluation, we define a new semantics in which normal... more Starting from P. Sestoft semantics for lazy evaluation, we define a new semantics in which normal forms consist of variables pointing to lambdas or constructions. This is in accordance with the more recent changes in the Spineless Tagless G-machine (STG) machine, where constructions only appear in closures (lambdas only appeared in closures already in previous versions). We prove the equivalence between the new semantics and Sestoft's. Then, a sequence of STG machines are derived, formally proving the correctness of each derivation. The last machine consists of a few imperative instructions and its distance to a conventional language is minimal. The paper also discusses the differences between the final machine and the actual STG machine implemented in the Glasgow Haskell Compiler.
Eden is a parallel extension of Haskell allowing the programmer to ex- plicitly specify which exp... more Eden is a parallel extension of Haskell allowing the programmer to ex- plicitly specify which expressions must be evaluated as parallel processes. Eden is implemented by modifying the Glasgow Haskell Compiler (GHC). This decision has saved a lot of work but has also produced some drawbacks: Some optimiz- ing transformations done by GHC are not convenient for Eden, either because
Eden is a parallel functional language extending Haskell with processes. This paper describes the... more Eden is a parallel functional language extending Haskell with processes. This paper describes the implementation of an interface between the Eden language and the Maple system. The aim of this effort is to parallelize Maple programs by using Eden as coordination language. The idea is to leave in Maple the computational intensive functions of the (sequential) algorithm and to use Eden skeletons to set up the parallel process topology in the available parallel machine. A Maple system is instantiated in each processor. Eden processes are responsible for invoking Maple functions with appropriate parameters and of getting back the results, as well as of performing all the data communication between processes. The interface provides the following services: instantiating and terminating a Maple system in each processor, performing data conversion between Maple and Haskell objects, invoking Maple functions from Eden, and ensuring mutual exclusion in the access to Maple from different concurrent threads in the local processor. A parallel version of Buchberger's algorithm to compute Gröbner bases is presented to illustrate the use of the interface.
J. Launchbury gave an operational semantics for lazy evaluation and showed that it is sound and c... more J. Launchbury gave an operational semantics for lazy evaluation and showed that it is sound and complete w.r.t. a denotational semantics of the language. P. Sestoft then introduced several abstract machines for lazy evaluation and showed that they were sound and complete w.r.t. Launchbury's operational semantics. We go a step forward and show that the Spineless Tagless G-machine is complete and (almost) sound w.r.t. one of Sestoft's machines. In the way to this goal we also prove some interesting properties about the operational semantics and about Sestoft's machines which clarify some minor points on garbage collection and on closures' local environments. Unboxed values and primitive operators are excluded from the study.
A formal framework and a technique for the specification, refinement and correctness proving of p... more A formal framework and a technique for the specification, refinement and correctness proving of parallel systems are presented. Processes are objects in the TCSP model and are specified by means of an auxiliary partial abstract data type. Part of the proofs are made in the abstract data type framework, so more powerful deductive methods can be used. Examples of specifications and of proving a refinement correct are included.
... Download Links. [dalila.sip.ucm.es] Other Repositories/Bibliography. ... 197, An introduction... more ... Download Links. [dalila.sip.ucm.es] Other Repositories/Bibliography. ... 197, An introduction to the theory of lists - Bird - 1987. 158, A non-strict functional language with polymorphic types - Miranda - 1985. 66, Functional Programming Using Standard ML - Wikstrom - 1987. ...
Abstract: Eden is a parallel extension of Haskell allowing the programmer to ex plicitly specify ... more Abstract: Eden is a parallel extension of Haskell allowing the programmer to ex plicitly specify which expressions must be evaluated as parallel processes implemented by modifying the Glasgow Haskell Compiler (GHC) has saved a lot of work but has also produced some drawbacks: Some optimiz ing transformations done by GHC are not convenient for Eden, either because they spoil its
The Spineless Tag-less G-machine (STG machine) was defined as the target abstract machine for com... more The Spineless Tag-less G-machine (STG machine) was defined as the target abstract machine for compiling the lazy functional language Haskell. It is at the heart of the Glasgow Haskell Compiler (GHC) which is claimed to be the Haskell compiler that generates the most efficient code. A high-level description of the STG machine can be found in Peyton Jones (In Journal of Functional programming, 2(2), 127–202, 1992), Marlow & Peyton Jones (In Sigplan Not., 39(9), 4–5, 2004), and Marlow & Peyton Jones (In Journal of Functional Programming, 16(4–5), 415–449, 2006). Should the reader be interested in a more detailed view, then the only additional information available is the Haskell code of GHC and the C code of its runtime system.It is hard to prove that this machine correctly implements the lazy semantics of Haskell. Part of the problem lies in the fact that the STG machine executes a bare-bones functional language, called STGL, much lower level than Haskell. Therefore, part of the corre...
Safe is a first-order functional language with unusual memory management features: memory can be ... more Safe is a first-order functional language with unusual memory management features: memory can be both explicitly and implicitly deallocated at some specific points in the program text, and there is no need for a runtime garbage collector. The final code is bytecode of the Java Virtual Machine (JVM), so the language is useful for programming small devices based on this
The paper presents the development, by using the proof assistant Isabelle/HOL, of a compiler back... more The paper presents the development, by using the proof assistant Isabelle/HOL, of a compiler back-end translating from a functional source language to the bytecode language of an abstract machine. The Haskell code of the compiler is extracted from the Isabelle/HOL specification and this tool is also used for proving the correctness of the implementation. The main correctness theorem not only ensures functional semantics preservation but also resource consumption preservation: the heap and stacks figures predicted by the semantics are confirmed in the translation to the abstract machine. The language and the development belong to a wider Proof Carrying Code framework in which formal compiler-generated certificates about memory consumption are sought for.
In previous works, we have developed several algorithms for inferring upper bounds to heap and st... more In previous works, we have developed several algorithms for inferring upper bounds to heap and stack consumption for a simple functional language called Safe. The bounds inferred for a particular recursive function with n arguments takes the form of symbolic n-ary functions from (ℝ + ) n to ℝ + relating the input argument sizes to the number of cells or words respectively
One of the current problems in software systems development is the increasing complexity of analy... more One of the current problems in software systems development is the increasing complexity of analysing and guaranteeing the reliable behaviour of these systems. This project is oriented towards the development of the methods, tools and techniques necessary for supporting quality software construction, with emphasis on practical application to the industrial processes of software companies. This proposal is based on the use of lightweight formal methods in Software Engineering, i.e., the partial application of formalisms at dierent levels: language, modelling, analysis and composition. The basic idea is to subordinate general methods that support the entire development process and to enhance the real application of formal methods at certain phases of the software life cycle. In order to illustrate the feasibility of this approach, most of the project activities are within the field of component-based software development. The project is a coordinated proposal of four university teams ...
Safe is a first-order eager functional language with facilities for programmer-controlled de-stru... more Safe is a first-order eager functional language with facilities for programmer-controlled de-struction and copying of data structures and is intended for compile-time analysis of memory consumption. In Safe, heap memory consump-tion depends on the length of recursive ...
This book constitutes the thoroughly refereed post-proceedings of the 15th International Workshop... more This book constitutes the thoroughly refereed post-proceedings of the 15th International Workshop on the Implementation of Functional Languages, IFL 2003, held in Edinburgh, UK in September 2003. The 11 revised full papers presented were carefully selected during two rounds of reviewing and revision from 32 workshop presentations. The papers are organized in topical sections on language constructs and programming, static analysis and types, parallelism, and generic programming.
Chapter 2 Optimizing Eden by Transformation Cristobal Pareja, Ricardo Pena, Fernando Rubio, Clara... more Chapter 2 Optimizing Eden by Transformation Cristobal Pareja, Ricardo Pena, Fernando Rubio, Clara Segura1 Abstract: Eden is a parallel extension ot'Haskell allowing the programmer to ex-plicitly specify which expressions must be evaluated as parallel processes. Eden is ...
A technique for the specification of TCSP processes based upon the concepts of guards and livenes... more A technique for the specification of TCSP processes based upon the concepts of guards and liveness rules is presented. It is shown how safety and liveness properties can be proved for processes specified in this way. A technique related to bisimulations is proposed to prove refinements correct. The technique is extended to handle the concealment of events in the implementing process. The refinement relation preserves the safety and liveness properties already proved for the specification. Parallel composition of specifications is also defined preserving the failures semantics. To illustrate the technique, an example is used throughout the paper,
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming - PPDP '03, 2003
Starting from P. Sestoft semantics for lazy evaluation, we define a new semantics in which normal... more Starting from P. Sestoft semantics for lazy evaluation, we define a new semantics in which normal forms consist of variables pointing to lambdas or constructions. This is in accordance with the more recent changes in the Spineless Tagless G-machine (STG) machine, where constructions only appear in closures (lambdas only appeared in closures already in previous versions). We prove the equivalence between the new semantics and Sestoft's. Then, a sequence of STG machines are derived, formally proving the correctness of each derivation. The last machine consists of a few imperative instructions and its distance to a conventional language is minimal. The paper also discusses the differences between the final machine and the actual STG machine implemented in the Glasgow Haskell Compiler.
Eden is a parallel extension of Haskell allowing the programmer to ex- plicitly specify which exp... more Eden is a parallel extension of Haskell allowing the programmer to ex- plicitly specify which expressions must be evaluated as parallel processes. Eden is implemented by modifying the Glasgow Haskell Compiler (GHC). This decision has saved a lot of work but has also produced some drawbacks: Some optimiz- ing transformations done by GHC are not convenient for Eden, either because
Eden is a parallel functional language extending Haskell with processes. This paper describes the... more Eden is a parallel functional language extending Haskell with processes. This paper describes the implementation of an interface between the Eden language and the Maple system. The aim of this effort is to parallelize Maple programs by using Eden as coordination language. The idea is to leave in Maple the computational intensive functions of the (sequential) algorithm and to use Eden skeletons to set up the parallel process topology in the available parallel machine. A Maple system is instantiated in each processor. Eden processes are responsible for invoking Maple functions with appropriate parameters and of getting back the results, as well as of performing all the data communication between processes. The interface provides the following services: instantiating and terminating a Maple system in each processor, performing data conversion between Maple and Haskell objects, invoking Maple functions from Eden, and ensuring mutual exclusion in the access to Maple from different concurrent threads in the local processor. A parallel version of Buchberger's algorithm to compute Gröbner bases is presented to illustrate the use of the interface.
J. Launchbury gave an operational semantics for lazy evaluation and showed that it is sound and c... more J. Launchbury gave an operational semantics for lazy evaluation and showed that it is sound and complete w.r.t. a denotational semantics of the language. P. Sestoft then introduced several abstract machines for lazy evaluation and showed that they were sound and complete w.r.t. Launchbury's operational semantics. We go a step forward and show that the Spineless Tagless G-machine is complete and (almost) sound w.r.t. one of Sestoft's machines. In the way to this goal we also prove some interesting properties about the operational semantics and about Sestoft's machines which clarify some minor points on garbage collection and on closures' local environments. Unboxed values and primitive operators are excluded from the study.
A formal framework and a technique for the specification, refinement and correctness proving of p... more A formal framework and a technique for the specification, refinement and correctness proving of parallel systems are presented. Processes are objects in the TCSP model and are specified by means of an auxiliary partial abstract data type. Part of the proofs are made in the abstract data type framework, so more powerful deductive methods can be used. Examples of specifications and of proving a refinement correct are included.
... Download Links. [dalila.sip.ucm.es] Other Repositories/Bibliography. ... 197, An introduction... more ... Download Links. [dalila.sip.ucm.es] Other Repositories/Bibliography. ... 197, An introduction to the theory of lists - Bird - 1987. 158, A non-strict functional language with polymorphic types - Miranda - 1985. 66, Functional Programming Using Standard ML - Wikstrom - 1987. ...
Abstract: Eden is a parallel extension of Haskell allowing the programmer to ex plicitly specify ... more Abstract: Eden is a parallel extension of Haskell allowing the programmer to ex plicitly specify which expressions must be evaluated as parallel processes implemented by modifying the Glasgow Haskell Compiler (GHC) has saved a lot of work but has also produced some drawbacks: Some optimiz ing transformations done by GHC are not convenient for Eden, either because they spoil its
The Spineless Tag-less G-machine (STG machine) was defined as the target abstract machine for com... more The Spineless Tag-less G-machine (STG machine) was defined as the target abstract machine for compiling the lazy functional language Haskell. It is at the heart of the Glasgow Haskell Compiler (GHC) which is claimed to be the Haskell compiler that generates the most efficient code. A high-level description of the STG machine can be found in Peyton Jones (In Journal of Functional programming, 2(2), 127–202, 1992), Marlow & Peyton Jones (In Sigplan Not., 39(9), 4–5, 2004), and Marlow & Peyton Jones (In Journal of Functional Programming, 16(4–5), 415–449, 2006). Should the reader be interested in a more detailed view, then the only additional information available is the Haskell code of GHC and the C code of its runtime system.It is hard to prove that this machine correctly implements the lazy semantics of Haskell. Part of the problem lies in the fact that the STG machine executes a bare-bones functional language, called STGL, much lower level than Haskell. Therefore, part of the corre...
Safe is a first-order functional language with unusual memory management features: memory can be ... more Safe is a first-order functional language with unusual memory management features: memory can be both explicitly and implicitly deallocated at some specific points in the program text, and there is no need for a runtime garbage collector. The final code is bytecode of the Java Virtual Machine (JVM), so the language is useful for programming small devices based on this
The paper presents the development, by using the proof assistant Isabelle/HOL, of a compiler back... more The paper presents the development, by using the proof assistant Isabelle/HOL, of a compiler back-end translating from a functional source language to the bytecode language of an abstract machine. The Haskell code of the compiler is extracted from the Isabelle/HOL specification and this tool is also used for proving the correctness of the implementation. The main correctness theorem not only ensures functional semantics preservation but also resource consumption preservation: the heap and stacks figures predicted by the semantics are confirmed in the translation to the abstract machine. The language and the development belong to a wider Proof Carrying Code framework in which formal compiler-generated certificates about memory consumption are sought for.
In previous works, we have developed several algorithms for inferring upper bounds to heap and st... more In previous works, we have developed several algorithms for inferring upper bounds to heap and stack consumption for a simple functional language called Safe. The bounds inferred for a particular recursive function with n arguments takes the form of symbolic n-ary functions from (ℝ + ) n to ℝ + relating the input argument sizes to the number of cells or words respectively
One of the current problems in software systems development is the increasing complexity of analy... more One of the current problems in software systems development is the increasing complexity of analysing and guaranteeing the reliable behaviour of these systems. This project is oriented towards the development of the methods, tools and techniques necessary for supporting quality software construction, with emphasis on practical application to the industrial processes of software companies. This proposal is based on the use of lightweight formal methods in Software Engineering, i.e., the partial application of formalisms at dierent levels: language, modelling, analysis and composition. The basic idea is to subordinate general methods that support the entire development process and to enhance the real application of formal methods at certain phases of the software life cycle. In order to illustrate the feasibility of this approach, most of the project activities are within the field of component-based software development. The project is a coordinated proposal of four university teams ...
Safe is a first-order eager functional language with facilities for programmer-controlled de-stru... more Safe is a first-order eager functional language with facilities for programmer-controlled de-struction and copying of data structures and is intended for compile-time analysis of memory consumption. In Safe, heap memory consump-tion depends on the length of recursive ...
This book constitutes the thoroughly refereed post-proceedings of the 15th International Workshop... more This book constitutes the thoroughly refereed post-proceedings of the 15th International Workshop on the Implementation of Functional Languages, IFL 2003, held in Edinburgh, UK in September 2003. The 11 revised full papers presented were carefully selected during two rounds of reviewing and revision from 32 workshop presentations. The papers are organized in topical sections on language constructs and programming, static analysis and types, parallelism, and generic programming.
Chapter 2 Optimizing Eden by Transformation Cristobal Pareja, Ricardo Pena, Fernando Rubio, Clara... more Chapter 2 Optimizing Eden by Transformation Cristobal Pareja, Ricardo Pena, Fernando Rubio, Clara Segura1 Abstract: Eden is a parallel extension ot'Haskell allowing the programmer to ex-plicitly specify which expressions must be evaluated as parallel processes. Eden is ...
Uploads
Papers by Ricardo Pena