solve_h90
INPUT: ζ a n-th root of unity, A a Kummer algebra
OUTPUT: x a solution in A of H90 for ζ, with x^n = the right constant
norm_r
INPUT: x an element of the Kummer algebra, (a, b) two integers
OUTPUT: the right norm N_{b/a} of x
first_coordinate
INPUT: x an element of the Kummer algebra, ζ a n-th root of unity
OUTPUT: the first coordinate of x in the base 1⊗ζ
matrices (fq_embed_matrices does this job)
INPUT: x, y elements of two finite fields
OUTPUT: M, N two matrices corresponding to the map x|->y and its section
In Julia there will be global variables
EMBEDDINGS
containing already computed embeddingsH90_ELEMENTS
containing already computed solutions of H90ROOTS_UNITY
containing the chosen roots of unity
A function embed
that will take care of everything:
embed
INPUT: k, K two finite fields
OUTPUT: an embedding from k to K
1. construct the Kummer algebras A and B associated to k and K using the roots in
ROOTS_UNITY
2. Check if there is an embedding from k to K in EMBEDDINGS, if so, return
it
3. Check if there is a solution alpha of H90 in A, if not compute it using
solve_h90 and save it in H90_ELEMENTS
4. Check if there is a solution beta of H90 in B, if not compute it using
solve_h90 and save it in H90_ELEMENTS
5. Compute f(beta), where f is a function using an exponantiation, or a norm, depending
on the degrees of k and K
6. Compute the first coordinates u and v of alpha and f(beta)
7. Compute the embedding u|->v thanks to the function matrices, save it
in EMBEDDINGS, and return it