fix(BCIKS20): repair separability, Claim A.2, and §5 hypotheses - #787
fix(BCIKS20): repair separability, Claim A.2, and §5 hypotheses#787alexanderlhicks wants to merge 3 commits into
Conversation
🤖 PR SummarySummaryMathematical Formalization
Proof Completion (sorries removed)
Protocols / Soundness
Infrastructure / CI
Documentation
Refactoring
Salvaged from #773
Audit notes
No new Statistics
Lean Declarations ✏️ Removed: 2 declaration(s)
✏️ Added: 11 declaration(s)
✏️ Affected: 10 declaration(s) (line number changed)
✏️ Affected: 2 `sorry`(s) (line number changed)
📋 **Additional Analysis**The diff contains several violations of the project's style and naming guidelines. The most pervasive issues are naming conventions (camelCase used where snake_case is required for theorems, and snake_case used where lowerCamelCase is required for functions) and excessive line length (many lines exceed the 100-character limit). A few minor formatting points (e.g., spacing) appear acceptable. No violations were found for documentation, citation, or header requirements within the scope of the diff, though some aspects (deprecation, imports, file headers) are not visible in the diff and cannot be assessed. The 📄 **Per-File Summaries**
There are no
Last updated: 2026-08-21 15:33 UTC. |
|
Stepping back from BCIKS20 §5 for now — you're working through it actively (#733, #777, #787) and Thanks for carrying the two One item still open, for your list rather than as a request: |
…p it masked Statement repairs in the §5 chain and the Appendix A machinery it consumes; every `sorry` stays a `sorry` (17 before, 17 after in the §5 chain). Mathlib's `Separable f` is `IsCoprime f f.derivative` in the ambient ring, so over `F[Z]` or `F[Z][X]` it forces the discriminant to be a unit rather than merely nonzero. [BCIKS20] means separability over the fraction field: A.4 asks for no double roots "over any extension field as well", and §5 records the equivalent "this happens if `discY Ri (x0, Y, Z) ≠ 0`". Eq 5.12 now asks for `discr_y Rᵢ ≠ 0`, and Claim 5.7 and `HenselNumerators.Hypotheses` for separability of the specialization over `F(Z)` — which is what the Hensel setup consumes, since `liftToFunctionField` factors through `RatFunc F`. Repairing that exposed a genuine gap upstream. A.2 defines `Λ(T) = D + 1 - d`, so A.4's `Λ(ξ) ≤ (D - 1) + (d - 2)Λ(W)` needs `Λ(W) = D - dH`, while the paper proves only `Λ(W) ≤ D - dH`; the term of `ξ` whose `W`-power is negative can then dominate, exceeding the bound by the content degree. Over `𝔽₅` with `R = Z·Y² + Z·Y + (Z + X)`, `x₀ = 0`, `H = Y² + Y + 1`, `D = 3` — every A.4 hypothesis holds — `ξ` has weight 3 against a stated bound of 2, and no choice of `x₀` avoids it. Ring-level `Separable` had been supplying the missing hypothesis by forcing the content to be a unit. The charge is carried through as `contentWeight` rather than assumed away: `xi_weight_le` gains it (and now needs no separability in either branch), `numeratorShapeSharp` gains `eₜ · contentWeight`, and the loose bound becomes `(2t+1)·(dY+1)·D` in place of `(2t+1)·dY·D`, with Claims 5.10 and 5.11 adjusted to match. This is the `(t-1)(D - dY)` correction's disease one level up. Two proved helpers in `Extraction.lean` were false under the corrected hypothesis, since a constant prime is a legitimate normalized factor of `natDegree 0`; they are restated over the positive-degree factor multiset, which is what eq. 5.12 means anyway, and now need no hypothesis at all. `pg_positiveDegreePairs` is kept separate from `pg_candidatePairs` because the existence lemma can only land in the latter — the bridge needs Claim 5.7's counting, and is recorded as an obligation instead of taken from a false hypothesis. Prop 5.5 gains `hS`, the nonemptiness residue of §5.2's standing assumption on `#S`; without it the statement is false at empty `S`. Also salvages two lemmas from #773 (closed as superseded by #777), credited to Arya: `le_rootMultiplicity_of_coeff_shift_eq_zero`, which collapses `symbolicGSPolyMultiplicityBridge` to one `exact`, and a proof of `rootMultiplicity₀_ne_none` that runs `rootMultiplicity₀_ge_iff` backwards instead of rebuilding the truncation grid, 8 lines against 32. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Follow-up to the previous commit, which changed more previously-proved statements than the repair required. `numeratorShapeSharp` and `numeratorShapeSharp_le_loose` are restored byte-identically to `main`, docstring included. That lemma is arithmetic about a defined quantity: nothing about it was defective, and its proof still goes through under the weakened `Hypotheses`, since it only needs `natDegree_H_le_natDegree_R_of_hypotheses`. It broke in the previous commit only because the definition it refers to had been mutated underneath it. The content charge now lives in a separate `numeratorShapeSharpContent`, and the weight theorems are the ones retargeted at it. That is the honest split: what is false is the claim that `Λ(βₜ)` is bounded by the uncharged quantity, not the arithmetic relating that quantity to `(2t+1)·dY·D`. Also drops `pg_mem_normalizedFactors_of_mem_positiveDegreeFactors`, which the previous commit added but never used, and corrects two docstrings that a blanket rename had pointed at the wrong quantity — including the module header, which now records both divergences from A.4 rather than conflating them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4fbc1f5 to
54e2e91
Compare
Build Timing Report
Incremental Rebuild Signal
This compares a clean project build against an incremental rebuild in the same CI job; it is a lightweight variability signal, not a full cross-run benchmark. Slowest Current Clean-Build FilesShowing 20 slowest current targets, with comparison against the selected baseline when available.
|
|
Independent confirmation of the §5 half of this PR, from an external audit of the BCIKS20
One small thing that might reduce review surface if this PR is feeling large: mirroring Prop |
|
Thanks for the careful repair here, Alexander. I reviewed head A few findings to address while rebasing:
Current merge mechanics: this branch conflicts with current Overall, this is an important and well-motivated correction. #790 should land first, then this PR can adopt the semantic trivariate API and close the degree-bound mismatch cleanly. |
Summary
This PR repairs two genuine defects in the BCIKS20 formalization and cleans up the surrounding
§5 statement interfaces after a line-by-line review against BCIKS20, ePrint
2020/654 and the downstream ABF26/EF-Millenium usage.
R(x₀, Y, Z)as a polynomial inYover
F(Z), not overF[Z].ξomits the cost of clearing content introduced byspecialization. The corrected formal bound includes
contentWeight.The review also found that several §5 statements had silently omitted load-bearing hypotheses or
bridges. Those are now explicit instead of being hidden behind too-weak theorem interfaces.
What changed
Separability and Appendix A
RatFunc Fand prove the required map from thepolynomial-ring specialization.
𝔽₅counterexample to the paper's literalξweight bound:R = ZY² + ZY + (Z + X),x₀ = 0,H = Y² + Y + 1,D = 3.contentWeightand prove the resulting sharp and loosenumerator bounds.
(2t+1)(dY+1)Donly as a conservative proved bound. The PR no longer claims that the extra+1is necessary or that an actual numerator attains the arithmetic budget; the invalidnumerical witness for that claim was removed.
Section 5 statement repair
Section5Regime, recording the standing assumptions used by §5:m ≥ 3,k+1 < n, thepermitted
δrange,D_Y Q > 0, and the content-aware cardinality bound.truncated natural-number division.
x₀.Y-degree factors in Claim 5.7.Claim57Assumptionsexplicitly records theremaining content/exceptions bridge and specialization separability until the paper's finite
exceptional-set argument is formalized.
2 ≤ natDegreeY Rbranch and expose its factor-degreepremises. A degree-one factor should instead use its rational root directly; that branch remains
a separate proof obligation.
D_YZ Qand content-aware bounds through Claims 5.10 and 5.11.API and scope cleanup
fraction-field APIs instead of deleting sound statements.
Bivariate.rootMultiplicity₀proof rewrite from the final PR diff.main; the already-merged Proposition 5.5 /D_YZrepair from fix(BCIKS20): repair D_YZ index order and two Prop 5.5 defects #772 is nolonger duplicated here.
proof obligations.
Verification
./scripts/validate.shlake exe axiomsweep --check— no newsorryAxor non-standard-axiom taintlake build ArkLibsorrycounts in the touched §5 modules are unchangedScope note
This PR fixes the statements and proved Appendix A support it touches. It does not claim to have
completed the existing
sorryproofs for the Claim 5.7 exceptional-set/content bridge or thedegree-one direct-root branch; those obligations are now visible in the APIs and documentation.