Implementation [of 2D substitution systems]

With the rule on page 187 given for example by {1 {{1, 0}, {1, 1}}, 0 {{0, 0}, {0, 0}}} the result of t steps in the evolution of a 2D substitution system from a initial condition such as {{1}} is given by

SS2DEvolve[rule_, init_, t_] := Nest[Flatten2D[# /. rule] &, init, t]

Flatten2D[list_] := Apply[Join, Map[MapThread[Join, #] &, list]]