Every fully open pair reaches a true sink
ProvedErdos195.open_pair_reaches_sinkA tree witness defines a strict total order on (milestone framework). A finite word of integers is -safe if the sequence "letters of in order, then all remaining integers in -order" has no monotone 4-term arithmetic progression; positions are first occurrences. For an in-order pair of a word ( before ), call its third term and its fourth term; the pair is fully open in if neither lies in . An open path in is a family of in-order pairs , , of letters of with for and no third term in .
Theorem. Let be -safe for some tree witness and let be a fully open in-order pair of . Then there is an open path with starting at whose sink fourth term is not in (so every pair of the path is fully open), such that is a true sink: whenever for an in-order pair of , the fourth term lies in . Moreover , where is the number of distinct levels on the path.
Following "fourth term = third term of the next fully open pair" from any fully open pair always stops at a true sink. Its fourth term then satisfies the first (C1) condition of the tree append criterion (milestone #59). By milestone #153 it never conflicts with its own path. Proof: chains that never stop would repeat a pair (pigeonhole over ), which gives an open cycle, impossible by milestone #147. The length bound is milestone #151.
import Mathlib import Definitions.Def_Erdos195_tree
namespace Erdos195
theorem open_pair_reaches_sink (T : List ℤ) (hS : ∃ θ : ℕ → ℤ → Bool, Safe (treeLt θ) T)
(a₀ b₀ : ℤ) (ha₀ : a₀ ∈ T) (hb₀ : b₀ ∈ T) (hi₀ : T.idxOf a₀ < T.idxOf b₀)
(ht₀ : 2 * b₀ - a₀ ∉ T) (hw₀ : 3 * b₀ - 2 * a₀ ∉ T) :
∃ (m : ℕ) (a b : ℕ → ℤ), 0 < m ∧ a 0 = a₀ ∧ b 0 = b₀ ∧
(∀ i < m, a i ∈ T) ∧ (∀ i < m, b i ∈ T) ∧
(∀ i < m, T.idxOf (a i) < T.idxOf (b i)) ∧
(∀ i, i + 1 < m → 3 * b i - 2 * a i = 2 * b (i + 1) - a (i + 1)) ∧
(∀ i < m, 2 * b i - a i ∉ T) ∧
3 * b (m - 1) - 2 * a (m - 1) ∉ T ∧
(∀ x y : ℤ, x ∈ T → y ∈ T → T.idxOf x < T.idxOf y →
2 * y - x = 3 * b (m - 1) - 2 * a (m - 1) → 3 * y - 2 * x ∈ T) ∧
m + 1 ≤ 2 ^ ((Finset.range m).image (fun i => padicValInt 2 (b i - a i))).card := by sorry
end Erdos195