Weight bound

Among the higher coverings \(\Cov_r(S)\) E0007, the partitions \(\Part_r(S)\) are precisely those of minimal weight, with weight equal to \(|S|\).

(1) Lemma. For any covering \(H \in \Cov_r(S)\) with \(r \geq 1\), \(\mathrm{wt}(H) \geq |S|\), with equality if and only if \(H \in \Part_r(S)\).

Proof. Ad \(r = 1\)) \(\Cov_1(S) = \Part_1(S) = \set{S}\) and \(\mathrm{wt}(S) = |S|\).

Ad \(r = 2\)) \(\mathrm{wt}(H) = \sum_{T \in H} |T| \geq |\bigcup H| = |S|\), with equality iff the blocks are pairwise disjoint.

Ad \(r \geq 3\)) Each \(K \in H\) lies in \(\Cov_{r-1}(\lf(K))\), since \(K \in \KP_+^{r-1}(\lf(K))\) by recursion on levels. By induction, \(\mathrm{wt}(H) = \sum_{K \in H} \mathrm{wt}(K) \geq \sum_{K \in H} |\lf(K)| \geq |S|\), with equality iff each \(K \in \Part_{r-1}(\lf(K))\) and the leaf supports partition \(S\). In the equality case \(K \mapsto \lf(K)\) is injective (the \(\lf(K)\) are nonempty and disjoint), so \(H\) matches the recursion defining \(\Part_r\) E0007; conversely each \(H_B \in \Part_{r-1}(B)\) has \(\lf(H_B) = B\).


(2) Validation (AI review, 2026-07-19, claude-fable-5, pass). All three cases, both directions of the equality criterion, edge cases (\(S = \emptyset\) vacuous, singletons, repeated leaf supports, \(r \geq 1\) necessary). No issues found.


Used by:


Lean formalization (source)
import Elements.E0001

/-!
# Weight bound  (E0008)

Formalises `Lem:weight-bound` from
*Discrete Faà di Bruno via Möbius Inversion* (Hartmann, 2026).

The weight bound says `|S| ≤ wt(C) = ∑_{A∈C} |A|` for any cover C of S.
-/

open Finset

namespace Elements

variable {α : Type*} [DecidableEq α]

/-! ### Weight bound for coverings -/

/-- **Weight bound** (`Lem:weight-bound`).
For a cover C of S, `|S| ≤ ∑_{A ∈ C} |A|`.
This is the subadditivity of cardinality: `|⋃ C| ≤ ∑ |A|`. -/
lemma weight_bound {S : Finset α} {C : Finset (Finset α)}
    (hC : C ∈ coverings S) : S.card ≤ ∑ A ∈ C, A.card := by
  -- coverings S = (powPlus S).powerset.filter (fun C => C.biUnion id = S)
  simp only [coverings, Finset.mem_filter] at hC
  rw [← hC.2]
  exact Finset.card_biUnion_le

/-- If a cover has at most `e` blocks each of size at most `d`,
then `|S| ≤ e * d`. -/
lemma cover_size_bound {S : Finset α} {C : Finset (Finset α)}
    (hC : C ∈ coverings S) {e d : ℕ}
    (he : C.card ≤ e) (hd : ∀ A ∈ C, A.card ≤ d) :
    S.card ≤ e * d :=
  calc S.card ≤ ∑ A ∈ C, A.card := weight_bound hC
    _ ≤ C.card * d := Finset.sum_le_card_nsmul C _ d hd
    _ ≤ e * d := Nat.mul_le_mul_right d he

end Elements