19/07/2019
All PARI/gp programs are found in the directory gp/
and should be run from there. These were tested with PARI/gp 2.11.2.
All Sage programs are found in the directory sage/
and should be run from there. These were tested with Sage 9.0.
The general functions are defined in the following files.
with_GRH.gp
without_GRH.gp
testfin.gp
qfminim_trie.gp
cas_regulier.gp
cas_regulier_autodual.gp
To test these, run gp
and load two of the files above.
$ gp
? \r without_GRH.gp
? \r testfin.gp
? pc = ex_poids_connus();
List of known elements of \(\Pi_{\mathrm{alg}}\) of motivic weight \(\leq 24\) that we use. Such an element is a vector [U,m]
where U
is its Archimedean component, and m
the number of known \(\pi\)’s with this Archimedean component. So pc
has 26 elements, corresponding to 27 elements of \(\Pi_{\mathrm{alg}}\). An Archimedean component is an element of the form \[a 1 + b \epsilon_{\mathbb{C}/\mathbb{R}} + \sum_{i=1}^r \mathrm{I}_{w_i},\] represented as the vector [a, b, w_1, ..., w_r]
. For instance
pc[1]
is [[1,0],1]
: trivial representationpc[7]
is [[0,1,22],1]
: \(\mathrm{Sym}^2 \Delta_{11}\)pc[8]
is [[0, 0, 23],2]
: the two \(\Delta_{23}\).This list is implemented as a function for convenience, in order to be able to use gp2c
and compile to C for speed.
To try to find a new mininum for several Langlands parameters \(U\)’s at once using Algorithm 2.4.5, run
? L = testfin_liste(L, l, m, S, a, b);
with
L = [L_1, L_2, ..., L_n]
and L_i = [U_i, l_cur_min, cur_min, cur_mask, cur_vec];
with U_1, ..., U_n
the Archimedean components, and the rest describing the currently known minimum of \(x \mapsto \mathrm{C}^{\mathrm{F}_{\ell}}(x,x) /\widehat{\mathrm{F}_\ell}(i/4 \pi)\):
l_cur_min
is the parameter \(\ell\) for which this minimum is reached,cur_min
is the minimum,cur_mask
is the mask of the set \(S'\) in Algorithm 2.4.5 (\(S'\) can be printed with vecextract(pc, cur_mask)
),cur_vec
is the vector \((t_i)_{i \in I}\) such that \(x = \sum_i t_i x_i\). The first coordinates correspond to \(S'\) and the last coordinate to U_i
. If we do not already have a minimum, we can set L_i = [U_i, 0, 1000, 0, 0]
, for example for \(n=1\) set L=[[U,0,1000,0,0]]
.l
is the parameter denoted \(\ell\) in the paper.m
is the number m in Algorithm 2.4.5 (if m=1 we set \(\delta=1\) in the algorithm, otherwise we set \(\delta=0\)).S
is the set of known elements in \(\Pi_\mathrm{alg}\) used, typically pc[1..11]
etc.a
and b
: restrict the algorithm to \(a \leq |S'| \leq b\) (if a
and b
are omitted, test all subsets of S
).This function returns a new list of the same type, with updated l_cur_min
, cur_min
, cur_mask
and cur_vec
if a smaller minimum was found.
$ gp sheet_w22.gp
$ gp sheet_w23_mult2.gp
In this case the computations take months, see log_w23_mult1
for the log file indicating which parameters l
, a
and b
proved useful.
$ gp sheet_w24_reg.gp
$ gp sheet_w23_grh.gp
$ gp sheet_j2.gp
The most relevant files are
func_GRH.sage
(similar to with_GRH.gp
above),func_noGRH.sage
(similar to without_GRH.gp
above),verify.sage
where the general functions implementing the verification using interval arithmetic are implemented,verify_illustration.sage
, verify_j2.sage
and verify_low_weight.sage
where the specific cases considered above (the illustrations in Sections 2.4.6 and 2.4.7 and the classification results in motivic weights 22, 23, 24) are implemented. These scripts use the vectors found in the text files contradict_vect/db_*
.$ sage
sage: load("verify_illustration.sage")
sage: load("verify_j2.sage")
sage: load("verify_low_weight.sage")
Most important files:
enum_cc.sage
implements the computation of the sets \(\mathcal{P}(G)\) (Definition 3.1) and \(\mathcal{P}_1(G)\) (Definition 3.8).trace_alg_rep.sage
implements Koike and Terada’s formula, the computation of the matrices occurring in property (P2’) of Section 3.3 and the computation of \(\mathrm{T}_\mathrm{ell}(G; \lambda)\) (for \(\lambda\) in a given set),combi_Levi.sage
implements the inductive computation of \(\mathrm{T}_\mathrm{geom}(G; \lambda)\), taking as input the \(\mathrm{T}_\mathrm{ell}(G'; \lambda')\),combi_endo.sage
implements the inductive computation of \(\mathrm{N}^\perp(w(\lambda))\), taking as input \(\mathrm{EP}(G; \lambda) = \mathrm{T}_\mathrm{geom}(G; \lambda)\) and the \(\mathrm{N}^\perp(w(\lambda'))\) for groups \(G'\) of smaller dimension (see Key fact 2).combi_pre_endo.sage
essentially computes, for \(\lambda\) as above, the set of \((G', \lambda')\) relevant to compute \(\mathrm{N}^\perp(w(\lambda))\) (we cannot just use the simple inequality given in Key fact 2, for example in the case of \(\mathrm{SO}_{17}\) we would have to compute everything up to motivic weight 63, which is unreasonable in terms of memory and computation time).Computations in trace_alg_rep.sage
and combi_endo.sage
are done with several processes, so one may want to tweak ncpus
there.
Finally, compute_from_masses.sage
contains the computations explained in Section 3.3. To run these computations:
$ sage
sage: load("wrap_compute_masses.sage")
sage: compute_all()
The first command already checks (using interval arithmetic) that the sets of dominant weights contained in contradict_vect/db_reg_selfdual_mixed
do satisfy property (P1’). The second command should take a few hours, depending on the particular computer used and the bound on the motivic weight for which all computations are made (see the global variable wt_bounds
in compute_masses.sage
). Note that this will require quite a lot of memory because of the large linear systems that the computer has to consider (e.g. for \(\mathrm{SO}_{17}\) it has 10,250,196 coefficients). To do a simpler test one can tweak the max_rk_*
global variables in compute_masses.sage
before running compute_all()
.
To produce tables of \(\mathrm{T}_\mathrm{ell}(G; \lambda)\), \(\mathrm{EP}(G; \lambda)\) and \(\mathrm{N}^\perp(w(\lambda))\) see save_comp.sage
(subdirectories data/ell_tr
, data/EPchar
, data/new_para
, data/human_new_para
must be created first).
See verif_bocherer.pdf.
We implemented this twice independently, just to be sure.
In PARI/gp:
$ gp vvalued.gp
See the explanation and result in vvalued_explanations_and_results.txt.
In Sage:
$ sage
sage: load("wrap_compute_masses.sage")
sage: load("siegel_AJ_verbose.sage")
More generally, siegel_AJ.sage
quietly computes more dimensions of spaces of Siegel cusp forms for \(k_g>g\), and the function save_siegel()
defined in save_comp.sage
can be used to produce tables.