Documentation

Mathlib.Combinatorics.SetFamily.Shadow

Shadows #

This file defines shadows of a set family. The shadow of a set family is the set family of sets we get by removing any element from any set of the original family. If one pictures Finset α as a big hypercube (each dimension being membership of a given element), then taking the shadow corresponds to projecting each finset down once in all available directions.

Main definitions #

Notation #

We define notation in locale FinsetFamily:

We also maintain the convention that a, b : α are elements of the ground type, s, t : Finset α are finsets, and 𝒜, ℬ : Finset (Finset α) are finset families.

References #

Tags #

shadow, set family

def Finset.shadow {α : Type u_1} [DecidableEq α] (𝒜 : Finset (Finset α)) :

The shadow of a set family 𝒜 is all sets we can get by removing one element from any set in 𝒜, and the (k times) iterated shadow (shadow^[k]) is all sets we can get by removing k elements from any set in 𝒜.

Equations
    Instances For

      The shadow of a set family 𝒜 is all sets we can get by removing one element from any set in 𝒜, and the (k times) iterated shadow (shadow^[k]) is all sets we can get by removing k elements from any set in 𝒜.

      Equations
        Instances For
          @[simp]

          The shadow of the empty set is empty.

          @[simp]
          @[simp]
          theorem Finset.shadow_singleton {α : Type u_1} [DecidableEq α] (a : α) :

          The shadow is monotone.

          theorem Finset.shadow_mono {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} (h𝒜ℬ : 𝒜 ) :
          𝒜.shadow .shadow
          theorem Finset.mem_shadow_iff {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {t : Finset α} :
          t 𝒜.shadow s𝒜, as, s.erase a = t

          t is in the shadow of 𝒜 iff there is a s ∈ 𝒜 from which we can remove one element to get t.

          theorem Finset.erase_mem_shadow {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {s : Finset α} {a : α} (hs : s 𝒜) (ha : a s) :
          s.erase a 𝒜.shadow
          theorem Finset.mem_shadow_iff_exists_sdiff {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {t : Finset α} :
          t 𝒜.shadow s𝒜, t s (s \ t).card = 1

          t ∈ ∂𝒜 iff t is exactly one element less than something from 𝒜.

          See also Finset.mem_shadow_iff_exists_mem_card_add_one.

          theorem Finset.mem_shadow_iff_insert_mem {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {t : Finset α} :
          t 𝒜.shadow at, insert a t 𝒜

          t is in the shadow of 𝒜 iff we can add an element to it so that the resulting finset is in 𝒜.

          theorem Finset.mem_shadow_iff_exists_mem_card_add_one {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {t : Finset α} :
          t 𝒜.shadow s𝒜, t s s.card = t.card + 1

          s ∈ ∂ 𝒜 iff s is exactly one element less than something from 𝒜.

          See also Finset.mem_shadow_iff_exists_sdiff.

          theorem Finset.mem_shadow_iterate_iff_exists_card {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {t : Finset α} {k : } :
          t shadow^[k] 𝒜 ∃ (u : Finset α), u.card = k Disjoint t u t u 𝒜
          theorem Finset.mem_shadow_iterate_iff_exists_sdiff {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {t : Finset α} {k : } :
          t shadow^[k] 𝒜 s𝒜, t s (s \ t).card = k

          t ∈ ∂^k 𝒜 iff t is exactly k elements less than something from 𝒜.

          See also Finset.mem_shadow_iff_exists_mem_card_add.

          theorem Finset.mem_shadow_iterate_iff_exists_mem_card_add {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {t : Finset α} {k : } :
          t shadow^[k] 𝒜 s𝒜, t s s.card = t.card + k

          t ∈ ∂^k 𝒜 iff t is exactly k elements less than something in 𝒜.

          See also Finset.mem_shadow_iterate_iff_exists_sdiff.

          theorem Set.Sized.shadow {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {r : } (h𝒜 : Sized r 𝒜) :
          Sized (r - 1) 𝒜.shadow

          The shadow of a family of r-sets is a family of r - 1-sets.

          theorem Set.Sized.shadow_iterate {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {k r : } (h𝒜 : Sized r 𝒜) :
          Sized (r - k) (Finset.shadow^[k] 𝒜)

          The k-th shadow of a family of r-sets is a family of r - k-sets.

          theorem Finset.sized_shadow_iff {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {r : } (h : 𝒜) :
          Set.Sized r 𝒜.shadow Set.Sized (r + 1) 𝒜
          theorem Finset.exists_subset_of_mem_shadow {α : Type u_1} [DecidableEq α] {𝒜 : Finset (Finset α)} {t : Finset α} (hs : t 𝒜.shadow) :
          s𝒜, t s

          Being in the shadow of 𝒜 means we have a superset in 𝒜.

          def Finset.upShadow {α : Type u_1} [DecidableEq α] [Fintype α] (𝒜 : Finset (Finset α)) :

          The upper shadow of a set family 𝒜 is all sets we can get by adding one element to any set in 𝒜, and the (k times) iterated upper shadow (upShadow^[k]) is all sets we can get by adding k elements from any set in 𝒜.

          Equations
            Instances For

              The upper shadow of a set family 𝒜 is all sets we can get by adding one element to any set in 𝒜, and the (k times) iterated upper shadow (upShadow^[k]) is all sets we can get by adding k elements from any set in 𝒜.

              Equations
                Instances For
                  @[simp]

                  The upper shadow of the empty set is empty.

                  The upper shadow is monotone.

                  theorem Finset.mem_upShadow_iff {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {t : Finset α} :
                  t 𝒜.upShadow s𝒜, as, insert a s = t

                  t is in the upper shadow of 𝒜 iff there is a s ∈ 𝒜 from which we can remove one element to get t.

                  theorem Finset.insert_mem_upShadow {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {s : Finset α} {a : α} (hs : s 𝒜) (ha : as) :
                  theorem Finset.mem_upShadow_iff_exists_sdiff {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {t : Finset α} :
                  t 𝒜.upShadow s𝒜, s t (t \ s).card = 1

                  t is in the upper shadow of 𝒜 iff t is exactly one element more than something from 𝒜.

                  See also Finset.mem_upShadow_iff_exists_mem_card_add_one.

                  theorem Finset.mem_upShadow_iff_erase_mem {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {t : Finset α} :
                  t 𝒜.upShadow at, t.erase a 𝒜

                  t is in the upper shadow of 𝒜 iff we can remove an element from it so that the resulting finset is in 𝒜.

                  theorem Finset.mem_upShadow_iff_exists_mem_card_add_one {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {t : Finset α} :
                  t 𝒜.upShadow s𝒜, s t t.card = s.card + 1

                  t is in the upper shadow of 𝒜 iff t is exactly one element less than something from 𝒜.

                  See also Finset.mem_upShadow_iff_exists_sdiff.

                  theorem Finset.mem_upShadow_iterate_iff_exists_card {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {t : Finset α} {k : } :
                  t upShadow^[k] 𝒜 ∃ (u : Finset α), u.card = k u t t \ u 𝒜
                  theorem Finset.mem_upShadow_iterate_iff_exists_sdiff {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {t : Finset α} {k : } :
                  t upShadow^[k] 𝒜 s𝒜, s t (t \ s).card = k

                  t is in the upper shadow of 𝒜 iff t is exactly k elements less than something from 𝒜.

                  See also Finset.mem_upShadow_iff_exists_mem_card_add.

                  theorem Finset.mem_upShadow_iterate_iff_exists_mem_card_add {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {t : Finset α} {k : } :
                  t upShadow^[k] 𝒜 s𝒜, s t t.card = s.card + k

                  t ∈ ∂⁺^k 𝒜 iff t is exactly k elements less than something in 𝒜.

                  See also Finset.mem_upShadow_iterate_iff_exists_sdiff.

                  theorem Set.Sized.upShadow {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {r : } (h𝒜 : Sized r 𝒜) :
                  Sized (r + 1) 𝒜.upShadow

                  The upper shadow of a family of r-sets is a family of r + 1-sets.

                  theorem Finset.exists_subset_of_mem_upShadow {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {s : Finset α} (hs : s 𝒜.upShadow) :
                  t𝒜, t s

                  Being in the upper shadow of 𝒜 means we have a superset in 𝒜.

                  theorem Finset.mem_upShadow_iff_exists_mem_card_add {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} {s : Finset α} {k : } :
                  s upShadow^[k] 𝒜 t𝒜, t s t.card + k = s.card

                  t ∈ ∂^k 𝒜 iff t is exactly k elements more than something in 𝒜.

                  @[simp]
                  theorem Finset.shadow_compls {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} :
                  @[simp]
                  theorem Finset.upShadow_compls {α : Type u_1} [DecidableEq α] [Fintype α] {𝒜 : Finset (Finset α)} :