Trace for (finite) ring extensions. #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Suppose we have an R-algebra S with a finite basis. For each s : S,
the trace of the linear map given by multiplying by s gives information about
the roots of the minimal polynomial of s over R.
Main definitions #
algebra.trace R S x: the trace of an elementsof anR-algebraSalgebra.trace_form R S: bilinear form sendingx,yto the trace ofx * yalgebra.trace_matrix R b: the matrix whose(i j)-th element is the trace ofb i * b j.algebra.embeddings_matrix A C b : matrix κ (B →ₐ[A] C) Cis the matrix whose(i, σ)coefficient isσ (b i).algebra.embeddings_matrix_reindex A C b e : matrix κ κ Cis the matrix whose(i, j)coefficient isσⱼ (b i), whereσⱼ : B →ₐ[A] Cis the embedding corresponding toj : κgiven by a bijectione : κ ≃ (B →ₐ[A] C).
Main results #
trace_algebra_map_of_basis,trace_algebra_map: ifx : K, thenTr_{L/K} x = [L : K] xtrace_trace_of_basis,trace_trace:Tr_{L/K} (Tr_{F/L} x) = Tr_{F/K} xtrace_eq_sum_roots: the trace ofx : K(x)is the sum of all conjugate roots ofxtrace_eq_sum_embeddings: the trace ofx : K(x)is the sum of all embeddings ofxinto an algebraically closed fieldtrace_form_nondegenerate: the trace form over a separable extension is a nondegenerate bilinear form
Implementation notes #
Typically, the trace is defined specifically for finite field extensions. The definition is as general as possible and the assumption that we have fields or that the extension is finite is added to the lemmas as needed.
We only define the trace for left multiplication (algebra.left_mul_matrix,
i.e. linear_map.mul_left).
For now, the definitions assume S is commutative, so the choice doesn't matter anyway.
References #
The trace of an element s of an R-algebra is the trace of (*) s,
as an R-linear map.
Equations
- algebra.trace R S = (linear_map.trace R S).comp (algebra.lmul R S).to_linear_map
If x is in the base field K, then the trace is [L : K] * x.
If x is in the base field K, then the trace is [L : K] * x.
(If L is not finite-dimensional over K, then trace and finrank return 0.)
The trace_form maps x y : S to the trace of x * y.
It is a symmetric bilinear form and is nondegenerate if the extension is separable.
Equations
- algebra.trace_form R S = ⇑linear_map.to_bilin ((algebra.lmul R S).to_linear_map.compr₂ (algebra.trace R S))
Given pb : power_basis K S, the trace of pb.gen is -(minpoly K pb.gen).next_coeff.
Given pb : power_basis K S, then the trace of pb.gen is
((minpoly K pb.gen).map (algebra_map K F)).roots.sum.
Given an A-algebra B and b, an κ-indexed family of elements of B, we define
trace_matrix A b as the matrix whose (i j)-th element is the trace of b i * b j.
Equations
- algebra.trace_matrix A b = ⇑matrix.of (λ (i j : κ), ⇑(algebra.trace_form A B) (b i) (b j))
embeddings_matrix A C b : matrix κ (B →ₐ[A] C) C is the matrix whose (i, σ) coefficient is
σ (b i). It is mostly useful for fields when fintype.card κ = finrank A B and C is
algebraically closed.
embeddings_matrix_reindex A C b e : matrix κ κ C is the matrix whose (i, j) coefficient
is σⱼ (b i), where σⱼ : B →ₐ[A] C is the embedding corresponding to j : κ given by a
bijection e : κ ≃ (B →ₐ[A] C). It is mostly useful for fields and C is algebraically closed.
In this case, in presence of h : fintype.card κ = finrank A B, one can take
e := equiv_of_card_eq ((alg_hom.card A B C).trans h.symm).
Equations
- algebra.embeddings_matrix_reindex A C b e = ⇑(matrix.reindex (equiv.refl κ) e.symm) (algebra.embeddings_matrix A C b)