Zulip Chat Archive
Stream: Is there code for X?
Topic: Intersection is nonempty of sum of card gt than univ card
Christoph Spiegel (Oct 10 2024 at 07:27):
Hey, does anything like this already exist in mathlib? I wasn't able to find it:
import Mathlib.Data.Fintype.Card
import Mathlib.Data.Finset.Card
import Mathlib.Tactic
variable {α : Type*} [Fintype α] [DecidableEq α] {S T : Finset α}
lemma card_add_le_inter_add_card_univ (S T : Finset α) : S.card + T.card ≤ (S ∩ T).card + Fintype.card α := by
have := Finset.card_inter_add_card_union S T
have := Finset.card_le_univ (S ∪ T)
linarith
lemma inter_ne_empty_of_card_add_gt_card_univ (h : S.card + T.card > Fintype.card α) : (S ∩ T).Nonempty :=
Finset.card_pos.mp (Nat.lt_add_left_iff_pos.mp (Nat.lt_of_lt_of_le h (card_add_le_inter_add_card_univ S T)))
lemma exists_ne_mem_inter_of_card_add_gt_card_univ (h : S.card + T.card > Fintype.card α) : ∃ x, x ∈ S ∩ T :=
inter_ne_empty_of_card_add_gt_card_univ h
lemma exists_ne_mem_of_card_add_gt_card_univ (h : S.card + T.card > Fintype.card α) : ∃ x, x ∈ S ∧ x ∈ T := by
obtain ⟨x, hx⟩ := exists_ne_mem_inter_of_card_add_gt_card_univ h
exact ⟨x, Finset.mem_inter.mp hx⟩
Yaël Dillies (Oct 10 2024 at 07:28):
Yes, see docs#Finset.inter_nonempty_of_card_lt_card_add_card
Yaël Dillies (Oct 10 2024 at 07:30):
import Mathlib.Data.Fintype.Card
variable {α : Type*} [Fintype α] [DecidableEq α] {S T : Finset α}
namespace Finset
lemma inter_ne_empty_of_card_add_gt_card_univ (h : Fintype.card α < S.card + T.card) :
(S ∩ T).Nonempty := inter_nonempty_of_card_lt_card_add_card S.subset_univ T.subset_univ h
Christoph Spiegel (Oct 10 2024 at 07:34):
Ah, so it was one of the pigeonhole statements after all, thanks!
Last updated: May 02 2025 at 03:31 UTC