Finite-Field Root Contexts #
Explicit contexts for executable univariate root finding over finite fields. The algorithms use the cardinality carried here; downstream proofs use the finite-field and splitter contracts without unfolding concrete implementations.
A polynomial represented as a nonconstant linear factor.
Instances For
A linear factor whose extracted root is a.
Instances For
A deterministic splitter for squarefree products of linear factors.
The executable function consumes the field cardinality and the current factor. Completeness of the public root backend depends on splitter completeness for every linear-factor product reached by the recursion.
- splitLinearFactors : ℕ → CPolynomial F → Array (CPolynomial F)
- validInput : ℕ → CPolynomial F → Prop
The precondition under which
completeis claimed for the splitter input.Root backends should establish this predicate for the field-root product they pass to the splitter. Executable splitters may remain defensive outside this predicate, but completeness is only part of the contract under it.
- sound (q : ℕ) (p factor : CPolynomial F) : factor ∈ (self.splitLinearFactors q p).toList → IsLinearFactor factor
- complete (q : ℕ) (p : CPolynomial F) (a : F) : self.validInput q p → p ≠ 0 → eval a p = 0 → ∃ factor ∈ (self.splitLinearFactors q p).toList, IsLinearRootFactorCandidate factor a