291 research outputs found
Abstract interpretation and optimising transformations for applicative programs
This thesis describes methods for transforming applicative
programs with the aim of improving their efficiency. The general
justification for these techniques is presented via the concept of
abstract interpretation. The work can be seen as providing
mechanisms to optimise applicative programs for sequential von
Neumann machines. The chapters address the following subjects.
Chapter 1 gives an overview and gentle introduction to the
following technical chapters.
Chapter 2 gives an introduction to and motivation for the
concept of abstract interpretation necessary for the detailed
understanding of the rest of the work. It includes certain
theoretical developments, of which I believe the most important is
the incorporation of the concept of partial functions into our
notion of abstract interpretation. This is done by associating
non-standard denotations with functions just as denotational
semantics gives the standard denotations.
Chapter 3 gives an example of the ease with which we can talk
about function objects within abstract interpretive schemes. It
uses this to show how a simple language using call-by-need
semantics can be augmented with a system that annotates places in a
program at which call-by-value can be used without violating the
call-by-need semantics.
Chapter 4 extends the work of chapter 3 by showing that under
some sequentiality restriction, the incorporation of call-by-value
for call-by-need can be made complete in the sense that the
resulting program will only possess strict functions except for the
conditional.
Chapter 5 is an attempt to apply the concepts of abstract
interpretation to a completely different problem, that of
incorporating destructive operators into an applicative program.
We do this in order to increase the efficiency of implementation
without violating the applicative semantics by introducing
destructive operators into our language.
Finally, chapter 6 contains a discussion of the implications of
such techniques for real languages, and in particular presents
arguments whereby applicative languages should be seen as whole
systems and not merely the applicative subset of some larger
language
Control Flow Analysis for SF Combinator Calculus
Programs that transform other programs often require access to the internal
structure of the program to be transformed. This is at odds with the usual
extensional view of functional programming, as embodied by the lambda calculus
and SK combinator calculus. The recently-developed SF combinator calculus
offers an alternative, intensional model of computation that may serve as a
foundation for developing principled languages in which to express intensional
computation, including program transformation. Until now there have been no
static analyses for reasoning about or verifying programs written in
SF-calculus. We take the first step towards remedying this by developing a
formulation of the popular control flow analysis 0CFA for SK-calculus and
extending it to support SF-calculus. We prove its correctness and demonstrate
that the analysis is invariant under the usual translation from SK-calculus
into SF-calculus.Comment: In Proceedings VPT 2015, arXiv:1512.0221
A category theoretic formalism for abstract interpretation
technical reportWe present a formal theory of abstract interpretation based on a new category theoretic formalism. This formalism allows one to derive a collecting semantics which preserves continuity of lifted functions and for which the lifting functon is itself continuous. The theory of abstract interpretation is then presented as an approximation of this collecting semantics. The use of categories rather than compete partial orders eliminates the need for introducing two distinct partial orders and for introducing any closure operation on the allowable elements, as is necessary with powerdomains. Furthermore, our construction can be applied to any situation for which the underlying domains are complete partial orders, since the domains are not further restricted in any way. This formalism can be applied to first order languages
Abstract interpretation and indeterminacy
Journal ArticleWe present a semantic theory that allows us to discuss the semantics of indeterminate operators in a dataflow network. The assumption is made that the language in which the indeterminate operators are written has a construct that allows for the testing of availability of data on input lines. We then show that indeterminacy arises through the use of such an operator together with the fact that communication channels produce unpredictable delays in the transmission of data. Our scheme is to use special tokens called hiatons to obtain ordinary streams. This filtering process produces indeterminate behavior at the level of ordinary streams. We indicate how this can be justified using the formalism of abstract interpretation. We show that a particular fairness anomaly does not arise
Selective applicative functors & probabilistic programming
Dissertação de mestrado integrado em Informatics EngineeringIn functional programming, selective applicative functors (SAF) are an abstraction between
applicative functors and monads. This abstraction requires all effects to be statically declared,
but provides a way to select which effects to execute dynamically. SAF have been shown to
be a useful abstraction in several examples, including two industrial case studies. Selective
functors have been used for their static analysis capabilities. The collection of information
about all possible effects in a computation and the fact that they enable speculative execution
make it possible to take advantage to describe probabilistic computations instead of using
monads. In particular, selective functors appear to provide a way to obtain a more efficient
implementation of probability distributions than monads.
This dissertation addresses a probabilistic interpretation for the arrow and selective abstractions
in the light of the linear algebra of programming discipline, as well as exploring
ways of offering SAF capabilities to probabilistic programming, by exposing sampling as a
concurrency problem. As a result, provides a Haskell type-safe matrix library capable of
expressing probability distributions and probabilistic computations as typed matrices, and a
probabilistic programming eDSL that explores various techniques in order to offer a novel,
performant solution to probabilistic functional programming.Em programação funcional, os functores aplicativos seletivos (FAS) são uma abstração entre functores
aplicativos e monades. Essa abstração requer que todos os efeitos sejam declarados estaticamente,
mas fornece uma maneira de selecionar quais efeitos serão executados dinamicamente. FAS têm se
mostrado uma abstração útil em vários exemplos, incluindo dois estudos de caso industriais. Functores
seletivos têm sido usados pela suas capacidade de análise estática. O conjunto de informações sobre
todos os efeitos possíveis numa computação e o facto de que eles permitem a execução especulativa
tornam possível descrever computações probabilísticas. Em particular, functores seletivos parecem
oferecer uma maneira de obter uma implementação mais eficiente de distribuições probabilisticas do
que monades.
Esta dissertação aborda uma interpretação probabilística para as abstrações Arrow e Selective
à luz da disciplina da álgebra linear da programação, bem como explora formas de oferecer as
capacidades dos FAS para programação probabilística, expondo sampling como um problema de
concorrência. Como resultado, fornece uma biblioteca de matrizes em Haskell, capaz de expressar
distribuições de probabilidade e cálculos probabilísticos como matrizes tipadas e uma eDSL de
programação probabilística que explora várias técnicas, com o obejtivo de oferecer uma solução
inovadora e de alto desempenho para a programação funcional probabilística
08061 Abstracts Collection -- Types, Logics and Semantics for State
From 3 February to 8 February 2008, the Dagstuhl Seminar 08061
``Types, Logics and Semantics for State\u27\u27 was held in the
International Conference and Research Center (IBFI), Schloss Dagstuhl.
During the seminar, several participants presented their current
research, and ongoing work and open problems were discussed. Abstracts
of the presentations given during the seminar as well as abstracts of
seminar results and ideas are put together in this paper. The first
section describes the seminar topics and goals in general. Links to
extended abstracts or full papers are provided, if available
PureCake: A verified compiler for a lazy functional language
We present PureCake, a mechanically-verified compiler for PureLang, a lazy, purely functional programming language with monadic effects. PureLang syntax is Haskell-like and indentation-sensitive, and its constraint-based Hindley-Milner type system guarantees safe execution. We derive sound equational reasoning principles over its operational semantics, dramatically simplifying some proofs. We prove end-to-end correctness for the compilation of PureLang down to machine code---the first such result for any lazy language---by targeting CakeML and composing with its verified compiler. Multiple optimisation passes are necessary to handle realistic lazy idioms effectively. We develop PureCake entirely within the HOL4 interactive theorem prover
Deciding subset relationship of co-inductively defined set constants
Static analysis of different non-strict functional programming languages makes use of set constants like Top, Inf, and Bot denoting all expressions, all lists without a last Nil as tail, and all non-terminating programs, respectively. We use a set language that permits union, constructors and recursive definition of set constants with a greatest fixpoint semantics. This paper proves decidability, in particular EXPTIMEcompleteness, of subset relationship of co-inductively defined sets by using algorithms and results from tree automata. This shows decidability of the test for set inclusion, which is required by certain strictness analysis algorithms in lazy functional programming languages
Algebras for weighted search
Weighted search is an essential component of many fundamental and useful algorithms. Despite this, it is relatively under explored as a computational effect, receiving not nearly as much attention as either depth- or breadth-first search. This paper explores the algebraic underpinning of weighted search, and demonstrates how to implement it as a monad transformer. The development first explores breadth-first search, which can be expressed as a polynomial over semirings. These polynomials are generalised to the free semi module monad to capture a wide range of applications, including probability monads, polynomial monads, and monads for weighted search. Finally, a monad trans-former based on the free semi module monad is introduced. Applying optimisations to this type yields an implementation of pairing heaps, which is then used to implement Dijkstra’s algorithm and efficient probabilistic sampling. The construction is formalised in Cubical Agda and implemented in Haskell
- …