mathlib documentation

combinatorics.double_counting

Double countings #

This file gathers a few double counting arguments.

Bipartite graphs #

In a bipartite graph (considered as a relation r : α → β → Prop), we can bound the number of edges between s : finset α and t : finset β by the minimum/maximum of edges over all a ∈ s times the the size of s. Similarly for t. Combining those two yields inequalities between the sizes of s and t.

Bipartite graph #

def finset.bipartite_below {α : Type u_1} {β : Type u_2} (r : α → β → Prop) (s : finset α) (b : β) [Π (a : α), decidable (r a b)] :

Elements of s which are "below" b according to relation r.

Equations
def finset.bipartite_above {α : Type u_1} {β : Type u_2} (r : α → β → Prop) (t : finset β) (a : α) [decidable_pred (r a)] :

Elements of t which are "above" a according to relation r.

Equations
theorem finset.bipartite_below_swap {α : Type u_1} {β : Type u_2} (r : α → β → Prop) (t : finset β) (a : α) [decidable_pred (r a)] :
theorem finset.bipartite_above_swap {α : Type u_1} {β : Type u_2} (r : α → β → Prop) (s : finset α) (b : β) [Π (a : α), decidable (r a b)] :
@[simp]
theorem finset.mem_bipartite_below {α : Type u_1} {β : Type u_2} (r : α → β → Prop) {s : finset α} {b : β} [Π (a : α), decidable (r a b)] {a : α} :
@[simp]
theorem finset.mem_bipartite_above {α : Type u_1} {β : Type u_2} (r : α → β → Prop) {t : finset β} {a : α} [decidable_pred (r a)] {b : β} :
theorem finset.sum_card_bipartite_above_eq_sum_card_bipartite_below {α : Type u_1} {β : Type u_2} (r : α → β → Prop) {s : finset α} {t : finset β} [Π (a : α) (b : β), decidable (r a b)] :
s.sum (λ (a : α), (finset.bipartite_above r t a).card) = t.sum (λ (b : β), (finset.bipartite_below r s b).card)
theorem finset.card_mul_le_card_mul {α : Type u_1} {β : Type u_2} (r : α → β → Prop) {s : finset α} {t : finset β} {m n : } [Π (a : α) (b : β), decidable (r a b)] (hm : ∀ (a : α), a sm (finset.bipartite_above r t a).card) (hn : ∀ (b : β), b t(finset.bipartite_below r s b).card n) :
s.card * m t.card * n

Double counting argument. Considering r as a bipartite graph, the LHS is a lower bound on the number of edges while the RHS is an upper bound.

theorem finset.card_mul_le_card_mul' {α : Type u_1} {β : Type u_2} (r : α → β → Prop) {s : finset α} {t : finset β} {m n : } [Π (a : α) (b : β), decidable (r a b)] (hn : ∀ (b : β), b tn (finset.bipartite_below r s b).card) (hm : ∀ (a : α), a s(finset.bipartite_above r t a).card m) :
t.card * n s.card * m
theorem finset.card_mul_eq_card_mul {α : Type u_1} {β : Type u_2} (r : α → β → Prop) {s : finset α} {t : finset β} {m n : } [Π (a : α) (b : β), decidable (r a b)] (hm : ∀ (a : α), a s(finset.bipartite_above r t a).card = m) (hn : ∀ (b : β), b t(finset.bipartite_below r s b).card = n) :
s.card * m = t.card * n