<!-- by repeatedly using the line above and applying one more iteration of our filter, we do rule 110 -->
<use href="#data" y="30" id="line2" filter="url(#rule110)" />
<use href="#line2" y="30" id="line3" filter="url(#rule110)" />
<use href="#line3" y="30" id="line4" filter="url(#rule110)"/>
<use href="#line4" y="30" id="line5" filter="url(#rule110)" />
<use href="#line5" y="30" id="line6" filter="url(#rule110)"/>
<use href="#line6" y="30" id="line7" filter="url(#rule110)" />
<use href="#line7" y="30" id="line8" filter="url(#rule110)"/>
<use href="#line8" y="30" id="line9" filter="url(#rule110)" />
<use href="#line9" y="30" id="line10" filter="url(#rule110)"/>
SVG is not Turing complete.-a set of states
-symbol set
-initial state
-set of accepting states
-a transition function
(plus blank symbol, and an alphabet, but not so important here)
Evaluation (computation) is faithfully applying the transition function on the states. Effectively just a set of rules you need to follow. This definition doesn't include a "crank" that you have to turn to make it run. I think copying and pasting could be justified as "evaluating".
\mu-Recursive functions (so allowing primitive recursion) are the types of functions Turing machines can compute, but that is not the definition of a Turing machine.
Infinitely copying and pasting is justified to encode the state, but not to encode the transition function, as is the case here to emulate loops. To encode an infinite loop would require an infinitely long SVG, but a Turing machine requires that the transition function be finitely encoded.
As someone on the GitHub commented, "If you can not construct an SVG that never halts (finishes drawing) SVG can not be turing complete." https://github.com/tom-p-reichel/svg-is-turing-complete/issu...
Edit: more explicitly, for each state, the user has to manually add the line
<use href="#line[n - 1]" y="30" id="line[n]" filter="url(#rule110)"/>
manually updating n themselves each time. This means that the transition function is "encoded" by the human, not the SVG code itself.It may not even be enough: the most basic looping construct (i.e. a bounded for-loop) is primitive recursive, but not Turing complete. You couldn't implement the Ackermann function without more sophisticated tools.