  Reversible computation is an unconventional form of computing where any
executed sequence of operations can be executed in reverse at any point during
computation. It has recently been attracting increasing attention in various
research communities as on the one hand it promises low-power computation and
on the other hand it is inherent or of interest in a variety of applications.
In this paper, we propose a reversible approach to Petri nets by introducing
machinery and associated operational semantics to tackle the challenges of the
three main forms of reversibility, namely, backtracking, causal reversing and
out-of-causal-order reversing. Our proposal concerns a variation of Petri nets
where tokens are persistent and are distinguished from each other by an
identity which allows for transitions to be reversed spontaneously in or out of
causal order. Our design decisions are influenced by applications in
biochemistry but the methodology can be applied to a wide range of problems
that feature reversibility. In particular, to demonstrate the applicability of
our approach we use an example of a biochemical system and an example of a
transaction-processing system both of which naturally embed reversible
behaviour.
