This repository contains the Magma code used to compute and verify the complementary triples appearing in the paper.
The computations are for totally definite quaternion algebras over
class-number-one number fields, using the class-one order data defined by
Kirschmer's smalltypenumber.m file. The main objects are:
- a quaternion order
O; - a finite set
Tof finite primes of the base field; - the finite group
Gamma_Tgenerated by the relevant unit and normalizer data; - a finite quotient
G[C] = (O / C O)^* / (R / C)^*; - complementary triples
(T, C, H), where the image ofGamma_TinG[C]has a complementH; - torsion obstruction sets used in the paper's classification arguments;
- presentations of selected
S-arithmetic groups.
- Magma, with support for quaternion algebras and number fields.
Run Magma commands from the repository root:
magma
load "load.m";
Magma resolves load paths relative to the current working directory, so the
working directory matters.
The table OneClassGenera is loaded from data/smalltypenumber.m. This data
file is not distributed in the repository. Download it from Markus Kirschmer's
class-one order table page:
https://www.math.uni-bielefeld.de/~mkirschm/orders/
After downloading and unpacking the archive, place the file at:
data/smalltypenumber.m
The rows of OneClassGenera follow Kirschmer's documented table format.
The order type convention is:
4 = maximal
3 = hereditary non-maximal
2 = Eichler non-hereditary
1 = Bass non-Eichler
0 = Gorenstein non-Bass
Only class-number-one base fields are supported.
load.m: loads the package.data/: class-one order table data.src/order_data.m: constructs order records fromOneClassGeneraor from explicit Magma orders.src/projective_unit_group.m: constructs finite projective unit groups, normalizer images, and complement classes.src/arithmetic_utils.m: shared ideal, prime, and aggregation helpers.src/complementary_ideals.m: complementary-pair and complementary-triple algorithms.src/local_norm_pipeline.m: trace/norm obstruction summaries.src/lifted_torsion_obstruction.m: lifted torsion obstruction summaries at the modulus used in the paper's torsion-obstruction table.src/presentation_pipeline.m: presentation construction for selectedS-arithmetic groups.src/presentation_sigma_relations.m: relation helpers for presentations.src/batch_exports.m: CSV writers for long scans.scripts/: reproducible scan commands.tests/: verification scripts for computational claims in the paper.examples/: worked examples that print results to the terminal.outputs/: CSV outputs from the computations used in the paper.docs/architecture.md: short description of the package layers.
Build the order attached to an entry of OneClassGenera:
load "load.m";
order_data := order_data_from_index(1);
Compute complementary data for an ideal C and a finite set T:
R := order_data`integer_ring;
C := ideal<R | 2>;
result := complementary_pairs_at_ideal(
order_data,
C :
T := [],
Print := 1
);
Scan for minimal complementary triples up to a prime norm bound:
scan := scan_order_for_complementary_triples(
order_data,
5 :
Print := 1
);
triples := complementary_order_triples(scan);
For a fixed prime-power search:
P := ideal<order_data`integer_ring | 2>;
prime_power_scan := scan_prime_power_complementary_triples(
order_data,
P,
2 :
T := [],
Print := 1
);
These scripts are the main commands for readers who want to verify the computational claims used in the paper. They raise a Magma error if the asserted condition fails.
magma tests/verify_unit_representative_norms.m
magma tests/verify_single_T_trivial_gamma_split_injectivity.m
magma tests/verify_distinct_ramified_nontrivial_case.m
magma tests/verify_single_T_C2_split_prime_complements.m
magma tests/verify_gamma_emptyset_C2_split_injectivity.m
magma tests/verify_large_norm_injectivity.m
magma tests/verify_lifted_torsion_obstruction.m
magma tests/verify_hurwitz_lipschitz_computations.m
The verification scripts check the following assertions used in the paper:
tests/verify_unit_representative_norms.m: checks that the representatives ofGamma_emptysethave reduced norm1.tests/verify_single_T_trivial_gamma_split_injectivity.m: checks the split-prime injectivity assertion used for the cyclic-unit trivial complementary triples.tests/verify_distinct_ramified_nontrivial_case.m: checks the distinct ramified-prime case for cyclic-unit complementary triples.tests/verify_single_T_C2_split_prime_complements.m: checks the split-prime complement criterion used whenGamma_Tis cyclic of order2.tests/verify_gamma_emptyset_C2_split_injectivity.m: checks the split-prime injectivity assertion used whenGamma_emptysetis cyclic of order2.tests/verify_large_norm_injectivity.m: checks the large-norm injectivity assertion used in the classification of minimal complementary triples.tests/verify_lifted_torsion_obstruction.m: checks the lifted torsion-obstruction computations recorded in the appendix table.tests/verify_hurwitz_lipschitz_computations.m: checks the finite quotient, complement, and torsion-obstruction computations for the Hurwitz and Lipschitz orders.
The smoke test tests/smoke.m checks that the package loads and that a short
complementary-triple workflow runs.
The appendix complementary-triple CSVs are generated by:
magma scripts/batch_nontrivial_maximal_complementary_triples.m
The scan follows the convention used in the paper for non-trivial minimal
complementary triples. It tests all ramified primes and all split primes P
with Norm(P) <= #Gamma_T + 1. When the paper requires a lifted torsion
obstruction for a complementary triple, the scan records that data in the CSV.
The torsion obstruction attached to the discriminant ideal can be regenerated with:
magma scripts/batch_discriminant_obstructions.m
The lifted torsion obstruction data used by the appendix table can be
recomputed from the complementary-triple output file
outputs/nontrivial_complementary_triples.csv with:
magma scripts/recompute_lifted_obstructions.m
The repository includes the CSV outputs used to produce the appendix tables.
The main file, outputs/nontrivial_complementary_triples.csv, records the
non-trivial minimal complementary triples found by the scan, together with the
order, field, algebra, set T, complementary ideal, complement counts, and
torsion-obstruction data used in the paper. These CSVs are included so that a
reader can inspect the computed data directly and rerun the table and
verification scripts without first repeating the longest searches.
The following scripts rerun the longer verification scans for the norm-one unit representative claim and the large-norm injectivity claim. They are separated from the quicker examples because they range over many class-one orders.
magma scripts/batch_unit_representative_norms.m
magma scripts/batch_large_norm_injectivity_exceptions.m
The displayed presentation examples in the paper can be recomputed with:
magma examples/example_presentation_minus_2_minus_5_S23.m
magma examples/example_presentation_qsqrt2_d18_p2_S7split.m
The presentation example scripts construct the same complementary triples and
the same sets S used in the paper's examples, then print the resulting
presentation, generator representatives, and relators. The labels a_i and
b_j may differ from the displayed examples by a relabeling of generators.
This code is released under the MIT License. See LICENSE.
AI-assisted tools, including OpenAI Codex, were used during the development and revision of this codebase. The mathematical content, final code choices, verification scripts, and computational claims are the responsibility of the author.