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

Proof steps:
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: induction' k with k ih generalizing 𝒜 s
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: 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] (∂⁺ 𝒜) ↔ ∃ 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: 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 α
⊢ (∃ 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: clear ih
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: constructor