The author make automata reversible by xoring with the previous row's cell. But some rules are reversible without this trick. For example rule 0xf0: 111 110 101 100 011 010 001 000 1 1 1 1 0 0 0 0 will shift all cells one step to the right and is thus the reverse of rule 0xaa which shifts all cells to the left: 111 110 101 100 011 010 001 000 1 0 1 0 1 0 1 0 My question is how can we test which of the 256 rules are r…
a b c d e f g
Apply rule R
. b' c' d' e' f' .
Apply rule R^-1
. . c d e . .
In equations, it means there must exist some R^-1 such that for all a, b, c, d, e, f, g the following holds: c = R^-1(R(a, b, c), R(b, c, d), R(c, d, e))
d = R^-1(R(b, c, d), R(c, d, e), R(d, e, f))
e = R^-1(R(c, d, e), R(d, e, f), R(e, f, g))
Writing a quick program that checks all possible combinations of R and R^-1 (https://play.rust-lang.org/?version=stable&mode=debug&editio...) we find the following inverse pairs: 0x33 0x33
0x55 0x0f
0xcc 0xcc
0xf0 0xaa
That is, the following two rules are self-inverses (they're the NOT and IDENTITY gates on the center cell respectively): 111 110 101 100 011 010 001 000
0 0 1 1 0 0 1 1
1 1 0 0 1 1 0 0
We have the left right moving pair you identified: 111 110 101 100 011 010 001 000
1 0 1 0 1 0 1 0
111 110 101 100 011 010 001 000
1 1 1 1 0 0 0 0
And there's just one more, which is the same as the above but it also inverts the output (move left and invert is the inverse of move right and invert): 111 110 101 100 011 010 001 000
0 1 0 1 0 1 0 1
111 110 101 100 011 010 001 000
0 0 0 0 1 1 1 1