I was looking at the von Neumann integer generator here; http://bmanolov.free.fr/von-neumann-integer-gen.php generated a string; {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}} replaced { with L (left turn and stroke) replaced } with R (right turn and stroke) (ignored the commas) got this; L L R L L R R L L R L L R R R L L R L L R R L L R L L R R R R L L R L L R R L L R L L R R R L L R L L R R L L R L L R R R R R R wrote a little postscript program to see what it would like like as a path; %! /inch {72 mul} def /L {90 rotate 30 0 rlineto } def /R {-90 rotate 30 0 rlineto} def .1 setlinewidth newpath -4 inch -4 inch moveto L L R L L R R L L R L L R R R L L R L L R R L L R L L R R R R L L R L L R R L L R L L R R R L L R L L R R L L R L L R R R R R R stroke showpage seemed to be a fractal dragon of some sort. after doing it for higher integers, found it was the Levy C curve. Seems this construction has been known since the early 70's (Gosper). see item 135, Beeler, M., Gosper, R.W., and Schroeppel, (R. HAKMEM. MIT AI Memo 239, Feb. 29, 1972.); "A faster way to approach the same limiting curve is to substitute the curve itself for each of its 2^2^n segments, starting with a 90 degree "<"." This is essentially the same as the von Neumann construction, where the 90 degree "<" represents the bracketing of the empty set "{}". We can convert the von Neumann string into the Levy’s C curve with these substitutions; Replace the left bracket with a left turn and move 1 unit forward, Replace the right bracket with a right turn and move forward 1 unit, Ignore the comma. Wrote another program to draw the Levy C curve using a recursive construction, for integers 0 to 15; %!PS-Adobe-3.0 %%Creator: postscript by Stuart Anderson, stuart.errol.anderson@gmail.com %%CreationDate: 23-12-2012 %%Title: Levy's C curve from von Neumann integers % The von Neumann integer N is a finite set with N elements which are the von Neumann integers 0 to N-1. They are defined recursively as follows: % 0 := {} (the empty set) % N+1 := N ∪ {N} % 0 = {} = ∅. % 1 = {0} = {{}} = {∅} % 2 = {0, 1} = { {}, {{}} } = {∅, {∅}} % 3 = (0, 1, 2} = { {}, {{}}, {{}, {{}}} } = {∅, {∅}, {∅, {∅}}} % . % . % . % Levy’s C curve can be obtained from the von Neumann integers. This is not the way it is usually defined. The usual definition is as follows; % D = ψ1 (D) ∪ ψ2 (D), where ψ1 and ψ2 are similar contractions given by ψ1(z) = ( 1/2 + 1/2 i)z, and ψ2(z) = ( 1/2 − 1/2 i)z + ( 1/2 + 1/2 i). % It has been observed that there are other ways to generate the Levy’s C curve, in particular it was noted by Gosper; see item 135, Beeler, M., Gosper, R.W., and Schroeppel, (R. HAKMEM. MIT AI Memo 239, Feb. 29, 1972.); % "A faster way to approach the same limiting curve is to substitute the curve itself for each of its 2^2^n segments, starting with a 90 degree "<"." % This is essentially the same as the von Neumann construction, where the 90 degree "<" represents the bracketing of the empty set "{}". % We can convert the von Neumann string into the Levy’s C curve with these substitutions; % Replace the left bracket with a left turn and move 1 unit forward, % Replace the right bracket with a right turn and move forward 1 unit, % Ignore the comma. %%Pages: 16 %%BeginProlog /pagebegin { gsave /depth 0 def 1 setlinewidth % set line width /down {/depth depth 1 add def} def /up {/depth depth 1 sub def } def /DoLine % print a vert. line { 0 144 rlineto } def /vonNeumann { down DoLine % print line depth integer le % depth<integer? { 90 rotate vonNeumann -90 rotate vonNeumann} if up } def } def % pagebegin /page-end { grestore showpage } def %%EndProlog %%Page: 1 1 pagebegin /integer 0 def .750 .750 scale 400 400 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 2 2 pagebegin /integer 1 def .750 .750 scale 500 400 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 3 3 pagebegin /integer 2 def .50 .50 scale 800 800 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 4 4 pagebegin /integer 3 def .40 .40 scale 1100 1200 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 5 5 pagebegin /integer 4 def .30 .30 scale 1200 1700 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 6 6 pagebegin /integer 5 def .20 .20 scale 1200 2400 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 7 7 pagebegin /integer 6 def .15 .15 scale 1300 2800 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 8 8 pagebegin /integer 7 def .1 .1 scale 2000 3000 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 9 9 pagebegin /integer 8 def .08 .08 scale 3000 4000 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 10 10 pagebegin /integer 9 def .06 .06 scale 6000 5000 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 11 11 pagebegin /integer 10 def .04 .04 scale 12000 10000 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 12 12 pagebegin /integer 11 def .03 .03 scale 15000 18000 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 13 13 pagebegin /integer 12 def .025 .025 scale 15000 20000 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 14 14 pagebegin /integer 13 def .02 .02 scale 10000 30000 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 15 15 pagebegin /integer 14 def .012 .012 scale 12000 40000 moveto vonNeumann -90 rotate DoLine stroke page-end %%Page: 16 16 pagebegin /integer 15 def .007 .007 scale 0 setgray 0 0 100000 120000 rectfill 1 setgray 25000 40000 moveto vonNeumann -90 rotate DoLine stroke page-end %%Trailer %%EOF Stuart Anderson