Function: thueinit
Section: polynomials
C-Name: thueinit
Prototype: GD0,L,p
Help: thueinit(P,{flag=0}): initialize the tnf corresponding to P, that will
 be used to solve Thue equations P(x,y) = some-integer. If flag is nonzero,
 certify the result unconditionally. Otherwise, assume GRH (much faster of
 course).
Doc: initializes the \var{tnf} corresponding to $P$, a nonconstant
 univariate polynomial with integer coefficients.
 The result is meant to be used in conjunction with \tet{thue} to solve Thue
 equations $P(X / Y)Y^{\deg P} = a$, where $a$ is an integer. Accordingly,
 $P$ must either have at least two distinct irreducible factors over $\Q$,
 or have one irreducible factor $T$ with degree $>2$ or two conjugate
 complex roots: under these (necessary and sufficient) conditions, the
 equation has finitely many integer solutions.
 \bprog
 ? S = thueinit(t^2+1);
 ? thue(S, 5)
 %2 = [[-2, -1], [-2, 1], [-1, -2], [-1, 2], [1, -2], [1, 2], [2, -1], [2, 1]]
 ? S = thueinit(t+1);
  ***   at top-level: thueinit(t+1)
  ***                 ^-------------
  *** thueinit: domain error in thueinit: P = t + 1
 @eprog\noindent The hardest case is when $\deg P > 2$ and $P$ is irreducible
 with at least one real root. The routine then uses Bilu-Hanrot's algorithm.

 If $\fl$ is nonzero, certify results unconditionally. Otherwise, assume
 \idx{GRH}, this being much faster of course. In the latter case, the result
 may still be unconditionally correct, see \tet{thue}. For instance in most
 cases where $P$ is reducible (not a pure power of an irreducible), \emph{or}
 conditional computed class groups are trivial \emph{or} the right hand side
 is $\pm1$, then results are unconditional.

 \misctitle{Note} The general philosophy is to disprove the existence of large
 solutions then to enumerate bounded solutions naively. The implementation
 will overflow when there exist huge solutions and the equation has degree
 $> 2$ (the quadratic imaginary case is special, since we can stick to
 \kbd{bnfisintnorm}, there are no fundamental units):
 \bprog
 ? thue(t^3+2, 10^30)
  ***   at top-level: L=thue(t^3+2,10^30)
  ***                   ^-----------------
  *** thue: overflow in thue (SmallSols): y <= 80665203789619036028928.
 ? thue(x^2+2, 10^30)  \\ quadratic case much easier
 %1 = [[-1000000000000000, 0], [1000000000000000, 0]]
 @eprog

 \misctitle{Note} It is sometimes possible to circumvent the above, and in any
 case obtain an important speed-up, if you can write $P = Q(x^{d})$ for some
 $d > 1$ and $Q$ still satisfying the \kbd{thueinit} hypotheses. You can then
 solve
 the equation attached to $Q$ then eliminate all solutions $(x,y)$ such that
 either $x$ or $y$ is not a $d$-th power.
 \bprog
 ? thue(x^4+1, 10^40); \\ stopped after 10 hours
 ? filter(L,d) =
     my(x,y); [[x,y] | v<-L, ispower(v[1],d,&x)&&ispower(v[2],d,&y)];
 ? L = thue(x^2+1, 10^40);
 ? filter(L, 2)
 %4 = [[0, 10000000000], [10000000000, 0]]
 @eprog\noindent The last 2 commands use less than 20ms.

 \misctitle{Note} When $P$ is irreducible without a real root, the equation
 can be solved unconditionnally in time $|a|^{1/\deg P}$. When this
 latter quantity is huge and the equation has no solutions, this fact
 may still be ascertained via arithmetic conditions but this now implies
 solving norm equations, computing a \var{bnf} and possibly assuming the GRH.
 When there is no real root, the code does not compute a \var{bnf}
 (with certification if $\fl = 1$) if it expects this to be an ``easy''
 computation (because the result would only be used for huge values of $a$).
 See \kbd{thue} for a way to compute an expensive \var{bnf} on your own and
 still get a result where this default cheap strategy fails.
