Theorem: Finset.mem_upShadow_iff_exists_mem_card_add
File: Mathlib/Combinatorics/SetFamily/Shadow.lean

tactic: induction' k with k ih generalizing 𝒜 s
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
𝒜 : Finset (Finset α)
s t : Finset α
a : α
k r : ℕ
⊢ s ∈ ∂⁺ ^[k] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + k = s.card
state_after: case zero
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ s ∈ ∂⁺ ^[0] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + 0 = s.card

case succ
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
ih : ∀ {𝒜 : Finset (Finset α)} {s : Finset α}, s ∈ ∂⁺ ^[k] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + k = s.card
𝒜 : Finset (Finset α)
s : Finset α
⊢ s ∈ ∂⁺ ^[k + 1] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card

tactic: simp only [exists_prop, Function.comp_apply, Function.iterate_succ]
state_before: case succ
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
ih : ∀ {𝒜 : Finset (Finset α)} {s : Finset α}, s ∈ ∂⁺ ^[k] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + k = s.card
𝒜 : Finset (Finset α)
s : Finset α
⊢ s ∈ ∂⁺ ^[k + 1] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card
state_after: case succ
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
ih : ∀ {𝒜 : Finset (Finset α)} {s : Finset α}, s ∈ ∂⁺ ^[k] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + k = s.card
𝒜 : Finset (Finset α)
s : Finset α
⊢ s ∈ ∂⁺ ^[k] (∂⁺ 𝒜) ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card

tactic: refine ih.trans ?_
state_before: case succ
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
ih : ∀ {𝒜 : Finset (Finset α)} {s : Finset α}, s ∈ ∂⁺ ^[k] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + k = s.card
𝒜 : Finset (Finset α)
s : Finset α
⊢ s ∈ ∂⁺ ^[k] (∂⁺ 𝒜) ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card
state_after: case succ
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
ih : ∀ {𝒜 : Finset (Finset α)} {s : Finset α}, s ∈ ∂⁺ ^[k] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + k = s.card
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card) ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card

tactic: clear ih
state_before: case succ
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
ih : ∀ {𝒜 : Finset (Finset α)} {s : Finset α}, s ∈ ∂⁺ ^[k] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + k = s.card
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card) ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card
state_after: case succ
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card) ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card

tactic: constructor
state_before: case succ
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card) ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card
state_after: case succ.mp
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card) → ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card

case succ.mpr
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card) → ∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card

tactic: refine ⟨fun hs => ⟨s, hs, Subset.refl _, rfl⟩, ?_⟩
state_before: case zero
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ s ∈ ∂⁺ ^[0] 𝒜 ↔ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + 0 = s.card
state_after: case zero
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ 𝒜, t ⊆ s ∧ t.card + 0 = s.card) → s ∈ ∂⁺ ^[0] 𝒜

tactic: rintro ⟨t, ht, hst, hcard⟩
state_before: case zero
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ 𝒜, t ⊆ s ∧ t.card + 0 = s.card) → s ∈ ∂⁺ ^[0] 𝒜
state_after: case zero.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hst : t ⊆ s
hcard : t.card + 0 = s.card
⊢ s ∈ ∂⁺ ^[0] 𝒜

tactic: rwa [← eq_of_subset_of_card_le hst hcard.ge]
state_before: case zero.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hst : t ⊆ s
hcard : t.card + 0 = s.card
⊢ s ∈ ∂⁺ ^[0] 𝒜
state_after: no goals

tactic: rintro ⟨t, ht, hts, hcardst⟩
state_before: case succ.mp
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card) → ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card
state_after: case succ.mp.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ ∂⁺ 𝒜
hts : t ⊆ s
hcardst : t.card + k = s.card
⊢ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card

tactic: obtain ⟨u, hu, hut, hcardtu⟩ := mem_upShadow_iff_exists_mem_card_add_one.1 ht
state_before: case succ.mp.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ ∂⁺ 𝒜
hts : t ⊆ s
hcardst : t.card + k = s.card
⊢ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card
state_after: case succ.mp.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ ∂⁺ 𝒜
hts : t ⊆ s
hcardst : t.card + k = s.card
u : Finset α
hu : u ∈ 𝒜
hut : u ⊆ t
hcardtu : t.card = u.card + 1
⊢ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card

