Skip to content

Commit c106469

Browse files
committed
feat(Combinatorics/SetFamily/Intersecting): L-intersecting families (leanprover-community#34777)
Define L-intersecting families and establish their basic properties. A family 𝒜 of finsets is L-intersecting if all pairwise intersection sizes of distinct members of 𝒜 belong to L ⊆ ℕ. From LeanCamCombi.
1 parent cc82a90 commit c106469

File tree

1 file changed

+57
-2
lines changed

1 file changed

+57
-2
lines changed

Mathlib/Combinatorics/SetFamily/Intersecting.lean

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ This file defines intersecting families and proves their basic properties.
2020
* `Set.Intersecting.card_le`: An intersecting family can only take up to half the elements, because
2121
`a` and `aᶜ` cannot simultaneously be in it.
2222
* `Set.Intersecting.is_max_iff_card_eq`: Any maximal intersecting family takes up half the elements.
23+
* `Set.IsIntersectingOf`: Predicate stating that a family `𝒜` of finsets is `L`-intersecting, i.e.,
24+
meaning the intersection size of every pair of distinct members of `𝒜` belongs to `L ⊆ ℕ`.
2325
2426
## References
2527
@@ -32,12 +34,12 @@ assert_not_exists Monoid
3234

3335
open Finset
3436

35-
variable {α : Type*}
36-
3737
namespace Set
3838

3939
section SemilatticeInf
4040

41+
variable {α : Type*}
42+
4143
variable [SemilatticeInf α] [OrderBot α] {s t : Set α} {a b c : α}
4244

4345
/-- A set family is intersecting if every pair of elements is non-disjoint. -/
@@ -122,6 +124,10 @@ theorem Intersecting.isUpperSet' {s : Finset α} (hs : (s : Set α).Intersecting
122124

123125
end SemilatticeInf
124126

127+
section
128+
129+
variable {α : Type*}
130+
125131
theorem Intersecting.exists_mem_set {𝒜 : Set (Set α)} (h𝒜 : 𝒜.Intersecting) {s t : Set α}
126132
(hs : s ∈ 𝒜) (ht : t ∈ 𝒜) : ∃ a, a ∈ s ∧ a ∈ t :=
127133
not_disjoint_iff.1 <| h𝒜 hs ht
@@ -189,4 +195,53 @@ theorem Intersecting.exists_card_eq (hs : (s : Set α).Intersecting) :
189195
rw [Nat.le_div_iff_mul_le Nat.two_pos, Nat.mul_comm]
190196
exact ht.card_le
191197

198+
end
199+
200+
/-!
201+
### `L`-intersecting families
202+
203+
This section defines `L`-intersecting families and establishes their basic properties.
204+
-/
205+
206+
variable {L L' : Set ℕ}
207+
variable {α : Type*} [DecidableEq α]
208+
variable {𝒜 ℬ : Set (Finset α)}
209+
210+
/--
211+
A family `𝒜` of finite subsets of `α` is `L`-intersecting if the intersection size of every pair of
212+
distinct members of `𝒜` belongs to `L ⊆ ℕ`.
213+
214+
That is, for all `s, t ∈ 𝒜` with `s ≠ t`, we have `|(s ∩ t)| ∈ L`.
215+
-/
216+
def IsIntersectingOf (L : Set ℕ) (𝒜 : Set (Finset α)) : Prop := 𝒜.Pairwise fun s t ↦ #(s ∩ t) ∈ L
217+
218+
namespace IsIntersectingOf
219+
220+
/--
221+
An `L`-intersecting family is also `L'`-intersecting whenever `L ⊆ L'`.
222+
-/
223+
@[gcongr]
224+
theorem mono (h : L ⊆ L') (hL : IsIntersectingOf L 𝒜) : IsIntersectingOf L' 𝒜 := by tauto
225+
226+
/--
227+
An `L`-intersecting family remains `L`-intersecting under restriction to any subfamily.
228+
-/
229+
@[gcongr]
230+
theorem anti (h : ℬ ⊆ 𝒜) (h𝒜 : IsIntersectingOf L 𝒜) : IsIntersectingOf L ℬ := Pairwise.mono h h𝒜
231+
232+
/--
233+
The empty family of finite sets is `L`-intersecting, vacuously, because it contains no pairs of
234+
sets.
235+
-/
236+
@[simp]
237+
protected theorem empty : IsIntersectingOf L (∅ : Set (Finset α)) := by tauto
238+
239+
/--
240+
Every family of finite sets is `univ`-intersecting.
241+
-/
242+
@[simp]
243+
protected theorem univ : IsIntersectingOf univ 𝒜 := 𝒜.pairwise_of_forall _ fun _ _ ↦ trivial
244+
245+
end IsIntersectingOf
246+
192247
end Set

0 commit comments

Comments
 (0)