Skip to content

Commit 6c28870

Browse files
docs(ratfunc): organisation, naming and docstring pass
Docstrings: 82 of the 231 declarations had none. All now do -- every lemma in the Lemma A.1 resultant chain, the xiPre* decomposition, the bSeq Hensel iteration, the AllCoeffRegular and RegularWeightLe APIs, and the power-series helpers. The docstrings say what the statement is FOR, not just what it says: e.g. coeff_evalR_split is flagged as the linearity that gives both existence and uniqueness of the lift, and xiPreTop as the paper's "we can save a little" step. Umbrella file: replaced the one-line "compatibility umbrella" note with a real package roadmap -- the variable convention (which of F[X][X][Y]'s three variables is the paper's X, Y, Z), a per-module map to the paper's sections, the main results, the axiom-cleanliness claim, and the two documented deviations from [BCIKS20] with pointers to where each is justified. Organisation: - named the six anonymous top-level sections (Monicization, AlgebraicWeights, RegularLifts, HenselSetup, HenselLift, HenselNumeratorSequence) and their closing `end`s; - the section variable for R was declared as F[X][X][X] in four files while every theorem writes F[X][X][Y] -- same type, inconsistent notation; normalized. Zero warnings, zero sorries, style-lint clean, and `#print axioms` over the whole namespace still reports 266 declarations with no sorryAx and no non-standard axioms.
1 parent 3768409 commit 6c28870

9 files changed

Lines changed: 226 additions & 18 deletions

File tree

ArkLib/Data/Polynomial/RationalFunctions.lean

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,72 @@ import ArkLib.Data.Polynomial.RationalFunctions.HenselNumerators.Weight
1414
import ArkLib.Data.Polynomial.RationalFunctions.HenselNumerators.Sequence
1515

