A Theory of Reversibility for Erlang

In a reversible language, any forward computation can be undone by a finite sequence of backward steps. Reversible computing has been studied in the context of different programming languages and formalisms, where it has been used for testing and verification, among others. In this paper, we consider a subset of Erlang, a functional and concurrent programming language based on the actor model. We present a formal semantics for reversible computation in this language and prove its main properties, including its causal consistency. We also build on top of it a rollback operator that can be used to undo the actions of a process up to a given checkpoint.

[1]  Tetsuo Yokoyama,et al.  Reversible Computation and Reversible Programming Languages , 2010, RC@ETAPS.

[2]  Lars-Åke Fredlund,et al.  A unified semantics for future Erlang , 2010, Erlang '10.

[3]  Nobuko Yoshida,et al.  Reversible session-based pi-calculus , 2015, J. Log. Algebraic Methods Program..

[4]  Joe Armstrong,et al.  Concurrent programming in ERLANG , 1993 .

[5]  Ivan Lanese,et al.  CauDEr: A Causal-Consistent Reversible Debugger for Erlang , 2018, FLOPS.

[6]  Germán Vidal,et al.  Reversible Term Rewriting , 2016, FSCD.

[7]  Charles H. Bennett Notes on the history of reversible computation , 2000, IBM J. Res. Dev..

[8]  Robert Glück,et al.  Principles of a reversible programming language , 2008, CF '08.

[9]  Carlos A. Varela,et al.  Transactors: a programming model for maintaining globally consistent distributed state in unreliable environments , 2005, POPL '05.

[10]  Carlos A. Varela,et al.  Fault Tolerant Distributed Computing Using Asynchronous Local Checkpointing , 2014, AGERE!@SPLASH.

[11]  R. Landauer,et al.  Irreversibility and heat generation in the computing process , 1961, IBM J. Res. Dev..

[12]  Tobias Nipkow,et al.  Term rewriting and all that , 1998 .

[13]  Charles H. Bennett,et al.  Logical reversibility of computation , 1973 .

[14]  Vincent Danos,et al.  Reversible Communicating Systems , 2004, CONCUR.

[15]  Ivan Lanese,et al.  Controlling Reversibility in Higher-Order Pi , 2011, CONCUR.

[16]  Michael P. Frank,et al.  Introduction to reversible computing: motivation, progress, and challenges , 2005, CF '05.

[17]  Germán Vidal,et al.  A Reversible Semantics for Erlang , 2016, LOPSTR.

[18]  Ivan Lanese,et al.  A Reversible Abstract Machine and Its Space Overhead , 2012, FMOODS/FORTE.

[19]  Cosimo Laneve,et al.  Reversible structures , 2011, CMSB.

[20]  Iain C. C. Phillips,et al.  Reversing algebraic process calculi , 2007, J. Log. Algebraic Methods Program..

[21]  Lars-Åke Fredlund,et al.  A framework for reasoning about Erlang code , 2001 .

[22]  Ivan Lanese,et al.  Causal-Consistent Reversibility , 2014, Bull. EATCS.

[23]  Ivan Lanese,et al.  Causal-Consistent Reversibility in a Tuple-Based Language , 2015, 2015 23rd Euromicro International Conference on Parallel, Distributed, and Network-Based Processing.

[24]  Nobuko Yoshida,et al.  Let it recover: multiparty protocol-induced recovery , 2017, CC.

[25]  Ivan Lanese,et al.  Reversibility in the higher-order π-calculus , 2016, Theor. Comput. Sci..

[26]  Claes Wikström,et al.  Concurrent programming in ERLANG (2nd ed.) , 1996 .

[27]  Kazutaka Matsuda,et al.  Bidirectionalization transformation based on automatic derivation of view complement functions , 2007, ICFP '07.

[28]  Daniele Varacca,et al.  A Compositional Semantics for the Reversible p-Calculus , 2013, 2013 28th Annual ACM/IEEE Symposium on Logic in Computer Science.

[29]  Vincent Danos,et al.  Transactions in RCCS , 2005, CONCUR.

[30]  Ivan Lanese,et al.  Causal-Consistent Reversible Debugging , 2014, FASE.

[31]  Holger Bock Axelsen,et al.  Interpretation and programming of the reversible functional language RFUN , 2015, IFL '15.