Re: S-Unit questions
[email protected] Thu, 12 Mar 2026 15:36:46 +0100
| Newsgroups | gmane.comp.mathematics.pari.user |
|---|---|
| Message-ID | <[email protected]> |
On 2026-03-12 15:10, Bill Allombert wrote: > On Thu, Mar 12, 2026 at 02:58:16PM +0100, [email protected] > wrote: >> On error message it explained that linear polynomial has too low >> degree for >> thueinit. >> And to use a script with "bnfisunit()" — but current GP does not know >> this >> command. > > bnfisunit certainly exist, though it will probably not help you... > > ? ?bnfisunit() > bnfisunit(bnf,x,{U}): bnf being output by bnfinit, give the column > vector of exponents of x on the fundamental units and the roots of > unity if x is a unit, the empty vector otherwise. If U is present, as > given by bnfunits, decompose x on the attached S-units generators. > Sorry, I coorected that in my 2nd email. >> So how to solve this equation using PARI/GP with its Baker(?) >> algorithm? >> >> ±2^{a1}*3^{b1}±2^{a2}*3^{b2}=1 > > I do not think there is a GP function that can solve this, though this > is solvable > in principle using linear forms in logarithms. > > Cheers, > Bill. > This is the script proposed by Gemini, which errors on bnfuniteqn() not existing: ? { \\ 1. Initialize Q bnf = bnfinit(x - 1); \\ 2. Define S = {2, 3} correctly S = concat([idealprimedec(bnf, 2), idealprimedec(bnf, 3)]); \\ 3. Get the S-unit structure AND the map (the '1' at the end is vital) s_struct = bnfsunit(bnf, S); \\ 4. Solve the S-unit equation epsilon_1 + epsilon_2 = 1 \\ This returns the solutions as exponent vectors relative to the S-unit generators solutions_vecs = bnfuniteqn(s_struct); \\ 5. Convert exponent vectors back into actual rational numbers \\ s_struct[1] contains the generators: [-1, 2, 3] gens = s_struct[1]; print("Solutions (x, y) where x + y = 1:"); for(i = 1, #solutions_vecs, sol = solutions_vecs[i]; \\ The solution is a pair [x, y] x = nfeltfactorback(bnf, gens, sol[1]); y = nfeltfactorback(bnf, gens, sol[2]); print([x, y]); ); } *** at top-level: ...it(bnf,S);solutions_vecs=bnfuniteqn(s_struct); *** ^--------------------- *** not a function in function call *** Break loop: type 'break' to go back to GP prompt break> Regards, Hermann.