Skip to content

Compute the charpoly of compounds of triangular matrices - #409

Closed
PerAlexandersson wants to merge 2 commits into
proof/compound-matrixfrom
proof/compound-eigenvalues
Closed

Compute the charpoly of compounds of triangular matrices#409
PerAlexandersson wants to merge 2 commits into
proof/compound-matrixfrom
proof/compound-eigenvalues

Conversation

@PerAlexandersson

Copy link
Copy Markdown
Owner

The triangular half of #405 item 3, stacked on #408.

  • BlockTriangular.det_of_injective / charpoly_of_injective: a block
    triangular matrix with an injective block map has determinant and charpoly
    given by its diagonal — Matrix.det_of_upperTriangular without a linear
    order on the index type (upstreamable to Mathlib.LinearAlgebra.Matrix.Block
    / Charpoly.Basic);
  • compound_apply_eq_zero_of_blockTriangular: minors of an upper triangular
    matrix vanish unless the row selection is pointwise dominated by the column
    selection (permutation expansion + pigeonhole);
  • powersetCode: binary encoding of a selection; injective via Mathlib's colex
    Finset.geomSum_injective, monotone for pointwise domination;
  • charpoly_compound_of_blockTriangular:
    (compound q T).charpoly = ∏_s (X - C (∏_{i ∈ s} T i i)) for triangular T;
  • compound_one, charpoly_compound_conj: conjugation invariance of the
    compound charpoly, by multiplicativity.

With these, #405 item 3 reduces to matrix-level triangularization over an
algebraically closed field (conjugate any A to an upper triangular matrix),
which Mathlib currently lacks — that is the remaining piece, planned as a
separate RealRooted/Mathlib/ file.

Sorry-free.

🤖 Generated with Claude Code

PerAlexanderssonand others added 2 commits August 21, 2026 16:20
The triangular half of the compound eigenvalue theorem (issue #405 item 3):
- `BlockTriangular.det_of_injective`, `BlockTriangular.charpoly_of_injective`:
a block triangular matrix with an injective block map has determinant and
characteristic polynomial given by its diagonal (generalizes
`Matrix.det_of_upperTriangular` to indices without a linear order);
- `compound_apply_eq_zero_of_blockTriangular`: minors of an upper triangular
matrix vanish unless the row selection is pointwise dominated by the column
selection (permutation expansion plus a pigeonhole step);
- `powersetCode`: the binary encoding of a selection, injective via Mathlib's
colex `Finset.geomSum_injective`, monotone for pointwise domination;
- `blockTriangular_compound`, `compound_apply_self_of_blockTriangular`,
`charpoly_compound_of_blockTriangular`: the compound of a triangular matrix
is triangular for the binary encoding, with diagonal the selected products,
so its charpoly is `∏_s (X - C ∏_{i ∈ s} T i i)`;
- `compound_one`, `charpoly_compound_conj`: the compound charpoly is invariant
under conjugation, by multiplicativity.
What remains for the full eigenvalue statement is matrix-level
triangularization over an algebraically closed field, which Mathlib lacks.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@PerAlexandersson

Copy link
Copy Markdown
OwnerAuthor

The entire content of this PR landed on main via #414 (whose branch contains this one; verified git merge-base --is-ancestor). Closing as merged-via-#414.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@PerAlexandersson