From 3139630129a863c59e10a761819da14824c17d9c Mon Sep 17 00:00:00 2001 From: Per Alexandersson Date: Mon, 3 Aug 2026 23:47:03 +0000 Subject: [PATCH 1/9] fix Braun-Jal source step matrix --- .../MatrixInduction.lean | 56 +++++++++++++------ .../Narayana/Claim7.lean | 26 +++++---- 2 files changed, 52 insertions(+), 30 deletions(-) diff --git a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean index e24a389c..60043d68 100644 --- a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean +++ b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean @@ -4,10 +4,10 @@ import RealRooted.MatrixInterlacing /-! # Braun-Jal matrix-induction step -This module isolates the local two-row matrix step used in Braun-Jal's proof -of Theorem 4.1. The theorem statements stay close to the paper recurrence: -the matrix with rows `[P_{m-1}, G_{m-1}]` and `[P_m, G_m]` acts on the -induction pair `[f, X * g]`. +This module isolates the local two-row matrix step used in Braun--Jal's proof +of Theorem 4.1 (arXiv:2607.00922v1, p. 10). The source matrix has rows +`[P_{m-1}, G_{m-1}]` and `[Q_m, H_m]`, where `Q_m = P_m - P_{m-1}` and +`H_m = G_m - G_{m-1}`, and acts on the induction pair `[f, X * g]`. -/ open Polynomial @@ -19,7 +19,8 @@ namespace GeneralizedSnakePosets /-- The two-row matrix for one Braun-Jal Theorem 4.1 induction step. -/ def theorem41StepMatrix (P G : ℕ → ℝ[X]) (m : ℕ) : List (List ℝ[X]) := - [[P (m - 1), G (m - 1)], [P m, G m]] + [[P (m - 1), G (m - 1)], + [narayanaDifference P m, auxiliaryDifference G m]] @[simp] theorem theorem41StepMatrix_length (P G : ℕ → ℝ[X]) (m : ℕ) : (theorem41StepMatrix P G m).length = 2 := by @@ -30,18 +31,22 @@ theorem theorem41StepMatrix_rect (P G : ℕ → ℝ[X]) (m : ℕ) : ∀ row ∈ theorem41StepMatrix P G m, row.length = 2 := by intro row hrow have hrow' : - row = [P (m - 1), G (m - 1)] ∨ row = [P m, G m] := by + row = [P (m - 1), G (m - 1)] ∨ + row = [narayanaDifference P m, auxiliaryDifference G m] := by simpa [theorem41StepMatrix] using hrow rcases hrow' with rfl | rfl <;> simp /-- Entrywise nonnegativity for the Braun-Jal step matrix. -/ theorem theorem41StepMatrix_entry_nonneg {P G : ℕ → ℝ[X]} {m : ℕ} (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) - (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) : + (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) + (hQ_nonneg : HasNonnegCoeffs (narayanaDifference P m)) + (hH_nonneg : HasNonnegCoeffs (auxiliaryDifference G m)) : ∀ row ∈ theorem41StepMatrix P G m, ∀ p ∈ row, HasNonnegCoeffs p := by intro row hrow p hp have hrow' : - row = [P (m - 1), G (m - 1)] ∨ row = [P m, G m] := by + row = [P (m - 1), G (m - 1)] ∨ + row = [narayanaDifference P m, auxiliaryDifference G m] := by simpa [theorem41StepMatrix] using hrow rcases hrow' with rfl | rfl · have hp' : p = P (m - 1) ∨ p = G (m - 1) := by @@ -49,18 +54,20 @@ theorem theorem41StepMatrix_entry_nonneg {P G : ℕ → ℝ[X]} {m : ℕ} rcases hp' with rfl | rfl · exact hP_nonneg (m - 1) · exact hG_nonneg (m - 1) - · have hp' : p = P m ∨ p = G m := by + · have hp' : + p = narayanaDifference P m ∨ p = auxiliaryDifference G m := by simpa using hp rcases hp' with rfl | rfl - · exact hP_nonneg m - · exact hG_nonneg m + · exact hQ_nonneg + · exact hH_nonneg /-- The step matrix action gives the two recurrence sums appearing in the nonconstant induction step. -/ theorem theorem41StepMatrix_action_pair (P G : ℕ → ℝ[X]) (m : ℕ) (f g : ℝ[X]) : matPolyAction (theorem41StepMatrix P G m) [f, X * g] = - [f * P (m - 1) + X * g * G (m - 1), f * P m + X * g * G m] := by + [f * P (m - 1) + X * g * G (m - 1), + f * narayanaDifference P m + X * g * auxiliaryDifference G m] := by simp [theorem41StepMatrix, matPolyAction, mul_comm, mul_left_comm] /-- The induction hypothesis `g << f` makes `[f, X * g]` a nonnegative @@ -79,17 +86,30 @@ theorem theorem41InputPair_interlacingSeqNonneg {f g : ℝ[X]} · rw [isInterlacingSeq_iff_pairwise] simp [prec_mul_X_of_prec_of_nonneg hgf hg_nonneg hf_nonneg] -/-- Claim `(7)` supplies the nontrivial cross `2 x 2` affine test for the -Braun-Jal step matrix. -/ -theorem theorem41StepMatrix_cross_has2x2_of_claim7 +/-- Claim `(6)` is exactly the cross `2 x 2` affine test for the source matrix +in Braun--Jal's proof of Theorem 4.1. -/ +theorem theorem41StepMatrix_cross_has2x2_of_matrixClaim + {P G : ℕ → ℝ[X]} (hclaim : Theorem41MatrixClaimStatement P G) + {m : ℕ} (hm : 2 ≤ m) : + Has2x2InterlacingProperty (P (m - 1)) (G (m - 1)) + (narayanaDifference P m) (auxiliaryDifference G m) := by + intro s t hs ht + exact hclaim hm hs.le ht.le + +/-- Claim `(7)` supplies the cross affine test for the stronger consecutive-row +matrix with rows `[P_{m-1}, G_{m-1}]` and `[P_m, G_m]`. This is an auxiliary +route, not the matrix displayed in Braun--Jal's proof. -/ +theorem theorem41ConsecutiveMatrix_cross_has2x2_of_claim7 {P G : ℕ → ℝ[X]} (hclaim : Theorem41Claim7Statement P G) {m : ℕ} (hm : 2 ≤ m) : Has2x2InterlacingProperty (P (m - 1)) (G (m - 1)) (P m) (G m) := by intro s t hs ht exact hclaim (m := m) (lam := s) (nu := t) hm hs.le (by linarith) -/-- Claim `(7)`, the column interlacings, and the induction pair propagate -proper position through one nonconstant recurrence step. -/ +/-- A stronger alternative to the source matrix step: Claim `(7)` plus proper +position in both consecutive columns propagates the induction pair directly. +The paper instead applies Claim `(6)` to `theorem41StepMatrix` and then uses +Lemma 2.6. -/ theorem theorem41Step_prec_of_claim7 {P G : ℕ → ℝ[X]} {m : ℕ} {f g : ℝ[X]} (hclaim : Theorem41Claim7Statement P G) (hm : 2 ≤ m) @@ -105,7 +125,7 @@ theorem theorem41Step_prec_of_claim7 have hpair := prec_add_mul_pair_of_2x2 (p₁ := P (m - 1)) (q₁ := G (m - 1)) (p₂ := P m) (q₂ := G m) (u := f) (v := X * g) - hP hG (theorem41StepMatrix_cross_has2x2_of_claim7 hclaim hm) hinput + hP hG (theorem41ConsecutiveMatrix_cross_has2x2_of_claim7 hclaim hm) hinput (hP_nonneg (m - 1)) (hG_nonneg (m - 1)) (hP_nonneg m) (hG_nonneg m) hf_nonneg hg_nonneg.X_mul simpa [mul_comm, mul_left_comm] using hpair diff --git a/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean b/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean index e80bc986..0b572835 100644 --- a/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean +++ b/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean @@ -165,11 +165,13 @@ private theorem prec_narayanaPolynomial_two (n : ℕ) : simpa [Nat.succ_eq_add_one, Nat.add_assoc] using prec_narayanaPolynomial_succ 2 n -/-- Consecutive auxiliary polynomials are in proper position once the rook -model identifies `G n` with `n` times the parameter-two generalized Narayana -polynomial. This identity is accepted as combinatorial input: formalizing its -board bijection is outside scope, while the proper-position deduction is -proved here from the generalized Narayana recurrence. -/ +/-- Consecutive auxiliary polynomials are in proper position under an additional +identification with parameter-two generalized Narayana polynomials. + +This identity is not an input used in Braun--Jal's proof of Theorem 4.1; their +proof instead uses the `[P, G; Q, H]` matrix and Claim `(6)`. This theorem is +therefore an optional stronger route and `hG_model` requires an independent +justification. -/ theorem auxiliaryG_prec_succ_of_narayanaTwoModel (hG_model : ∀ n : ℕ, 1 ≤ n → FiniteSkewBoard.auxiliaryG n = @@ -221,13 +223,13 @@ theorem theorem41NonNestingRook_modified_of_modelInputs_of_adjacentG (lemma33AuxiliaryGInterlaces_modified hrec2 hH_nonneg) lemma34ModifiedNarayanaInterlacing_modified hrec -/-- -Braun--Jal Theorem 4.1 from combinatorial model inputs. The hypotheses below are an intentional -trust boundary: in particular, `hG_model` records only the rook-model identification from the -paper, whose full rook and order-polytope models are outside the scope of this project. They do -not assume interlacing or real-rootedness; those conclusions are derived here from the formalized -recurrence and generalized Narayana theory. --/ +/-- An alternative Theorem 4.1 endpoint using the additional generalized +Narayana identity `hG_model`. + +Braun--Jal do not use or state this identity in their proof. The source-faithful +route goes through the `[P, G; Q, H]` matrix and Claim `(6)`, so this result must +not be presented as depending only on the paper's combinatorial boundary facts. +It remains useful when `hG_model` is independently established. -/ theorem theorem41NonNestingRook_modified_of_modelInputs {M : SnakeWord → ℝ[X]} (hrec2 : NarayanaAuxiliaryGRecurrenceStatement From 8ffb627e668b87aec8f939b753c0d0b281b29621 Mon Sep 17 00:00:00 2001 From: Per Alexandersson Date: Mon, 3 Aug 2026 23:49:11 +0000 Subject: [PATCH 2/9] remove obsolete Braun-Jal matrix wrappers --- .../MatrixInduction.lean | 60 ------------------- 1 file changed, 60 deletions(-) diff --git a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean index 60043d68..b1559ed5 100644 --- a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean +++ b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean @@ -238,40 +238,6 @@ theorem theorem41StepOne_prec_of_recurrence (hM_nonneg (w.takePrefix (k + 1))) (hM_nonneg (w.takePrefix k)) rwa [hdel, hrec_w] -/-- Matrix Claim `(6)` gives the same recurrence-step proper-position result -via the existing Claim `(6)`/Claim `(7)` reindexing. -/ -theorem theorem41Step_prec_of_matrixClaim - {P G : ℕ → ℝ[X]} {m : ℕ} {f g : ℝ[X]} - (hclaim : Theorem41MatrixClaimStatement P G) (hm : 2 ≤ m) - (hP : Prec (P (m - 1)) (P m)) (hG : Prec (G (m - 1)) (G m)) - (hgf : Prec g f) - (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) - (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) - (hf_nonneg : HasNonnegCoeffs f) (hg_nonneg : HasNonnegCoeffs g) : - Prec (f * P (m - 1) + X * g * G (m - 1)) - (f * P m + X * g * G m) := - theorem41Step_prec_of_claim7 - ((theorem41MatrixClaim_iff_claim7 P G).mp hclaim) hm - hP hG hgf hP_nonneg hG_nonneg hf_nonneg hg_nonneg - -/-- Matrix Claim `(6)` version of the nonconstant word-level recurrence step. -/ -theorem theorem41NonconstantStep_prec_of_matrixClaim - {M : SnakeWord → ℝ[X]} {P G : ℕ → ℝ[X]} {w : SnakeWord} {k : ℕ} - (hrec : Theorem35GeneralizedSnakeRecurrenceStatement M P G) - (hclaim : Theorem41MatrixClaimStatement P G) - (hlast : w.IsLastChangeIndex k) - (hk : k + 1 < w.deleteFinal.length) - (hP : ∀ {m : ℕ}, 2 ≤ m → Prec (P (m - 1)) (P m)) - (hG : ∀ {m : ℕ}, 2 ≤ m → Prec (G (m - 1)) (G m)) - (hprefix : Prec (M (w.takePrefix k)) (M (w.takePrefix (k + 1)))) - (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) - (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) - (hM_nonneg : ∀ u, HasNonnegCoeffs (M u)) : - Prec (M w.deleteFinal) (M w) := - theorem41NonconstantStep_prec_of_claim7 - (P := P) (G := G) hrec ((theorem41MatrixClaim_iff_claim7 P G).mp hclaim) - hlast hk hP hG hprefix hP_nonneg hG_nonneg hM_nonneg - /-- Length-induction skeleton for Braun-Jal Theorem 4.1. If every nonconstant word step turns the prefix induction hypothesis into @@ -609,32 +575,6 @@ theorem theorem41InductionRoute_of_claim7_of_constant_matches_succ_length (hP_nonneg := hP_nonneg) (hG_nonneg := hG_nonneg) (hM_nonneg := hM_nonneg) (hdeg := hdeg) (hM_const := hM_const) -/-- Matrix Claim `(6)` version of the abstract route bridge, using the -successor-length constant-word identity from the concrete indexing. -/ -theorem theorem41InductionRoute_of_matrixClaim_of_constant_matches_succ_length - {M : SnakeWord → ℝ[X]} {P G : ℕ → ℝ[X]} - (hmatrix_of_inputs : - Lemma33AuxiliaryGInterlacesStatement P G → - Lemma34ModifiedNarayanaInterlacingStatement P → - Theorem41MatrixClaimStatement P G) - (hP_interlaces : ∀ n : ℕ, Interlaces (P n) (P (n + 1))) - (hG : ∀ {m : ℕ}, 2 ≤ m → Prec (G (m - 1)) (G m)) - (hP_one : P 1 = 1 + X) (hG_one : G 1 = 1) - (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) - (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) - (hM_nonneg : ∀ w, HasNonnegCoeffs (M w)) - (hdeg : - ∀ {w : SnakeWord}, 1 ≤ w.length → - (M w.deleteFinal).natDegree + 1 = (M w).natDegree) - (hM_const : ∀ {w : SnakeWord}, w.IsConstant → M w = P (w.length + 1)) : - Theorem41InductionRouteStatement M P G := - theorem41InductionRoute_of_claim7_of_constant_matches_succ_length - (M := M) (P := P) (G := G) - (fun h33 h34 => (theorem41MatrixClaim_iff_claim7 P G).mp - (hmatrix_of_inputs h33 h34)) - hP_interlaces hG hP_one hG_one hP_nonneg hG_nonneg hM_nonneg hdeg - hM_const - /-- Section 3 equation `(2)` plus the local Claim `(7)` side conditions give the abstract induction route, using the concrete successor-length indexing for constant words. From b1e6d3a508730c32b3831aed56b2c31d01ddfb97 Mon Sep 17 00:00:00 2001 From: Per Alexandersson Date: Mon, 3 Aug 2026 23:54:16 +0000 Subject: [PATCH 3/9] prove Braun-Jal source matrix step --- .../MatrixInduction.lean | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean index b1559ed5..5551eff9 100644 --- a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean +++ b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean @@ -1,5 +1,6 @@ import RealRooted.GeneralizedSnakePosets.Statements import RealRooted.MatrixInterlacing +import RealRooted.PFPolynomial /-! # Braun-Jal matrix-induction step @@ -96,6 +97,58 @@ theorem theorem41StepMatrix_cross_has2x2_of_matrixClaim intro s t hs ht exact hclaim hm hs.le ht.le +/-- Claim `(6)` and the source matrix send the induction pair to a proper-position +pair. Repeated column indices use the real-rootedness already contained in the +same Claim `(6)` instance. -/ +theorem theorem41Step_difference_prec_of_matrixClaim + {P G : ℕ → ℝ[X]} {m : ℕ} {f g : ℝ[X]} + (hclaim : Theorem41MatrixClaimStatement P G) (hm : 2 ≤ m) + (hP_ne : P (m - 1) ≠ 0) + (hQ_ne : narayanaDifference P m ≠ 0) + (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) + (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) + (hQ_nonneg : HasNonnegCoeffs (narayanaDifference P m)) + (hH_nonneg : HasNonnegCoeffs (auxiliaryDifference G m)) + (hgf : Prec g f) + (hf_nonneg : HasNonnegCoeffs f) (hg_nonneg : HasNonnegCoeffs g) : + Prec (f * P (m - 1) + X * g * G (m - 1)) + (f * narayanaDifference P m + X * g * auxiliaryDifference G m) := by + have hpair := prec_zipWith_sum_pair_of_2x2 + (n := 2) (row₁ := [P (m - 1), G (m - 1)]) + (row₂ := [narayanaDifference P m, auxiliaryDifference G m]) + (fs := [f, X * g]) + (hn := by decide) + (hrow₁_len := by simp) + (hrow₂_len := by simp) + (hrow₁_head_ne := by simpa using hP_ne) + (hrow₂_head_ne := by simpa using hQ_ne) + (hrow₁_nonneg := by + intro p hp + simp only [List.mem_cons, List.not_mem_nil, or_false] at hp + rcases hp with rfl | rfl + · exact hP_nonneg (m - 1) + · exact hG_nonneg (m - 1)) + (hrow₂_nonneg := by + intro p hp + simp only [List.mem_cons, List.not_mem_nil, or_false] at hp + rcases hp with rfl | rfl + · exact hQ_nonneg + · exact hH_nonneg) + (h2x2 := by + intro j₁ j₂ hj + fin_cases j₁ <;> fin_cases j₂ + · intro s t hs ht + have hcross := hclaim (m := m) (lam := s) (mu := t) hm hs.le ht.le + simpa using prec_refl hcross.2.1.1 hcross.2.1.2 + · simpa using theorem41StepMatrix_cross_has2x2_of_matrixClaim hclaim hm + · simp at hj + · intro s t hs ht + have hcross := hclaim (m := m) (lam := s) (mu := t) hm hs.le ht.le + simpa using prec_refl hcross.1.1 hcross.1.2) + (hfs_len := by simp) + (hfs := theorem41InputPair_interlacingSeqNonneg hgf hf_nonneg hg_nonneg) + simpa [mul_comm, mul_left_comm] using hpair + /-- Claim `(7)` supplies the cross affine test for the stronger consecutive-row matrix with rows `[P_{m-1}, G_{m-1}]` and `[P_m, G_m]`. This is an auxiliary route, not the matrix displayed in Braun--Jal's proof. -/ @@ -179,6 +232,75 @@ theorem theorem41NonconstantStep_prec_of_claim7 (hM_nonneg (w.takePrefix (k + 1))) (hM_nonneg (w.takePrefix k)) rwa [hrec_del, hrec_w] +/-- The nonconstant Braun--Jal induction step through the source +`[P, G; Q, H]` matrix. Unlike the consecutive-row shortcut above, this is the +argument on p. 10 of the paper and requires no adjacent-`G` proper position. -/ +theorem theorem41NonconstantStep_prec_of_matrixClaim + {M : SnakeWord → ℝ[X]} {P G : ℕ → ℝ[X]} {w : SnakeWord} {k : ℕ} + (hrec : Theorem35GeneralizedSnakeRecurrenceStatement M P G) + (hclaim : Theorem41MatrixClaimStatement P G) + (hlast : w.IsLastChangeIndex k) + (hk : k + 1 < w.deleteFinal.length) + (hP_ne : ∀ n, P n ≠ 0) + (hQ_ne : ∀ {m : ℕ}, 2 ≤ m → narayanaDifference P m ≠ 0) + (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) + (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) + (hQ_nonneg : ∀ {m : ℕ}, 2 ≤ m → + HasNonnegCoeffs (narayanaDifference P m)) + (hH_nonneg : ∀ {m : ℕ}, 2 ≤ m → + HasNonnegCoeffs (auxiliaryDifference G m)) + (hprefix : Prec (M (w.takePrefix k)) (M (w.takePrefix (k + 1)))) + (hM_nonneg : ∀ u, HasNonnegCoeffs (M u)) : + Prec (M w.deleteFinal) (M w) := by + let f : ℝ[X] := M (w.takePrefix (k + 1)) + let g : ℝ[X] := M (w.takePrefix k) + let m : ℕ := w.length - (k + 1) + have hm : 2 ≤ m := by + dsimp [m] + rw [SnakeWord.length_deleteFinal] at hk + lia + have hkp1_le : k + 1 ≤ w.deleteFinal.length := le_of_lt hk + have hk_le : k ≤ w.deleteFinal.length := by lia + have hrec_w : M w = f * P m + X * g * G m := by + dsimp [f, g, m] + exact hrec hlast.not_isConstant hlast + have hlast_del : w.deleteFinal.IsLastChangeIndex k := hlast.deleteFinal hk + have hrec_del : + M w.deleteFinal = f * P (m - 1) + X * g * G (m - 1) := by + have hbase := hrec hlast_del.not_isConstant hlast_del + dsimp [f, g, m] + rw [hbase] + rw [SnakeWord.takePrefix_deleteFinal_eq_takePrefix_of_le hkp1_le] + rw [SnakeWord.takePrefix_deleteFinal_eq_takePrefix_of_le hk_le] + rw [SnakeWord.length_deleteFinal_sub_eq] + have hrec_diff : + M w - M w.deleteFinal = + f * narayanaDifference P m + X * g * auxiliaryDifference G m := by + rw [hrec_w, hrec_del] + unfold narayanaDifference auxiliaryDifference + ring + have hf_nonneg : HasNonnegCoeffs f := hM_nonneg _ + have hg_nonneg : HasNonnegCoeffs g := hM_nonneg _ + have hdiff_nonneg : HasNonnegCoeffs (M w - M w.deleteFinal) := by + rw [hrec_diff] + exact (hf_nonneg.mul (hQ_nonneg hm)).add + (hg_nonneg.X_mul.mul (hH_nonneg hm)) + have hstep : Prec (M w.deleteFinal) (M w - M w.deleteFinal) := by + rw [hrec_del, hrec_diff] + exact theorem41Step_difference_prec_of_matrixClaim + hclaim hm (hP_ne (m - 1)) (hQ_ne hm) hP_nonneg hG_nonneg + (hQ_nonneg hm) (hH_nonneg hm) hprefix hf_nonneg hg_nonneg + have hsum0 : Prec0 (M w.deleteFinal) + (M w.deleteFinal + (M w - M w.deleteFinal)) := + prec0_add_right_of_common_left_of_nonneg + (prec_refl hstep.1.1 hstep.1.2).toPrec0 hstep.toPrec0 + (hM_nonneg w.deleteFinal) hdiff_nonneg + have hsum_ne : M w.deleteFinal + (M w - M w.deleteFinal) ≠ 0 := + add_ne_zero_of_hasNonnegCoeffs_of_right_ne_zero + (hM_nonneg w.deleteFinal) hdiff_nonneg hstep.2.1.1 + have hfinal := hsum0.toPrec_of_ne hstep.1.1 hsum_ne + convert hfinal using 1 <;> ring + /-- Polynomial form of the exceptional `m = 1` Braun-Jal step. If `g ≪ f` and both polynomials have nonnegative coefficients, then From 972c4a2f987fc38550191e504de0cccd71aae95f Mon Sep 17 00:00:00 2001 From: Per Alexandersson Date: Mon, 3 Aug 2026 23:56:17 +0000 Subject: [PATCH 4/9] route Braun-Jal induction through source matrix --- .../MatrixInduction.lean | 73 +++++++++++++++++++ .../Narayana/Claim7.lean | 40 ++++++++++ 2 files changed, 113 insertions(+) diff --git a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean index 5551eff9..3ce5ad0e 100644 --- a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean +++ b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean @@ -540,6 +540,79 @@ theorem theorem41_of_claim7_of_constant_cases (M := M) (P := P) (G := G) (w := w) (k := k) hrec hP_one hG_one hlast hsuffix hprefix_prec hM_nonneg +/-- Source-matrix length induction from Claim `(6)` to Braun--Jal Theorem 4.1. + +The long-suffix branch uses the displayed `[P, G; Q, H]` matrix, while the +suffix-one branch uses `P_1 = 1 + X` and `G_1 = 1`. In particular, no +adjacent-`G` proper-position hypothesis occurs. -/ +theorem theorem41_of_matrixClaim_of_constant_cases + {M : SnakeWord → ℝ[X]} {P G : ℕ → ℝ[X]} + (hrec : Theorem35GeneralizedSnakeRecurrenceStatement M P G) + (hclaim : Theorem41MatrixClaimStatement P G) + (hP_ne : ∀ n, P n ≠ 0) + (hQ_ne : ∀ {m : ℕ}, 2 ≤ m → narayanaDifference P m ≠ 0) + (hP_one : P 1 = 1 + X) (hG_one : G 1 = 1) + (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) + (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) + (hQ_nonneg : ∀ {m : ℕ}, 2 ≤ m → + HasNonnegCoeffs (narayanaDifference P m)) + (hH_nonneg : ∀ {m : ℕ}, 2 ≤ m → + HasNonnegCoeffs (auxiliaryDifference G m)) + (hM_nonneg : ∀ w, HasNonnegCoeffs (M w)) + (hdeg : + ∀ {w : SnakeWord}, 1 ≤ w.length → + (M w.deleteFinal).natDegree + 1 = (M w).natDegree) + (hconst : + ∀ {w : SnakeWord}, 1 ≤ w.length → w.IsConstant → + (M w ≠ 0 ∧ (M w).Splits) ∧ Interlaces (M w.deleteFinal) (M w)) : + Theorem41NonNestingRookStatement M := by + refine theorem41_of_prec_step (M := M) ?_ hdeg hconst + intro w k _hconstw hlast hprefix_prec + by_cases hk : k + 1 < w.deleteFinal.length + · exact theorem41NonconstantStep_prec_of_matrixClaim + (M := M) (P := P) (G := G) (w := w) (k := k) + hrec hclaim hlast hk hP_ne hQ_ne hP_nonneg hG_nonneg + hQ_nonneg hH_nonneg hprefix_prec hM_nonneg + · have hsuffix : w.length - (k + 1) = 1 := by + rw [SnakeWord.length_deleteFinal] at hk + have hlast_suffix := hlast.succ_lt_length + lia + exact theorem41StepOne_prec_of_recurrence + (M := M) (P := P) (G := G) (w := w) (k := k) + hrec hP_one hG_one hlast hsuffix hprefix_prec hM_nonneg + +/-- Source-matrix induction with the constant branch reduced to the concrete +successor-length identity `M w = P (w.length + 1)`. -/ +theorem theorem41_of_matrixClaim_of_constant_matches_succ_length + {M : SnakeWord → ℝ[X]} {P G : ℕ → ℝ[X]} + (hrec : Theorem35GeneralizedSnakeRecurrenceStatement M P G) + (hclaim : Theorem41MatrixClaimStatement P G) + (hP_ne : ∀ n, P n ≠ 0) + (hQ_ne : ∀ {m : ℕ}, 2 ≤ m → narayanaDifference P m ≠ 0) + (hP_interlaces : ∀ n : ℕ, Interlaces (P n) (P (n + 1))) + (hP_one : P 1 = 1 + X) (hG_one : G 1 = 1) + (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) + (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) + (hQ_nonneg : ∀ {m : ℕ}, 2 ≤ m → + HasNonnegCoeffs (narayanaDifference P m)) + (hH_nonneg : ∀ {m : ℕ}, 2 ≤ m → + HasNonnegCoeffs (auxiliaryDifference G m)) + (hM_nonneg : ∀ w, HasNonnegCoeffs (M w)) + (hdeg : + ∀ {w : SnakeWord}, 1 ≤ w.length → + (M w.deleteFinal).natDegree + 1 = (M w).natDegree) + (hM_const : ∀ {w : SnakeWord}, w.IsConstant → + M w = P (w.length + 1)) : + Theorem41NonNestingRookStatement M := by + have hconst : + ∀ {w : SnakeWord}, 1 ≤ w.length → w.IsConstant → + (M w ≠ 0 ∧ (M w).Splits) ∧ Interlaces (M w.deleteFinal) (M w) := + theorem41_constant_of_matches_succ_length + (M := M) (P := P) hM_const hP_interlaces + exact theorem41_of_matrixClaim_of_constant_cases + (M := M) (P := P) (G := G) hrec hclaim hP_ne hQ_ne hP_one hG_one + hP_nonneg hG_nonneg hQ_nonneg hH_nonneg hM_nonneg hdeg hconst + /-- The deletion degree bridge follows from the length-indexed degree formula for the whole snake-word family. -/ theorem theorem41_degree_bridge_of_natDegree_length diff --git a/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean b/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean index 0b572835..bac005f9 100644 --- a/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean +++ b/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean @@ -223,6 +223,46 @@ theorem theorem41NonNestingRook_modified_of_modelInputs_of_adjacentG (lemma33AuxiliaryGInterlaces_modified hrec2 hH_nonneg) lemma34ModifiedNarayanaInterlacing_modified hrec +/-- Braun--Jal Theorem 4.1 through the source `[P, G; Q, H]` matrix. + +The hypotheses are the intended combinatorial trust boundary. Equation `(2)`, +nonnegativity of the board difference `H`, Theorem 3.5, the degree identity, +and the constant-word staircase identity come from the non-nesting-rook model; +formalizing that complete model is outside the present scope. No hypothesis +assumes real-rootedness, interlacing, proper position, or splitting. -/ +theorem theorem41NonNestingRook_modified_of_sourceInputs + {M : SnakeWord → ℝ[X]} + (hrec2 : NarayanaAuxiliaryGRecurrenceStatement + modifiedNarayanaPolynomial FiniteSkewBoard.auxiliaryG) + (hH_nonneg : ∀ n : ℕ, 1 ≤ n → + HasNonnegCoeffs + (FiniteSkewBoard.auxiliaryG n - + FiniteSkewBoard.auxiliaryG (n - 1))) + (hrec : Theorem35GeneralizedSnakeRecurrenceStatement M + modifiedNarayanaPolynomial FiniteSkewBoard.auxiliaryG) + (hM_nonneg : ∀ w : SnakeWord, HasNonnegCoeffs (M w)) + (hdeg : ∀ {w : SnakeWord}, 1 ≤ w.length → + (M w.deleteFinal).natDegree + 1 = (M w).natDegree) + (hM_const : ∀ {w : SnakeWord}, w.IsConstant → + M w = modifiedNarayanaPolynomial (w.length + 1)) : + Theorem41NonNestingRookStatement M := by + exact theorem41_of_matrixClaim_of_constant_matches_succ_length + (M := M) (P := modifiedNarayanaPolynomial) + (G := FiniteSkewBoard.auxiliaryG) + hrec + ((theorem41MatrixClaim_iff_claim7 _ _).mpr + (theorem41Claim7_modified hrec2 hH_nonneg)) + modifiedNarayanaPolynomial_ne_zero + (fun {_m} hm => narayanaDifference_modified_ne_zero (by lia)) + modifiedNarayanaPolynomial_interlaces_succ + modifiedNarayanaPolynomial_one FiniteSkewBoard.auxiliaryG_one + modifiedNarayanaPolynomial_hasNonnegCoeffs + FiniteSkewBoard.auxiliaryG_hasNonnegCoeffs + (fun {_m} hm => narayanaDifference_modified_hasNonnegCoeffs (by lia)) + (fun {_m} hm => by + simpa [auxiliaryDifference] using hH_nonneg _ (by lia)) + hM_nonneg hdeg hM_const + /-- An alternative Theorem 4.1 endpoint using the additional generalized Narayana identity `hG_model`. From ffdc34aa0336673056e5848914a81cfb4ea8c520 Mon Sep 17 00:00:00 2001 From: Per Alexandersson Date: Mon, 3 Aug 2026 23:57:28 +0000 Subject: [PATCH 5/9] deduplicate Braun-Jal source hypotheses --- .../GeneralizedSnakePosets/MatrixInduction.lean | 13 ++++++------- .../GeneralizedSnakePosets/Narayana/Claim7.lean | 1 - 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean index 3ce5ad0e..c27e426a 100644 --- a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean +++ b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean @@ -104,7 +104,6 @@ theorem theorem41Step_difference_prec_of_matrixClaim {P G : ℕ → ℝ[X]} {m : ℕ} {f g : ℝ[X]} (hclaim : Theorem41MatrixClaimStatement P G) (hm : 2 ≤ m) (hP_ne : P (m - 1) ≠ 0) - (hQ_ne : narayanaDifference P m ≠ 0) (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) (hQ_nonneg : HasNonnegCoeffs (narayanaDifference P m)) @@ -113,6 +112,9 @@ theorem theorem41Step_difference_prec_of_matrixClaim (hf_nonneg : HasNonnegCoeffs f) (hg_nonneg : HasNonnegCoeffs g) : Prec (f * P (m - 1) + X * g * G (m - 1)) (f * narayanaDifference P m + X * g * auxiliaryDifference G m) := by + have hQ_ne : narayanaDifference P m ≠ 0 := by + have hzero := hclaim (m := m) (lam := 0) (mu := 0) hm (by norm_num) (by norm_num) + simpa using hzero.2.1.1 have hpair := prec_zipWith_sum_pair_of_2x2 (n := 2) (row₁ := [P (m - 1), G (m - 1)]) (row₂ := [narayanaDifference P m, auxiliaryDifference G m]) @@ -242,7 +244,6 @@ theorem theorem41NonconstantStep_prec_of_matrixClaim (hlast : w.IsLastChangeIndex k) (hk : k + 1 < w.deleteFinal.length) (hP_ne : ∀ n, P n ≠ 0) - (hQ_ne : ∀ {m : ℕ}, 2 ≤ m → narayanaDifference P m ≠ 0) (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) (hQ_nonneg : ∀ {m : ℕ}, 2 ≤ m → @@ -288,7 +289,7 @@ theorem theorem41NonconstantStep_prec_of_matrixClaim have hstep : Prec (M w.deleteFinal) (M w - M w.deleteFinal) := by rw [hrec_del, hrec_diff] exact theorem41Step_difference_prec_of_matrixClaim - hclaim hm (hP_ne (m - 1)) (hQ_ne hm) hP_nonneg hG_nonneg + hclaim hm (hP_ne (m - 1)) hP_nonneg hG_nonneg (hQ_nonneg hm) (hH_nonneg hm) hprefix hf_nonneg hg_nonneg have hsum0 : Prec0 (M w.deleteFinal) (M w.deleteFinal + (M w - M w.deleteFinal)) := @@ -550,7 +551,6 @@ theorem theorem41_of_matrixClaim_of_constant_cases (hrec : Theorem35GeneralizedSnakeRecurrenceStatement M P G) (hclaim : Theorem41MatrixClaimStatement P G) (hP_ne : ∀ n, P n ≠ 0) - (hQ_ne : ∀ {m : ℕ}, 2 ≤ m → narayanaDifference P m ≠ 0) (hP_one : P 1 = 1 + X) (hG_one : G 1 = 1) (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) (hG_nonneg : ∀ n, HasNonnegCoeffs (G n)) @@ -571,7 +571,7 @@ theorem theorem41_of_matrixClaim_of_constant_cases by_cases hk : k + 1 < w.deleteFinal.length · exact theorem41NonconstantStep_prec_of_matrixClaim (M := M) (P := P) (G := G) (w := w) (k := k) - hrec hclaim hlast hk hP_ne hQ_ne hP_nonneg hG_nonneg + hrec hclaim hlast hk hP_ne hP_nonneg hG_nonneg hQ_nonneg hH_nonneg hprefix_prec hM_nonneg · have hsuffix : w.length - (k + 1) = 1 := by rw [SnakeWord.length_deleteFinal] at hk @@ -588,7 +588,6 @@ theorem theorem41_of_matrixClaim_of_constant_matches_succ_length (hrec : Theorem35GeneralizedSnakeRecurrenceStatement M P G) (hclaim : Theorem41MatrixClaimStatement P G) (hP_ne : ∀ n, P n ≠ 0) - (hQ_ne : ∀ {m : ℕ}, 2 ≤ m → narayanaDifference P m ≠ 0) (hP_interlaces : ∀ n : ℕ, Interlaces (P n) (P (n + 1))) (hP_one : P 1 = 1 + X) (hG_one : G 1 = 1) (hP_nonneg : ∀ n, HasNonnegCoeffs (P n)) @@ -610,7 +609,7 @@ theorem theorem41_of_matrixClaim_of_constant_matches_succ_length theorem41_constant_of_matches_succ_length (M := M) (P := P) hM_const hP_interlaces exact theorem41_of_matrixClaim_of_constant_cases - (M := M) (P := P) (G := G) hrec hclaim hP_ne hQ_ne hP_one hG_one + (M := M) (P := P) (G := G) hrec hclaim hP_ne hP_one hG_one hP_nonneg hG_nonneg hQ_nonneg hH_nonneg hM_nonneg hdeg hconst /-- The deletion degree bridge follows from the length-indexed degree formula diff --git a/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean b/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean index bac005f9..042554da 100644 --- a/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean +++ b/RealRooted/GeneralizedSnakePosets/Narayana/Claim7.lean @@ -253,7 +253,6 @@ theorem theorem41NonNestingRook_modified_of_sourceInputs ((theorem41MatrixClaim_iff_claim7 _ _).mpr (theorem41Claim7_modified hrec2 hH_nonneg)) modifiedNarayanaPolynomial_ne_zero - (fun {_m} hm => narayanaDifference_modified_ne_zero (by lia)) modifiedNarayanaPolynomial_interlaces_succ modifiedNarayanaPolynomial_one FiniteSkewBoard.auxiliaryG_one modifiedNarayanaPolynomial_hasNonnegCoeffs From a0a317d7dad4618564ae9c857ee2fb802007760d Mon Sep 17 00:00:00 2001 From: Per Alexandersson Date: Mon, 3 Aug 2026 23:58:29 +0000 Subject: [PATCH 6/9] fix Braun-Jal recurrence rewrite order --- RealRooted/GeneralizedSnakePosets/MatrixInduction.lean | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean index c27e426a..ed6ce445 100644 --- a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean +++ b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean @@ -287,10 +287,11 @@ theorem theorem41NonconstantStep_prec_of_matrixClaim exact (hf_nonneg.mul (hQ_nonneg hm)).add (hg_nonneg.X_mul.mul (hH_nonneg hm)) have hstep : Prec (M w.deleteFinal) (M w - M w.deleteFinal) := by - rw [hrec_del, hrec_diff] - exact theorem41Step_difference_prec_of_matrixClaim + have hstep_raw := theorem41Step_difference_prec_of_matrixClaim hclaim hm (hP_ne (m - 1)) hP_nonneg hG_nonneg (hQ_nonneg hm) (hH_nonneg hm) hprefix hf_nonneg hg_nonneg + rw [← hrec_del, ← hrec_diff] at hstep_raw + exact hstep_raw have hsum0 : Prec0 (M w.deleteFinal) (M w.deleteFinal + (M w - M w.deleteFinal)) := prec0_add_right_of_common_left_of_nonneg From 382c7ed769bd6c1e603199157375368de94c50fb Mon Sep 17 00:00:00 2001 From: Per Alexandersson Date: Tue, 4 Aug 2026 00:00:34 +0000 Subject: [PATCH 7/9] specialize Braun-Jal theorem to rook model --- RealRooted/Challenges/BraunJal.lean | 47 ++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/RealRooted/Challenges/BraunJal.lean b/RealRooted/Challenges/BraunJal.lean index ad4b3381..be966b4c 100644 --- a/RealRooted/Challenges/BraunJal.lean +++ b/RealRooted/Challenges/BraunJal.lean @@ -101,16 +101,14 @@ abbrev OrderPolytopeHStarTheorem41Target (hStar : NonNestingRookPolynomialFamily) : Prop := OrderPolytopeHStarTheorem41Statement hStar -/-- Concrete Braun--Jal Theorem 4.1 from the accepted combinatorial model -inputs. The parameter-two Narayana identity is the board-model fact; all -proper-position and real-rootedness deductions are checked in Lean. -/ +/-- Braun--Jal Theorem 4.1 from the accepted combinatorial model inputs. +The recurrence and coefficient hypotheses are the source board-model facts; +all proper-position and real-rootedness deductions are checked in Lean. -/ theorem theorem41_of_modifiedModelInputs {M : NonNestingRookPolynomialFamily} (hrec2 : AuxiliaryGRecurrence ModifiedNarayanaPolynomial AuxiliaryG) (hH_nonneg : ∀ n : ℕ, 1 ≤ n → HasNonnegCoeffs (AuxiliaryG n - AuxiliaryG (n - 1))) - (hG_model : ∀ n : ℕ, 1 ≤ n → - AuxiliaryG n = C (n : ℝ) * narayanaPolynomial 2 (n - 1)) (hrec : Theorem35GeneralizedSnakeRecurrenceStatement M ModifiedNarayanaPolynomial AuxiliaryG) (hM_nonneg : ∀ w : SnakeWord, HasNonnegCoeffs (M w)) @@ -119,8 +117,37 @@ theorem theorem41_of_modifiedModelInputs (hM_const : ∀ {w : SnakeWord}, w.IsConstant → M w = ModifiedNarayanaPolynomial (w.length + 1)) : Theorem41Target M := - theorem41NonNestingRook_modified_of_modelInputs hrec2 hH_nonneg hG_model - hrec hM_nonneg hdeg hM_const + theorem41NonNestingRook_modified_of_sourceInputs hrec2 hH_nonneg hrec + hM_nonneg hdeg hM_const + +/-- Braun--Jal Theorem 4.1 for the concrete generalized-snake rook model. + +The five hypotheses are intentionally the combinatorial trust boundary from +Braun--Jal, arXiv:2607.00922v1. Equation `(2)` defines the auxiliary family, +`hH_nonneg` comes from its board-difference interpretation, `hrec` is Theorem +3.5, `hdeg` is the maximum-rook/degree identity, and `hM_const` identifies +constant snake boards with staircases. Formalizing the entire rook-placement +model is outside the present scope. All analytic conclusions are derived in +Lean. -/ +theorem generalizedSnakeRookModel_theorem41 + (hrec2 : AuxiliaryGRecurrence ModifiedNarayanaPolynomial AuxiliaryG) + (hH_nonneg : ∀ n : ℕ, 1 ≤ n → + HasNonnegCoeffs (AuxiliaryG n - AuxiliaryG (n - 1))) + (hrec : Theorem35GeneralizedSnakeRecurrenceStatement + generalizedSnakeRookModel.snakePolynomial + ModifiedNarayanaPolynomial AuxiliaryG) + (hdeg : ∀ {w : SnakeWord}, 1 ≤ w.length → + (generalizedSnakeRookModel.snakePolynomial w.deleteFinal).natDegree + 1 = + (generalizedSnakeRookModel.snakePolynomial w).natDegree) + (hM_const : ∀ {w : SnakeWord}, w.IsConstant → + generalizedSnakeRookModel.snakePolynomial w = + ModifiedNarayanaPolynomial (w.length + 1)) : + Theorem41Target generalizedSnakeRookModel.snakePolynomial := by + exact theorem41_of_modifiedModelInputs hrec2 hH_nonneg hrec + (fun w => by + rw [generalizedSnakeRookModel_snakePolynomial] + exact FiniteSkewBoard.rookPolynomial_hasNonnegCoeffs _) + hdeg hM_const /-- Order-polytope `h*` form of Braun--Jal Theorem 4.1 from the accepted combinatorial model inputs. The matching hypothesis is the Stanley/ @@ -131,8 +158,6 @@ theorem orderPolytopeHStarTheorem41_of_modifiedModelInputs (hrec2 : AuxiliaryGRecurrence ModifiedNarayanaPolynomial AuxiliaryG) (hH_nonneg : ∀ n : ℕ, 1 ≤ n → HasNonnegCoeffs (AuxiliaryG n - AuxiliaryG (n - 1))) - (hG_model : ∀ n : ℕ, 1 ≤ n → - AuxiliaryG n = C (n : ℝ) * narayanaPolynomial 2 (n - 1)) (hrec : Theorem35GeneralizedSnakeRecurrenceStatement M ModifiedNarayanaPolynomial AuxiliaryG) (hM_nonneg : ∀ w : SnakeWord, HasNonnegCoeffs (M w)) @@ -143,8 +168,8 @@ theorem orderPolytopeHStarTheorem41_of_modifiedModelInputs (hmatch : OrderPolytopeHStarMatchesNonNestingRook hStar M) : OrderPolytopeHStarTheorem41Target hStar := orderPolytopeHStarTheorem41_of_theorem41 - (theorem41_of_modifiedModelInputs hrec2 hH_nonneg hG_model hrec - hM_nonneg hdeg hM_const) + (theorem41_of_modifiedModelInputs hrec2 hH_nonneg hrec hM_nonneg hdeg + hM_const) hmatch /-- The real-rootedness projection of Braun--Jal Theorem 4.1. -/ From ca79f490002eaf586872d4d86ba2033032e6a784 Mon Sep 17 00:00:00 2001 From: Per Alexandersson Date: Tue, 4 Aug 2026 00:01:42 +0000 Subject: [PATCH 8/9] clarify Braun-Jal endpoint application --- RealRooted/GeneralizedSnakePosets/MatrixInduction.lean | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean index ed6ce445..042fca5f 100644 --- a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean +++ b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean @@ -609,9 +609,11 @@ theorem theorem41_of_matrixClaim_of_constant_matches_succ_length (M w ≠ 0 ∧ (M w).Splits) ∧ Interlaces (M w.deleteFinal) (M w) := theorem41_constant_of_matches_succ_length (M := M) (P := P) hM_const hP_interlaces + intro w hw exact theorem41_of_matrixClaim_of_constant_cases (M := M) (P := P) (G := G) hrec hclaim hP_ne hP_one hG_one hP_nonneg hG_nonneg hQ_nonneg hH_nonneg hM_nonneg hdeg hconst + (w := w) hw /-- The deletion degree bridge follows from the length-indexed degree formula for the whole snake-word family. -/ From 168f0a9e4c369799e6703e8c3ba4c2b0799ff17b Mon Sep 17 00:00:00 2001 From: Per Alexandersson Date: Tue, 4 Aug 2026 00:11:51 +0000 Subject: [PATCH 9/9] clean up Braun-Jal final rewrite --- RealRooted/GeneralizedSnakePosets/MatrixInduction.lean | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean index 042fca5f..a8880b16 100644 --- a/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean +++ b/RealRooted/GeneralizedSnakePosets/MatrixInduction.lean @@ -301,7 +301,10 @@ theorem theorem41NonconstantStep_prec_of_matrixClaim add_ne_zero_of_hasNonnegCoeffs_of_right_ne_zero (hM_nonneg w.deleteFinal) hdiff_nonneg hstep.2.1.1 have hfinal := hsum0.toPrec_of_ne hstep.1.1 hsum_ne - convert hfinal using 1 <;> ring + have hsum_eq : M w.deleteFinal + (M w - M w.deleteFinal) = M w := by + ring + rw [hsum_eq] at hfinal + exact hfinal /-- Polynomial form of the exceptional `m = 1` Braun-Jal step.