#17516: Radical expressions for roots of polynomials using Galois theory
-------------------------------------------+------------------------
       Reporter:  gagern                   |        Owner:
           Type:  enhancement              |       Status:  new
       Priority:  major                    |    Milestone:  sage-6.5
      Component:  number fields            |   Resolution:
       Keywords:  radical galois symbolic  |    Merged in:
        Authors:                           |    Reviewers:
Report Upstream:  N/A                      |  Work issues:
         Branch:                           |       Commit:
   Dependencies:  #14239                   |     Stopgaps:
-------------------------------------------+------------------------

Comment (by gagern):

 Replying to [comment:6 jdemeyer]:
 > I think it suffices to take the information from `galoisinit().gen` and
 `galoisinit().orders`, but I haven't checked the details.

 Current experiments seem to indicate that
 `gal.galoisfixfield(gal[6][:-1])` might be enough. At least for the given
 example. But I'm not sure whether that's a general rule. What one can do
 is look for a sequence of normal subgroups in such a way that the index of
 each one in its supergroup is a prime number. In the given example, there
 is exactly one such sequence which ends up at the trivial group. Not sure
 whether that's a general rule either, and if not, whether it would be
 worthwhile to try different sequences. If I understand the GAP code in
 `local/gap/latest/lib/grpperm.gi` correctly, its `DerivedSubgroup` method
 makes that choice greedily, without a graph search. So if it really is the
 derived series we want, then we might have a closer look at that as well,
 or simply call GAP as I did in my first attempt.

 Here is what I currently use in my experiments, to be on the safe side:

 {{{
 def findRadicalSeries(t, collect=None):
     g = t[0]
     n = t[1]
     for s in g.galoissubgroups():
         if g.galoisisnormal(s):
             m = ZZ(prod(s[1]))
             k = n // m
             if is_prime(k):
                 t2 = (s, m, t)
                 if m != 1:
                     r = findRadicalSeries(t2, collect)
                     if r is not None and collect is None:
                         return r
                 else:
                     r = []
                     while t2 is not None:
                         r.append(t2[:2])
                         t2 = t2[2]
                 if collect is None:
                     return r
                 else:
                     collect.append(r)
     return collect
 rs = findRadicalSeries((gal, ZZ(prod(gal[7])), None))
 }}}

 I'm currently experimenting with the sequence that found. And just caused
 yet another crash, this time somewhere in the symbolic expressions engine.
 Investigating…

--
Ticket URL: <http://trac.sagemath.org/ticket/17516#comment:7>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to