# The third argument of the Root function

Consider the roots of an arbitrary indecomposable polynomial:

sol = Solve[x^5 + 2 x + 1 == 0, x]


The returned expression is

{{x -> Root[1 + 2 #1 + #1^5 &, 1]},
{x -> Root[1 + 2 #1 + #1^5 &, 2]},
{x -> Root[1 + 2 #1 + #1^5 &, 3]},
{x -> Root[1 + 2 #1 + #1^5 &, 4]},
{x -> Root[1 + 2 #1 + #1^5 &, 5]}}


Everything seems OK. But now let us evaluate the expression

InputForm[sol]


Now the returned expression is

{{x -> Root[1 + 2*#1 + #1^5 & , 1, 0]},
{x -> Root[1 + 2*#1 + #1^5 & , 2, 0]},
{x -> Root[1 + 2*#1 + #1^5 & , 3, 0]},
{x -> Root[1 + 2*#1 + #1^5 & , 4, 0]},
{x -> Root[1 + 2*#1 + #1^5 & , 5, 0]}}


Why has the extra argument 0 appeared ?
Is it a bug, mystery or some extremely smart property ?

I use Mathematica 9.0.1.0 (64-bit Windows 7).

• The same happens in Mathematica 8.0.4 (64 bit Windows 7). Oct 25, 2013 at 12:51
• The last argument is undocumented, and reflects the method used to isolate roots, and assign them their ordinal numbers. Changing that number might result in change of numerical approximation of the root object, due to change of ordering. Oct 25, 2013 at 17:09

Yes, there is indeed a third, hidden argument. I think it represents
(or at least it used to represent) what is called "the isolating
set" of the algebraic number, that is, a subset of the complex plane
in which the root object is the only root of the minimal polynomial.
This is necessary in order for the roots of the polynomial to be
ordered, so that you can speak of the "first roots", "second root" etc.

Mathematica uses two approaches to root isolation: numerical and
exact one. Which one is used depends on the value of the option
ExactRootIsolation of Root. One can check that the invisible third
argument is different (you can extract it with Part). However, it
seems to me that the actual form of the third argument was changed
(without my noticing it until today ;-)) in some version of
Mathematica between 3 and 5. Mathematica used to return an
approximate value of the root with the ExactRootIsolation set to
False and the corners of the isolating rectangle in the complex plane
with ExactRootIsolation set to True. However, now it seems just to
return 0 and 1, which I find impossible to interpret. I am sure,
however, that the same information is still stored somewhere...

Andrzej Kozlowski

Edit*

Also, @Alexey found it in the docs.

• I noticed that there is an example (the "options" section of "examples" for Root function's documentation) in the help of Mathematica that demonstrates the third argument of the Root. Oct 25, 2013 at 20:23
• Direct link to the explanation in the Documentation: reference.wolfram.com/mathematica/ref/Root.html#199960501 Oct 26, 2013 at 10:41
• Turned into CW, as I'm just posting other people's results Oct 26, 2013 at 18:25