Have a method that compare the "traces" of processes and decide if they are equal.
Later on, we could try to have more "subtle" equivalences, that would require e.g. to have a way of acknowledging that (a[k1] | b[k2]) and (a[k2] | b[k1]) are actually the same process (note that this is not widely accepted in the reversible community, so we may want to be careful with that)
The goal of this issue is to start implementing equivalences between processes. We could start with an "easy" trace equivalence:
So, for instance, you would have tr(a.b + (c|d)) = {ab, cd, dc}
and tr(a.b + c.d + d.c.) = tr(a.b + (c|d))
(Things get a bit more complicated with synchronizations, but we can worry about that later)
A possible way to obtain this first type of equivalence would be to:
Later on, we could try to have more "subtle" equivalences, that would require e.g. to have a way of acknowledging that (a[k1] | b[k2]) and (a[k2] | b[k1]) are actually the same process (note that this is not widely accepted in the reversible community, so we may want to be careful with that)