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 elements
of anR
-algebraS
algebra.trace_form R S
: bilinear form sendingx
,y
to the trace ofx * y
algebra.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) C
is the matrix whose(i, σ)
coefficient isσ (b i)
.algebra.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 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] x
trace_trace_of_basis
,trace_trace
:Tr_{L/K} (Tr_{F/L} x) = Tr_{F/K} x
trace_eq_sum_roots
: the trace ofx : K(x)
is the sum of all conjugate roots ofx
trace_eq_sum_embeddings
: the trace ofx : K(x)
is the sum of all embeddings ofx
into 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)