Output when K is an imaginary quadratic of class number one turcasc@galois:~/Aurel/KleinianGroups-1.0$ wget https://warwick.ac.uk/fac/sci/maths/people/staff/turcas/fermatprog/abelianization.m --2019-03-11 09:29:48-- https://warwick.ac.uk/fac/sci/maths/people/staff/turcas/fermatprog/abelianization.m Resolving warwick.ac.uk (warwick.ac.uk)... 137.205.28.41 Connecting to warwick.ac.uk (warwick.ac.uk)|137.205.28.41|:443... connected. HTTP request sent, awaiting response... 200 Length: 2638 (2.6K) [text/plain] Saving to: ‘abelianization.m’ abelianization.m 100%[============>] 2.58K --.-KB/s in 0s 2019-03-11 09:29:48 (320 MB/s) - ‘abelianization.m’ saved [2638/2638] turcasc@galois:~/Aurel/KleinianGroups-1.0$ magma Magma V2.24-5 Mon Mar 11 2019 09:29:53 on galois [Seed = 2587946313] Type ? for help. Type -D to quit. > load "abelianization.m"; Loading "abelianization.m" precomputing coefficients... ...done. > print "Computing for Q(i)"; Computing for Q(i) > for i in [1..8] do for> time Abelianization(1,2,1,i); for> end for; [ 2, 2, 2 ] Time: 1.720 [ 2, 2, 4 ] Time: 0.320 [ 2, 2, 4 ] Time: 0.240 [ 2, 2, 2, 4 ] Time: 0.250 [ 2, 2, 2, 2, 4 ] Time: 0.220 [ 2, 2, 2, 2, 4, 0 ] Time: 0.300 [ 2, 2, 2, 4, 4, 0, 0 ] Time: 0.700 [ 2, 2, 2, 2, 4, 4, 0, 0, 0, 0 ] Time: 1.030 > print "Computing for Q(sqrt(-2))"; Computing for Q(sqrt(-2)) > for i in [1..8] do for> time Abelianization(2,2,1,i); for> end for; [ 2, 2, 2, 2, 2 ] Time: 0.700 [ 2, 2, 2, 2, 2, 2 ] Time: 0.330 [ 2, 2, 2, 2, 2, 2 ] Time: 0.320 [ 2, 2, 2, 2, 2, 2, 4 ] Time: 0.340 [ 2, 2, 2, 2, 2, 2, 2, 2, 0 ] Time: 0.340 [ 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0 ] Time: 0.390 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0 ] Time: 0.460 [ 2, 2, 2, 2, 2, 2, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] Time: 0.410 > print "Computing for Q(sqrt(-3)"; Computing for Q(sqrt(-3) > print "The prime 2 is inert here and we are only interested in levels up to 2^4"; The prime 2 is inert here and we are only interested in levels up to 2^4 > for i in [1..4] do for> time Abelianization(3,2,1,i); for> end for; [ 6 ] Time: 0.750 [ 2, 6 ] Time: 0.300 [ 2, 2, 12 ] Time: 0.910 [ 2, 2, 2, 6, 0, 0 ] Time: 0.330 > print "Computing for Q(sqrt(-7))"; Computing for Q(sqrt(-7)) > print "Here there are two primes P above 2 and we will compute up to level P^8 for each one of them"; Here there are two primes P above 2 and we will compute up to level P^8 for each one of them > for i in [1..8] do for> time Abelianization(7,2,1,i); for> end for; [ 2, 2, 2, 2 ] Time: 0.740 [ 2, 2, 2, 2 ] Time: 0.450 [ 2, 2, 2, 2, 2 ] Time: 0.460 [ 2, 2, 2, 2, 2, 0 ] Time: 0.560 [ 2, 2, 2, 2, 4, 0, 0 ] Time: 0.480 [ 2, 2, 2, 2, 4, 0, 0, 0, 0 ] Time: 0.500 [ 2, 2, 2, 2, 8, 0, 0, 0, 0, 0, 0 ] Time: 0.540 [ 2, 2, 2, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] Time: 0.560 > for i in [1..8] do for> time Abelianization(7,2,2,i); for> end for; [ 2, 2, 2, 2 ] Time: 0.660 [ 2, 2, 2, 2 ] Time: 0.460 [ 2, 2, 2, 2, 2 ] Time: 0.480 [ 2, 2, 2, 2, 2, 0 ] Time: 0.440 [ 2, 2, 2, 2, 4, 0, 0 ] Time: 0.470 [ 2, 2, 2, 2, 4, 0, 0, 0, 0 ] Time: 0.470 [ 2, 2, 2, 2, 8, 0, 0, 0, 0, 0, 0 ] Time: 0.560 [ 2, 2, 2, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] Time: 0.600 > print "Here we must check the levels P_1^4*P_2 and P_1*P_2^4, where P_1,P_2 \ are the two prime ideals above 2"; Here we must check the levels P_1^4*P_2 and P_1*P_2^4, where P_1,P_2 are the two prime ideals above 2 > print "First we have to obtain generators and relations for PGL2(OK)"; First we have to obtain generators and relations for PGL2(OK) > PG, PGenerators := PresPGL2(7); // The functions Abel1 and Abel2 below are just slight modifications of the function Gamma0_abel > Abel1 := function(G, Generators) function> Mat0 := [QuatToMatrix(g) : g in Generators]; function> K := Parent(Mat0[1][1,1]); function> OK := MaximalOrder(K); function> R := MatrixAlgebra(OK,2); function> MatGen := [R ! m : m in Mat0]; function> I := (Factorization(2*OK)[1,1])^4*Factorization(2*OK)[2,1]; function> PL,r := ProjectiveLine(quo); function> proj_action := function(M,i) function|function> t,im :=r(PL[i]*M,true,false); function|function> return Index(PL,im); function|function> end function; function> Seq := [[] : m in MatGen]; function> for j in [1..#Seq] do function|for> for i in [1..#PL] do function|for|for> Append(~Seq[j], proj_action(M\ atGen[j],i)); function|for|for> end for; function|for> end for; function> Symm := Sym(#PL); function> p := [Symm!el : el in Seq]; function> f := hom Symm | p>; function> H := sub; function> return AQInvariants(H); function> end function; > time Abel1(PG, PGenerators); [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0 ] Time: 0.080 > Abel2 := function(G, Generators) function> Mat0 := [QuatToMatrix(g) : g in Generators]; function> K := Parent(Mat0[1][1,1]); function> OK := MaximalOrder(K); function> R := MatrixAlgebra(OK,2); function> MatGen := [R ! m : m in Mat0]; function> I := (Factorization(2*OK)[2,1])^4*Factorization(2*OK)[1,1]; function> PL,r := ProjectiveLine(quo); function> proj_action := function(M,i) function|function> t,im :=r(PL[i]*M,true,false); function|function> return Index(PL,im); function|function> end function; function> Seq := [[] : m in MatGen]; function> for j in [1..#Seq] do function|for> for i in [1..#PL] do function|for|for> Append(~Seq[j], proj_action(M\ atGen[j],i)); function|for|for> end for; function|for> end for; function> Symm := Sym(#PL); function> p := [Symm!el : el in Seq]; function> function> f := hom Symm | p>; function> H := sub; function> return AQInvariants(H); function> end function; > time Abel2(PG, PGenerators); [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0 ] Time: 0.070 > print "Computing for Q(sqrt(-11))"; Computing for Q(sqrt(-11)) > print "2 is inert here"; 2 is inert here > for i in [1..4] do for> time Abelianization(11,2,1,i); for> end for; [ 2, 2, 6 ] Time: 0.760 [ 2, 2, 2, 2, 2, 12 ] Time: 0.420 [ 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 12 ] Time: 0.580 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 24, 0, 0, 0, 0, 0, 0, 0, 0 ] Time: 0.590 > print "Computing for Q(sqrt(-19))"; Computing for Q(sqrt(-19)) > for i in [1..4] do for> time Abelianization(19,2,1,i); for> end for; [ 2, 2, 2, 6 ] Time: 0.790 [ 2, 2, 2, 2, 2, 2, 2, 12 ] Time: 0.510 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 12 ] Time: 0.520 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] Time: 0.540 > print "Computing for Q(sqrt(-43))"; Computing for Q(sqrt(-43)) > for i in [1..4] do for> time Abelianization(43,2,1,i); for> end for; [ 2, 2, 2, 2, 2, 2, 6 ] Time: 1.200 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 0, 0 ] Time: 0.960 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 12, 0, 0, 0, 0 ] Time: 0.890 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] Time: 1.090 > print "Computing for Q(sqrt(-67))"; Computing for Q(sqrt(-67)) > for i in [1..4] do for> time Abelianization(67,2,1,i); for> end for; [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6 ] Time: 2.540 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 12 ] Time: 1.620 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 48 ] Time: 2.090 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 32, 32, 32, 32, 32, 32, 32, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] Time: 2.180 > print "Computing for Q(sqrt(-163))"; Computing for Q(sqrt(-163)) > for i in [1..4] do for> time Abelianization(163,2,1,i); for> end for; [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 12 ] Time: 15.680 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 32, 96 ] Time: 9.470 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 128, 128, 10880, 32640 ] Time: 9.290 [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 160, 160, 160, 160, 5440, 5440, 239360, 239360, 239360, 718080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] Time: 42.260 >