Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
04b1ba3
docs: cite sources for priority proof interfaces
PerAlexandersson Aug 3, 2026
c21e11d
Correct priority source documentation
PerAlexandersson Aug 3, 2026
3139630
fix Braun-Jal source step matrix
PerAlexandersson Aug 3, 2026
8ffb627
remove obsolete Braun-Jal matrix wrappers
PerAlexandersson Aug 3, 2026
b1e6d3a
prove Braun-Jal source matrix step
PerAlexandersson Aug 3, 2026
972c4a2
route Braun-Jal induction through source matrix
PerAlexandersson Aug 3, 2026
ffdc34a
deduplicate Braun-Jal source hypotheses
PerAlexandersson Aug 3, 2026
a0a317d
fix Braun-Jal recurrence rewrite order
PerAlexandersson Aug 3, 2026
382c7ed
specialize Braun-Jal theorem to rook model
PerAlexandersson Aug 4, 2026
ca79f49
clarify Braun-Jal endpoint application
PerAlexandersson Aug 4, 2026
168f0a9
clean up Braun-Jal final rewrite
PerAlexandersson Aug 4, 2026
96e9eaa
Document Hoster-Stump low-degree obstruction
PerAlexandersson Aug 4, 2026
af63839
Deduplicate source relation constructors
PerAlexandersson Aug 4, 2026
19f3d3e
Merge pull request #322 from PerAlexandersson/codex/hurwitz-schur-typo
PerAlexandersson Aug 4, 2026
6116b75
Correct gamma transfer source hypotheses
PerAlexandersson Aug 3, 2026
cc895ca
Make gamma transfer source-exact
PerAlexandersson Aug 3, 2026
d5eb497
Prove gamma root-map monotonicity
PerAlexandersson Aug 4, 2026
610e067
Factor gamma transforms at the minus-one root
PerAlexandersson Aug 4, 2026
2aa64f9
Golf gamma transform factorization proof
PerAlexandersson Aug 4, 2026
ba8722c
Prove gamma transform minus-one multiplicity
PerAlexandersson Aug 4, 2026
2273b7c
Transport gamma root interleaving order
PerAlexandersson Aug 4, 2026
69a53e8
Golf gamma root interleaving transport
PerAlexandersson Aug 4, 2026
789bdde
Repair gamma root transport order
PerAlexandersson Aug 4, 2026
51a4d16
Iterate gamma reciprocal root factors
PerAlexandersson Aug 4, 2026
25aa559
Deduplicate gamma root factor specialization
PerAlexandersson Aug 4, 2026
3301730
Prove gamma transform root multiplicity
PerAlexandersson Aug 4, 2026
e42dcd5
Prove gamma root map surjectivity
PerAlexandersson Aug 4, 2026
9984b8b
Golf gamma root map surjectivity proof
PerAlexandersson Aug 4, 2026
fd515a9
Reconstruct gamma roots as transform root multiset
PerAlexandersson Aug 4, 2026
67695c0
Reconstruct reciprocal gamma transform roots
PerAlexandersson Aug 4, 2026
af01895
Deduplicate gamma root reconstruction proof
PerAlexandersson Aug 4, 2026
004b80e
Formalize gamma root completion cases
PerAlexandersson Aug 4, 2026
2a524b3
Prove adjacent gamma transform interlacing equivalence
PerAlexandersson Aug 4, 2026
a9bd73b
Deduplicate proper-position multiplicity proof
PerAlexandersson Aug 4, 2026
e6c8320
Prove adjacent gamma interlacing endpoint
PerAlexandersson Aug 4, 2026
a91f5bd
Automate direct finite-symbol stability tactic
PerAlexandersson Aug 4, 2026
8499a36
Merge pull request #333 from PerAlexandersson/codex/finite-symbol-auto
PerAlexandersson Aug 4, 2026
dda0762
Infer Ma-Wang step certificates
PerAlexandersson Aug 4, 2026
450bfe6
Merge pull request #334 from PerAlexandersson/codex/inferred-recurren…
PerAlexandersson Aug 4, 2026
937735d
Infer local Favard certificates
PerAlexandersson Aug 4, 2026
c20bb30
Merge pull request #335 from PerAlexandersson/codex/inferred-favard-f…
PerAlexandersson Aug 4, 2026
62b2105
Infer matrix preservation certificates
PerAlexandersson Aug 4, 2026
0ab815b
Merge pull request #336 from PerAlexandersson/codex/inferred-matrix-c…
PerAlexandersson Aug 4, 2026
2e561e5
Infer derived matrix tactic certificates
PerAlexandersson Aug 4, 2026
41d589c
Merge pull request #337 from PerAlexandersson/codex/inferred-matrix-d…
PerAlexandersson Aug 4, 2026
0397fef
Infer positive-width matrix certificates
PerAlexandersson Aug 4, 2026
3919a16
Merge pull request #338 from PerAlexandersson/codex/inferred-matrix-p…
PerAlexandersson Aug 4, 2026
db45b35
Expose Wagner production adapters
PerAlexandersson Aug 4, 2026
4e43935
Merge pull request #339 from PerAlexandersson/codex/wagner-production…
PerAlexandersson Aug 4, 2026
47fa394
Infer core Wagner X certificates
PerAlexandersson Aug 4, 2026
cfb927e
Merge pull request #340 from PerAlexandersson/codex/wagnerx-core-infe…
PerAlexandersson Aug 4, 2026
3abe34e
Instantiate local certificate families
PerAlexandersson Aug 4, 2026
dd2f776
Merge pull request #341 from PerAlexandersson/codex/lookup-local-forall
PerAlexandersson Aug 4, 2026
4aedd10
Infer Wagner derivative-gap step certificates
PerAlexandersson Aug 4, 2026
e1ccdd9
Merge pull request #342 from PerAlexandersson/codex/wagner-gap-step-i…
PerAlexandersson Aug 4, 2026
6962006
Infer Ma-Wang step certificates from recurrence
PerAlexandersson Aug 4, 2026
bc52183
Merge pull request #343 from PerAlexandersson/codex/mawang-recurrence…
PerAlexandersson Aug 4, 2026
9b9adfd
feat: infer Ma-Wang one-step targets
PerAlexandersson Aug 4, 2026
b704f4e
Merge pull request #344 from PerAlexandersson/codex/mawang-target-inf…
PerAlexandersson Aug 4, 2026
ca587be
feat: infer Ma-Wang sequence certificates
PerAlexandersson Aug 4, 2026
0a3a775
Merge pull request #345 from PerAlexandersson/codex/mawang-sequence-i…
PerAlexandersson Aug 4, 2026
560a33b
feat: infer PF Hadamard weak interlacing
PerAlexandersson Aug 4, 2026
9430e69
Merge pull request #346 from PerAlexandersson/codex/hadamard-pf-prec0
PerAlexandersson Aug 5, 2026
277b0fc
feat: infer Liu-Wang sequence certificates
PerAlexandersson Aug 5, 2026
5c3f792
Merge pull request #347 from PerAlexandersson/codex/liuwang-sequence-…
PerAlexandersson Aug 5, 2026
61e58f9
feat: route zero-endpoint root counts
PerAlexandersson Aug 5, 2026
5dc1eec
Merge pull request #348 from PerAlexandersson/codex/rootcount-zero-en…
PerAlexandersson Aug 5, 2026
e2cc0c7
feat(tactic): infer product sequence certificates
PerAlexandersson Aug 5, 2026
24e0763
Merge pull request #349 from PerAlexandersson/codex/product-factor-re…
PerAlexandersson Aug 5, 2026
e2bbd4a
feat(tactic): infer product recurrence certificates
PerAlexandersson Aug 5, 2026
4793d50
Merge pull request #350 from PerAlexandersson/codex/product-recurrenc…
PerAlexandersson Aug 5, 2026
256ff1c
Infer affine Favard certificate packets
PerAlexandersson Aug 5, 2026
d4ccd8d
Merge pull request #351 from PerAlexandersson/codex/favard-affine-che…
PerAlexandersson Aug 5, 2026
0b1a994
Infer recurrence identification certificates
PerAlexandersson Aug 5, 2026
95471e5
Merge pull request #352 from PerAlexandersson/codex/recurrence-identi…
PerAlexandersson Aug 5, 2026
42a61e4
Merge pull request #325 from PerAlexandersson/codex-gamma315
PerAlexandersson Aug 5, 2026
603016c
Merge pull request #330 from PerAlexandersson/codex/braunjal-model320
PerAlexandersson Aug 5, 2026
e8464a9
Merge pull request #331 from PerAlexandersson/codex-hs326
PerAlexandersson Aug 5, 2026
cf10502
Merge remote-tracking branch 'origin/main' into codex-hs316
PerAlexandersson Aug 5, 2026
2f3644b
Export Hoster-Stump interlacing module
PerAlexandersson Aug 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions RealRooted.lean
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ import RealRooted.Hadamard
import RealRooted.HadamardProduct
import RealRooted.HeilmannLieb
import RealRooted.HermiteBiehler
import RealRooted.HosterStumpInterlacing
import RealRooted.HurwitzMatrix
import RealRooted.InterlacingSequence
import RealRooted.InterlacingSequenceBasic
Expand Down
201 changes: 201 additions & 0 deletions RealRooted/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,207 @@ def Prec (f g : ℝ[X]) : Prop := (f ≠ 0 ∧ f.Splits) ∧ (g ≠ 0 ∧ g.Spli
((ss.length + 1 = rs.length ∧ ListInterlaces ss rs) ∨
(ss.length = rs.length ∧ ListAlternates ss rs))

private lemma listInterlaces_right_tail_ge :
∀ {ss rs : List ℝ} {r : ℝ}, ListInterlaces ss (r :: rs) → ∀ x ∈ rs, r ≤ x
| [], [], _, _ => by simp
| [], _ :: _, _, h => by simp [ListInterlaces] at h
| _ :: _, [], _, _ => by simp
| s :: ss, r₂ :: rs, r, h => by
rcases h with ⟨hr_s, hs_r₂, htail⟩
intro x hx
rcases List.mem_cons.mp hx with rfl | hx
· exact le_trans hr_s hs_r₂
· exact le_trans (le_trans hr_s hs_r₂)
(listInterlaces_right_tail_ge htail x hx)

private lemma listInterlaces_left_ge_head :
∀ {ss rs : List ℝ} {r : ℝ}, ListInterlaces ss (r :: rs) → ∀ x ∈ ss, r ≤ x
| [], _, _, _ => by simp
| _ :: _, [], _, h => by simp [ListInterlaces] at h
| s :: ss, r₂ :: rs, r, h => by
rcases h with ⟨hr_s, hs_r₂, htail⟩
intro x hx
rcases List.mem_cons.mp hx with rfl | hx
· exact hr_s
· exact le_trans (le_trans hr_s hs_r₂)
(listInterlaces_left_ge_head htail x hx)

private lemma listInterlaces_count_left_le_right_of_head (u : ℝ) :
∀ {ss rs : List ℝ}, ListInterlaces ss (u :: rs) →
ss.count u ≤ (u :: rs).count u
| [], _, _ => by simp
| _ :: _, [], h => by simp [ListInterlaces] at h
| s :: ss, r₂ :: rs, h => by
rcases h with ⟨hus, hs_r₂, htail⟩
by_cases hs : s = u
· subst s
by_cases hr₂ : r₂ = u
· subst r₂
have ih := listInterlaces_count_left_le_right_of_head u htail
simp at ih ⊢
lia
· have hu_lt_r₂ : u < r₂ := lt_of_le_of_ne hs_r₂ (Ne.symm hr₂)
have htail_no_mem : u ∉ r₂ :: rs := by
intro hu_mem
rcases List.mem_cons.mp hu_mem with hu_eq | hu_rs
· exact hr₂ hu_eq.symm
· have hge := listInterlaces_right_tail_ge htail u hu_rs
linarith
have hss_no_mem : u ∉ ss := by
intro hu_mem
have hge := listInterlaces_left_ge_head htail u hu_mem
linarith
simp [List.count_eq_zero.mpr htail_no_mem,
List.count_eq_zero.mpr hss_no_mem]
· have hu_lt_s : u < s := lt_of_le_of_ne hus (Ne.symm hs)
have hu_lt_r₂ : u < r₂ := lt_of_lt_of_le hu_lt_s hs_r₂
have htail_no_mem : u ∉ r₂ :: rs := by
intro hu_mem
rcases List.mem_cons.mp hu_mem with hu_eq | hu_rs
· exact ne_of_gt hu_lt_r₂ hu_eq.symm
· have hge := listInterlaces_right_tail_ge htail u hu_rs
linarith
have hss_no_mem : u ∉ ss := by
intro hu_mem
have hge := listInterlaces_left_ge_head htail u hu_mem
linarith
simp [hs, List.count_eq_zero.mpr htail_no_mem,
List.count_eq_zero.mpr hss_no_mem]

private lemma listInterlaces_count_right_le_left_add_one (u : ℝ) :
∀ {ss rs : List ℝ}, ListInterlaces ss rs → rs.count u ≤ ss.count u + 1
| [], [], _ => by simp
| [], [r], _ => by
by_cases hr : r = u <;> simp [hr]
| [], _ :: _ :: _, h => by simp [ListInterlaces] at h
| _ :: _, [], h => by simp [ListInterlaces] at h
| _ :: _, [_], h => by simp [ListInterlaces] at h
| s :: ss, r₁ :: r₂ :: rs, h => by
rcases h with ⟨hr₁s, hs_r₂, htail⟩
by_cases hr₁ : r₁ = u
· by_cases hs : s = u
· subst r₁
subst s
have ih := listInterlaces_count_right_le_left_add_one u htail
simp [List.count_cons] at ih ⊢
lia
· subst r₁
have hu_lt_s : u < s := lt_of_le_of_ne hr₁s (by simpa [eq_comm] using hs)
have hu_lt_r₂ : u < r₂ := lt_of_lt_of_le hu_lt_s hs_r₂
have htail_no_mem : u ∉ r₂ :: rs := by
intro hu_mem
rcases List.mem_cons.mp hu_mem with hu_eq | hu_rs
· exact ne_of_gt hu_lt_r₂ hu_eq.symm
· have hge := listInterlaces_right_tail_ge htail u hu_rs
linarith
have htail_count : (r₂ :: rs).count u = 0 :=
List.count_eq_zero.mpr htail_no_mem
have hss_no_mem : u ∉ ss := by
intro hu_mem
have hge := listInterlaces_left_ge_head htail u hu_mem
linarith
have hss_count : ss.count u = 0 := List.count_eq_zero.mpr hss_no_mem
simp [htail_count, hss_count, hs]
· have ih := listInterlaces_count_right_le_left_add_one u htail
by_cases hs : s = u
· simp [hr₁, hs] at ih ⊢
lia
· simpa [hr₁, hs] using ih

private lemma listInterlaces_count_left_le_right_add_one (u : ℝ) :
∀ {ss rs : List ℝ}, ListInterlaces ss rs → ss.count u ≤ rs.count u + 1
| [], [], _ => by simp
| [], [_], _ => by simp
| [], _ :: _ :: _, h => by simp [ListInterlaces] at h
| _ :: _, [], h => by simp [ListInterlaces] at h
| _ :: _, [_], h => by simp [ListInterlaces] at h
| s :: ss, r₁ :: r₂ :: rs, h => by
rcases h with ⟨hr₁s, hs_r₂, htail⟩
have ih := listInterlaces_count_left_le_right_add_one u htail
by_cases hs : s = u
· by_cases hr₁ : r₁ = u
· simp [hs, hr₁] at ih ⊢
lia
· by_cases hr₂ : r₂ = u
· subst r₂
have hstrong := listInterlaces_count_left_le_right_of_head u htail
simp [hs, hr₁] at hstrong ⊢
lia
· have hu_lt_r₂ : u < r₂ := by
rw [hs] at hs_r₂
exact lt_of_le_of_ne hs_r₂ (Ne.symm hr₂)
have htail_no_mem : u ∉ r₂ :: rs := by
intro hu_mem
rcases List.mem_cons.mp hu_mem with hu_eq | hu_rs
· exact hr₂ hu_eq.symm
· have hge := listInterlaces_right_tail_ge htail u hu_rs
linarith
have hss_no_mem : u ∉ ss := by
intro hu_mem
have hge := listInterlaces_left_ge_head htail u hu_mem
linarith
have htail_count : (r₂ :: rs).count u = 0 :=
List.count_eq_zero.mpr htail_no_mem
have hss_count : ss.count u = 0 := List.count_eq_zero.mpr hss_no_mem
simp [hs, hr₁, htail_count, hss_count]
· by_cases hr₁ : r₁ = u
· simp [hs, hr₁] at ih ⊢
lia
· simp [hs, hr₁] at ih ⊢
lia

private lemma listAlternates_count_bounds (u : ℝ) :
∀ {ss rs : List ℝ}, ListAlternates ss rs →
ss.count u ≤ rs.count u + 1 ∧ rs.count u ≤ ss.count u + 1
| [], [], _ => by simp
| [], _ :: _, h => by simp [ListAlternates] at h
| _ :: _, [], h => by simp [ListAlternates] at h
| s :: ss, r :: rs, h => by
rcases h with ⟨hsr, htail⟩
constructor
· have ih := listInterlaces_count_left_le_right_add_one u htail
by_cases hs : s = u
· by_cases hr : r = u
· subst r
have hstrong := listInterlaces_count_left_le_right_of_head u htail
simp [hs] at hstrong ⊢
lia
· have hu_lt_r : u < r := by
rw [hs] at hsr
exact lt_of_le_of_ne hsr (Ne.symm hr)
have hss_no_mem : u ∉ ss := by
intro hu_mem
have hge := listInterlaces_left_ge_head htail u hu_mem
linarith
have hss_count : ss.count u = 0 := List.count_eq_zero.mpr hss_no_mem
simp [hs, hr, hss_count]
· simpa [hs] using ih
· have ih := listInterlaces_count_right_le_left_add_one u htail
by_cases hs : s = u
· simp [hs] at ih ⊢
lia
· simpa [hs] using ih

/-- In proper position, the multiplicities of every real root differ by at
most one. -/
theorem rootMultiplicity_bounds_of_prec {f g : ℝ[X]} (h : Prec f g) (u : ℝ) :
f.rootMultiplicity u - 1 ≤ g.rootMultiplicity u ∧
g.rootMultiplicity u - 1 ≤ f.rootMultiplicity u := by
rcases h with ⟨_, _, ss, rs, _, _, hss_eq, hrs_eq, hshape⟩
have hcount : ss.count u ≤ rs.count u + 1 ∧ rs.count u ≤ ss.count u + 1 := by
rcases hshape with ⟨_, hint⟩ | ⟨_, halt⟩
· exact ⟨listInterlaces_count_left_le_right_add_one u hint,
listInterlaces_count_right_le_left_add_one u hint⟩
· exact listAlternates_count_bounds u halt
have hrs_count : rs.count u = g.rootMultiplicity u := by
rw [← count_roots g, ← hrs_eq]
exact (Multiset.coe_count u rs).symm
have hss_count : ss.count u = f.rootMultiplicity u := by
rw [← count_roots f, ← hss_eq]
exact (Multiset.coe_count u ss).symm
rw [hss_count, hrs_count] at hcount
lia

lemma natDegree_bounds_of_prec {f g : ℝ[X]} (hfg : Prec f g) :
f.natDegree ≤ g.natDegree ∧ g.natDegree ≤ f.natDegree + 1 := by
rcases hfg with ⟨hf, hg, ss, rs, _, _, hss_eq, hrs_eq, _⟩
Expand Down
10 changes: 8 additions & 2 deletions RealRooted/Challenges/BorceaBranden.lean
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,14 @@ def PreservesRealRootedUpTo
(d : ℕ) (T : ℝ[X] →ₗ[ℝ] ℝ[X]) : Prop :=
∀ {p : ℝ[X]}, p.natDegree ≤ d → p.Splits → T p = 0 ∨ (T p).Splits

/-- Finite-degree Borcea--Branden algebraic-symbol theorem, as a named
classical interface. -/
/-- The positive-symbol sufficiency direction of Borcea--Branden,
Theorem 1.2(b), specialized to one real source variable of degree at most `d`.

The paper's symbol is `T((z + w)^d)`, which is `finiteAlgebraicSymbol d T`
after expanding in the monomial basis. The complex counterpart is
Theorem 1.1(b). The statement below records only the application-facing
implication to real-rooted inputs and zero-aware outputs, not the converse,
the signed-symbol branch, or the low-rank alternative. -/
def finiteSymbolTheoremStatement : Prop :=
∀ {d : ℕ} {T : ℝ[X] →ₗ[ℝ] ℝ[X]},
MvUpperHalfPlaneStable (complexifyMv (finiteAlgebraicSymbol d T)) →
Expand Down
47 changes: 36 additions & 11 deletions RealRooted/Challenges/BraunJal.lean
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand All @@ -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/
Expand All @@ -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))
Expand All @@ -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. -/
Expand Down
Loading