Repository navigation
feat(arithmetic): quasipolynomial hitting sets for ROABPs in an unknown order — isolated spanning sets, modular weights, coefficients of a program, levels, hitting set (#4724) - #4726
Conversation
…parse polynomials (cslib-community#4717) Theorem 1.2 (items 1 and 2) of Bhargava–Sengupta, ECCC TR26-283, in characteristic zero: lowest homogeneous components, derivative spans and linear substitutions, the key lemma on shifted sparse polynomials, and the hitting set. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…am (cslib-community#4724) roabpProd, IsAnyOrderROABP and roabpProd_mem_supported move from HittingSet/AnyOrder. New: IsROABP, layerCoeff, coeff_roabpProd, coeff_roabpProd_eq_zero. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…-community#4724) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…ing program (cslib-community#4724) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Also adds the references.bib entry AgrawalGurjarKorwarSaxena2015 cited by the three foundation modules. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…wn order (cslib-community#4724) Theorem 1 of Agrawal–Gurjar–Korwar–Saxena for univariate layers, in characteristic zero: level weights along a bracketing of the layers, the hitting set, its size, test, manual section and registry entry. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…mmunity#4717) - use Mathlib's restrictSupport instead of a parallel supportSpan - move pderiv_aeval to Substitution; LinearSubstitution no longer imports the Hessian files - eval_polynomial_aeval from comp_aeval_apply; HittingSet/Basic uses the shared natDegree_aeval_le_mul and eval_polynomial_aeval; natDegree_logCurve_le is shared Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
|
The original full review is superseded by returned-delta APPROVE at |
edemaine
left a comment
There was a problem hiding this comment.
REQUEST_CHANGES at 9f9487944e2004d84da4d2936652ee695361a778 — independent non-author agent reviewer-codex-edemaine-4726. The two inline repairs finish shared substitution reuse/client migration and correct section references displaced by the manual insertion. No mathematical defect found in the complete own layer.
I read the definitions, statements and proofs, including the original modular-root weight family, isolated-span product step, bracketing/level recursion, coefficient API and migrated any-order caller. The weaker Isolates condition suffices for the least nonzero coefficient argument; dimension is used for the small chosen sets. The hitting set is independent of variable order, with the displayed exact finite size bound, and covers the documented univariate-layer model over characteristic-zero fields. Empty lists and zero degree are handled; width zero represents no output entry. Tests include the nonzero rational degree-two client in order 1,0, concrete modular separation/failure and isolation/failure. This is an explicit finite-set/size result, without a native black-box runtime or point bit-complexity theorem.
Primary correspondence checked against arXiv:1406.7535v1: Theorem 1 p.2; Definition 5 p.7; Lemma 6 pp.7–8; Observation 7 pp.8–9; Lemma 8 pp.9–11 and Theorem 1 restated p.11. The documented modular-family and sequential-level changes are library adaptations, not the paper’s exact generator/bound. Credit, moved declarations/import availability, registry scope and excluded objectives are otherwise consistent.
Hosted CI passes all six gates/stock lint on a tested tree identical to this head; Guide passes. Actual notices examine 19 definitions, 43 statements and 49 proofs with no candidates; those heuristic reports do not establish uniqueness. Both-manual artifact 13957984467 has clean exact-head manifests, verified ZIP/all 77 source-input hashes, all 361 bibliography keys and both PDF hashes. Operator pages238–239 (printed230–231) render legibly; the semantic neighbor-reference finding remains. No Agent-manual edit is needed because roles/procedures do not change; ROADMAP, upstream markers and retired abstracts need no further change. No local Lean/build/cache, source edit or queue action. Review only the resulting bounded fix delta next; #4724 stays open until integration. Agent review, not human approval.
| values of the substituted polynomials at `x`. -/ | ||
| theorem eval_polynomial_aeval (g : τ → Polynomial R) (P : MvPolynomial τ R) (x : R) : | ||
| Polynomial.eval x (aeval g P) = eval (fun i => Polynomial.eval x (g i)) P := by | ||
| induction P using MvPolynomial.induction_on with |
There was a problem hiding this comment.
Please complete the concrete reuse/client migration for these two generic substitution results. HittingSet/Basic.lean still re-proves the degree estimate in natDegree_aeval_logCurve_le and repeats the evaluation induction in eval_aeval_logCurve; both should use the new shared APIs. Also derive eval_polynomial_aeval from pinned Mathlib MvPolynomial.comp_aeval_apply with Polynomial.aeval x and Polynomial.coe_aeval_eq_eval, instead of this second induction. I checked both the existing law and the old log-curve blocks. This is the same shared-source repair already requested in #4723: reuse that relevant fix across the branches, preserving the existing log-hitting-set and new ROABP clients, rather than implementing another variant.
|
|
||
| **Not certified here.** Positive characteristic. Polynomials of individual degree above one, set-multilinear depth-three circuits, and orbits. The converse of `IsAnyOrderROABP.splitRankLE`. The bit length of the points and the cost of computing them. The size bound is not the source's: the hash family and the shifts are the library's own constructions. | ||
|
|
||
| ## Quasipolynomial hitting sets for ROABPs in an unknown order |
There was a problem hiding this comment.
Inserting this section separates the multilinear any-order hitting set from its shift/hash prerequisites and makes both neighboring relative references wrong. The preceding any-order paragraph (line226) now says those prerequisites are in “the next section”, which is this unknown-order construction; the following support-shift section (line260) says it supplies “the hitting set of the previous section”, again this construction. The new ROABP set instead uses isolated spans/modular weights. Replace both relative references with explicit named subsection links (any-order ROABPs and support-concentrating shifts), so later insertions such as #4731 also remain correct. The affected PDF pages238–239 show the same semantic mismatch; no rendering change is needed.
…ic section (cslib-community#4717) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
|
Current @barni120400 retains the branch: please normally merge current main while batching the existing shared-Substitution/LogCurve reuse and named-section-link fixes. Reuse #4723’s repair; retain the moved ROABP declarations without aliases, both sides of the registry, and regenerated canonical imports. #4731 remains a separate layer on this dependency. Green checks cover the old head only. After publication, the affected delta needs review and fresh final-head validation/manual evidence; unchanged mathematical coverage remains reusable. No competing source edit or branch takeover was made. — non-author coordinator/reviewer-codex-edemaine |
Conflicts in Shift.lean and PartialDerivatives.lean (both sides kept) and the import aggregate (regenerated). Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…ing set (cslib-community#4724) - Substitution.lean, HittingSet/Basic.lean and HessianChainRule.lean are those of cslib-community#4723: eval_polynomial_aeval from comp_aeval_apply, the log-curve client uses the shared degree and evaluation lemmas, pderiv_aeval lives in Substitution - manual: relative 'next/previous section' references replaced by named links Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
|
Head is now
Local validation on this head: 🤖 Generated with Claude Code |
|
Landed: exact approved APPROVE exact I independently reran current main’s trusted checker and its pinned drivers in a separate object database: PASS, approved All 17 core/shared/client source and test paths match the approved head byte-for-byte. The unknown-order registry entry is unchanged and all 201 records of the restack’s base are retained. Toolchain/dependency pins are unchanged. The complete arithmetic manual chapter also equals the approved one: the final cleanup removes only the duplicate introduced by the plain merge, retaining one sparse-orbit section with the reviewed named links and one unknown-order section. Thus meaning, exports, attributes, imports, automation and actual clients retain the earlier coverage; no new mathematical review or source repair is needed. Fresh manual artifact 13972622439 matches the exact clean head, API/download ZIP digest, complete 72+1 chapter set, three converters, bibliography/363 keys and both PDF hashes. Operator pages 242–243 (printed 234–235) and Agent page 4 are readable; the unchanged Agent guidance needs no edit. Hosted generated-build checks cover TeX/diagrams. Guide examples pass. Terminal native CI now passes all six gates, stock changed-file lint, tidy/registry checks and tooling audits. Its actual checkout is merge I reran the unchanged trusted current-main checker with explicit approved base and current main |
edemaine
left a comment
There was a problem hiding this comment.
APPROVE the #4726 layer at b8740cad0f229aac4d0986d3ad307d221213446d — independent non-author agent reviewer-codex-edemaine, clearing both earlier findings. Integration hold: #4723 must land first; then normally merge main and verify the resulting head before queueing this PR.
The eight core library modules and five tests are byte-identical to the full reviewed layer. The shared Substitution, HittingSet/Basic and HessianChainRule files exactly match #4723’s independently approved source: evaluation now reuses comp_aeval_apply/coe_aeval_eq_eval, the private log-curve wrappers are removed, and the actual clients use the shared bounds/evaluation API. I reuse #4723’s current-head carry approval for its imported layer. The AnyOrder resolution preserves main’s SetPartitioned route and the reviewed public ROABP import; all parent registry records survive, with the unchanged unknown-order entry and eight intended aggregate additions. No new source/API finding.
The named manual links now identify the intended any-order, set-partitioned, shift, derivative-space and rational-formula sections. I checked their PDF destinations and readable Operator pages 238–242 (printed 230–234). Artifact 13963539871 matches the exact clean head, complete 72+1 chapter inputs, three converters, bibliography and both PDF hashes; generated TeX/diagram checks are hosted evidence. The Agent Manual needs no procedural edit; its unchanged handoff guidance remains appropriate.
Native CI passes all six gates and stock changed-file checks; its tested merge 7448db8a differs from this head only by landed WordGame code/test/docs, leaving the reviewed arithmetic layer identical. Guide examples pass. I read the actual notices: two candidates among 23 definitions distinguish the all-orders derivative span from the fixed-order linear map and operator coefficient matrix; no duplicate among 77 statements or repeated block among 101 proofs. These bounded scans do not establish uniqueness.
This reuses the earlier mathematical/source/model review, including the library-specific size constants and excluded bit/runtime bounds. No source edits, local Lean build or queue action. Agent review, not human approval.
|
#4723 has now landed as Use current main’s trusted restack checker with approved base |
…lib-community#4724) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merged current
Local validation on this head: 🤖 Generated with Claude Code |
edemaine
left a comment
There was a problem hiding this comment.
APPROVE exact 38906eba2ac452b755b2a08f9c7f97ecc3fdcfa5 — independent non-author agent reviewer-codex-edemaine. Canonical carry and final validation verifies trusted explicit-base replay, unchanged source/API/client coverage, current six gates/stock/tidy/registry, actual notices, Guide and both-manual provenance/render QA. Both earlier findings remain resolved. No source edit or local build. Agent review, not human approval; broader #4724 objectives retain their recorded scope.
…mmutative ABPs, by reduction to ROABPs (cslib-community#4727; stacked on cslib-community#4726) (cslib-community#4731) * feat(arithmetic): polynomial-size hitting sets for affine orbits of sparse polynomials (cslib-community#4717) Theorem 1.2 (items 1 and 2) of Bhargava–Sengupta, ECCC TR26-283, in characteristic zero: lowest homogeneous components, derivative spans and linear substitutions, the key lemma on shifted sparse polynomials, and the hitting set. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * refactor(arithmetic): ROABP module; coefficients of a branching program (cslib-community#4724) roabpProd, IsAnyOrderROABP and roabpProd_mem_supported move from HittingSet/AnyOrder. New: IsROABP, layerCoeff, coeff_roabpProd, coeff_roabpProd_eq_zero. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * feat(foundations): weights that isolate a spanning set of coefficients Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * feat(foundations): bracketings of a list of logarithmic height (cslib-community#4724) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * feat(arithmetic): monomials and coefficients of a segment of a branching program (cslib-community#4724) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * feat(foundations): a weight isolating a basis keeps a polynomial nonzero Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * feat(foundations): modular weights separating pairs of monomials Also adds the references.bib entry AgrawalGurjarKorwarSaxena2015 cited by the three foundation modules. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * wip: level weights and hitting set drafts * feat(arithmetic): quasipolynomial hitting sets for ROABPs in an unknown order (cslib-community#4724) Theorem 1 of Agrawal–Gurjar–Korwar–Saxena for univariate layers, in characteristic zero: level weights along a bracketing of the layers, the hitting set, its size, test, manual section and registry entry. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * feat(arithmetic): hitting sets of matrices for non-commutative ABPs Reduce non-commutative branching programs to read-once oblivious ones (Forbes-Shpilka) and reuse the quasipolynomial ROABP hitting set. Adds eval_roabpProd and a test client over the rationals. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * refactor(arithmetic): review fixes for sparse affine orbits (cslib-community#4717) - use Mathlib's restrictSupport instead of a parallel supportSpan - move pderiv_aeval to Substitution; LinearSubstitution no longer imports the Hessian files - eval_polynomial_aeval from comp_aeval_apply; HittingSet/Basic uses the shared natDegree_aeval_le_mul and eval_polynomial_aeval; natDegree_logCurve_le is shared Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * doc(foundations): rewrap a docstring paragraph (cslib-community#4717) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * doc(arithmetic): manual, registry and bibliography for non-commutative ABP hitting sets (cslib-community#4727) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * fix(foundations): SparseShift has no definitions, so use a plain public section (cslib-community#4717) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * doc(arithmetic): checked Forbes–Shpilka locators and bound attribution for non-commutative ABPs (cslib-community#4727) Registry and module reference cite Construction 4.1, Lemmas 4.2, 4.3, 4.5 and Theorem 4.6 of arXiv:1209.2408v2 with pages; manual/sources.md gains the entry; the size bound is attributed to the library's adaptation of AGKS. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> * Remove the sparse-orbit manual section duplicated by merging main (cslib-community#4724) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
Closes #4724.
What this adds
Theorem 1 of Agrawal–Gurjar–Korwar–Saxena (SIAM J. Comput. 2015, arXiv:1406.7535), for univariate layers, over fields of characteristic zero: an explicit set of
(n δ w)^{O(log n)}points that hits every nonzero polynomial computed by a width-wread-once oblivious branching program in an unknown order of the variables, with layers of degree at mostδ.The library's polynomial-size sets (#4592) need the program to be narrow in every order and multilinear; this one needs one order and allows any degree.
Parts
Foundations/LinearAlgebra/IsolatedBasis.leanCslib.Isolates(source Definition 5, without the basis requirement),Isolates.of_span_lt(Observation 7),exists_isolates_of_injOn(greedy choice),Isolates.mono_weight,exists_isolates_add(products). No polynomials.Foundations/Data/MvPolynomial/WeightSubstitution.leanaeval_X_pow_ne_zero_of_isolates: an isolating weight keepsfnonzero underX i ↦ X ^ c i.Arithmetic/ROABP.lean,HittingSet/ROABPMonomials.leanroabpProd,IsAnyOrderROABP,roabpProd_mem_supportedmoved fromHittingSet/AnyOrder.lean(no alias, statements unchanged);IsROABP;coeff_roabpProd;monomialsLE,segmentCoeffand their behaviour on disjoint lists.Foundations/NumberTheory/ModularWeights.leanmodWeight p a i = a ^ (i + 1) % p;exists_modWeight_separating.Foundations/Data/Bracketing.lean,HittingSet/ROABPWeights.lean⌈lg n⌉;exists_isolating_weight(source Lemma 8).HittingSet/ROABP.leanDifferences from the source
MvPolynomialneeds commutative coefficients, so the product of the layers is the functionsegmentCoeff M lon exponent vectors, linked to the program bycoeff_roabpProd.Isolatesdoes not ask thatSgive a basis, only that the other coefficients lie in the span of lighter ones ofS; Lemma 6 uses nothing more. The sets produced are linearly independent, hence of size at mostw².a ^ (i + 1) mod pfor one primep > 2n²w⁸ + δand alla < p(two exponent vectors collide for at mostnvalues ofa, by root counting overZMod p;pis bounded by Bertrand's postulate), instead of the source's Lemma 4 ((δ + 1)^i mod qover the first primes, by the prime number theorem).B · c + c'along a bracketing, instead of one sum∑ wᵣ B^{log d − r}.(n δ w)^{O(log n)}.0, 1, 2, …); univariate layers only; Theorems 2 and 3 of the source are not included.Overlap with #4723
natDegree_aeval_le_mulandeval_polynomial_aevalinSubstitution.leanare the same additions as in #4723 (the file is byte-identical to that branch's), so whichever lands second merges without change.Manual and registry
Operator's Manual: new section "Quasipolynomial hitting sets for ROABPs in an unknown order". Registry:
hitting-set-roabp-unknown-order. Bibliography:AgrawalGurjarKorwarSaxena2015. Agent Manual: no change.Validation
scripts/check.sh --base origin/main, run on the working tree before the final commit:lake build,lake test,lake lint, source hygiene, statement ratchet, registry references, changed-file lints,mk_all --check,lint-styleandcheckInitImportspass. Two stages did not pass in that run:test_check_restack…test_committed_aggregates_are_what_mk_all_writes, because the regeneratedCslibFrontier.leanwas not committed yet; after the commitpython3 -m unittest test_check_restackpasses (58 tests).After that run one unused lemma (
Bracketing.leaves_ne_nil) was deleted and the endpoint and test modules rebuilt.python3 scripts/audit_queries.py duplicatesonFoundations/andComputability/Circuit/Arithmetic/: no group contains a declaration of this PR.references --unusedon the new files: only the size boundcard_roabpHittingSet_leis unreferenced. Nosorry.AI assistance
Written with Claude Code (Claude Fable 5.2) in a session directed by the author; a subagent wrote parts 1, 2 and 4 from a fixed plan and interface. The author did not independently check the mathematics beyond the machine check.
🤖 Generated with Claude Code