@@ -126,12 +126,21 @@ end
126
126
#
127
127
# ###############################################################################
128
128
129
+ function show (io:: IO , :: MIME"text/plain" , A:: AlgGrp )
130
+ io = pretty (io)
131
+ println (io, " Group algebra" )
132
+ print (io, Indent ())
133
+ println (io, " of " , Lowercase (), group (A))
134
+ print (io, " over " , Lowercase (), base_ring (A))
135
+ print (io, Dedent ())
136
+ end
137
+
129
138
function show (io:: IO , A:: AlgGrp )
130
- compact = get (io, :compact , false )
131
- if compact
139
+ if get (io, :supercompact , false )
132
140
print (io, " Group algebra of dimension " , dim (A), " over " , base_ring (A))
133
141
else
134
- print (io, " Group algebra of group\n " , group (A), " \n over\n " , base_ring (A))
142
+ print (io, " Group algebra of group of order " , order (group (A)), " over " )
143
+ print (IOContext (io, :supercompact => true ), base_ring (A))
135
144
end
136
145
end
137
146
@@ -491,121 +500,121 @@ end
491
500
492
501
automorphism_map (f:: NfToAlgGrpMor ) = f. mG
493
502
494
- function galois_module (K:: AnticNumberField , aut:: Map = automorphism_group (K)[2 ]; normal_basis_generator = normal_basis (K))
495
- G = domain (aut)
496
- A = FlintQQ[G]
497
- return _galois_module (K, A, aut, normal_basis_generator = normal_basis_generator)
498
- end
499
-
500
- function _galois_module (K:: AnticNumberField , A, aut:: Map = automorphism_group (K)[2 ]; normal_basis_generator = normal_basis (K))
501
- G = domain (aut)
502
- alpha = normal_basis_generator
503
-
504
- basis_alpha = Vector {elem_type(K)} (undef, dim (A))
505
- for (i, g) in enumerate (G)
506
- f = aut (g)
507
- basis_alpha[A. group_to_base[g]] = f (alpha)
508
- end
509
-
510
- M = zero_matrix (base_field (K), degree (K), degree (K))
511
- for i = 1 : degree (K)
512
- a = basis_alpha[i]
513
- for j = 1 : degree (K)
514
- M[i, j] = coeff (a, j - 1 )
515
- end
516
- end
517
-
518
- invM = inv (M)
519
-
520
- z = NfToAlgGrpMor {QQFieldElem, GrpGen, GrpGenElem} ()
521
- z. K = K
522
- z. mG = aut
523
- z. A = A
524
- z. M = M
525
- z. Minv = invM
526
-
527
- return A, z
528
- end
529
-
530
- function galois_module (K:: AnticNumberField , A:: AlgGrp ; normal_basis_generator = normal_basis (K))
531
- G = group (A)
532
- Au, mAu = automorphism_group (K)
533
- fl, f = is_isomorphic_with_map (G, Au)
534
- @assert fl
535
- aut = Vector {NfToNfMor} (undef, order (G))
536
- for g in G
537
- aut[g[]] = mAu (f (g))
538
- end
539
- h = GrpGenToNfMorSet (G, aut, K)
540
-
541
- return _galois_module (K, A, h, normal_basis_generator = normal_basis (K))
542
- end
543
-
544
- domain (f:: NfToAlgGrpMor ) = f. K
545
-
546
- codomain (f:: NfToAlgGrpMor ) = f. A
547
-
548
- function image (f:: NfToAlgGrpMor , x:: nf_elem )
549
- K = domain (f)
550
- @assert parent (x) === K
551
- A = codomain (f)
552
-
553
- t = zero_matrix (base_field (K), 1 , degree (K))
554
- for i = 1 : degree (K)
555
- t[1 , i] = coeff (x, i - 1 )
556
- end
557
- y = t* f. Minv
558
- return A ([ y[1 , i] for i = 1 : degree (K) ])
559
- end
560
-
561
- function preimage (f:: NfToAlgGrpMor , x:: AlgGrpElem )
562
- K = domain (f)
563
- t = matrix (base_field (K), 1 , degree (K), coefficients (x))
564
- y = t* f. M
565
- v = QQFieldElem[ y[1 , i] for i = 1 : degree (K) ]
566
- return K (v)
567
- end
568
-
569
- # Returns the group algebra Q[G] where G = Gal(K/Q) and a Q-linear map from K
570
- # to Q[G] and one from Q[G] to K
571
- function _galois_module (K:: AnticNumberField , to_automorphisms:: Map = automorphism_group (K)[2 ]; normal_basis_generator = normal_basis (K))
572
- G = domain (to_automorphisms)
573
- A = FlintQQ[G]
574
- alpha = normal_basis_generator
575
-
576
- basis_alpha = Vector {elem_type(K)} (undef, dim (A))
577
- for (i, g) in enumerate (G)
578
- f = to_automorphisms (g)
579
- basis_alpha[A. group_to_base[g]] = f (alpha)
580
- end
581
-
582
- M = zero_matrix (base_field (K), degree (K), degree (K))
583
- for i = 1 : degree (K)
584
- a = basis_alpha[i]
585
- for j = 1 : degree (K)
586
- M[i, j] = coeff (a, j - 1 )
587
- end
588
- end
589
-
590
- invM = inv (M)
591
-
592
- function KtoA (x:: nf_elem )
593
- t = zero_matrix (base_field (K), 1 , degree (K))
594
- for i = 1 : degree (K)
595
- t[1 , i] = coeff (x, i - 1 )
596
- end
597
- y = t* invM
598
- return A ([ y[1 , i] for i = 1 : degree (K) ])
599
- end
600
-
601
- function AtoK (x:: AlgGrpElem )
602
- t = matrix (base_field (K), 1 , degree (K), coefficients (x))
603
- y = t* M
604
- return K (parent (K. pol)([ y[1 , i] for i = 1 : degree (K) ]))
605
- end
606
-
607
- return A, KtoA, AtoK
608
- end
503
+ # function galois_module(K::AnticNumberField, aut::Map = automorphism_group(K)[2]; normal_basis_generator = normal_basis(K))
504
+ # G = domain(aut)
505
+ # A = FlintQQ[G]
506
+ # return _galois_module(K, A, aut, normal_basis_generator = normal_basis_generator)
507
+ # end
508
+ #
509
+ # function _galois_module(K::AnticNumberField, A, aut::Map = automorphism_group(K)[2]; normal_basis_generator = normal_basis(K))
510
+ # G = domain(aut)
511
+ # alpha = normal_basis_generator
512
+ #
513
+ # basis_alpha = Vector{elem_type(K)}(undef, dim(A))
514
+ # for (i, g) in enumerate(G)
515
+ # f = aut(g)
516
+ # basis_alpha[A.group_to_base[g]] = f(alpha)
517
+ # end
518
+ #
519
+ # M = zero_matrix(base_field(K), degree(K), degree(K))
520
+ # for i = 1:degree(K)
521
+ # a = basis_alpha[i]
522
+ # for j = 1:degree(K)
523
+ # M[i, j] = coeff(a, j - 1)
524
+ # end
525
+ # end
526
+ #
527
+ # invM = inv(M)
528
+ #
529
+ # z = NfToAlgGrpMor{QQFieldElem, GrpGen, GrpGenElem}()
530
+ # z.K = K
531
+ # z.mG = aut
532
+ # z.A = A
533
+ # z.M = M
534
+ # z.Minv = invM
535
+ #
536
+ # return A, z
537
+ # end
538
+ #
539
+ # function galois_module(K::AnticNumberField, A::AlgGrp; normal_basis_generator = normal_basis(K))
540
+ # G = group(A)
541
+ # Au, mAu = automorphism_group(K)
542
+ # fl, f = is_isomorphic_with_map(G, Au)
543
+ # @assert fl
544
+ # aut = Vector{NfToNfMor}(undef, order(G))
545
+ # for g in G
546
+ # aut[g[]] = mAu(f(g))
547
+ # end
548
+ # h = GrpGenToNfMorSet(G, aut, K)
549
+ #
550
+ # return _galois_module(K, A, h, normal_basis_generator = normal_basis(K))
551
+ # end
552
+ #
553
+ # domain(f::NfToAlgGrpMor) = f.K
554
+ #
555
+ # codomain(f::NfToAlgGrpMor) = f.A
556
+ #
557
+ # function image(f::NfToAlgGrpMor, x::nf_elem)
558
+ # K = domain(f)
559
+ # @assert parent(x) === K
560
+ # A = codomain(f)
561
+ #
562
+ # t = zero_matrix(base_field(K), 1, degree(K))
563
+ # for i = 1:degree(K)
564
+ # t[1, i] = coeff(x, i - 1)
565
+ # end
566
+ # y = t*f.Minv
567
+ # return A([ y[1, i] for i = 1:degree(K) ])
568
+ # end
569
+ #
570
+ # function preimage(f::NfToAlgGrpMor, x::AlgGrpElem)
571
+ # K = domain(f)
572
+ # t = matrix(base_field(K), 1, degree(K), coefficients(x))
573
+ # y = t*f.M
574
+ # v = QQFieldElem[ y[1, i] for i = 1:degree(K) ]
575
+ # return K(v)
576
+ # end
577
+ #
578
+ # # Returns the group algebra Q[G] where G = Gal(K/Q) and a Q-linear map from K
579
+ # # to Q[G] and one from Q[G] to K
580
+ # function _galois_module(K::AnticNumberField, to_automorphisms::Map = automorphism_group(K)[2]; normal_basis_generator = normal_basis(K))
581
+ # G = domain(to_automorphisms)
582
+ # A = FlintQQ[G]
583
+ # alpha = normal_basis_generator
584
+ #
585
+ # basis_alpha = Vector{elem_type(K)}(undef, dim(A))
586
+ # for (i, g) in enumerate(G)
587
+ # f = to_automorphisms(g)
588
+ # basis_alpha[A.group_to_base[g]] = f(alpha)
589
+ # end
590
+ #
591
+ # M = zero_matrix(base_field(K), degree(K), degree(K))
592
+ # for i = 1:degree(K)
593
+ # a = basis_alpha[i]
594
+ # for j = 1:degree(K)
595
+ # M[i, j] = coeff(a, j - 1)
596
+ # end
597
+ # end
598
+ #
599
+ # invM = inv(M)
600
+ #
601
+ # function KtoA(x::nf_elem)
602
+ # t = zero_matrix(base_field(K), 1, degree(K))
603
+ # for i = 1:degree(K)
604
+ # t[1, i] = coeff(x, i - 1)
605
+ # end
606
+ # y = t*invM
607
+ # return A([ y[1, i] for i = 1:degree(K) ])
608
+ # end
609
+ #
610
+ # function AtoK(x::AlgGrpElem)
611
+ # t = matrix(base_field(K), 1, degree(K), coefficients(x))
612
+ # y = t*M
613
+ # return K(parent(K.pol)([ y[1, i] for i = 1:degree(K) ]))
614
+ # end
615
+ #
616
+ # return A, KtoA, AtoK
617
+ # end
609
618
610
619
const _reps = [(i= 24 ,j= 12 ,n= 5 ,dims= (1 ,1 ,2 ,3 ,3 ),
611
620
reps= Vector{Vector{Rational{BigInt}}}[[[1 ],[1 ],[1 ],[1 ]],
@@ -928,13 +937,13 @@ function _absolute_basis(A)
928
937
n = degree (K)
929
938
B = Vector {elem_type(A)} ()
930
939
bK = basis (K)
931
- for i in 1 : n
932
- for j in 1 : m
940
+ for i in 1 : m
941
+ for j in 1 : n
933
942
v = Vector {elem_type(K)} (undef, m)
934
943
for k in 1 : m
935
- v[i ] = zero (K)
944
+ v[k ] = zero (K)
936
945
end
937
- v[j ] = bK[j]
946
+ v[i ] = bK[j]
938
947
push! (B, A (v))
939
948
end
940
949
end
@@ -1107,7 +1116,7 @@ function is_almost_maximally_ramified(K::AnticNumberField, p::ZZRingElem)
1107
1116
return true
1108
1117
end
1109
1118
1110
- function hom (KG:: AlgGrp , KH:: AlgGrp , m:: GrpGenToGrpGenMor )
1119
+ function hom (KG:: AlgGrp , KH:: AlgGrp , m:: Map )
1111
1120
@assert base_ring (KG) === base_ring (KH)
1112
1121
K = base_ring (KG)
1113
1122
M = zero_matrix (K, dim (KG), dim (KH))
0 commit comments