// Rules dup(a1,a2) >< (int i):xs => a1~(i:xs1), a2~(i:xs2), dup(xs1,xs2)~xs; dup(a1,a2) >< [] => a1~[], a2~[]; inc(r) >< (int i):xs => r~(i+1):w, inc(w)~xs; inc(r) >< [] => r~[]; // Nets dup(r,w)~r1, inc(r1) ~ (0:w); // +-----+ +-----+ +---+ // r ----| | r1 | | | | // | dup |--->---| inc |---><---| 0 |----+ // +---| | | | | | | // | +-----+ +-----+ +---+ | // | | // +-----------------------------------------+ // w