Rule 110 is a cellular automaton that performs repeated simultaneous updates
of an infinite row of binary values. The values are updated in the following
way: 0s are changed to 1s at all positions where the value to the right is a 1,
while 1s are changed to 0s at all positions where the values to the left and
right are both 1. Though trivial to define, the behavior exhibited by Rule 110
is surprisingly intricate, and in (Cook, 2004) we showed that it is capable of
emulating the activity of a Turing machine by encoding the Turing machine and
its tape into a repeating left pattern, a central pattern, and a repeating
right pattern, which Rule 110 then acts on. In this paper we provide an
explicit compiler for converting a Turing machine into a Rule 110 initial
state, and we present a general approach for proving that such constructions
will work as intended. The simulation was originally assumed to require
exponential time, but surprising results of Neary and Woods (2006) have shown
that in fact, only polynomial time is required. We use the methods of Neary and
Woods to exhibit a direct simulation of a Turing machine by a tag system in
polynomial time