Jeopardy: An Invertible Functional Programming Language

Algorithms are ways of mapping problems to solutions. An algorithm is invertible precisely when this mapping is injective, such that the initial problem can be uniquely inferred from its solution. While invertible algorithms can be described in general-purpose languages, no guarantees are generally made by such languages as regards invertibility, so ensuring invertibility requires additional (and often non-trivial) proof. On the other hand, while reversible programming languages guarantee that their programs are invertible by restricting the permissible operations to those which are locally invertible, writing programs in the reversible style can be cumbersome, and may differ significantly from conventional implementations even when the implemented algorithm is, in fact, invertible. In this paper we introduce Jeopardy, a functional programming language that guarantees program invertibility without imposing local reversibility. In particular, Jeopardy allows the limited use of uninvertible – and even nondeterministic! – operations, provided that they are used in a way that can be statically determined to be invertible. To this end, we outline an implicitly available arguments analysis and three further approaches that can give a partial static guarantee to the (generally difficult) problem of guaranteeing invertibility.

READ FULL TEXT

page 1

page 2

page 3

page 4

research
12/06/2022

Branching execution symmetry in Jeopardy by available implicit arguments analysis

When the inverse of an algorithm is well-defined – that is, when its out...
research
10/05/2021

Unifying AI Algorithms with Probabilistic Programming using Implicitly Defined Representations

We introduce Scruff, a new framework for developing AI systems using pro...
research
06/19/2018

A Theory of Reversibility for Erlang

In a reversible language, any forward computation can be undone by a fin...
research
10/23/2019

Analyzing Trade-offs in Reversible Linear and Binary Search Algorithms

Reversible algorithms are algorithms in which each step represents a par...
research
04/12/2018

Design and Implementation of Dynamic Memory Management in a Reversible Object-Oriented Programming Language

The reversible object-oriented programming language (ROOPL) was presente...
research
08/17/2021

Solving the Funarg Problem with Static Types

The difficulty associated with storing closures in a stack-based environ...
research
11/30/2020

The ℵ Calculus

Motivated by a need for a model of reversible computation appropriate fo...

Please sign up or login with your details

Forgot password? Click here to reset