From dc4661f5ddebaad4e14a549fff92da18ee7c9b2b Mon Sep 17 00:00:00 2001 From: DomTheDeveloper Date: Sun, 26 Jul 2026 10:07:49 -0700 Subject: [PATCH 1/3] feat: prove W(1)=1 and W(2)=3 --- FormalConjectures/ErdosProblems/138Proof.lean | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 FormalConjectures/ErdosProblems/138Proof.lean diff --git a/FormalConjectures/ErdosProblems/138Proof.lean b/FormalConjectures/ErdosProblems/138Proof.lean new file mode 100644 index 000000000..30ba608d7 --- /dev/null +++ b/FormalConjectures/ErdosProblems/138Proof.lean @@ -0,0 +1,150 @@ +/- +Copyright 2026 The Formal Conjectures Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +-/ + +import FormalConjectures.ErdosProblems.«138» + +/-! +# Exact base values for the two-color van der Waerden numbers +-/ + +open Nat Filter + +namespace Erdos138 + +private lemma one_mem_monoAP_guarantee_set_two_one_kernel : + (1 : ℕ) ∈ monoAP_guarantee_set 2 1 := by + intro coloring + refine ⟨coloring ⟨1, Finset.mem_Icc.mpr ⟨le_refl 1, le_refl 1⟩⟩, + {⟨1, Finset.mem_Icc.mpr ⟨le_refl 1, le_refl 1⟩⟩}, ?_, ?_⟩ + · refine Set.IsAPOfLength.one.mpr ⟨1, ?_⟩ + ext x + simp [Set.mem_image, Set.mem_singleton_iff] + · intro m hm + simp [Set.mem_singleton_iff] at hm + subst hm + rfl + +/-- The one-term two-color van der Waerden number is `1`. -/ +@[category test, AMS 11] +theorem monoAPNumber_two_one_kernel : W 1 = 1 := by + apply le_antisymm + · exact Nat.sInf_le one_mem_monoAP_guarantee_set_two_one_kernel + · apply le_csInf ⟨1, one_mem_monoAP_guarantee_set_two_one_kernel⟩ + intro n hn + by_contra hlt + push_neg at hlt + interval_cases n + simp only [monoAP_guarantee_set, Set.mem_setOf_eq] at hn + have hEmpty : IsEmpty ↥(Finset.Icc (1 : ℕ) 0) := by + rw [isEmpty_subtype] + intro x + simp [Finset.mem_Icc] + obtain ⟨_, ap, hap, _⟩ := hn isEmptyElim + have hapEmpty : ap = ∅ := Set.eq_empty_of_isEmpty ap + rw [hapEmpty, Set.image_empty] at hap + exact Set.not_isAPOfLength_empty (by norm_num : (0 : ℕ∞) < 1) hap + +private lemma mono_ap_two_of_eq_color_kernel {N : ℕ} {a b : ℕ} + (ha : a ∈ Finset.Icc 1 N) (hb : b ∈ Finset.Icc 1 N) (hab : a < b) + (coloring : ↥(Finset.Icc 1 N) → Fin 2) + (hc : coloring ⟨a, ha⟩ = coloring ⟨b, hb⟩) : + ContainsMonoAPofLength coloring 2 := by + refine ⟨coloring ⟨a, ha⟩, {⟨a, ha⟩, ⟨b, hb⟩}, ?_, ?_⟩ + · rw [Set.image_pair] + exact Nat.isAPOfLength_pair hab + · intro m hm + simp only [Set.mem_insert_iff, Set.mem_singleton_iff] at hm + rcases hm with rfl | rfl + · rfl + · exact hc.symm + +private lemma not_isAPOfLength_two_of_subsingleton_kernel {s : Set ℕ} + (hss : s.Subsingleton) (hap : s.IsAPOfLength 2) : False := by + rcases Set.eq_empty_or_nonempty s with h | h + · rw [h] at hap + exact Set.not_isAPOfLength_empty (by norm_num : (0 : ℕ∞) < 2) hap + · obtain ⟨x, hx⟩ := h + have hs : s = {x} := Set.Subsingleton.eq_singleton_of_mem hss hx + rw [hs] at hap + exact absurd (hap.congr (Set.IsAPOfLength.one.mpr ⟨x, rfl⟩)) (by norm_num) + +private lemma three_mem_monoAP_guarantee_set_two_two_kernel : + (3 : ℕ) ∈ monoAP_guarantee_set 2 2 := by + intro coloring + have h1 : (1 : ℕ) ∈ Finset.Icc 1 3 := by decide + have h2 : (2 : ℕ) ∈ Finset.Icc 1 3 := by decide + have h3 : (3 : ℕ) ∈ Finset.Icc 1 3 := by decide + by_cases h12 : coloring ⟨1, h1⟩ = coloring ⟨2, h2⟩ + · exact mono_ap_two_of_eq_color_kernel h1 h2 (by norm_num) coloring h12 + by_cases h23 : coloring ⟨2, h2⟩ = coloring ⟨3, h3⟩ + · exact mono_ap_two_of_eq_color_kernel h2 h3 (by norm_num) coloring h23 + · have h13 : coloring ⟨1, h1⟩ = coloring ⟨3, h3⟩ := by + ext + have h1v := (coloring ⟨1, h1⟩).isLt + have h2v := (coloring ⟨2, h2⟩).isLt + have h3v := (coloring ⟨3, h3⟩).isLt + simp only [Fin.ext_iff, Fin.val_zero, Fin.val_one] at h12 h23 ⊢ + omega + exact mono_ap_two_of_eq_color_kernel h1 h3 (by norm_num) coloring h13 + +/-- The two-term two-color van der Waerden number is `3`. -/ +@[category test, AMS 11] +theorem monoAPNumber_two_two_kernel : W 2 = 3 := by + apply le_antisymm + · exact Nat.sInf_le three_mem_monoAP_guarantee_set_two_two_kernel + · apply le_csInf ⟨3, three_mem_monoAP_guarantee_set_two_two_kernel⟩ + intro n hn + by_contra hlt + push_neg at hlt + interval_cases n + · simp only [monoAP_guarantee_set, Set.mem_setOf_eq] at hn + have hEmpty : IsEmpty ↥(Finset.Icc (1 : ℕ) 0) := by + rw [isEmpty_subtype] + intro x + simp [Finset.mem_Icc] + obtain ⟨_, ap, hap, _⟩ := hn isEmptyElim + have hapEmpty : ap = ∅ := Set.eq_empty_of_isEmpty ap + rw [hapEmpty, Set.image_empty] at hap + exact Set.not_isAPOfLength_empty (by norm_num : (0 : ℕ∞) < 2) hap + · simp only [monoAP_guarantee_set, Set.mem_setOf_eq] at hn + obtain ⟨_, ap, hap, _⟩ := hn (fun _ => 0) + exact not_isAPOfLength_two_of_subsingleton_kernel (by + rintro _ ⟨⟨a, ha⟩, -, rfl⟩ _ ⟨⟨b, hb⟩, -, rfl⟩ + have ha' := Finset.mem_coe.mp ha + have hb' := Finset.mem_coe.mp hb + rw [Finset.mem_Icc] at ha' hb' + have hab : a = b := by omega + subst hab + rfl) hap + · simp only [monoAP_guarantee_set, Set.mem_setOf_eq] at hn + let col : ↥(Finset.Icc (1 : ℕ) 2) → Fin 2 := fun x => if x.1 = 1 then 0 else 1 + obtain ⟨c, ap, hap, hc⟩ := hn col + exact not_isAPOfLength_two_of_subsingleton_kernel (by + rintro _ ⟨a, ha, rfl⟩ _ ⟨b, hb, rfl⟩ + have hca := hc a ha + have hcb := hc b hb + simp only [col] at hca hcb + have haVal := a.2 + have hbVal := b.2 + simp [Finset.mem_Icc] at haVal hbVal + congr 1 + ext + split_ifs at hca hcb with h1 h2 h3 h4 <;> omega) hap + +#print axioms monoAPNumber_two_one_kernel +#print axioms monoAPNumber_two_two_kernel + +end Erdos138 From ed8dd3a714df9122493e3b500c6d033bcd6b6f9c Mon Sep 17 00:00:00 2001 From: DomTheDeveloper Date: Sun, 26 Jul 2026 10:08:09 -0700 Subject: [PATCH 2/3] ci: audit W(1) and W(2) proofs --- .github/workflows/openai-vdw-base-audit.yml | 57 +++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/workflows/openai-vdw-base-audit.yml diff --git a/.github/workflows/openai-vdw-base-audit.yml b/.github/workflows/openai-vdw-base-audit.yml new file mode 100644 index 000000000..e07907f16 --- /dev/null +++ b/.github/workflows/openai-vdw-base-audit.yml @@ -0,0 +1,57 @@ +name: OpenAI van der Waerden base-value audit + +on: + pull_request: + branches: [main] + paths: + - '.github/workflows/openai-vdw-base-audit.yml' + - 'FormalConjectures/ErdosProblems/138Proof.lean' + +permissions: + contents: read + +jobs: + audit: + runs-on: ubuntu-latest + timeout-minutes: 35 + steps: + - uses: actions/checkout@v6 + - name: Install pinned Lean toolchain + run: | + curl -fsSL https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | sh -s -- -y --default-toolchain none + echo "$HOME/.elan/bin" >> "$GITHUB_PATH" + - uses: actions/cache@v4 + with: + path: | + .lake/packages + .lake/build + key: vdw-base-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('lean-toolchain', 'lake-manifest.json', 'lakefile.toml') }} + restore-keys: vdw-base-${{ runner.os }}-${{ runner.arch }}- + - name: Fetch compiled dependencies + run: lake exe cache get + - name: Reject proof holes and trust escapes + run: | + set -euo pipefail + f=FormalConjectures/ErdosProblems/138Proof.lean + ! grep -nE '\b(sorry|admit)\b|native_decide|decide \+native|unsafe|axiom |Lean\.ofReduce|Lean\.ofReduceBool|Lean\.trustCompiler' "$f" + - name: Compile exact proof module + run: | + set -o pipefail + lake env lean FormalConjectures/ErdosProblems/138Proof.lean 2>&1 | tee /tmp/vdw-base-build.log + - name: Audit exact theorem axioms + run: | + cat > /tmp/VdWBaseAxioms.lean <<'EOF' + import FormalConjectures.ErdosProblems.«138Proof» + #print axioms Erdos138.monoAPNumber_two_one_kernel + #print axioms Erdos138.monoAPNumber_two_two_kernel + EOF + lake env lean /tmp/VdWBaseAxioms.lean 2>&1 | tee /tmp/vdw-base-axioms.log + ! grep -E 'sorryAx|Lean\.ofReduce|Lean\.ofReduceBool|Lean\.trustCompiler' /tmp/vdw-base-axioms.log + - uses: actions/upload-artifact@v4 + if: always() + with: + name: vdw-base-${{ github.run_id }} + path: | + /tmp/vdw-base-build.log + /tmp/vdw-base-axioms.log + if-no-files-found: warn From 69ba9d07479dfaca6eee121ea91a0182849a4297 Mon Sep 17 00:00:00 2001 From: DomTheDeveloper Date: Sun, 26 Jul 2026 10:10:24 -0700 Subject: [PATCH 3/3] ci: build the registered van der Waerden proof module --- .github/workflows/openai-vdw-base-audit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/openai-vdw-base-audit.yml b/.github/workflows/openai-vdw-base-audit.yml index e07907f16..b47258735 100644 --- a/.github/workflows/openai-vdw-base-audit.yml +++ b/.github/workflows/openai-vdw-base-audit.yml @@ -37,7 +37,7 @@ jobs: - name: Compile exact proof module run: | set -o pipefail - lake env lean FormalConjectures/ErdosProblems/138Proof.lean 2>&1 | tee /tmp/vdw-base-build.log + lake build FormalConjectures.ErdosProblems.«138Proof» 2>&1 | tee /tmp/vdw-base-build.log - name: Audit exact theorem axioms run: | cat > /tmp/VdWBaseAxioms.lean <<'EOF'