tactic: refine ⟨u, hu, hut.trans hts, ?_⟩
state_before: case succ.mp.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ ∂⁺ 𝒜
hts : t ⊆ s
hcardst : t.card + k = s.card
u : Finset α
hu : u ∈ 𝒜
hut : u ⊆ t
hcardtu : t.card = u.card + 1
⊢ ∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card
state_after: case succ.mp.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ ∂⁺ 𝒜
hts : t ⊆ s
hcardst : t.card + k = s.card
u : Finset α
hu : u ∈ 𝒜
hut : u ⊆ t
hcardtu : t.card = u.card + 1
⊢ u.card + (k + 1) = s.card

tactic: rw [← hcardst, hcardtu, add_right_comm]
state_before: case succ.mp.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ ∂⁺ 𝒜
hts : t ⊆ s
hcardst : t.card + k = s.card
u : Finset α
hu : u ∈ 𝒜
hut : u ⊆ t
hcardtu : t.card = u.card + 1
⊢ u.card + (k + 1) = s.card
state_after: case succ.mp.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ ∂⁺ 𝒜
hts : t ⊆ s
hcardst : t.card + k = s.card
u : Finset α
hu : u ∈ 𝒜
hut : u ⊆ t
hcardtu : t.card = u.card + 1
⊢ u.card + (k + 1) = u.card + k + 1

tactic: rfl
state_before: case succ.mp.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ ∂⁺ 𝒜
hts : t ⊆ s
hcardst : t.card + k = s.card
u : Finset α
hu : u ∈ 𝒜
hut : u ⊆ t
hcardtu : t.card = u.card + 1
⊢ u.card + (k + 1) = u.card + k + 1
state_after: no goals

tactic: rintro ⟨t, ht, hts, hcard⟩
state_before: case succ.mpr
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s : Finset α
⊢ (∃ t ∈ 𝒜, t ⊆ s ∧ t.card + (k + 1) = s.card) → ∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card
state_after: case succ.mpr.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hts : t ⊆ s
hcard : t.card + (k + 1) = s.card
⊢ ∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card

tactic: obtain ⟨u, htu, hus, hu⟩ := Finset.exists_subsuperset_card_eq hts (Nat.le_add_right _ 1)
  (by omega)
state_before: case succ.mpr.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hts : t ⊆ s
hcard : t.card + (k + 1) = s.card
⊢ ∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card
state_after: case succ.mpr.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hts : t ⊆ s
hcard : t.card + (k + 1) = s.card
u : Finset α
htu : t ⊆ u
hus : u ⊆ s
hu : u.card = t.card + 1
⊢ ∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card

tactic: refine ⟨u, mem_upShadow_iff_exists_mem_card_add_one.2 ⟨t, ht, htu, hu⟩, hus, ?_⟩
state_before: case succ.mpr.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hts : t ⊆ s
hcard : t.card + (k + 1) = s.card
u : Finset α
htu : t ⊆ u
hus : u ⊆ s
hu : u.card = t.card + 1
⊢ ∃ t ∈ ∂⁺ 𝒜, t ⊆ s ∧ t.card + k = s.card
state_after: case succ.mpr.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hts : t ⊆ s
hcard : t.card + (k + 1) = s.card
u : Finset α
htu : t ⊆ u
hus : u ⊆ s
hu : u.card = t.card + 1
⊢ u.card + k = s.card

tactic: rw [hu, ← hcard, add_right_comm]
state_before: case succ.mpr.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hts : t ⊆ s
hcard : t.card + (k + 1) = s.card
u : Finset α
htu : t ⊆ u
hus : u ⊆ s
hu : u.card = t.card + 1
⊢ u.card + k = s.card
state_after: case succ.mpr.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hts : t ⊆ s
hcard : t.card + (k + 1) = s.card
u : Finset α
htu : t ⊆ u
hus : u ⊆ s
hu : u.card = t.card + 1
⊢ t.card + k + 1 = t.card + (k + 1)

tactic: rfl
state_before: case succ.mpr.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hts : t ⊆ s
hcard : t.card + (k + 1) = s.card
u : Finset α
htu : t ⊆ u
hus : u ⊆ s
hu : u.card = t.card + 1
⊢ t.card + k + 1 = t.card + (k + 1)
state_after: no goals

tactic: omega
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
t✝ : Finset α
a : α
r k : ℕ
𝒜 : Finset (Finset α)
s t : Finset α
ht : t ∈ 𝒜
hts : t ⊆ s
hcard : t.card + (k + 1) = s.card
⊢ t.card + 1 ≤ s.card
state_after: no goals