# Documentation

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 #

• Finset.shadow: The shadow of a set family. Everything we can get by removing a new element from some set.
• Finset.up_shadow: The upper shadow of a set family. Everything we can get by adding an element to some set.

## Notation #

We define notation in locale FinsetFamily:

• ∂ 𝒜∂ 𝒜: Shadow of 𝒜.
• ∂⁺ 𝒜∂⁺ 𝒜⁺ 𝒜: Upper shadow of 𝒜.

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 #

• https://github.com/b-mehta/maths-notes/blob/master/iii/mich/combinatorics.pdf
• http://discretemath.imp.fu-berlin.de/DMII-2015-16/kruskal.pdf

## Tags #

def Finset.shadow {α : Type u_1} [inst : ] (𝒜 : 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

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
@[simp]
theorem Finset.shadow_empty {α : Type u_1} [inst : ] :

The shadow of the empty set is empty.

@[simp]
theorem Finset.shadow_singleton_empty {α : Type u_1} [inst : ] :
theorem Finset.shadow_monotone {α : Type u_1} [inst : ] :

The shadow is monotone.

theorem Finset.mem_shadow_iff {α : Type u_1} [inst : ] {𝒜 : Finset ()} {s : } :
t, t 𝒜 a, a t = s

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

theorem Finset.erase_mem_shadow {α : Type u_1} [inst : ] {𝒜 : Finset ()} {s : } {a : α} (hs : s 𝒜) (ha : a s) :
theorem Finset.mem_shadow_iff_insert_mem {α : Type u_1} [inst : ] {𝒜 : Finset ()} {s : } :
a x, insert a s 𝒜

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

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

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

theorem Finset.sized_shadow_iff {α : Type u_1} [inst : ] {𝒜 : Finset ()} {r : } (h : ¬ 𝒜) :
Set.Sized r ↑() Set.Sized (r + 1) 𝒜
theorem Finset.mem_shadow_iff_exists_mem_card_add_one {α : Type u_1} [inst : ] {𝒜 : Finset ()} {s : } :
t, t 𝒜 s t = + 1

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

theorem Finset.exists_subset_of_mem_shadow {α : Type u_1} [inst : ] {𝒜 : Finset ()} {s : } (hs : ) :
t, t 𝒜 s t

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

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

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

def Finset.upShadow {α : Type u_1} [inst : ] [inst : ] (𝒜 : 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 (up_shadow^[k]) is all sets we can get by adding k elements from any set in 𝒜.

Equations

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 (up_shadow^[k]) is all sets we can get by adding k elements from any set in 𝒜.

Equations
@[simp]
theorem Finset.upShadow_empty {α : Type u_1} [inst : ] [inst : ] :

The upper shadow of the empty set is empty.

theorem Finset.upShadow_monotone {α : Type u_1} [inst : ] [inst : ] :

The upper shadow is monotone.

theorem Finset.mem_upShadow_iff {α : Type u_1} [inst : ] [inst : ] {𝒜 : Finset ()} {s : } :
t, t 𝒜 a x, insert a t = s

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

theorem Finset.insert_mem_upShadow {α : Type u_1} [inst : ] [inst : ] {𝒜 : Finset ()} {s : } {a : α} (hs : s 𝒜) (ha : ¬a s) :
insert a s
theorem Finset.Set.Sized.upShadow {α : Type u_1} [inst : ] [inst : ] {𝒜 : Finset ()} {r : } (h𝒜 : Set.Sized r 𝒜) :
Set.Sized (r + 1) ↑()

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

theorem Finset.mem_upShadow_iff_erase_mem {α : Type u_1} [inst : ] [inst : ] {𝒜 : Finset ()} {s : } :
a, a s 𝒜

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} [inst : ] [inst : ] {𝒜 : Finset ()} {s : } :
t, t 𝒜 t s + 1 =

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

theorem Finset.exists_subset_of_mem_upShadow {α : Type u_1} [inst : ] [inst : ] {𝒜 : Finset ()} {s : } (hs : ) :
t, 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} [inst : ] [inst : ] {𝒜 : Finset ()} {s : } {k : } :
s t, t 𝒜 t s + k =

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

@[simp]
theorem Finset.shadow_image_compl {α : Type u_1} [inst : ] [inst : ] {𝒜 : Finset ()} :
@[simp]
theorem Finset.upShadow_image_compl {α : Type u_1} [inst : ] [inst : ] {𝒜 : Finset ()} :