21.1.4. Integral proof and coefficient embeddings🔗
Brown--Traub exactness is proved directly in the input coefficient ring. The
recursive invariant keeps every leading-coefficient and Brown-scale factor
cross-multiplied, then cancels only factors already proved nonzero. This gives
the scalar and coefficientwise reconstruction equations required by the Brown
recurrence without changing coefficient types.
The Mathlib-free fraction field remains available as general proof
infrastructure. Its embedding is injective, commutes with ordered
pseudo-division, and supports pulling exact quotients back to the coefficient
ring, but the Brown recurrence does not depend on that detour.
🔗def
Embed a coefficient as a fraction with denominator one.
🔗theorem
The coefficient embedding is injective.
🔗def
Embed every coefficient of a dense polynomial into the fraction field.
🔗theorem
Pull an exact scalar quotient back through the coefficient embedding.
The hypothesis that the fraction quotient lies in the image is the
integrality fact supplied by generalized subresultants.
🔗theorem
A Brown scalar quotient in the embedding image satisfies the exact scale
recurrence used by BrownLaw.
🔗theorem
Pseudo-division commutes with the fraction-field embedding on an ordered
nonzero input pair.
🔗theorem
Pull coefficientwise exact scalar division back from the fraction field.
The image hypothesis is the integrality certificate later supplied by a
generalized subresultant minor.
🔗theorem
Coefficientwise integrality in the fraction field proves that executable
scalar division reconstructs the original polynomial.
The generalized subresultants are coefficient-indexed scalar determinants
local to HexResultant; they do not introduce a dependency on the matrix
libraries. Their explicit-degree core makes preservation under the fraction
embedding type-stable. The Brown--Traub identities identify the later scalar
and polynomial quotients with these mapped subresultants, whose coefficients
then have base-ring image witnesses.
🔗def
One scalar coefficient minor of the J-th generalized subresultant.
🔗def
Generalized Sylvester subresultant, assembled coefficientwise from scalar
minors. Its degree is at most J.
🔗theorem
The coefficient construction stores no terms above subresultant index
J.
The local Laplace determinant supplies column multilinearity, arbitrary
alternation and column updates, and the parity law for adjacent-transposition
sequences without importing hex-matrix or hex-determinant. In particular,
scaling either input polynomial scales the generalized subresultant by one
scalar for each column in that input's Sylvester block. A consecutive-block
rotation then exchanges those blocks, contributing one sign for every crossed
pair of columns and yielding the generalized-subresultant input-swap law.
The column-operation form of Brown--Traub equation (18) is the next
transformation. Starting from the swapped G, F matrix, the specialized unit
upper-triangular update adds multiplier-weighted G columns into the later
F columns. When H = F + B * G and the formal degrees satisfy
deg F = deg B + deg G, the coefficient convolution replaces every F
column by the matching H column. The target is the ordinary generalized
Sylvester matrix for G, H, with F's formal degree retained explicitly even
when H drops in degree. The determinant is unchanged by these additions, so
the only factor is the block-swap sign.
Collapsing the retained formal degree then exposes one sparse first row per
removed degree. Each expansion contributes lc(G), while the final edge
subresultant is lc(H)^(deg G - deg H - 1) H. Together these identities give the full
Brown--Traub factorization, and a nonzero factor can be divided out
coefficientwise by the executable exact-division operation.
🔗theoremHex.SubresultantMinor.det_setCol_add.{u} {R : Type u}
[Lean.Grind.CommRing R] {n : ℕ} (M : Hex.SubresultantMinor.Square R n)
(dst : Fin n) (v w : Fin n → R) :
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.setCol M dst fun i => v i + w i) =
Hex.SubresultantMinor.det (Hex.SubresultantMinor.setCol M dst v) +
Hex.SubresultantMinor.det (Hex.SubresultantMinor.setCol M dst w) Hex.SubresultantMinor.det_setCol_add.{u}
{R : Type u} [Lean.Grind.CommRing R]
{n : ℕ}
(M : Hex.SubresultantMinor.Square R n)
(dst : Fin n) (v w : Fin n → R) :
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.setCol M dst
fun i => v i + w i) =
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.setCol M
dst v) +
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.setCol M
dst w)
The local Laplace determinant is additive in any replaced column.
🔗theoremHex.SubresultantMinor.det_swapAdjacent.{u} {R : Type u}
[Lean.Grind.CommRing R] {n : ℕ}
(M : Hex.SubresultantMinor.Square R (n + 1)) (left : Fin n) :
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.swapAdjacent M left) =
0 - Hex.SubresultantMinor.det M Hex.SubresultantMinor.det_swapAdjacent.{u}
{R : Type u} [Lean.Grind.CommRing R]
{n : ℕ}
(M :
Hex.SubresultantMinor.Square R
(n + 1))
(left : Fin n) :
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.swapAdjacent
M left) =
0 - Hex.SubresultantMinor.det M
Swapping two adjacent columns negates the local determinant.
🔗theoremHex.SubresultantMinor.det_applySwaps.{u} {R : Type u}
[Lean.Grind.CommRing R] {n : ℕ}
(M : Hex.SubresultantMinor.Square R (n + 1)) (swaps : List (Fin n)) :
Hex.SubresultantMinor.det (Hex.SubresultantMinor.applySwaps M swaps) =
Hex.SubresultantMinor.sign swaps.length *
Hex.SubresultantMinor.det M Hex.SubresultantMinor.det_applySwaps.{u}
{R : Type u} [Lean.Grind.CommRing R]
{n : ℕ}
(M :
Hex.SubresultantMinor.Square R
(n + 1))
(swaps : List (Fin n)) :
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.applySwaps M
swaps) =
Hex.SubresultantMinor.sign
swaps.length *
Hex.SubresultantMinor.det M
A sequence of adjacent column transpositions multiplies the local
determinant by its parity sign.
🔗def
Rotate consecutive blocks of lengths left and right beginning at
start, changing [A, B] to [B, A].
🔗theorem
Rotating consecutive blocks contributes one adjacent swap for each pair
of columns drawn from opposite blocks.
🔗theorem
The local determinant vanishes when any two distinct columns agree.
🔗theoremHex.SubresultantMinor.det_addCol.{u} {R : Type u}
[Lean.Grind.CommRing R] {n : ℕ} (M : Hex.SubresultantMinor.Square R n)
(src dst : Fin n) (c : R) (h : src ≠ dst) :
Hex.SubresultantMinor.det (Hex.SubresultantMinor.addCol M src dst c) =
Hex.SubresultantMinor.det M Hex.SubresultantMinor.det_addCol.{u}
{R : Type u} [Lean.Grind.CommRing R]
{n : ℕ}
(M : Hex.SubresultantMinor.Square R n)
(src dst : Fin n) (c : R)
(h : src ≠ dst) :
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.addCol M src
dst c) =
Hex.SubresultantMinor.det M
Adding a scalar multiple of one column to a distinct column preserves the
local determinant.
🔗theoremHex.SubresultantMinor.det_scaleRange.{u} {R : Type u}
[Lean.Grind.CommRing R] {n : ℕ} (M : Hex.SubresultantMinor.Square R n)
(start count : ℕ) (c : R) (hbound : start + count ≤ n) :
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.scaleRange M start count c) =
c ^ count * Hex.SubresultantMinor.det M Hex.SubresultantMinor.det_scaleRange.{u}
{R : Type u} [Lean.Grind.CommRing R]
{n : ℕ}
(M : Hex.SubresultantMinor.Square R n)
(start count : ℕ) (c : R)
(hbound : start + count ≤ n) :
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.scaleRange M
start count c) =
c ^ count *
Hex.SubresultantMinor.det M
Scaling count consecutive columns scales the determinant by
c ^ count.
🔗theoremHex.SubresultantMinor.det_firstRow.{u} {R : Type u}
[Lean.Grind.CommRing R] {n : ℕ}
(M : Hex.SubresultantMinor.Square R (n + 1))
(hzero : ∀ (j : Fin (n + 1)), 0 < ↑j → M ⟨0, ⋯⟩ j = 0) :
Hex.SubresultantMinor.det M =
M ⟨0, ⋯⟩ ⟨0, ⋯⟩ *
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.deleteFirst M ⟨0, ⋯⟩) Hex.SubresultantMinor.det_firstRow.{u}
{R : Type u} [Lean.Grind.CommRing R]
{n : ℕ}
(M :
Hex.SubresultantMinor.Square R
(n + 1))
(hzero :
∀ (j : Fin (n + 1)),
0 < ↑j → M ⟨0, ⋯⟩ j = 0) :
Hex.SubresultantMinor.det M =
M ⟨0, ⋯⟩ ⟨0, ⋯⟩ *
Hex.SubresultantMinor.det
(Hex.SubresultantMinor.deleteFirst
M ⟨0, ⋯⟩)
If the first row is supported only in its first column, the local
determinant expands to that entry times the remaining first minor.
🔗theorem
Generalized subresultants are homogeneous in the left polynomial.
🔗theorem
Generalized subresultants are homogeneous in the right polynomial.
🔗theorem
Generalized Sylvester subresultants obey the standard input-swap sign
law.
🔗theorem
The full integer-indexed coefficient fold is the corresponding product
coefficient.
🔗theoremHex.DensePoly.Subresultant.productCols_addMul.{u} {R : Type u}
[Lean.Grind.CommRing R] [DecidableEq R] (df dg db J l : ℕ)
(f g b h : Hex.DensePoly R) (hJ : J < dg) (hdeg : df = db + dg)
(hb : b.size ≤ db + 1) (hh : h = f + b * g) :
Hex.SubresultantMinor.productCols
(Hex.DensePoly.Subresultant.coeffMatrixAt dg df J l g f) (df - J)
db b (dg - J) ⋯ ⋯ =
Hex.DensePoly.Subresultant.coeffMatrixAt dg df J l g h Hex.DensePoly.Subresultant.productCols_addMul.{u}
{R : Type u} [Lean.Grind.CommRing R]
[DecidableEq R] (df dg db J l : ℕ)
(f g b h : Hex.DensePoly R)
(hJ : J < dg) (hdeg : df = db + dg)
(hb : b.size ≤ db + 1)
(hh : h = f + b * g) :
Hex.SubresultantMinor.productCols
(Hex.DensePoly.Subresultant.coeffMatrixAt
dg df J l g f)
(df - J) db b (dg - J) ⋯ ⋯ =
Hex.DensePoly.Subresultant.coeffMatrixAt
dg df J l g h
Brown's unit upper-triangular column transformation turns the swapped
generalized Sylvester matrix for G, F into the coefficient matrix with blocks
G, H, where H = F + B * G.
🔗theoremHex.DensePoly.Subresultant.det_addMul.{u} {R : Type u}
[Lean.Grind.CommRing R] [DecidableEq R] (df dg db J l : ℕ)
(f g b h : Hex.DensePoly R) (hJ : J < dg) (hdeg : df = db + dg)
(hb : b.size ≤ db + 1) (hh : h = f + b * g) :
Hex.SubresultantMinor.det
(Hex.DensePoly.Subresultant.coeffMatrixAt dg df J l g h) =
Hex.SubresultantMinor.det
(Hex.DensePoly.Subresultant.coeffMatrixAt dg df J l g f) Hex.DensePoly.Subresultant.det_addMul.{u}
{R : Type u} [Lean.Grind.CommRing R]
[DecidableEq R] (df dg db J l : ℕ)
(f g b h : Hex.DensePoly R)
(hJ : J < dg) (hdeg : df = db + dg)
(hb : b.size ≤ db + 1)
(hh : h = f + b * g) :
Hex.SubresultantMinor.det
(Hex.DensePoly.Subresultant.coeffMatrixAt
dg df J l g h) =
Hex.SubresultantMinor.det
(Hex.DensePoly.Subresultant.coeffMatrixAt
dg df J l g f)
The Brown column transformation preserves the determinant of the swapped
generalized Sylvester matrix.
🔗theoremHex.DensePoly.Subresultant.coeffMinorAt_addMul.{u} {R : Type u}
[Lean.Grind.CommRing R] [DecidableEq R] (df dg db J l : ℕ)
(f g b h : Hex.DensePoly R) (hJ : J < dg) (hdeg : df = db + dg)
(hb : b.size ≤ db + 1) (hh : h = f + b * g) :
Hex.DensePoly.Subresultant.coeffMinorAt df dg J l f g =
Hex.SubresultantMinor.sign ((df - J) * (dg - J)) *
Hex.DensePoly.Subresultant.coeffMinorAt dg df J l g h Hex.DensePoly.Subresultant.coeffMinorAt_addMul.{u}
{R : Type u} [Lean.Grind.CommRing R]
[DecidableEq R] (df dg db J l : ℕ)
(f g b h : Hex.DensePoly R)
(hJ : J < dg) (hdeg : df = db + dg)
(hb : b.size ≤ db + 1)
(hh : h = f + b * g) :
Hex.DensePoly.Subresultant.coeffMinorAt
df dg J l f g =
Hex.SubresultantMinor.sign
((df - J) * (dg - J)) *
Hex.DensePoly.Subresultant.coeffMinorAt
dg df J l g h
The column-operation form of Brown--Traub equation (18): after swapping the
input blocks, a unit upper-triangular transformation replaces F by
H = F + B * G and leaves only the usual block-swap sign.
🔗theorem
Raising the retained formal degree of the right input by one contributes
one leading coefficient of the left input, provided the right polynomial has
no coefficient at the new degree. This is used in the opposite direction to
collapse an artificially retained formal degree.
🔗theorem
Raising the retained formal degree of the right input repeatedly
contributes the corresponding power of the left leading coefficient. Reading
the equality right-to-left collapses all retained degrees at once.
🔗theorem
The subresultant at the right input's degree is that input multiplied by
the expected power of its leading coefficient.
🔗theoremHex.DensePoly.Subresultant.coeffMinorAt_brownTraub.{u} {R : Type u}
[Lean.Grind.CommRing R] [DecidableEq R] (df dg db dh J l : ℕ)
(f g b h : Hex.DensePoly R) (hJh : J ≤ dh) (hdh : dh < dg)
(hdeg : df = db + dg) (hg : g.size = dg + 1) (hb : b.size ≤ db + 1)
(hhsize : h.size ≤ dh + 1) (hh : h = f + b * g) :
Hex.DensePoly.Subresultant.coeffMinorAt df dg J l f g =
Hex.SubresultantMinor.sign ((df - J) * (dg - J)) *
(g.leadingCoeff ^ (df - dh) *
Hex.DensePoly.Subresultant.coeffMinorAt dg dh J l g h) Hex.DensePoly.Subresultant.coeffMinorAt_brownTraub.{u}
{R : Type u} [Lean.Grind.CommRing R]
[DecidableEq R] (df dg db dh J l : ℕ)
(f g b h : Hex.DensePoly R)
(hJh : J ≤ dh) (hdh : dh < dg)
(hdeg : df = db + dg)
(hg : g.size = dg + 1)
(hb : b.size ≤ db + 1)
(hhsize : h.size ≤ dh + 1)
(hh : h = f + b * g) :
Hex.DensePoly.Subresultant.coeffMinorAt
df dg J l f g =
Hex.SubresultantMinor.sign
((df - J) * (dg - J)) *
(g.leadingCoeff ^ (df - dh) *
Hex.DensePoly.Subresultant.coeffMinorAt
dg dh J l g h)
Brown--Traub equation (12): if H = F + B * G, then the generalized
Sylvester coefficient minor for F, G is the G, H minor at any formal degree
bounding H, times the block-swap sign and one lc(G) for every collapsed
formal degree.
🔗theorem
The generalized subresultant at the right input's degree is a scalar
multiple of that input.
🔗theorem
Polynomial form of the Brown--Traub transformation at or below the degree
of H.
🔗theorem
Endpoint form of Brown--Traub equation (12), including both leading
coefficient powers.
🔗theorem
The endpoint factorization makes its scalar quotient coefficientwise
exact in every lawful exact-division domain.
The pseudo-remainder specialization covers defective degree drops as well as
regular steps. It identifies the subresultant immediately below the divisor
degree, transports every lower subresultant across the step, and feeds the
cross-multiplied family invariant used by the recursive proof.
🔗theorem
The subresultant immediately below the divisor degree is the signed
pseudo-remainder. This includes defective remainders: no exact degree is
assumed for the remainder.
🔗theorem
Transport a generalized subresultant family across one scaled
pseudo-remainder step. The identity stays cross-multiplied, so every scalar
remains in the base ring even across defective degree drops.
🔗def
The exactness and nonzero obligations for every reachable Brown worker
state. A valid state must terminate naturally before its fuel reaches zero;
the adjacent polynomials have strictly decreasing size, the current and
successor scales are nonzero, both scalar divisions reconstruct their
numerators, the Brown divisor and quotient are nonzero, and the successor is
valid.
🔗theorem
Ordered nonzero inputs establish every nonzero-denominator and exactness
obligation recorded by BrownLaw, including the unreachability of the junk
zero-quotient branch.
🔗theorem
Generalized Sylvester subresultants commute with the polynomial
coefficient embedding. In particular, every coefficient of the fraction
construction has an explicit base-ring image witness.
🔗theorem
Coefficients of mapped generalized subresultants lie in the coefficient
embedding image.
21.1.7. Companion contracts🔗
These declarations describe the executable results in Mathlib terms. The
central contract identifies the executable scalar with Mathlib's
determinant-defined resultant:
🔗theorem
The executable and Mathlib resultants agree under dense-polynomial
correspondence, with the executable default formal degrees made explicit.
The executable discriminant has the same total zero/constant convention as
Mathlib's determinant-defined discriminant:
🔗theorem
The executable and Mathlib discriminants agree under dense-polynomial
correspondence.
For positive-degree polynomials in characteristic zero, discriminants multiply
with the square of the cross-resultant. The degree hypotheses exclude the
nonunit-constant counterexample created by the total constant convention. Over
a characteristic-zero field, nonvanishing is therefore the expected
separability criterion:
🔗theorem
Discriminants multiply with the square of the cross-resultant.
The positive-degree hypotheses are essential: Mathlib and the executable API
assign discriminant one to constants, while multiplying by a nonunit constant
scales the other discriminant.
🔗theorem
A positive-degree polynomial over a characteristic-zero field has
nonzero executable discriminant exactly when it is separable.
The specialization contract retains the original formal degrees, so degree
drops after substituting a parameter do not silently change the resultant
convention:
🔗theorem
Specializing the coefficient variable after elimination agrees with the
formal-degree Mathlib resultant of the specialized inputs.
Mathlib's resultant has the following proved root-product formula. Together
with the executable correspondence, this identity underlies one-level field
norms and the Trager collision bound:
🔗theorem
The resultant as the leading-coefficient power times evaluation over all
roots of the first polynomial, counted with multiplicity.