1616
/-!
17-
# Function Fields and Rings of Regular Functions
17+
# Appendix A of [BCIKS20]: Function Fields, Weights, and Hensel Lifts
1818
19-
Compatibility umbrella for the modularized BCIKS20 Appendix A development.
19+
Umbrella import for the `RationalFunctions` package, which formalizes Appendix A of [BCIKS20]
20+
the algebraic machinery behind the list-decoding half of the Reed-Solomon proximity-gap proof.
21+
Import this file for all of it, or an individual module for a narrower dependency.
22+
23+
## Setting
24+
25+
`H : F[X][Y]` plays the role of the paper's `H(Y, Z)`: the outer variable is `Y` and the
26+
coefficient variable is the paper's `Z`. For the trivariate `R : F[X][X][Y]` the outer variable is
27+
`Y`, the middle one is the paper's `X` and the innermost is `Z`, so `Bivariate.evalX (C x₀) R` is
28+
the specialization `R(x₀, Y, Z)`.
29+
30+
## Layout
31+
32+
* `FunctionField` (A.1) — monicization `monicizeRatFunc`/`monicize` (the paper's `H̃`), the
33+
function field `𝕃 H = F(Z)[T]/(H̃)`, its ring of regular elements `𝒪 H = F[Z][T]/(H̃)`, the
34+
injective embedding `𝒪 H ↪ 𝕃 H`, canonical representatives, and the substitutions `π_z` of A.3.
35+
* `Lifts` (A.1) — coefficient and bivariate lifts into `𝕃`, the image `T` of the polynomial
36+
variable, denominator clearing for `W^k · P(T/W)`, and the extension of `π_z` to quotients
37+
`β / C(Z)`.
38+
* `Weight` (A.2) — the weight `Λ` (`weight`, `regularWeight`) and its calculus: sub-additivity,
39+
*full* additivity on `F[Z][T]`, invariance under reduction modulo `H̃`, exact `Λ(H̃)`.
40+
* `RationalRootVanishing` (A.3) — Lemma A.1: a regular `β` killed by more than `deg_Y H · Λ(β)`
41+
substitutions is zero.
42+
* `HenselNumerators/Setup` (A.4) — hypotheses of the lift, `ζ = ∂R/∂Y(x₀, T/W, Z)`, its cleared
43+
form `ξ = W^{d-2}·ζ ∈ 𝒪`, and the bound on `Λ(ξ)`.
44+
* `HenselNumerators/Hensel` (A.4) — the formal Hensel iteration: existence, uniqueness, and
45+
regularity of the numerators.
46+
* `HenselNumerators/Weight` (A.4) — the quantitative half of Claim A.2: the `RegularWeightLe`
47+
calculus and the weight induction.
48+
* `HenselNumerators/Sequence` (A.4) — Claim A.2 assembled: `betaSeq`, `alpha`, `gamma`, and the
49+
weight bounds.
50+
51+
## Main results
52+
53+
* `lemmaA1_embedding_eq_zero_of_many_rational_roots` — Lemma A.1.
54+
* `HenselNumerators.exists_hensel_numerator_sequence` — the qualitative half of Claim A.2. The data
55+
`betaSeq`, `alpha`, `gamma` is defined from this rather than from the bundled statement, so that
56+
downstream definitions do not depend on the quantitative argument.
57+
* `HenselNumerators.IsHenselNumeratorSequence.unique` — uniqueness of the lift, which A.4 asserts
58+
and [BCIKS20] §5 invokes in Claim 5.9. It makes `betaSeq` canonical rather than an arbitrary
59+
choice.
60+
* `HenselNumerators.claimA2_exists_numerators_with_weight_bounds` — Claim A.2 as the paper states
61+
it: existence together with both weight bounds.
62+
63+
Everything in this package is proved: no `sorry`, and no axioms beyond `propext`,
64+
`Classical.choice` and `Quot.sound`.
65+
66+
## Deviations from the paper
67+
68+
Two, both recorded in `docs/kb/audits/bciks20-appendix-a-rational-functions.md`.
69+
70+
1. The weight bounds assume `2 ≤ deg_Y R`, which is A.4's own standing assumption — it writes
71+
`ξ = W^{d-2}·ζ ∈ 𝒪`, meaningless for `d < 2`. The hypothesis is load-bearing rather than
72+
cosmetic: at `deg_Y R = 1` the conclusion of `xi_weight_le` is false. Consumers must case-split;
73+
see the docstring of `claimA2_hypotheses` in `BCIKS20/ListDecoding/Agreement.lean`.
74+
2. `numeratorShapeSharp` carries a correction term relative to the inequality A.4 states, because
75+
a factor of `W` that the recursion *saves* is worth only `deg W` while one it *charges* costs
76+
the bound `D - dH`. The loose bound `(2t+1)·d·D` that Claim 5.10 consumes is unaffected. See
77+
that definition's docstring.
78+
79+
## References
80+
81+
[BCIKS20] Eli Ben-Sasson, Dan Carmon, Yuval Ishai, Swastik Kopparty, and Shubhangi Saraf.
82+
Proximity gaps for Reed-Solomon codes. In 2020 IEEE 61st Annual Symposium on Foundations of
83+
Computer Science (FOCS), 2020. Full paper: https://eprint.iacr.org/2020/654,
84+
version 20210703:203025.
2085
-/

ArkLib/Data/Polynomial/RationalFunctions/FunctionField.lean

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ open Polynomial Polynomial.Bivariate ToRatFunc Ideal
3030

3131
namespace RationalFunctions
3232

33-
section
33+
section Monicization
3434

3535
variable {F : Type} [CommRing F] [IsDomain F]
3636

@@ -49,6 +49,7 @@ section FieldIrreducibility
4949

5050
variable {F : Type} [Field F]
5151

52+
/-- The embedding `F[Z] → F(Z)` of a domain into its fraction field is injective. -/
5253
lemma univPolyHom_injective :
5354
Function.Injective (univPolyHom (F := F)) := by
5455
simpa [ToRatFunc.univPolyHom] using (RatFunc.algebraMap_injective (K := F))
@@ -378,6 +379,9 @@ section FieldEmbedding
378379

379380
variable {F : Type} [Field F]
380381

382+
/-- Divisibility by the monicization descends from `F(Z)[T]` to `F[Z][T]`: if `monicizeRatFunc H`
383+
divides the image of `p`, then `monicize H` already divides `p`. This is what makes
384+
`embeddingOf𝒪Into𝕃` injective. -/
381385
lemma monicize_dvd_of_map_dvd_monicizeRatFunc {H p : F[X][Y]} (hHdeg : 0 < H.natDegree)
382386
(hp : monicizeRatFunc H ∣ p.map (univPolyHom (F := F))) :
383387
monicize H ∣ p := by
@@ -599,5 +603,5 @@ lemma canonicalRepOf𝒪_mk_eq_self_of_degree_lt {H : F[X][Y]} (hH : 0 < H.natDe
599603
exact (Polynomial.modByMonic_eq_self_iff (monicize_monic H hH)).2 hp
600604

601605

602-
end
606+
end Monicization
603607
end RationalFunctions

0 commit comments

Comments
 (0)