An Atlas of Orthogonal Representations

Authors: Thomas Breuer, Gabriele Nebe and Richard Parker

julia> ch = character_table("Co2", 2)[2];

julia> degree(ch)
22

julia> Oscar.OrthogonalDiscriminants.od_from_order(ch)
(true, "O+")
julia> ch = character_table("Co3", 3)[2];

julia> degree(ch)
22

julia> Oscar.OrthogonalDiscriminants.od_from_eigenvalues(ch)
(true, "O+")
julia> ch = character_table("A12")[26];

julia> degree(ch)
1728

julia> Oscar.OrthogonalDiscriminants.od_for_specht_module(ch)
(true, "1")
julia> ch = character_table("R(27)")[16];

julia> degree(ch)
18278

julia> Oscar.OrthogonalDiscriminants.od_from_p_subgroup(ch, 3)
(true, "-3")
julia> Oscar.OrthogonalDiscriminants.show_with_ODs(
character_table("G2(3)", 2))
G2(3)mod2

     2   6   3   3   .  1  1  .  .  .  .   .   .
     3   6   6   6   6  4  4  .  3  3  3   .   .
     7   1   .   .   .  .  .  1  .  .  .   .   .
    13   1   .   .   .  .  .  .  .  .  .   1   1
      
 1a  3a  3b  3c 3d 3e 7a 9a 9b 9c 13a 13b
    2P  1a  3a  3b  3c 3d 3e 7a 9a 9c 9b 13b 13a
    3P  1a  1a  1a  1a 1a 1a 7a 3c 3c 3c 13a 13b
    7P  1a  3a  3b  3c 3d 3e 1a 9a 9b 9c 13b 13a
   13P  1a  3a  3b  3c 3d 3e 7a 9a 9b 9c  1a  1a
     d OD   2                                          
 X_1 1      +   1   1   1   1  1  1  1  1  1  1   1   1
 X_2 1 O-   +  14   5   5  -4  2 -1  .  2 -1 -1   1   1
 X_3 2      o  64  -8  -8   1  4 -2  1  1  A /A  -1  -1
 X_4 2      o  64  -8  -8   1  4 -2  1  1 /A  A  -1  -1
 X_5 1 O-   +  78  -3  -3  -3 -3  6  1  .  .  .   .   .
 X_6 1 O+   +  90   9   9   9  .  . -1  .  .  .  -1  -1
 X_7 1 O-   +  90  -9  18   .  3 -3 -1 -3  .  .  -1  -1
 X_8 1 O-   +  90  18  -9   .  3 -3 -1 -3  .  .  -1  -1
 X_9 1 O-   + 378  -9  -9   9 -3 -6  .  3  .  .   1   1
X_10 2 O+   + 448  16  16 -11 -2 -2  .  1  1  1   B  B*
X_11 2 O+   + 448  16  16 -11 -2 -2  .  1  1  1  B*   B
X_12 1 O+   + 832 -32 -32  -5  4  4 -1  1  1  1   .   .

A = 3z_3 + 1
/A = -3z_3 - 2
B = -z_13^11 - z_13^8 - z_13^7 - z_13^6 - z_13^5 - z_13^2 - 1
B* = z_13^11 + z_13^8 + z_13^7 + z_13^6 + z_13^5 + z_13^2
julia> show_OD_info("G2(3)")
G2(3):  2^6*3^6*7*13
--------------------

 i| chi|     K|disc|           2|3|            7|      13
--+----+------+----+------------+-+-------------+--------
 2| 14a|     Q|  -3|         14a| |          14a|     14a
  |    |      |    |          O-| |           O+|      O+
--+----+------+----+------------+-+-------------+--------
 5| 78a|     Q|  -3|         78a| |          78a|     78a
  |    |      |    |          O-| |           O+|      O+
--+----+------+----+------------+-+-------------+--------
 9|104a|     Q|  21|     14a+90a| |     (def. 1)|    104a
  |    |      |    |      O-, O+| |             |      O-
