Scaling an integer polynomial by one is a no-op.
The full normalized reassembly: combining the array-product layout from
polyProduct_reassemblePolynomialFactors with the signed content reconstruction
recovers the original polynomial exactly. Handles f = 0 separately because
signedContentScalar 0 = 0 collapses the scalar prefix.
A subset split extends to the corresponding split after adjoining a required head.
Constructor for subsetSplits membership on a cons list, head selected:
prepending factor to the selected side preserves enumerability.
Constructor for subsetSplits membership on a cons list, head unselected:
prepending factor to the rest side preserves enumerability.
Existence companion to firstSome_some: if f x = some y for some x ∈ xs,
then firstSome xs f is itself some _. Used to chain executable completeness
arguments: showing the search at the current step can succeed reduces to
exhibiting a single subset whose candidate works.
A successful exhaustive recombination search preserves the target product.
Base case for the exhaustive recombination search: when the running target
has already been reduced to 1, the search terminates and returns the empty
factor list.
Executable completeness of recombinationSearchModAux: if a single
exhaustive-search step can pick the candidate produced by centred-lifting
selected (a subset of localFactors whose order-preserving partition has
rest as complement), and the recursive search on the residual (quotient, rest) succeeds with the supplied fuel, then the search at the current step
also succeeds.
This is the Mathlib-free step lemma underpinning Group A coverage proofs: it
exposes that any subset of the lifted local factors with a working candidate
is enumerated by subsetSplitsWithFirst, and that the search descends through
that candidate to the residual problem.
Companion to recombinationSearchModAux_isSome_of_step at the
recombinationSearchMod surface. Hides the fuel parameter, requiring the
caller to supply the recursive isSome witness already specialised to fuel
localFactors.length. Useful for downstream callers that want to chain
step lemmas with a fixed shared fuel budget.
Exact-output version of recombinationSearchModAux_isSome_of_step.
The earlier completeness lemma is intentionally weak: it only proves that the
search succeeds when a particular split would work. This theorem is the
concrete-output companion used by coverage proofs: if that split is positioned
after a prefix whose recombination attempts all fail, then the executable
firstSome traversal returns the candidate from this split as the head of the
resulting factor list.
Surface exact-output companion for recombinationSearchMod.
This hides the fuel parameter in the same way as
recombinationSearchMod_isSome_of_step, while retaining the returned factor
list when the selected split is the first successful split.
When recombinationSearchMod succeeds on the lifted-factor list, the
recombineExhaustive wrapper returns exactly the array of recovered factors.
This is the equality lemma that lets downstream irreducibility proofs replace a
recombineExhaustive term with a concrete factor list once the search is
known to succeed.
A successful fixed-precision BHKS fast-recombination loop preserves the
polynomial product: every success branch comes from the classified BHKS
recovery success case, which already certifies Array.polyProduct = core.
Proof-facing recovery-data extractor for the fast-recombination loop, stated
without reference to the private bhksRecoverClassified. A successful
bhksRecoveryCoreWithBound call is witnessed by a concrete precision-schedule index
k': at the toMonicLiftData for that precision there is a positive-dimension
witness hrows whose equivalence-class indicator candidates reconstruct exactly
to coreFactors, the indicator partition is non-degenerate, and the candidates
multiply back to core. This is the correspondence-side entry point used to rebuild the
forward-recovery package (and hence the selected support/subset witnesses) that
the per-factor success lemmas discard.
Successful lattice recovery returns factors with normalized signs.
Successful lattice recovery returns only nonconstant polynomial factors.
Every factor returned by successful lattice recovery has positive degree.
Every factor emitted by the BHKS fast-recombination loop divides the
input polynomial. The success branch is the only branch that exits with
some coreFactors, and bhksRecoverClassified_success_dvd certifies
divisibility for each candidate at that exit.
A primitive, sign-normalized ZPoly that passes shouldRecordPolynomialFactor
has positive degree?. A size-1 such polynomial combines Primitive q
(forcing |q.coeff 0| = 1) with normalizeFactorSign q = q (forcing
0 ≤ q.coeff 0) to conclude q = 1, which shouldRecord excludes.