Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions CompPoly.lean
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,20 @@ public import CompPoly.Bivariate.GuruswamiSudan.Executable
public import CompPoly.Bivariate.GuruswamiSudan.Filter
public import CompPoly.Bivariate.GuruswamiSudan.FilterCorrectness
public import CompPoly.Bivariate.GuruswamiSudan.Implementations
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis.Algorithm
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis.Basic
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis.ModularData
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis.Multiplicity
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Basic
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Dense.Algorithm
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Dense.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Hybrid
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Hybrid.Algorithm
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Hybrid.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.LeeOSullivan
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.LeeOSullivan.Algorithm
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.LeeOSullivan.Basic
Expand All @@ -31,6 +41,8 @@ public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.LeeOSullivan.Corre
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.LeeOSullivan.Correctness.Rows
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.LeeOSullivan.Correctness.Selection
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.LeeOSullivan.Correctness.Soundness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.WitnessDivisibility
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.WitnessDivisibilityCorrectness
public import CompPoly.Bivariate.GuruswamiSudan.Polynomial
public import CompPoly.Bivariate.GuruswamiSudan.PolynomialCorrectness
public import CompPoly.Bivariate.GuruswamiSudan.Root.Alekhnovich.Algorithm
Expand Down Expand Up @@ -163,6 +175,22 @@ public import CompPoly.LinearAlgebra.Dense.RowOpsCorrectness
public import CompPoly.LinearAlgebra.Dense.RrefSemantics
public import CompPoly.LinearAlgebra.Dense.RrefShape
public import CompPoly.LinearAlgebra.PolynomialMatrix
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.Basic
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.Correctness
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.ModularEquation
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.ModularEquation.Basic
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.ModularEquation.Completeness
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis.Correctness
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis.KernelLeaf
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis.KernelLeafCompleteness
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis.KernelLeafScalar
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis.KernelLeafSoundness
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis.KernelLeafSpan
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis.Recursion
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PMBasis.XAdicSoundness
public import CompPoly.LinearAlgebra.PolynomialMatrix.Approximant.PartialLinearization
public import CompPoly.LinearAlgebra.PolynomialMatrix.Basic
public import CompPoly.LinearAlgebra.PolynomialMatrix.Degree
public import CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohann
Expand All @@ -176,9 +204,13 @@ public import CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohannCorrectne
public import CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohannCorrectness.Minimal
public import CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohannCorrectness.Reduction
public import CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohannCorrectness.RowOps
public import CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohannCorrectness.WeakPopovMinimal
public import CompPoly.LinearAlgebra.PolynomialMatrix.Operations
public import CompPoly.LinearAlgebra.PolynomialMatrix.RowSelection
public import CompPoly.LinearAlgebra.PolynomialMatrix.RowSpan
public import CompPoly.LinearAlgebra.PolynomialMatrix.Shifted
public import CompPoly.LinearAlgebra.PolynomialMatrix.ShiftedReduction
public import CompPoly.LinearAlgebra.PolynomialMatrix.StrassenCorrectness
public import CompPoly.Multilinear.Basic
public import CompPoly.Multilinear.Equiv
public import CompPoly.Multilinear.ManyEval
Expand Down
23 changes: 23 additions & 0 deletions CompPoly/Bivariate/Deriv.lean
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,29 @@ theorem hasMultiplicity_succ [CommSemiring R] [BEq R] [LawfulBEq R] [Nontrivial
intro h i j hij
exact h i j (by omega)

/-- `toPoly` is injective on canonical bivariate polynomials. -/
theorem toPoly_injective [Semiring R] [BEq R] [LawfulBEq R] [Nontrivial R]
[DecidableEq R] {P Q : CBivariate R} (h : toPoly P = toPoly Q) : P = Q := by
rw [← toPoly_ofPoly P, ← toPoly_ofPoly Q, h]

/-- The generic Taylor shift is additive. -/
theorem shiftC_add [CommSemiring R] [BEq R] [LawfulBEq R] [Nontrivial R] [DecidableEq R]
(a b : R) (P Q : CBivariate R) :
shiftC a b (P + Q) = shiftC a b P + shiftC a b Q := by
apply toPoly_injective
rw [toPoly_add, shiftC_toPoly, shiftC_toPoly, shiftC_toPoly, toPoly_add]
unfold Polynomial.Bivariate.shift
rw [Polynomial.add_comp, Polynomial.map_add]

/-- The generic Taylor shift is multiplicative. -/
theorem shiftC_mul [CommSemiring R] [BEq R] [LawfulBEq R] [Nontrivial R]
[DecidableEq R] (a b : R) (P Q : CBivariate R) :
shiftC a b (P * Q) = shiftC a b P * shiftC a b Q := by
apply toPoly_injective
rw [toPoly_mul, shiftC_toPoly, shiftC_toPoly, shiftC_toPoly, toPoly_mul]
unfold Polynomial.Bivariate.shift
rw [Polynomial.mul_comp, Polynomial.map_mul]

/-- The decidable check agrees with the propositional multiplicity. -/
theorem hasMultiplicity_iff_check [CommSemiring R] [BEq R] [LawfulBEq R] [Nontrivial R]
[DecidableEq R] (Q : CBivariate R) (r : ℕ) (a b : R) :
Expand Down
148 changes: 146 additions & 2 deletions CompPoly/Bivariate/GuruswamiSudan/Implementations.lean
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ module

public import CompPoly.Bivariate.GuruswamiSudan.Executable
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Dense.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Hybrid.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.LeeOSullivan.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Root.Alekhnovich.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Root.FieldRoots.KoalaBear
public import CompPoly.Bivariate.GuruswamiSudan.Root.RothRuckenstein.Correctness
public import CompPoly.LinearAlgebra.PolynomialMatrix.MuldersStorjohannCorrectness.Fast
Expand All @@ -17,8 +19,9 @@ public import CompPoly.Univariate.NTT.KoalaBear
/-!
# Guruswami-Sudan Concrete Implementations

Named concrete dense and Lee-O'Sullivan interpolation/Roth-Ruckenstein
implementations and correctness theorem specializations for the decoder surface.
Named concrete dense-interpolation/Roth-Ruckenstein implementations and
correctness theorem specializations for the implementations exercised by the
benchmark suite.
-/

@[expose] public section
Expand All @@ -39,6 +42,13 @@ def fastKoalaBearDenseInterpContext : GSInterpContext KoalaBear.Fast.Field :=
def koalaBearNttFastMulContext : CPolynomial.MulContext KoalaBear.Field :=
CPolynomial.MulContext.nttFast CPolynomial.NTT.KoalaBear.bestDomainForLength?

/-- NTTFast-backed low univariate multiplication over canonical KoalaBear. -/
def koalaBearNttFastLowMulContext :
PolynomialMatrix.MulLowContext KoalaBear.Field :=
PolynomialMatrix.MulLowContext.raw koalaBearNttFastMulContext
(CPolynomial.NTTFast.FastMulLow.withFallback
CPolynomial.NTT.KoalaBear.bestDomainForLength?)

/-- NTTFast-backed univariate monic remainders over canonical KoalaBear. -/
def koalaBearNttFastModContext : CPolynomial.ModContext KoalaBear.Field :=
CPolynomial.ModContext.reversalNttFast CPolynomial.NTT.KoalaBear.bestDomainForLength?
Expand All @@ -52,6 +62,13 @@ def koalaBearNttFastBatchEvalContext : CPolynomial.BatchEvalContext KoalaBear.Fi
def fastKoalaBearNttFastMulContext : CPolynomial.MulContext KoalaBear.Fast.Field :=
CPolynomial.MulContext.nttFast CPolynomial.NTT.KoalaBear.fastBestDomainForLength?

/-- NTTFast-backed low univariate multiplication over native-word fast KoalaBear. -/
def fastKoalaBearNttFastLowMulContext :
PolynomialMatrix.MulLowContext KoalaBear.Fast.Field :=
PolynomialMatrix.MulLowContext.raw fastKoalaBearNttFastMulContext
(CPolynomial.NTTFast.FastMulLow.withFallback
CPolynomial.NTT.KoalaBear.fastBestDomainForLength?)

/-- NTTFast-backed univariate monic remainders over native-word fast KoalaBear. -/
def fastKoalaBearNttFastModContext : CPolynomial.ModContext KoalaBear.Fast.Field :=
CPolynomial.ModContext.reversalNttFast CPolynomial.NTT.KoalaBear.fastBestDomainForLength?
Expand Down Expand Up @@ -93,6 +110,117 @@ def fastKoalaBearLeeSubproductInterpContext : GSInterpContext KoalaBear.Fast.Fie
fastKoalaBearNttFastBatchEvalContext
(PolynomialMatrix.muldersStorjohannFastReducerContext KoalaBear.Fast.Field)

/-- PM-basis scalar-kernel cutoff for the approximant-basis interpolation backend.

The recursive solver handles all larger orders with low-product residuals and
block matrix composition; dense scalar linear algebra is reserved for
small bounded leaves. -/
def approximantPMBasisLeafCutoff : Nat := 8

/-- Polynomial-matrix basis-composition cutoff for the approximant backend.
The current GS interpolation shapes are narrow enough that direct bounded
composition is faster than recursing Strassen down to unit blocks. -/
def approximantPMBasisComposeLeafCutoff : Nat := 8

/-- Recursive approximant-basis PM-basis context over canonical KoalaBear. -/
def koalaBearApproximantPMBasisContext :
PolynomialMatrix.Approximant.PMBasisContext KoalaBear.Field :=
PolynomialMatrix.Approximant.kernelLeafPMBasisContextWithLowAndCompose
koalaBearNttFastMulContext koalaBearNttFastLowMulContext
approximantPMBasisLeafCutoff approximantPMBasisComposeLeafCutoff

/-- Diagonal modular-equation solution context over canonical KoalaBear. -/
def koalaBearApproximantSolutionContext :
PolynomialMatrix.Approximant.ModularSolutionBasisContext KoalaBear.Field :=
PolynomialMatrix.Approximant.modularSolutionBasisContextViaPMBasis
koalaBearNttFastMulContext koalaBearNttFastModContext
koalaBearApproximantPMBasisContext

/-- Approximant-basis interpolation over canonical KoalaBear. -/
def koalaBearApproximantBasisDirectInterpContext : GSInterpContext KoalaBear.Field :=
ApproximantBasis.approximantBasisInterpContext
(CPolynomial.VanishingPolynomialContext.direct (F := KoalaBear.Field))
(CPolynomial.BatchEvalContext.horner KoalaBear.Field)
koalaBearApproximantSolutionContext

/-- Approximant-basis interpolation over canonical KoalaBear with
subproduct-tree vanishing setup. -/
def koalaBearApproximantBasisSubproductInterpContext : GSInterpContext KoalaBear.Field :=
ApproximantBasis.approximantBasisInterpContext
(CPolynomial.VanishingPolynomialContext.subproduct
koalaBearNttFastMulContext)
koalaBearNttFastBatchEvalContext
koalaBearApproximantSolutionContext

/-- Default approximant-basis interpolation over canonical KoalaBear. -/
def koalaBearApproximantBasisInterpContext : GSInterpContext KoalaBear.Field :=
koalaBearApproximantBasisSubproductInterpContext

/-- Recursive approximant-basis PM-basis context over native-word fast KoalaBear. -/
def fastKoalaBearApproximantPMBasisContext :
PolynomialMatrix.Approximant.PMBasisContext KoalaBear.Fast.Field :=
PolynomialMatrix.Approximant.kernelLeafPMBasisContextWithLowAndCompose
fastKoalaBearNttFastMulContext fastKoalaBearNttFastLowMulContext
approximantPMBasisLeafCutoff approximantPMBasisComposeLeafCutoff

/-- Diagonal modular-equation solution context over native-word fast KoalaBear. -/
def fastKoalaBearApproximantSolutionContext :
PolynomialMatrix.Approximant.ModularSolutionBasisContext KoalaBear.Fast.Field :=
PolynomialMatrix.Approximant.modularSolutionBasisContextViaPMBasis
fastKoalaBearNttFastMulContext fastKoalaBearNttFastModContext
fastKoalaBearApproximantPMBasisContext

/-- Approximant-basis interpolation over native-word fast KoalaBear. -/
def fastKoalaBearApproximantBasisDirectInterpContext :
GSInterpContext KoalaBear.Fast.Field :=
ApproximantBasis.approximantBasisInterpContext
(CPolynomial.VanishingPolynomialContext.direct (F := KoalaBear.Fast.Field))
(CPolynomial.BatchEvalContext.horner KoalaBear.Fast.Field)
fastKoalaBearApproximantSolutionContext

/-- Approximant-basis interpolation over native-word fast KoalaBear with
subproduct-tree vanishing setup. -/
def fastKoalaBearApproximantBasisSubproductInterpContext :
GSInterpContext KoalaBear.Fast.Field :=
ApproximantBasis.approximantBasisInterpContext
(CPolynomial.VanishingPolynomialContext.subproduct
fastKoalaBearNttFastMulContext)
fastKoalaBearNttFastBatchEvalContext
fastKoalaBearApproximantSolutionContext

/-- Default approximant-basis interpolation over native-word fast KoalaBear. -/
def fastKoalaBearApproximantBasisInterpContext :
GSInterpContext KoalaBear.Fast.Field :=
fastKoalaBearApproximantBasisSubproductInterpContext

/-- Mulders-Storjohann step budget for the hybrid interpolation backend: the
ski-rental rent/buy break-even, set near the cost ratio between one
approximant-fallback solve and one reduction step. Both scale with the input
mass, so the ratio is proportional to `ℓ^(ω−1)` (with `ℓ + 1` the module
width) and independent of `n` and `m` under softly-linear multiplication;
the constant is calibrated from the `n = 5040` long-code benchmark shape. -/
def hybridReductionStepBudget (params : GSInterpParams) : Nat :=
500 * leeOSullivanWidth params * leeOSullivanWidth params

/-- Hybrid interpolation (budgeted Lee-O'Sullivan reduction with approximant
fallback) over canonical KoalaBear. -/
def koalaBearHybridInterpContext : GSInterpContext KoalaBear.Field :=
Hybrid.hybridInterpContext
(CPolynomial.VanishingPolynomialContext.subproduct koalaBearNttFastMulContext)
koalaBearNttFastBatchEvalContext
koalaBearApproximantSolutionContext
hybridReductionStepBudget

/-- Hybrid interpolation (budgeted Lee-O'Sullivan reduction with approximant
fallback) over native-word fast KoalaBear. -/
def fastKoalaBearHybridInterpContext : GSInterpContext KoalaBear.Fast.Field :=
Hybrid.hybridInterpContext
(CPolynomial.VanishingPolynomialContext.subproduct
fastKoalaBearNttFastMulContext)
fastKoalaBearNttFastBatchEvalContext
fastKoalaBearApproximantSolutionContext
hybridReductionStepBudget

/-- Roth-Ruckenstein root backend over canonical KoalaBear. -/
def koalaBearRothRootContext : GSRootContext KoalaBear.Field :=
rothRuckensteinRootContext KoalaBear.Field koalaBearFieldRootContext
Expand All @@ -109,6 +237,22 @@ def fastKoalaBearRothRootContext : GSRootContext KoalaBear.Fast.Field :=
def fastKoalaBearRothNttFastRootContext : GSRootContext KoalaBear.Fast.Field :=
rothRuckensteinRootContext KoalaBear.Fast.Field fastKoalaBearNttFastFieldRootContext

/-- Alekhnovich root backend over canonical KoalaBear. -/
def koalaBearAlekhnovichRootContext : GSRootContext KoalaBear.Field :=
alekhnovichRootContext KoalaBear.Field koalaBearFieldRootContext

/-- Alekhnovich root backend over canonical KoalaBear with NTTFast field roots. -/
def koalaBearAlekhnovichNttFastRootContext : GSRootContext KoalaBear.Field :=
alekhnovichRootContext KoalaBear.Field koalaBearNttFastFieldRootContext

/-- Alekhnovich root backend over native-word fast KoalaBear. -/
def fastKoalaBearAlekhnovichRootContext : GSRootContext KoalaBear.Fast.Field :=
alekhnovichRootContext KoalaBear.Fast.Field fastKoalaBearFieldRootContext

/-- Alekhnovich root backend over native-word fast KoalaBear with NTTFast field roots. -/
def fastKoalaBearAlekhnovichNttFastRootContext : GSRootContext KoalaBear.Fast.Field :=
alekhnovichRootContext KoalaBear.Fast.Field fastKoalaBearNttFastFieldRootContext

/-- Filtered dense/Roth context over canonical KoalaBear. -/
def koalaBearDenseRothContext : GSFilteredCoreContext KoalaBear.Field :=
filteredCoreContextOfInterpRootContexts koalaBearDenseInterpContext koalaBearRothRootContext
Expand Down
22 changes: 22 additions & 0 deletions CompPoly/Bivariate/GuruswamiSudan/Interpolation.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/-
Copyright (c) 2026 CompPoly Contributors. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Valerii Huhnin
-/

module

public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Dense.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.LeeOSullivan.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis.Correctness
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.Hybrid.Correctness

/-!
# Guruswami-Sudan Interpolation

Public interpolation surface for certified Guruswami-Sudan interpolation
backends.
-/

@[expose] public section
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/-
Copyright (c) 2026 CompPoly Contributors. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Valerii Huhnin
-/

module

public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis.Basic
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis.Algorithm
public import CompPoly.Bivariate.GuruswamiSudan.Interpolation.ApproximantBasis.Correctness

/-!
# Approximant-Basis Guruswami-Sudan Interpolation
-/

@[expose] public section
Loading
Loading