Re: Computing Galois groups
Fabio Stumbo <[email protected]> Sun, 8 May 2022 14:01:50 +0200
| Newsgroups | gmane.comp.mathematics.axiom.general |
|---|---|
| Organization | Università di Ferrara |
| Message-ID | <[email protected]> |
Hi Daniel,
as I said, I traced the progress of my function and I know what the
problem is.
I extracted the relevant lines of code which go to the core of the
problem in a simple example which can be easily followed: the problem is
reduced to evaluating a polynomial.
Here it is, together with my considerations.
---------------------
The code:
f := x^3-1
A := rootsOf(f,x)
X : List(Expression(Integer)) := [1,2,3]
R := [
A.1*X.1+A.2*X.2+A.3*X.3,_
A.1*X.1+A.2*X.3+A.3*X.2,_
A.1*X.3+A.2*X.2+A.3*X.1,_
A.1*X.2+A.2*X.1+A.3*X.3,_
A.1*X.2+A.2*X.3+A.3*X.1,_
A.1*X.3+A.2*X.1+A.3*X.2 _
]
F := reduce(*,[x-R.i for i in 1..6])
F := F :: Expression(INT) :: POLY(INT)
discriminant(F)
factorization := factor(F)
F1 := nthFactor(F,1)
F2 := nthFactor(F,2)
F3 := nthFactor(F,3)
eval(F,x,R.1)
eval(F1,x,R.1)
eval(F2,x,R.1)
eval(F3,x,R.1)
---------------------
A few words to comment the code.
f is the polynomial of which we want to compute the Galois group (in
this case, Z/2Z).
A is the set of its roots.
Call r the first element in X, i.e. r = R.1 = A.1*X.1+A.2*X.2+A.3*X.3
The elements of R are s.r, where s runs over all elements of S3, the
symmetric group on {1,2,3}, acting on the indeces.
r is what is known as a "Galois resolvent", provided that all elements
in R are different; if this is the case, r is shown (by Galois) to be a
primitive element for the splitting field of f.
F is the polynomial (x-R.1)*...*(x-R.6), which is the Kronecker
(polynomial) resolvent, if r is a Galois resolvent. Now we can check
that r is actually a Galois resolvent by computing the discriminant of F.
F is in Z[x], being invariant by all permutations.
From Kronecker's theorem you deduce that if you factorize F then the
permutations that fix a factor of F are (isomorphic to) the Galois group
of f.
F factorizes into three factors: F=F1*F2*F3, each of degree 2 (which
tells us that the Galois group has cardinality 2).
----------------------
The problem: by construction, r is a root of F and you can check this by
eval(F,x,R.1) = 0
Since F=F1*F2*F3 this implies that exactly one of
eval(F1,x,R.1) = 0
eval(F2,x,R.1) = 0
eval(F3,x,R.1) = 0
must hold.
The problem is that none holds.
----------------------
Questions:
1. Why?
2. How can I check which of the Fi has r as root?
3. After this, I need to evaluate that polynomial to all others elements
of R in order to find all of its roots.
----------------------
What I could understand so far of why there is this problem:
Let's call for short a,b,c the three roots of f: (a,b,c) = (A.1,A.2,A.3).
The internal representation of a,b,c is
[a,b,c] = [%x0,%x0 %x1,- %x0 %x1 - %x0]
Again, to simplifyand have a better understanding, let u=%x0, v=%x1, so that
[a,b,c] = [u,uv,-uv-u]
Now, the three roots of f are 1,z,z^2, where z=(-1+sqrt(3))/2.
Axiom doesn't declare which is which, so you can have any order for a,b,c:
[a,b,c] = [1,z,z^2] => u=1, v=z
[a,b,c] = [1,z^2,z] => u=1, v=z^2
[a,b,c] = [z,1,z^2] => u=z, v=z^2
[a,b,c] = [z,z^2,1] => u=z, v=z=u
[a,b,c] = [z^2,1,z] => u=z^2, v=z
[a,b,c] = [z^2,z,1] => u=z^2, v=z^2=u
Any choice is admissible, since the only relation which is assumed is
a+b+c=0.
Now, one among F1, F2 or F3 must be the minimal polinomial of r=a+2b+3c
but which one is the correct one depends very much ont the choice you
make. Case by case, you have:
r minimal polynomial
1+2z+3z^2 F3
1+2z^2+3z F3
z+2+3z^2 F2
z+3+2z^2 F1
z^2+2+3z F2
z^2+2z+3 F1
----------------------------------------
I hope to have explained myself.
Best wishes
Fabio
Il 07/05/22 16:42, Daniel Herring ha scritto:
> Hi Fabio,
>
> I don't have the time or energy to do a proper review for you.
>
> That said, trying to explain an algorithm can be an effective way of
> finding the flaws in it. Start with the code and derive the purpose.
> This often reveals an inconsistency with the original high-level
> algorithm.
>
> Unfortunately, other bugs come from an incorrect understanding of the
> tool you are trying to use, in this case Axiom. These can require an
> experienced developer to find, as you see what you expect, and they
> see what the computer actually does. Sometimes you can reduce this
> issue by replacing binary operators with named functions (less parsing
> mistakes). Other times you can do "the same thing" with a different
> choice of functions or operators, and compare results.
>
> Do you have a simple example of when the algorithm does not work?
> Tracing its progress step by step can help spot the bug. This
> approach doesn't prove the overall algorithm, but it does eliminate
> one defect.
>
> Best wishes!
>
> -- Daniel
>
>
> On Sat, 7 May 2022, Fabio Stumbo wrote:
>
>> Hi,
>>
>> I am trying to compute some Galois groups with Axiom.
>>
>> A way is to go after the example given in section 8.13 of the manual
>> which follows closely and implements the original definition by
>> Galois of the Galois group.
>>
>> I am trying a different way: I would like to exploit a theorem by
>> Kronecker which provides an easy algorithm to compute the Galois
>> group of a given polynomial.
>>
>> I wrote the function which implements the algorithm and it works...
>> sometimes. :(
>>
>> Which means that I have some problems.
>>
>> My question is: is there anybody that is willing to help me to fix it
>> if I post the code?
>>
>> The code is not very long (about 40-50 lines) but it needs to be
>> explained, so I am asking before to make the effort.
>>
>> TIA
>>
>> Fabio
>>
>>
>>