Power basis #
This file defines a structure PowerBasis R S
, giving a basis of the
R
-algebra S
as a finite list of powers 1, x, ..., x^n
.
For example, if x
is algebraic over a ring/field, adjoining x
gives a PowerBasis
structure generated by x
.
Definitions #
-
PowerBasis R A
: a structure containing anx
and ann
such that1, x, ..., x^n
is a basis for theR
-algebraA
(viewed as anR
-module). -
finrank (hf : f ≠ 0) : FiniteDimensional.finrank K (AdjoinRoot f) = f.natDegree
, the dimension ofAdjoinRoot f
equals the degree off
-
PowerBasis.lift (pb : PowerBasis R S)
: ify : S'
satisfies the same equations aspb.gen
, this is the mapS →ₐ[R] S'
sendingpb.gen
toy
-
PowerBasis.equiv
: if two power bases satisfy the same equations, they are equivalent as algebras
Implementation notes #
Throughout this file, R
, S
, A
, B
... are CommRing
s, and K
, L
, ... are Field
s.
S
is an R
-algebra, B
is an A
-algebra, L
is a K
-algebra.
Tags #
power basis, powerbasis
pb : PowerBasis R S
states that 1, pb.gen, ..., pb.gen ^ (pb.dim - 1)
is a basis for the R
-algebra S
(viewed as R
-module).
This is a structure, not a class, since the same algebra can have many power bases.
For the common case where S
is defined by adjoining an integral element to R
,
the canonical power basis is given by {Algebra,IntermediateField}.adjoin.powerBasis
.
- gen : S
- dim : ℕ
Instances For
Cannot be an instance because PowerBasis
cannot be a class.
Alias of PowerBasis.finite
.
Cannot be an instance because PowerBasis
cannot be a class.
pb.minpolyGen
is the minimal polynomial for pb.gen
.
Equations
- PowerBasis.minpolyGen pb = Polynomial.X ^ pb.dim - Finset.sum Finset.univ fun (i : Fin pb.dim) => Polynomial.C ((pb.basis.repr (pb.gen ^ pb.dim)) i) * Polynomial.X ^ ↑i
Instances For
pb.lift y hy
is the algebra map sending pb.gen
to y
,
where hy
states the higher powers of y
are the same as the higher powers of pb.gen
.
See PowerBasis.liftEquiv
for a bundled equiv sending ⟨y, hy⟩
to the algebra map.
Equations
- One or more equations did not get rendered due to their size.
Instances For
pb.liftEquiv
states that roots of the minimal polynomial of pb.gen
correspond to
maps sending pb.gen
to that root.
This is the bundled equiv version of PowerBasis.lift
.
If the codomain of the AlgHom
s is an integral domain, then the roots form a multiset,
see liftEquiv'
for the corresponding statement.
Equations
- One or more equations did not get rendered due to their size.
Instances For
pb.liftEquiv'
states that elements of the root set of the minimal
polynomial of pb.gen
correspond to maps sending pb.gen
to that root.
Equations
- PowerBasis.liftEquiv' pb = (PowerBasis.liftEquiv pb).trans (Equiv.subtypeEquiv (Equiv.refl B) ⋯)
Instances For
There are finitely many algebra homomorphisms S →ₐ[A] B
if S
is of the form A[x]
and B
is an integral domain.
Equations
- PowerBasis.AlgHom.fintype pb = Fintype.ofEquiv { y : B // y ∈ Polynomial.aroots (minpoly A pb.gen) B } (PowerBasis.liftEquiv' pb).symm
Instances For
pb.equivOfRoot pb' h₁ h₂
is an equivalence of algebras with the same power basis,
where "the same" means that pb
is a root of pb'
s minimal polynomial and vice versa.
See also PowerBasis.equivOfMinpoly
which takes the hypothesis that the
minimal polynomials are identical.
Equations
- PowerBasis.equivOfRoot pb pb' h₁ h₂ = AlgEquiv.ofAlgHom (PowerBasis.lift pb pb'.gen h₂) (PowerBasis.lift pb' pb.gen h₁) ⋯ ⋯
Instances For
pb.equivOfMinpoly pb' h
is an equivalence of algebras with the same power basis,
where "the same" means that they have identical minimal polynomials.
See also PowerBasis.equivOfRoot
which takes the hypothesis that each generator is a root of the
other basis' minimal polynomial; PowerBasis.equivOfRoot
is more general if A
is not a field.
Equations
- PowerBasis.equivOfMinpoly pb pb' h = PowerBasis.equivOfRoot pb pb' ⋯ ⋯
Instances For
Useful lemma to show x
generates a power basis:
the powers of x
less than the degree of x
's minimal polynomial are linearly independent.
PowerBasis.map pb (e : S ≃ₐ[R] S')
is the power basis for S'
generated by e pb.gen
.
Equations
- PowerBasis.map pb e = { gen := e pb.gen, dim := pb.dim, basis := Basis.map pb.basis (AlgEquiv.toLinearEquiv e), basis_eq_pow := ⋯ }