Corner ranks determine the lower–lower Bruhat permutation
ProvedIntMul.OpenAI.bruhat_rank_profileLet be a field and let be an matrix, where are lower triangular with nonzero diagonal and is a partial permutation matrix ( entries, at most one in each row and column). Then for all indices ,
where is the submatrix of rows and columns .
So the partial permutation of a lower–lower Bruhat factorization (which exists by IntMul.OpenAI.lower_triangular_factorization) is determined by alone, through these northeast-corner ranks. The batched-recursion arguments for the -saving networks, such as the partial-swap batching lemma, the flag basis and the reversed-run (opposite bank order) compile of Jain's rounds, read off the recursive interchange calls of an edge from this Bruhat profile: a pivot is one interchange of the fields , and an order-preserving run of pivots is one batched call.
Formalization Note Rows and columns are indexed by the subtypes {r // r ≤ i} and {c // j ≤ c} of Fin m.
import Mathlib open Matrix Finset
namespace IntMul.OpenAI
theorem bruhat_rank_profile {m : ℕ} {K : Type*} [Field K] [DecidableEq K]
(E₁ P E₂ : Matrix (Fin m) (Fin m) K)
(hE₁ : ∀ i j, i < j → E₁ i j = 0) (hd₁ : ∀ i, E₁ i i ≠ 0)
(hE₂ : ∀ i j, i < j → E₂ i j = 0) (hd₂ : ∀ i, E₂ i i ≠ 0)
(h01 : ∀ i j, P i j = 0 ∨ P i j = 1)
(hrow : ∀ i j j', P i j = 1 → P i j' = 1 → j = j')
(hcol : ∀ i i' j, P i j = 1 → P i' j = 1 → i = i') (i j : Fin m) :
((E₁ * P * E₂).submatrix (fun r : {r : Fin m // r ≤ i} => r.1)
(fun c : {c : Fin m // j ≤ c} => c.1)).rank =
(univ.filter fun x : Fin m × Fin m => x.1 ≤ i ∧ j ≤ x.2 ∧ P x.1 x.2 = 1).card := by sorry
end IntMul.OpenAI