R2 Rules
Robert P. Munafo, 2012 Apr 6.
This article presents the formal rules of the R2 Naming System. (For a general description of the R2 Naming System, related concepts and related issues, see the entry R2 Naming System.)
0. Style Conventions. In this text and throughout mu-ency, symbols in Futura Black represent R2 names or portions thereof. "R2" itself refers to the naming system of it is in italics: "R2"; it refers to the R2-name of the whole Mandelbrot set if it is in Futura Black: "R2". Filenames or parts thereof are shown in monospace. Thus, "R2.C(1/4).jpg" would be used as an example of a image file name that uses the R2 system to indicate what is in the image. Here is an example of all three usages:
My favorite area of the Mandelbrot Set is in the area between Seahorse valley and the north bulb. Its R2-name is R2F(2/5B*) and I saved an image of it in the file R2F(2/5B*).jpg.
1. Basics. The following assumptions are fundamental to the system:
1.a. Subsets of the Mandelbrot Set will be selected according to a methodical, analytical process and given names which uniquely and precisely identify them.
1.b. Proper subsets of named subsets are named by appending symbols to the end of the superset's name.
1.c. A name will consist entirely of printable symbols from the ASCII character set. (This rule does not apply in R2 systems adapted to languages that require non-ASCII characters; see section 8.)
1.d. The characters "<", ">", "&", "_", "|", ",", and "^" will not be used. (These are reserved for use as substitute characters in restricted environments; see section 6.) The double-quote character " is not used in the R2 system. It is reserved for use in quoting R2 names in text. Quoting is used for clarity, but it is not required.
1.e. To minimize confusion the distinction between upper and lower case is not considered significant. Thus, the uppercase and lowercase forms of a letter will not both be used in the R2 system. However, when mixed case is available, names should appear in the form presented here. (The variables M, N, P, and Q may be used in either upper or lower case, at the user's discretion.)
1.f. The letter I is not used in the R2 system because in some fonts it is difficult to distinguish its uppercase form from the digit 1. For similar reasons, L is not used (its lowercase looks like a 1) and O is not used (its uppercase looks like a 0).
1.g. The characters "." or "," will not appear at the end of an R2 name. This facilitates the use of R2 names in sentences.
2. Scope. A named subset may be any one of the following:
2.b. A mu-atom. (see 3 and 4.b)
2.c. A cusp. (see 4.c and 4.d)
2.d. A first-order filament. (see 4.g) (n.b.: Any second-order filament is also a first-order filament of a smaller mu-unit)
2.e. A branch point at which first-order filaments meet. (see 4.j)
2.f. A first-order filament together with the outward filament structure which is part of an ancestor mu-unit but which is not itself a first-order filament. (see 4.i)
2.g. One of the "pieces" into which a first-order filament is divided when all mu-molecules or order n or less are removed. (see 4.p, 4.q and 4.r)
2.h. An embedded Julia Set. (see 4.s)
2.j. A bond point. (see 4.e and 4.f)
3. Version identifier and name of M. The name of the entire Mandelbrot set is R2. The 2 is an identifier of the version of this naming system, and will be incremented to 3 if incompatible modifications or extensions are made.
s4:: 4. Name-construction rules. Per rule 1.b, names for subsets are constructed by the following rules:
4.a. The mu-unit owner operator (dead-end operator)
given the name of: a mu-unit
to produce the name of: its owner (a mu-atom)
append: a. %%% Illustrate R vs. Ra
4.b. The mu-unit child operator
given the name of: a mu-unit
to produce the name of: the mu-unit of a child of its owner
append: "." followed by the fraction indicating the internal angle of the child, e.g. .1/2, .2/5, .54/59, etc. %%% ref fig. 7
4.c. The cusp operator (dead-end operator)
given the name of: a mu-atom
to produce the name of: a cusp between it and one of its children
append: .C( followed by the internal angle of the child, followed by )+ if the cusp to the anticlockwise direction is being named, or )- if the cusp to clockwise is being named, or simply by ) if both cusps are intended. Examples: Seahorse Valley is R2.C(1/2)-; the smaller "seahorse valley" near -1.25 on the real axis is R2.1/2.C(1/2)-. %%% ref fig. 7
4.d. The cusp operator, special case (dead-end operator)
given the name of: mu-molecule
to produce the name of: its seed's cusp
append: .C(0) (special case of previous rule.) %%% ref. fig. 7 (for R.C(0) ) and figures 4 and 5.
4.e. The bond operator (dead-end operator)
given the name of: mu-atom
to produce the name of: the bond point between it and one of its children
construct: the same name as the name of the two cusps that meet at that bond point, with C changed to b . Example: The point -1.25+0i is called R.1/2.b(1/2)
4.f. The bond operator, special case (dead-end operator)
given the name of: a mu-molecule
to produce the name of: the point at the limit of its seed's cusp
append: .b(0)
4.g. The primary filament operator
given the name of: mu-unit
to produce the name of: one of its primary filaments
append: a nested sequence of descendant/branch specifiers, the format of which is defined by either of the following (equivalent) descriptions :
Description A (plain-text) :
i. First, append F
ii. Trace the shortest path from the mu-unit's seed out to the primary filament in question. For as long as you are still on the continent, each time you cross a bond append a ( followed by the internal angle of the child that you are crossing into. Do not write down the infinite sequence of (1/2 which occurs at the end, and leave off any trailing (1/2 you might have written, unless it was also the first one you wrote. The smallest mu-atom whose internal angle you have written shall be called the nth-order mu-unit's owner.
iii. As you continue along the shortest path, you will exit the nth-order mu-unit, then the (n-1)st-order mu-unit and so on. When you exit the nth-order mu-unit, append B followed by the branch-number of the branch into which you are crossing, followed by ). Continue in like manner as you exit the rest of the mu-units until you arrive at the primary filament in question. When this is done, you will have n matching pairs of nested parentheses. For all i from 1 to n, the branch number for the ith-order mu-unit will be grouped with the internal angle of the ith-order mu-unit's owner, within i sets of nested parentheses.
Description B (formal specification of the grammar, in BNF):
<appended-string> :== <primary-filament-designator> :== <pfd> <pfd> :== "F" <nested-branch-selector> :== "F" <nbs> <nbs> :== "(" <atom-designator> { <nbs> } <branch-selector> ")" :== "(" <ad> { <nbs> } <bs> ")" <ad> :== <internal-angle> <internal-angle> :== <numerator> "/" <denominator> <bs> :== "B" <branch-number> <branch-number> :== <integer>%%% ref fig. 13
4.h. The largest island operator
given the name of: a primary filament
to produce the name of: the lowest-period island mu-molecule in that filament
append: S. %%% describe how to find the S of a filament. NOTE: The island thus named is not necessarily the largest in physical size, but usually it is.
4.i. The primary filament operator, generalization 1
given the name of: a mu-unit U1
to produce the name of: the filament which consists of F (a primary filament of a subset mu-unit U2), together with all outward filaments that are a part of U1 but not nameable with the primary filament operator as described above
append: same syntax as the primary filament operator, but with the first Bn specifier which is a part of U1 but not a part of U2 changed to B0, and subsequent Bn specifiers changed to null strings. %%% repeat figure 13 showing newly-named items
4.j. The branch-point operator (dead-end operator)
given the name of: a mu-unit U
to produce the name of: a branch point contained in its filament structure
construct: From the names of each of the branches that meet at that point, construct a derivative name which contains the symbols which are common to the names of the branches, with a * inserted in the place where the names differ from each other. NOTE : This rule cannot be applied if the names differ in more than one place, or if the names contain different numbers of nested parentheses, etc. Examples : The tip of R2.1/3 is R2F(1/3B*); the center of the large two-fold spiral above R2.1/2.1/4 is R2F(1/2(1/4B1)B*). %%% repeat fig 13 showing newly named items
4.k. The primary filament operator, generalization 2
given the name of: a mu-unit U
to produce the name of: its intersection with the entire outward filament structure of its .1/3.2/5.1/2.1/2... descendant mu-atom
append: F(1/3(2/5B)B) (Same syntax applies to other descendant mu-atoms). Example : R2F(2/5B) is the main 5-pointed star filament structure attached to R2.2/5a. %%% repeat fig 13 again
4.l. The primary filament operator, generalization 2 special case
given the name of: a mu-unit U
to produce the name of: its intersection with the entire outward filament structure of U.1/2.1/2.1/2.1/2.1/2...
append: F(0B0) or F(1/2B). %%% illustrate this with the same figure as that for the previous rule
4.m. The primary filament operator, generalization 3
given the name of: a mu-unit U
to produce the name of: its intersection with the outward filament structure of its .1/3.2/5 child
append: F(1/3(2/5(*B)B)B). %%% repeat fig 13 again
4.n. The primary filament operator, generalization 3, special case (dead-end operator)
given the name of: a mu-unit U
to produce the name of: its intersection with the outward filament structure of all of its children
append: F(*B). (Special case of previous rule.)
4.o. The tip operator, case 1 (dead-end operator)
given the name of: a mu-unit
to produce the name of: its tip
append: t
4.p. The filament subset operator, special case 1
given the name of: Primary or partitioned filament F1
to produce the name of: a partitioned filament F2 which contains all points which would no longer be connected to Ra if F1St were removed
append: FS[(1/2B1)]
4.q. The filament subset operator, general case
given the name of: Primary filament F1
to produce the name of: a subset filament F2 which contains no points in F1S and which includes all points in F1 which would no longer be connected to F1S if a point P (which is a member of F1S) were removed
append: FS[ followed by a filament-specifier for the smallest named filament of F1S which contains P, followed by ]. The "smallest named filament" in this context means anything that is nameable by all of the rules, including this rule; however this rule should be applied recursively only when necessary; for example, the second-largest subfilament is called ...FS[(1/2B1)], not ...FS[(1/2B1)FS[(1/2B1)]] even though the latter is technically legal. On the other hand, there are some smaller subfilaments which touch the (1/2B1) part of F1S; the largest of these are called ...FS[(1/2B1)SF(n/3B1)], n=1 or n=2. NOTE : Uniqueness of names of the form R2F(...)FS[...]S has not been proven; this places the validity of multiple successive applications of FS[...] in question.
NOTE : Although this operator may be appended to names such as RF(2/5B) (which includes all five branches off of R.2/5) such usage is discouraged. It creates confusing redundant names for features (such as RF(2/5B)FS[0]FS[0]FS[2], which is the same as RF(2/5B3)FS[2]) and doesn't allow any new features to be named, except for neighborhoods of branch points.
%%% ref fig 14 (the RF(1/3B1) figure)
4.r. The filament subset operator, special case 2
given the name of: Primary filament F1
to produce the name of: the subset of F1 which contains all points in F1 which are not in the outward filament structure of F1Sa
append: FS[0]. (This is a special case of the previous rule.) %%% ref fig. 14
%%% Another special case can be added, essentially using 't' as an abbreviation for "FS{[2]}x~". The external angle entry uses 't' in this way. This special case should be described here, or added to section 7.
4.s. The embedded Julia Set operator (dead-end operator)
given the name of: Primary filament F
to produce the name of: the union of FS with the surrounding filament structure of n-fold rotational symmetry (n is a power of 2) and the filaments connecting said symmetric structure to FS
append: Jn. (J stands for Julia, because many J2 features resemble Julia sets of the Cantor dust variety.) %%%show 3 or 4 widely different structures, with their J2 through J16 circled.
4.t. The nucleus operator (dead-end operator)
given the name of: mu-atom
to produce the name of: the mu-atoms nucleus
append: .n
5. Standard abbreviations. The following shorthand may be applied to a name after it is generated according to the rules above :
5.a. For FS[(1/2B1)], substitute FS[1/2].
5.b. For any repeated sequence string string...string substitute {string}xn, where n is the number of repetitions. For example, R2F(1/2B1)FS[1/2B1]FS[1/2B1]FS[1/2B1]Sa becomes R2F(1/2B1){FS[1/2B1]}x3Sa.
5.c. For any infinite repeated sequence string string string... substitute {string}x~. (Special case of previous rule; ~ is used as a symbol for infinity. Most names using this rule will be names of points, such as terminal points.)
6. Metasyntactics. This section describes rules that enable variables to be used within an R2 name.
6.a. The character N may be used anywhere that a number would normally appear. A name which uses the character N stands for any member of the set of features whose names are identical to the given name except for the substitution of a number for N. (Example : RF(1/NB1)S refers to any of the mu-molecules RF(1/2B1)S, RF(1/3B1)S, RF(1/4B1)S, and so on : the largest mu-molecules on the main sequence. The name RF(3/7BN) refers to any of the branches RF(3/7B0), RF(3/7B1), RF(3/7B2), etc. through RF(3/7B6). However, this name does not refer to the union of all of these branches; for this we use the name RF(3/7B).
6.b. Expressions of the form integerN{+|-}integer, integerNN{+-}integerN{+-}integer, etc. may be used anywhere that a single integer would normally appear in a name. The interpretation of such names is similar to the interpretation of names that use N alone, as by the previous rule. NN refers to N2, and higher powers can be represented with more N's. (Examples: R.2/2N+1 refers to any one of the mu-units R.2/5, R.2/7, R.2/9, etc. : the small mu-units midway between two members of the main sequence. An example using NN will be given later.)
6.c. N or expressions including N may be used in multiple places in a name, as per the previous two rules. When interpreting a name of this form, all instances of N in that name stand for the same value. (Example 1: the name RF(N/2N+1(*B)) refers to any of the radicals RF(1/3(*B)), RF(2/5(*B)), RF(3/7(*B)), etc : the radicals on the "northeast" side of Seahorse Valley. Example 2: R.NN+1/2NN+N+2, when N is 3, refers R.10/23 because NN+1 is 32+1=10 and 2NN+N+2 is 2×32+3+2=23.)
6.d. The letters M, P, and Q may also be used in the same way as N, as in the previous three rules. Together with N, these letters are called variables. When interpreting a name that includes multiple different variables, each may stand for a different integer. The letters may appear in uppercase or lowercase, as long as all variables within a name are of the same case. (Example : the name RF(N/2N+1B2){FS[2]}xMJ2 refers to any "double shepherd's crook" feature in the largest filament-branch of a northeast Seahorse Valley radical. Map 47 on page 86 of The Beauty of Fractals is an example of one of these; in this specific example N is 14 and M is 8.)
7. Guidelines for nonstandard modifications. To encourage the use of R2 names in a wide variety of contexts (such as computer filenames), the following guidelines are provided. These guidelines concern character substitutions and abbreviations. (NOTE : Although these guidelines are sufficient for Windows, UNIX and Macintosh filenames, they cannot handle the restrictions of MS-DOS.)
7.a. If only two of the three pairs "()", "[]", and "{}" are available, the pair "<>" should be used as a substitute for the pair that is unavailable.
7.b. If only two of the four pairs "()", "<>", "[]", and "{}" are available, then the first (in the order listed here) should be used as a substitute for "()" and "[]", and the other should be used as a substitute for "{}".
7.c. The character "|", unused in the standard R2 naming system, may be used as a substitute for "/". Similarly, "," may be used as a substitute for ".", "^" may be used for "~", "&" may be used for "+", and "_" may be used for "-".
7.d. In the following guidelines (which describe abbreviations), the standard characters are used. This is not meant to imply that the abbreviations may not be used in combination with character substitution. These guidelines are listed in order of preference. Thus, if you do not need to apply them all in order to meet your length limitation, then the ones listed first should be the ones you apply.
7.e. In any occurrance of consecutive FS operators FS[string1]FS[string2]..., the second and subsequent FS may be omitted, leaving FS[string1][string2]....
7.f. The string [(string)] may be abbreviated [string], if the parentheses so omitted "belong to each other". For example, FS[(1/2B1)] may be abbreviated to FS[1/2B1], but FS[(1/2B1)SF(1/3B1)] cannot be abbreviated by this rule because the first and last parentheses do not belong to each other.
7.g. The strings J2, J16, J32, and J64 may be abbreviated J, J1, J3, and J6, respectively.
7.h. Any occurrance of (1/ may be replaced with (. Similarly, [1/ may be replaced with [ and .1/ may be replaced with ".". Thus, the common fractions 1/2, 1/3, etc. become 2, 3, etc.
7.i. Any occurrance of B1) may be replaced with ), and any occurrance of B1] may be replaced with ]. Thus (in combination with the previous rule), the common strings (1/2B1), (1/3B1), and (2/3B1) become (2), (3), and (2/3) respectively, and FS[1/3(2/5B1)B2] becomes FS[3(2/5)B2].
7.j. FS[2] and FS[0] may be abbreviated to FS2 and FS0, respectively.
7.k. FS[ may be abbreviated to F[. Thus R2F(2)FS[3] becomes R2F(2)F[3].
7.l. .C( may be abbreviated C(. Thus R2.C(2) becomes R2C(2).
7.m. The version number may be omitted : R2 becomes R. However, if you do this you must make sure that all of your names use the same naming system. For example, if you are using R2 system and R3 system names on the same computer system, you should convert them all to the R3 system before omitting the version number from any of them.
7.n. If you are using R2 names in a computer filesystem, and have one or more names of the form string1 string2 where the first portion string1 is the same for all of the names, you may create a directory whose name is "string1..", and place all of the files in that directory, replacing the initial string1 in their names with "..". Thus, a pair of files for that would normally be called "RF(2/5B2)F[3]" and "RF(2/5B2)F[0]J2" could be renamed to "..[1/3B1]" and "..[0]J2" respectively and placed in a directory called "RF(2/5B2)F..". (n.b. : the ".." represents an ellipsis. This example uses standard punctuation symbols; the actual symbols you use will differ if you have applied substitution rules.)
NOTE : Please do this only when necessary to meet your filesystem's length requirements, or when you have more than about 100 images in your collection and are trying to organize.
7.o. Three or more characters from end of a name may be removed, and replaced with ".." or with "..n", where n is an integer. The integer n is meant to resolve ambiguities that result from having more than one name that start with the same sequence of characters.
WARNING : This abbreviation method should be used sparingly. If you are using R2 names in a filesystem and find yourself using this for more than 5% of your files, then you should probably be using the previous guideline to resolve the length problems.
8. Non-English Languages. In the unlikely event that R2 names might spread to non-English contexts, the following guidelines are provided, along with an example of their application. (For reference, here is a listing of all the symbols in English R2 along with their reasons.)
8.a. You should try to determine if you are the first person to use R2 names in your language. If you are, go ahead and follow the rules here to establish a translation system. Otherwise, try to follow the system which has already been developed for your language.
8.b. Each symbol in the English-Roman R2 system described above will have a counterpart in your language.
8.c. The counterparts should be different from each other. Do not use one symbol for two different purposes.
8.d. The symbols "0", "1", "2", "3", "4", "5", "6", "7", "8", and "9" should be replaced with the corresponding number symbols in your language.
8.e. The symbol "/" should be replaced with the symbol you use to divide one number by another number. (For example, twenty divided by four is five : 20/4=5.)
8.f. The symbol "+" should be replaced with the symbol you use to add two numbers.
8.g. The symbol "-" should be replaced with the symbol you use to subtract two numbers.
8.h. The symbol "x" should be replaced with the symbol you use to multiply two numbers.
8.i. The symbol "." should be replaced with a punctuation symbol in your language. You could use the symbol that appears at the end of a sentence, or the symbol that appears between the hours and the minutes on a digital clock, or the symbol that appears between the digits in a decimal fraction.
8.j. The counterpart for "~" should be something which looks sort of like the mathematical symbol for infinity. If you don't have any symbol that looks like that, then you should pick any symbol you want.
8.k. The symbols "(" and ")" should be replaced with two punctuation symbols in your language that look like each other, that occur in a matched pair and preferably are used as brackets. If your language has the symbols "(" and ")", then you should use them.
8.l. The same rule applies to the symbols "[" and "]", and to the symbols "{" and "}".
8.m. The symbols "M", "N", "P", and "Q" should be replaced with four symbols that are used to represent variables in algebra, trigonometry, and calculus.
8.n. The symbol "F" should be replaced with the first letter in the word for "filament", "string", or "thread" in your language. Choose the one that seems to be the most logical.
8.o. The symbol "S" should be replaced with the first letter in the word for "set" (a mathematical set), "island", "miniature", or "baby" in your language. Choose the one that seems to be the most logical.
8.p. The symbol "a" should be replaced with the first letter in the word for "atom", "ball", or "disk" in your language. Choose the one that seems to be the most logical.
8.q. The symbol "J" should be replaced with the letter which sounds the same as "J" in the French language. If you so not have that sound in your language, then the symbol "J" should be replaced with the first letter that you would use to spell the French name "Julia" in your language. (Julia is the name of a French mathematician.)
8.r. The symbol "C" should be replaced with the first letter in the word for "cusp", "horn", "valley", or "fjord" in your language. Choose the one that seems to be the most logical.
8.s. The symbol "b" (for the bond-point operator) should be replaced with the first letter in the word for "bond", "link" or "joint" in your language. Choose the one that seems to be the most logical.
8.t. The symbol "B" (for the primary filament operator and derived operators such as filament subset) should be replaced with the first letter in the word for "branch", "arm" or "leg" in your language. Choose the one that seems to be the most logical.
8.u. The symbol "R" should be replaced with the first letter of your name. If you have already used this letter, then choose any symbol as a counterpart for "R".
% ttd:
specify that R2 names (except a few dead-end names like xxxJN) are names of sets and can therefore be used with set notation operators like union and intersect
other operators: complex conjugate, star (tuning) operator (make sure to define it with the same associativity as Milnor's version)
symbol substitution rules for limited character-set filesystems are obviously not good enough — try to make a set of rules that will work in my current RHTF under MacOS authoring system
It is now possible to use utf-16 or Unicode to show examples of R2 in foreign script systems like cyrillic and katakana
Notes for an R3 system:
- I want to make it possible to name paramecia and other similar features. The main challenge is, each time you go "off course" and start focusing in on a new smaller island, the filament subset operator that you add has to reproduce everything that has been done by all previous filament subset operators up to that point (plus a little more to specify where you went off course)
- I want to eliminate the dual usage of the letters F and S. In R2, they are used alone (F in rules 4.g, 4.k through 4.n, and S in rule 4.h), and also as part of the symbol FS (rules 4.p through 4.r). I could fix this by replacing FS with a currently-unused single letter (perhaps E or R as suggested in the list below).
For reference, here are the letters/symbols and reasons for each:
A atom .
B bond, branch
C cusp
D (possible future use as "division" and honoring Douady)
E external (arg)? R3F(1/3B1)E[0]E[(2/3B1)]S
F filament, also part of FS (filament subset)
G
H (possible future use honoring Hubbard)
I uppercase is too close to "1"
J Julia
K
L lowercase is too close to "1"
M variable
N variable; nucleus
O too close to 0
P variable
Q variable
R robert; ray? R3F(1/3B1)R[0]R[(2/3B1)]S
S set, also "subset" when used as part of FS (filament subset)
T tip
U
V
W
X × (times)
Y
Z
+ prograde side of cusp
- retrograde side of cusp
revisions: 20080126 oldest on record; 20120316 add .n operator; 20120406 add links in section 2 referencing parts in section 4.
From the Mandelbrot Set Glossary and Encyclopedia, by Robert Munafo, (c) 1987-2024.
Mu-ency main page — index — recent changes — DEMZ
This page was written in the "embarrassingly readable" markup language RHTF, and was last updated on 2023 Mar 14. s.27