import java.applet.Applet; import java.awt.event.*; import java.awt.*; import java.awt.geom.*; class TextRule { /**This is a documentation file. It is read by the file reader.**/ public TextRule() {} public String getText(int k) { if(k==0) return(text0()); if(k==1) return(text1()); if(k==2) return(text2()); if(k==3) return(text3()); if(k==4) return(text4()); if(k==5) return(text5()); if(k==6) return(text6()); if(k==7) return(text7()); if(k==8) return(text8()); return(null); } public static String text0() { String S="EXERCISE: Press the 'same circulation' button on the 'special configurations' control. Click on the big blue arrow keys. Look closely at how the two curves follow each other. Observe that the matchup is pretty good but not perfect: the endpoints do not usually match. In most cases, this problem cannot be fixed by changing the scaling: the vectors defined by the endpoints of the two highlighted segments do not point in the same directions. Now switch from the 'graph rule' to the 'ideal rule' on the 'vector value' control. Observe the perfect matchup."; return(S); } public static String text1() { String S="THE IDEAL RULE: Recall that the V curves are produced by a two step process, as described in the 'vector sub' text. First, the combinatorial substitution rule is iterated some number of times to produce a numeric sequence. Then, each number is replaced by a vector. The 'ideal rule' produces new curves by the same two step process. The first step is the same as what we have already done. The second step uses a different assignment of vectors. The new assignment of vectors is a kind of eigenvector for the system: When we consider the 4th power of the substitution, each segment of length 1 is replaced by a polygonal arc of length 81 that has the same endpoints, up to a suitable scaling factor."; return(S); } public static String text2() { String S="THE SCALING FACTOR: As in the 'ideal limit' text, we set\n\ns2=sqrt(3)\n\ns3=sqrt(2)+1\n\nThese are the scaling factors we mentioned on the previous page."; return(S); } public static String text3() { String S="EXERCISE: Press the 'ideal vertex assignment' button on the 'special configurations' control. Now use the big arrow keys to survey the ideal vector assignment. Once you have done this for a while, toggle back and forth between the 'graph rule' and the 'ideal rule' to see how the geometry changes. If you want to see what the new assignment of vectors is, just read the coordinates at the tops of the plot windows."; return(S); } public static String text4() { String S="ITERATIVE LIMIT: One can check by hand that the ideal rule really does have the 'same endpoints property', and this constitutes a proof. Still, you might wonder how we found it. What we did was iterate the original rule for a while, rescale the picture, and then guess what the limiting vector assignment should be. To give (more than) an analogy, one can find the positive (i.e. Perron-Frobenius) eigenvector of a positive matrix as follows: Apply a high power of the matrix to an arbitrary positive vector and then rescale so that the vector has unit length. If the limit is expected to have nice coordinates, one can sometimes guess them. We expected the limit vectors to have Z-coordinates in the V2 case and Z[sqrt(2)]-coordinates in the G3 case. So, it was easy."; return(S); } public static String text5() { String S="EXERCISE: First reset the program. Next, do the following thing for each of the V curves, starting with V(1) and ending with V(9). Turn on the V curve and toggle between the ideal rule and the graph rule. Notice, as you progress from 1 to 9, the 'graph curve' and the 'ideal curve' become nearly indistinguishable. What we mean to illustrate is that the curves produced by the ideal rule have the same limit as the ones produced by the original rule. So, for the purposes of proving our main result, we can replace the arithmetic graphs by the curves that are produced by the ideal rule. We still call these curves V2(k) and V3(k), just for economy of notation."; return(S); } public static String text6() { String S="CONVERGENCE PROOF: To formally prove that the two limits are the the same, we take the linear algebra analogy seriously and set up the problem as an eigenvector problem. Our substitution rule gives rise to a positive matrix M acting on a 40-dimensional vector space, namely the space of all possible vector assignments for the 40 nontrivial (region,parity) pairs. Being a positive matrix, M has a unique positive eigenvector, and the image of any vector under powers of M converges, up to scale, to it. This is a trick familiar to people who study self-similar tilings."; return(S); } public static String text7() { String S="VERTEX CONTROL: Now we have an explicit family of curves which has the same limit as our arithmetic graphs. Each curve contains all the endpoints of its predecessor. If our main theorem is really correct, we should be able to scale the I2 and I3 limits so that they contain all the vertices of each (ideal-rule version of) V2(k) and V3(k) respectively. We can determine the scaling factor just by looking at V(1), which is a triangle. We can (and do) make an explicit calculation."; return(S); } public static String text8() { String S="EXERCISE: Reset the program, then turn on V3(1) and I3(1). Press the 'ideal rule' button and press the 'edge+info' button. The highlighted vectors have their tails at (0,0) and their heads at the coordinates listed at top. Convince yourself that you could calculate the scale factors for the limit I2 and I3 curves based on the data you are staring at."; return(S); } }