Documentation

CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis.XAdicSoundness

X-Adic Row Soundness Toolkit #

The RowApproximates predicate, its divisibility characterization, closure under the row operations used by the leaf reduction and completion steps, and the soundness of one divide-and-conquer composition step.

X-adic row soundness toolkit #

Semantic tools for proving that every row produced by the recursive PM-basis driver satisfies the X-adic approximant conditions. Soundness is phrased via X^order divisibility of the toPoly image, which makes it closed under the row operations used by the reduction, completion, and composition steps.

A row approximates an X-adic problem when every column product vanishes to the required order.

Instances For

    Truncation vanishes exactly on X^order-multiples under toPoly.

    Truncation of the zero polynomial is zero.

    theorem CompPoly.PolynomialMatrix.Approximant.pm_toPoly_finset_sum {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (f : CPolynomial F) (n : ) :
    (∑ kFinset.range n, f k).toPoly = kFinset.range n, (f k).toPoly

    toPoly commutes with finite range sums.

    Column entries of a row-by-matrix product as sums over the matrix height, under toPoly.

    theorem CompPoly.PolynomialMatrix.Approximant.rowApproximates_iff {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) (row : PolynomialRow F) :
    RowApproximates mulCtx problem row j < problem.orders.size, j < problem.matrix.MatrixWidthPolynomial.X ^ problem.orders.getD j 0 kFinset.range (Array.size problem.matrix), (rowGet row k).toPoly * (rowGet (Array.getD problem.matrix k #[]) j).toPoly

    Divisibility form of the approximant condition, one column at a time.

    theorem CompPoly.PolynomialMatrix.Approximant.rowApproximates_rowSub {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) {a b : PolynomialRow F} (ha : RowApproximates mulCtx problem a) (hb : RowApproximates mulCtx problem b) :
    RowApproximates mulCtx problem (rowSub a b)

    Row subtraction preserves the approximant condition.

    Coefficient-shift scaling under toPoly.

    theorem CompPoly.PolynomialMatrix.Approximant.rowApproximates_rowScaleCoeffX {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) {row : PolynomialRow F} (c : F) (d : ) (h : RowApproximates mulCtx problem row) :
    RowApproximates mulCtx problem (rowScaleCoeffX c d row)

    Coefficient-shift row scaling preserves the approximant condition.

    theorem CompPoly.PolynomialMatrix.Approximant.rowApproximates_cancelKernelLeafLeadingTerm {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) {target reducer : PolynomialRow F} (shift : Array ) (htarget : RowApproximates mulCtx problem target) (hreducer : RowApproximates mulCtx problem reducer) :
    RowApproximates mulCtx problem (cancelKernelLeafLeadingTerm target reducer shift)

    Leading-term cancellation preserves the approximant condition.

    theorem CompPoly.PolynomialMatrix.Approximant.insertKernelLeafPivotRowWithFuel_approximates {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) (fuel : ) (pivots : Array (Option (PolynomialRow F))) (shift : Array ) (row : PolynomialRow F) :
    (∀ (p : ) (r : PolynomialRow F), pivots.getD p none = some rRowApproximates mulCtx problem r)RowApproximates mulCtx problem row∀ (p : ) (r : PolynomialRow F), (insertKernelLeafPivotRowWithFuel fuel pivots shift row).getD p none = some rRowApproximates mulCtx problem r

    Pivot-table insertion preserves the approximant condition of all stored rows.

    theorem CompPoly.PolynomialMatrix.Approximant.pivotRows_approximates {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) {pivots : Array (Option (PolynomialRow F))} (hpivots : ∀ (p : ) (r : PolynomialRow F), pivots.getD p none = some rRowApproximates mulCtx problem r) {row : PolynomialRow F} (hrow : row (pivotRows pivots).MatrixRows) :
    RowApproximates mulCtx problem row

    Rows extracted from a sound pivot table satisfy the approximant condition.

    theorem CompPoly.PolynomialMatrix.Approximant.reduceKernelLeafRowsByPivots_approximates {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) {rows : PolynomialMatrix F} (shift : Array ) (hrows : rowrows.MatrixRows, RowApproximates mulCtx problem row) {row : PolynomialRow F} (hrow : row (reduceKernelLeafRowsByPivots rows shift).MatrixRows) :
    RowApproximates mulCtx problem row

    Pivot-table reduction preserves the approximant condition.

    Compaction preserves row membership soundness.

    Compacted rows are nonzero.

    The monomial coeffXPower c d under toPoly.

    theorem CompPoly.PolynomialMatrix.Approximant.rowApproximates_monomialUnitRow {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) {i d : } (hd : j < problem.orders.size, problem.orders.getD j 0 d) :
    RowApproximates mulCtx problem (monomialUnitRow (Array.size problem.matrix) i d)

    Monomial unit rows of sufficiently high degree satisfy every X-adic condition.

    theorem CompPoly.PolynomialMatrix.Approximant.getD_le_maxOrder {F : Type u_1} [Field F] (problem : XAdicProblem F) {j : } (hj : j < problem.orders.size) :
    problem.orders.getD j 0 maxOrder problem

    Every entry of the order vector is bounded by maxOrder.

    theorem CompPoly.PolynomialMatrix.Approximant.missingCompletionRows_approximates {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) (shift : Array ) (rows : PolynomialMatrix F) {row : PolynomialRow F} (hrow : row (missingCompletionRows problem shift rows).MatrixRows) :
    RowApproximates mulCtx problem row

    Missing-pivot completion rows satisfy every X-adic condition.

    theorem CompPoly.PolynomialMatrix.Approximant.completeMissingPivotRows_approximates {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) (problem : XAdicProblem F) (shift : Array ) {rows : PolynomialMatrix F} (hrows : rowrows.MatrixRows, RowApproximates mulCtx problem row) {row : PolynomialRow F} (hrow : row (completeMissingPivotRows problem shift rows).MatrixRows) :
    RowApproximates mulCtx problem row

    Pivot completion preserves the approximant condition.

    Composition soundness #

    theorem CompPoly.PolynomialMatrix.Approximant.divXTrunc_coeff {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (shift order : ) (p : CPolynomial F) (t : ) :
    (divXTrunc shift order p).coeff t = if t < order then p.coeff (t + shift) else 0

    Coefficients of the shifted truncation divXTrunc.

    The row-by-matrix product does not depend on the multiplication context.

    theorem CompPoly.PolynomialMatrix.Approximant.natArray_map_getD (f : ) (a : Array ) {j : } (hj : j < a.size) :
    (Array.map f a).getD j 0 = f (a.getD j 0)

    getD of a mapped natural-number array at an in-bounds index.

    A nonempty matrix with uniform row width n has MatrixWidth n.

    In-bounds getD rows are matrix rows.

    theorem CompPoly.PolynomialMatrix.Approximant.rowApproximates_composed {F : Type u_1} [Field F] [BEq F] [LawfulBEq F] (mulCtx : CPolynomial.MulContext F) {problem : XAdicProblem F} {d₁ : } {P₁ Rmat : PolynomialMatrix F} (hP₁ : rP₁.MatrixRows, RowApproximates mulCtx { orders := lowerOrders problem d₁, matrix := problem.matrix } r Array.size r = Array.size problem.matrix) (hRsize : Array.size Rmat = Array.size P₁) (hRwidth : 0 < Array.size P₁problem.matrix.MatrixWidth Rmat.MatrixWidth) (hR : ∀ (l j : ), l < Array.size P₁j < problem.orders.sizej < problem.matrix.MatrixWidtht < problem.orders.getD j 0 - d₁, (rowGet (Array.getD Rmat l #[]) j).coeff t = (rowGet (rowMulMatrixWith mulCtx (Array.getD P₁ l #[]) problem.matrix) j).coeff (t + d₁)) {p₂ : PolynomialRow F} (hp₂ : RowApproximates mulCtx { orders := residualOrders problem d₁, matrix := Rmat } p₂) :
    RowApproximates mulCtx problem (rowMulMatrixWith mulCtx p₂ P₁)

    Soundness of one PM-basis composition step: a residual-approximant row times a lower-approximant basis approximates the full problem.