Polynomials over finite fields #
A polynomial over the integers is divisible by n : ℕ
if and only if it is zero over ZMod n
.
theorem
MvPolynomial.frobenius_zmod
{σ : Type u_1}
{p : ℕ}
[Fact (Nat.Prime p)]
(f : MvPolynomial σ (ZMod p))
:
(frobenius (MvPolynomial σ (ZMod p)) p) f = (expand p) f
def
MvPolynomial.indicator
{K : Type u_1}
{σ : Type u_2}
[Fintype K]
[Fintype σ]
[CommRing K]
(a : σ → K)
:
MvPolynomial σ K
Over a field, this is the indicator function as an MvPolynomial
.
Equations
- MvPolynomial.indicator a = ∏ n : σ, (1 - (MvPolynomial.X n - MvPolynomial.C (a n)) ^ (Fintype.card K - 1))
Instances For
theorem
MvPolynomial.indicator_mem_restrictDegree
{K : Type u_1}
{σ : Type u_2}
[Fintype K]
[Fintype σ]
[CommRing K]
(c : σ → K)
:
indicator c ∈ restrictDegree σ K (Fintype.card K - 1)
def
MvPolynomial.evalₗ
(K : Type u_1)
(σ : Type u_2)
[CommSemiring K]
:
MvPolynomial σ K →ₗ[K] (σ → K) → K
MvPolynomial.eval
as a K
-linear map.
Equations
- MvPolynomial.evalₗ K σ = { toFun := fun (p : MvPolynomial σ K) (e : σ → K) => (MvPolynomial.eval e) p, map_add' := ⋯, map_smul' := ⋯ }
Instances For
@[simp]
theorem
MvPolynomial.evalₗ_apply
(K : Type u_1)
(σ : Type u_2)
[CommSemiring K]
(p : MvPolynomial σ K)
(e : σ → K)
:
theorem
MvPolynomial.map_restrict_dom_evalₗ
(K : Type u_1)
(σ : Type u_2)
[Field K]
[Fintype K]
[Finite σ]
:
Submodule.map (evalₗ K σ) (restrictDegree σ K (Fintype.card K - 1)) = ⊤
The submodule of multivariate polynomials whose degree of each variable is strictly less than the cardinality of K.
Equations
- MvPolynomial.R σ K = ↥(MvPolynomial.restrictDegree σ K (Fintype.card K - 1))
Instances For
noncomputable instance
MvPolynomial.instAddCommGroupR
(σ K : Type u)
[Fintype K]
[CommRing K]
:
AddCommGroup (R σ K)
Equations
- MvPolynomial.instAddCommGroupR σ K = inferInstanceAs (AddCommGroup ↥(MvPolynomial.restrictDegree σ K (Fintype.card K - 1)))
Equations
- MvPolynomial.instModuleR σ K = inferInstanceAs (Module K ↥(MvPolynomial.restrictDegree σ K (Fintype.card K - 1)))
Equations
- MvPolynomial.instInhabitedR σ K = inferInstanceAs (Inhabited ↥(MvPolynomial.restrictDegree σ K (Fintype.card K - 1)))
Evaluation in the MvPolynomial.R
subtype.
Equations
- MvPolynomial.evalᵢ σ K = MvPolynomial.evalₗ K σ ∘ₗ (MvPolynomial.restrictDegree σ K (Fintype.card K - 1)).subtype
Instances For
Equations
theorem
MvPolynomial.rank_R
(σ K : Type u)
[Fintype K]
[Field K]
[Fintype σ]
:
Module.rank K (R σ K) = ↑(Fintype.card (σ → K))
instance
MvPolynomial.instFiniteDimensionalROfFinite
(σ K : Type u)
[Fintype K]
[Field K]
[Finite σ]
:
FiniteDimensional K (R σ K)
theorem
MvPolynomial.finrank_R
(σ K : Type u)
[Fintype K]
[Field K]
[Fintype σ]
:
Module.finrank K (R σ K) = Fintype.card (σ → K)
theorem
MvPolynomial.range_evalᵢ
(σ K : Type u)
[Fintype K]
[Field K]
[Finite σ]
:
LinearMap.range (evalᵢ σ K) = ⊤
theorem
MvPolynomial.ker_evalₗ
(σ K : Type u)
[Fintype K]
[Field K]
[Finite σ]
:
LinearMap.ker (evalᵢ σ K) = ⊥
theorem
MvPolynomial.eq_zero_of_eval_eq_zero
(σ K : Type u)
[Fintype K]
[Field K]
[Finite σ]
(p : MvPolynomial σ K)
(h : ∀ (v : σ → K), (eval v) p = 0)
(hp : p ∈ restrictDegree σ K (Fintype.card K - 1))
:
p = 0