#15513: Generic factorization algorithms for polynomials over field extensions
and
similar constructions
---------------------------------+------------------------
Reporter: nthiery | Owner:
Type: enhancement | Status: new
Priority: major | Milestone: sage-6.4
Component: factorization | Resolution:
Keywords: | Merged in:
Authors: | Reviewers:
Report Upstream: N/A | Work issues:
Branch: | Commit:
Dependencies: | Stopgaps:
---------------------------------+------------------------
Description changed by nthiery:
Old description:
> Implement a generic implementation of univariate polynomial
> factorization that would work over any (computable enough) field.
>
> Rationale: factorization is a fundamental building block of computer
> algebra. Students and colleagues are stumbling over this over on this
> missing feature while playing with not so exotic fields. As an
> illustration, here is for example a translation in Sage of my old
> favorite demo in MuPAD illustrating generic algorithms:
> {{{
> sage: Qx.<x> = QQ[]
> sage: Qxz.<z> = Qx.fraction_field()[]
> sage: F.<z> = Qxz.quo(z^2-x)
> sage: P.<u> = F[]
> sage: z*u * z
> x*u
> sage: (u^2 - x^3).factor() # Should return (u + x z) (u - x z)
> *NotImplementedError*
> }}}
>
> It would be nice to further support base rings which themselves
> support factorization:
> {{{
> sage: K.<x0,x1> = QQ[]
> sage: R.<x> = K[]
> sage: factor(x^2 - (x0+x1)*x)
> }}}
>
> For the record, there has been progress lately, with factorization
> implemented for more fields, though not yet all. Here are examples
> that used to fail with Sage 5.8 and work with Sage 6.4:
> {{{
> sage: Px.<x> = QQ[]
> sage: Qx = Px.fraction_field()
> sage: Qxz = Qx['z']
> sage: z = Qxz.gen()
> sage: (z^2-x).factor()
> }}}
New description:
Implement generic (univariate?) polynomial factorization algorithms
over ground fields obtained through standard constructions.
Rationale: factorization is a fundamental building block of computer
algebra. Students and colleagues are stumbling over this over on this
missing feature while playing with not so exotic fields built from
standard ones.
Here is for example a translation in Sage of my old favorite demo in
MuPAD illustrating constructions and generic algorithms:
{{{
sage: Qx.<x> = QQ[]
sage: Qxz.<z> = Qx.fraction_field()[]
sage: F.<z> = Qxz.quo(z^2-x)
sage: P.<u> = F[]
sage: z*u * z
x*u
sage: (u^2 - x^3).factor() # Should return (u + x z) (u - x z)
*NotImplementedError*
}}}
TODO: review the literature, what's already implemented, and what could
be; provide examples in each case.
= Factorization over a transcendental extension F(x) =
Assuming one can factor (univariate) polynomials over F, implement
factorization for (univariate) polynomials over F(z).
= Factorization over an algebraic extension F(a) =
Assuming one can factor (univariate) polynomials over F, implement
factorization for (univariate) polynomials over F(a).
Taken from the MuPAD library:
{{{
/* faclib::algfactor(a,flag) factors the polynomial a in F(alpha)[z]
or tests it for irreducibility only, depending on flag
Input: a is a bivariate polynomial in z and alpha,
flag: TRUE or FALSE
Output: if flag <> FALSE then list of factors of a
if flag is FALSE then TRUE if a is irreducible
FALSE if a is reducible
Reference: Geddes et al, Algorithms for Computer Algebra, algorithm
AlgebraicFactorization page 383
*/
}}}
= Factorization over polynomial rings F[...] =
{{{
sage: K.<x0,x1> = QQ[]
sage: R.<x> = K[]
sage: factor(x^2 - (x0+x1)*x)
NotImplementedError
}}}
= Special case: bivariate polynomials =
/* factorization of bivariate polynomials over a field F
or of univariate polynomials over F[y]
The algorithm implemented in faclib::FACTOR is based on Hensel lifting
and short vector computation. It works for the factorization of an
univariate polynomial over F[y][x] over any ring y.
Reference: von zur Gathen, Hensel and Newton Methods in Valuation Rings,
Math.Comp.
166(1984), pp. 637-661.
The complexity is O(n^6 m^2 + n log q) operations in F_q when
F=F_q, and where n = deg(f,x) and m = deg(f,y).
*/
= Some old data points =
For the record, there has been progress lately, with factorization
implemented in more situations. Here are examples that used to fail
with Sage 5.8 and work with Sage 6.4:
{{{
sage: Px.<x> = QQ[]
sage: Qx = Px.fraction_field()
sage: Qxz = Qx['z']
sage: z = Qxz.gen()
sage: (z^2-x).factor()
}}}
--
--
Ticket URL: <http://trac.sagemath.org/ticket/15513#comment:27>
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.