--+----+------+----+------------+-+-------------+--------
10|168a|     Q|  13|     78a+90a| |         168a|(def. 1)
  |    |      |    |      O-, O+| |           O-|        
--+----+------+----+------------+-+-------------+--------
11|182a|     Q|  -3| 14a+78a+90c| |         182a|    182a
  |    |      |    |  O-, O-, O-| |           O+|      O+
--+----+------+----+------------+-+-------------+--------
12|182b|     Q|  -3| 14a+78a+90b| |         182b|    182b
  |    |      |    |  O-, O-, O-| |           O+|      O+
--+----+------+----+------------+-+-------------+--------
15|448a|Q(b13)|   1|        448a| |         448a|14a+434a
  |    |      |    |          O+| |           O+|  O+, O+
--+----+------+----+------------+-+-------------+--------
16|448b|Q(b13)|   1|        448b| |         448b|14a+434a
  |    |      |    |          O+| |           O+|  O+, O+
--+----+------+----+------------+-+-------------+--------
17|546a|     Q|  -3|78a+90b+378a| |         546a|    546a
  |    |      |    |  O-, O-, O-| |           O+|      O+
--+----+------+----+------------+-+-------------+--------
18|546b|     Q|  -3|78a+90c+378a| |         546b|    546b
  |    |      |    |  O-, O-, O-| |           O+|      O+
--+----+------+----+------------+-+-------------+--------
19|728a|     Q|   1|    14a+378a| |         728a|    728a
  |    |      |    |      O-, O-| |           O+|      O+
--+----+------+----+------------+-+-------------+--------
20|728b|     Q|   1|    14a+378a| |         728b|    728b
  |    |      |    |      O-, O-| |           O+|      O+
--+----+------+----+------------+-+-------------+--------
23|832a|     Q|   1|        832a| |64ab+78a+626a|    832a
  |    |      |    |          O+| |   O+, O+, O+|      O+
julia> K, _ = quadratic_field(13)
(Real quadratic field defined by x^2 - 13, sqrt(13))

julia> ray_class_field(3*maximal_order(K))
Class field defined mod (<3, 3>, InfPlc{AbsSimpleNumField, AbsSimpleNumFieldEmbedding}[]) of structure Z/1
julia> function is_galois_discriminant_field(data)
         chi = Oscar.OrthogonalDiscriminants.character_of_entry(data)
         F, emb = character_field(chi)
         c = conductor(emb(gen(F)))
         galgens = Oscar.AbelianClosure.generators_galois_group_cyclotomic_field(c)
         delta = atlas_irrationality(data[:valuestring])
         return all(x -> is_square(preimage(emb, delta * x(delta))),
                    galgens)
       end;

julia> info = all_od_infos(characteristic => 0, is_simple);

julia> filter!(r -> r[:valuestring] != "?" &&
                    conductor(atlas_irrationality(r[:valuestring])) > 1,
               info);

julia> length(info)
58

julia> filter!(!is_galois_discriminant_field, info);

julia> length(info)
26

julia> println(sort!(collect(Set([r[:groupname] for r in info]))))
["HN", "He", "J1", "J3", "ON", "Ru"]
julia> info = all_od_infos(characteristic => 0, degree => 1);

julia> all(x -> x[:valuestring] == "?" ||
                is_odd(parse(Int, x[:valuestring])),
           info)
true
julia> plus = [];  minus = [];

julia> for d in all_od_infos()
         if d[:valuestring] == "O+"
           push!(plus, (d[:groupname], d[:characteristic], d[:degree],
                        parse(Int, filter(isdigit, d[:charname]))))
         elseif d[:valuestring] == "O-"
           push!(minus, (d[:groupname], d[:characteristic], d[:degree],
                         parse(Int, filter(isdigit, d[:charname]))))
         end
       end

julia> both = intersect!(plus, minus);

julia> filter(x -> x[2] == 2, both)
1-element Vector{Any}:
 ("G2(3)", 2, 1, 90)

julia> length(both)
103
Edit this page Contact Imprint Privacy policy © 2018-2024 The OSCAR Team