Rebuilding a raw dense polynomial from its flattened coordinate arrays is
the identity: Factor.polyCoords is a section of Factor.rawPoly.
The executable top-generator shift is composition with the affine
polynomial X - c * α over the extended coefficient field.
Shifted coordinate arrays are already canonical: rebuilding and
re-flattening a Factor.shiftTop output returns it unchanged.
Rebuilding an embedLower output reads its coefficients through the
canonical coordinate injection into the extended tower.
Zero-padding lower-tower coordinate data into the extended tower agrees
with the bundled lower-coefficient embedding Norm.lowerHom.
Lifting a lower-tower polynomial by embedLower is, semantically,
coefficientwise mapping through Norm.lowerHom.
The two-coefficient array #[-delta, 1] interprets to the affine
polynomial X - C delta.
Semantic polynomial translation performed by the executable top-level shift.
Negating the integer shift negates the shift delta c * α, so opposite
shifts translate by opposite amounts.
Shifting by the top generator preserves irreducibility: translation by a fixed element is a ring automorphism of the polynomial ring.
The canonical coordinate representative of rational zero is the coefficient-field zero.
The zero shift is the identity on rebuilt polynomials.
The zero shift leaves the represented polynomial unchanged.
The lower-field polynomial produced by one unshifted Trager elimination.
Equations
- Hex.NumberTower.tragerNorm level lower f = Hex.NumberTower.Factor.rawPoly lower (Hex.NumberTower.Norm.oneLevel level lower (Hex.NumberTower.Factor.polyCoords f) 0)
Instances For
Norming after an executable shift agrees with the shifted one-level
resultant Norm.oneLevel … c, identifying the two routes to the shifted
Trager norm.
The one-level Trager norm is multiplicative.
The norm of a polynomial lifted from the lower tower is its
level.degree-th power: every conjugate of the top generator contributes the
same factor.
The one-level Trager norm preserves divisibility of interpreted polynomials.
The Trager norm of a nonconstant polynomial is nonconstant: a unit norm would force the input itself to be a unit.
Monic normalisation only rescales by a unit: the interpretation of
Norm.monic f is associated to the interpretation of f.
Monic normalisation preserves the degree, including at zero.
The monic normalisation of a nonzero executable polynomial interprets to a monic polynomial.
Monic normalisation fixes polynomials that already interpret to monic polynomials.
Core counting argument for gcd recovery: a product of two nonunits cannot simultaneously divide a squarefree polynomial and a power of one irreducible, since both its irreducible factors would collapse onto that irreducible and square it inside the squarefree divisor.
Irreducibility of one recovered gcd: when the Trager norm of P is
squarefree and q is an irreducible lower factor, any nonconstant monic gcd
of P with the lift of q is irreducible, because its norm divides both the
squarefree norm of P and the prime power q ^ level.degree.
Irreducibility survives un-shifting and renormalising: the recovered factor produced from one accepted lower factor interprets to an irreducible polynomial over the extended tower.
Any shift accepted by the bounded search passes the executable squarefreeness check on its one-level norm.
The norm returned by the bounded search is the one-level resultant at the returned shift.
A successful Norm.findSquarefreeShift returns a norm passing the
executable squarefreeness check.
A successful Norm.findSquarefreeShift returns the one-level resultant
at the returned shift.
A squarefree one-level norm of a nonconstant input is itself nonconstant, so the recursion below the top level receives a genuine factorization problem.
The executable squarefreeness certificate is semantically sound: a
polynomial passing Norm.isSquarefree interprets to a squarefree polynomial
over the tower coefficient field.
Membership inversion for a filtered push fold: an element of the result is either in the initial accumulator or the image of a passing input.
A filtered push fold materialises as the initial accumulator followed by
a filterMap over the inputs.
Dropping unit contributions preserves the product up to a unit: if passing items have associated images and failing items map to units, the filtered product is associated to the full product.
Taylor translation distributes over a list product.
Squarefreeness transfers along field embeddings in characteristic zero, via separability.
Monic recovery division preserves the exact unnormalised gcd.
Membership inversion for Factor.recover: every recovered factor arises
from some lower factor whose lifted gcd with the shifted component is
nonconstant, by un-shifting and renormalising that gcd.
Every factor produced by Factor.recover from canonical irreducible
lower factors is canonical and interprets to an irreducible polynomial over
the extended tower.
Wrapping rational coefficients as singleton coordinate arrays and reading them back is the identity.
Over the empty tower, ofRatPoly outputs canonical coordinate arrays:
rebuilding and re-flattening them is the identity for nonzero inputs.
Rescaling a nonzero rational polynomial by the inverse of its leading coefficient interprets to a monic polynomial.
Rescaling by the inverse leading coefficient changes the interpretation only by a unit.
The monic rational polynomial obtained from an integer factor by reading it rationally and dividing by its leading coefficient.
Equations
Instances For
The product of monically rescaled integer factors is monic and associated to the product of their plain rational readings.
The executable integer factor power reads rationally as the polynomial power.
Rational reading of integer polynomials is multiplicative.
The executable fold multiplying labelled integer factor powers reads rationally as the initial value times the multiplicity-expanded product of the factors.
A Hex.Factorization reads rationally as its scalar times the
multiplicity-expanded product of its factors.
Monically rescaling the multiplicity-expanded Berlekamp-Zassenhaus factors of a nonzero integer polynomial yields a monic product associated to its rational reading.
Each Berlekamp-Zassenhaus factor stays irreducible after monic rational
rescaling: primitivity transfers integer irreducibility to ℚ by Gauss's
lemma, and rescaling is associated.
The empty-tower coordinate encoding of a monically rescaled Berlekamp-Zassenhaus factor interprets to an irreducible polynomial.
Every multiplicity-expanded, monically rescaled Berlekamp-Zassenhaus factor is a canonical coordinate array interpreting to an irreducible polynomial over the empty tower.
Base-case soundness of the rational factorizer: every factor returned by
Factor.factorRat? is canonical and interprets to an irreducible
polynomial.