What are Root objects with multiple polynomials?

Let's read what the docs say:

Root[{$f_1, f_2 ,\ldots$}, {$k_1, k_2 ,\ldots$}] represents the last coordinate of the exact vector {$a_1, a_2, \ldots$} such that $a_i$ is the $k_i$th root of the polynomial equation $f_i(a_1, \ldots, a_{i-1}, x)=0$.

This, though a bit confusing, is a pretty accurate and straightforward description. Let's assume two functions ($f_1$ and $f_2$), and substitute $i=1$ into the description. Then we can read

... such that $a_1$ is the $k_1$th root of the polynomial equation $f_1(x)=0$.

With your example, this means that

f1 = 327680000000000000 - 1280000000 #1^8 + #1^16 &
f2 = #1 + 25 #2 + 25 #2^5 &

k1 = 7;
k2 = 3;

and

a1 = Root[f1, k1] // N
(* ==> -8.28089 - 8.28089 I *)

Now put in $i=2$, and read the description again:

Root[{$f_1, f_2$}, {$k_1, k_2$}] represents $a_2$ such that $a_2$ is the $k_2$th root of the polynomial equation $f_2(a_1, x) = 0$.

So let's do

a2 = Root[f2[a1, #] &, k2]

(* ==> 0.353233 + 0.353233 I *)

This is indeed the numerical value of your Root object:

N@Root[{f1, f2}, {7, 3}]

(* ==> 0.353233 + 0.353233 I *)

I hope this clarifies the definition of the multi-polynomial Root objects.


Now why would they introduce this? I don't know. I always assumed that Root is not meant for end users to construct directly. It's simply a representation of algebraic numbers that Mathematica's algorithms can work efficiently with. I assume that some algorithms in version 9 can work better with this type of Root object than with the single-polynomial ones.

You can always convert these to a single-polynomial Root object using RootReduce:

RootReduce@Root[{f1, f2}, {7, 3}] 

(* ==>

Root[268435456 - 160000000000 #1^8 - 1280000000000 #1^12 + 
   14593486328125 #1^16 + 296215781250000 #1^20 + 
   2277618359375000 #1^24 + 10672192343750000 #1^28 + 
   34709265117187500 #1^32 + 83311708281250000 #1^36 + 
   152740318515625000 #1^40 + 218200683593750000 #1^44 + 
   245475769042968750 #1^48 + 218200683593750000 #1^52 + 
   152740478515625000 #1^56 + 83312988281250000 #1^60 + 
   34713745117187500 #1^64 + 10681152343750000 #1^68 + 
   2288818359375000 #1^72 + 305175781250000 #1^76 + 
   19073486328125 #1^80 &, 46]

*)

Or just use N on them to get a numerical approximation.


First consider :

Root[327680000000000000 - 1280000000 #1^8 + #1^16 &, 7] // ToRadicals // FullSimplify
(-2 - 2 I) 5^(3/4) (10 - 2 Sqrt[5])^(1/8)

now substitute #1 with this number in #1 + 25 #2 + 25 #2^5 & switching #2 to #1 and compare with your original Root object :

Root[(-2 - 2 I) 5^(3/4) (10 - 2 Sqrt[5])^(1/8) + 25 #1 + 25 #1^5 &, 3] ==  
Root[{327680000000000000 - 1280000000 #1^8 + #1^16 &, #1 + 25 #2 + 25 #2^5 &}, {7, 3}]
True

Now it appears quite obvious what the updated Root object is supposed to represent and the documentation makes no more confusion. For the sake of simplicity let's repeat the above procedure for another simpler example of a Root object taking it from documentation:

Root[#1^2 - 3 &, 1] 
-Sqrt[3]
 Root[#1^2 + Sqrt[3] - 5 &, 2]
Sqrt[5 - Sqrt[3]]

i.e. it is the same as

Root[{#1^2 - 3 &, #2^2 - #1 - 5 &}, {1, 2}]
Sqrt[5 - Sqrt[3]]

i.e. we have

Root[#1^2 - Root[#1^2 - 3 &, 1] - 5 &, 2] == Root[{#1^2 - 3 &, #2^2 - #1 - 5 &}, {1, 2}]
 True

To conclude: this new capability of Root allows for much simpler representation (we needn't nest many Root objects) of algebraic numbers (roots of univariate polynomials of rational coefficients) and provides quite terse notation of even complicated algebraic objects.


To give a vague analogy instead of the precise examples given above.

One could think of the equations in the multidimensional version of Root as a (lower) triangular system of equations where each equation is a polynomial with coefficients in the roots of the proceeding equations. Which of the roots are taken as coefficients is specified by the indices.

In the linear case this is exactly an lower triangular linear system of equations, where each equation has exactly on solution.

Is there a more abstract, unifying way to think of this using, say, Groebner Bases? I wonder.