Exact lifting criterion with root bit 1: absorbing an odd target after an even batch
ProvedErdos195.lifting_criterion_trueA tree witness is a function on the nodes , , of the binary tree of residues. For distinct integers with , put iff . A finite word of integers is -safe if the sequence "the letters of in order, then all remaining integers in -order" contains no monotone -term arithmetic progression. The halves of a word are the subsequences of its even letters and of its odd letters, each mapped by . The half witnesses are and .
Theorem (exact lifting criterion, root bit ). Let . Let be a -safe word, a word of even integers, and an odd integer. Write . Then is -safe if and only if
- the even half of is -safe;
- the odd half of is -safe;
- (closing new even letters) for every and every odd : , or , or ;
- (no new third terms of open pairs) for all with odd and before in : if then ;
- (in-order progressions ending at ) for every even with preceding in : .
This is the companion of the root-bit- lifting criterion (Erdos195.lifting_criterion). When the root bit is , open odd-difference pairs must end at an odd letter. So every new even letter must be closed against every odd letter of (condition 3), and a new even letter must not become the third term of a pair of that is open at the root (condition 4). Odd affine maps with odd flip the root bit (Erdos195.safe_odd_affine_iff). The two criteria together therefore cover absorbing a target of either parity after a batch of the opposite parity.
import Mathlib import Definitions.Def_Erdos195_tree
namespace Erdos195
theorem lifting_criterion_true (θ : ℕ → ℤ → Bool) (h00 : θ 0 0 = true) (S R : List ℤ) (y : ℤ)
(hS : Safe (treeLt θ) S) (hRe : ∀ r ∈ R, r % 2 = 0) (hy : y % 2 = 1) (hyS : y ∉ S) :
Safe (treeLt θ) (S ++ R ++ [y]) ↔
Safe (treeLt (fun k r => θ (k + 1) (2 * r)))
(((S ++ R).filter (fun x => decide (x % 2 = 0))).map (· / 2)) ∧
Safe (treeLt (fun k r => θ (k + 1) (2 * r + 1)))
(((S ++ [y]).filter (fun x => decide (x % 2 = 1))).map (· / 2)) ∧
(∀ b ∈ R, b ∉ S → ∀ a ∈ S, a % 2 = 1 →
2 * b - a ∈ S ∨ 2 * b - a = y ∨ 3 * b - 2 * a ∈ S ++ R) ∧
(∀ a ∈ S, ∀ b ∈ S, (b - a) % 2 = 1 → S.idxOf a < S.idxOf b →
2 * b - a ∈ R → 2 * b - a ∉ S → 3 * b - 2 * a ∈ S) ∧
(∀ b ∈ S ++ R, b % 2 = 0 → 2 * b - y ∈ S →
(S ++ R).idxOf (2 * b - y) < (S ++ R).idxOf b → 2 * y - b ∈ S ++ R) := by sorry
end Erdos195