62,426 research outputs found
Beating the Productivity Checker Using Embedded Languages
Some total languages, like Agda and Coq, allow the use of guarded corecursion
to construct infinite values and proofs. Guarded corecursion is a form of
recursion in which arbitrary recursive calls are allowed, as long as they are
guarded by a coinductive constructor. Guardedness ensures that programs are
productive, i.e. that every finite prefix of an infinite value can be computed
in finite time. However, many productive programs are not guarded, and it can
be nontrivial to put them in guarded form.
This paper gives a method for turning a productive program into a guarded
program. The method amounts to defining a problem-specific language as a data
type, writing the program in the problem-specific language, and writing a
guarded interpreter for this language.Comment: In Proceedings PAR 2010, arXiv:1012.455
General Recursion via Coinductive Types
A fertile field of research in theoretical computer science investigates the
representation of general recursive functions in intensional type theories.
Among the most successful approaches are: the use of wellfounded relations,
implementation of operational semantics, formalization of domain theory, and
inductive definition of domain predicates. Here, a different solution is
proposed: exploiting coinductive types to model infinite computations. To every
type A we associate a type of partial elements Partial(A), coinductively
generated by two constructors: the first, return(a) just returns an element
a:A; the second, step(x), adds a computation step to a recursive element
x:Partial(A). We show how this simple device is sufficient to formalize all
recursive functions between two given types. It allows the definition of fixed
points of finitary, that is, continuous, operators. We will compare this
approach to different ones from the literature. Finally, we mention that the
formalization, with appropriate structural maps, defines a strong monad.Comment: 28 page
Safe Concurrency Introduction through Slicing
Traditional refactoring is about modifying the structure of existing code without changing its behaviour, but with the aim of making code easier to understand, modify, or reuse. In this paper, we introduce three novel refactorings for retrofitting concurrency to Erlang applications, and demonstrate how the use of program slicing makes the automation of these refactorings possible
Iteration Algebras for UnQL Graphs and Completeness for Bisimulation
This paper shows an application of Bloom and Esik's iteration algebras to
model graph data in a graph database query language. About twenty years ago,
Buneman et al. developed a graph database query language UnQL on the top of a
functional meta-language UnCAL for describing and manipulating graphs.
Recently, the functional programming community has shown renewed interest in
UnCAL, because it provides an efficient graph transformation language which is
useful for various applications, such as bidirectional computation. However, no
mathematical semantics of UnQL/UnCAL graphs has been developed. In this paper,
we give an equational axiomatisation and algebraic semantics of UnCAL graphs.
The main result of this paper is to prove that completeness of our equational
axioms for UnCAL for the original bisimulation of UnCAL graphs via iteration
algebras. Another benefit of algebraic semantics is a clean characterisation of
structural recursion on graphs using free iteration algebra.Comment: In Proceedings FICS 2015, arXiv:1509.0282
Recursion Operators and Nonlocal Symmetries for Integrable rmdKP and rdDym Equations
We find direct and inverse recursion operators for integrable cases of the
rmdKP and rdDym equations. Also, we study actions of these operators on the
contact symmetries and find shadows of nonlocal symmetries of these equations
- …