Theorem: Finset.exists_eq_insert_iff
File: Mathlib/Data/Finset/Card.lean

tactic: constructor
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
⊢ (∃ a ∉ s, insert a s = t) ↔ s ⊆ t ∧ s.card + 1 = t.card
state_after: case mp
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
⊢ (∃ a ∉ s, insert a s = t) → s ⊆ t ∧ s.card + 1 = t.card

case mpr
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
⊢ s ⊆ t ∧ s.card + 1 = t.card → ∃ a ∉ s, insert a s = t

tactic: rintro ⟨a, ha, rfl⟩
state_before: case mp
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
⊢ (∃ a ∉ s, insert a s = t) → s ⊆ t ∧ s.card + 1 = t.card
state_after: case mp.intro.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s : Finset α
a : α
ha : a ∉ s
⊢ s ⊆ insert a s ∧ s.card + 1 = (insert a s).card

tactic: exact ⟨subset_insert _ _, (card_insert_of_not_mem ha).symm⟩
state_before: case mp.intro.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s : Finset α
a : α
ha : a ∉ s
⊢ s ⊆ insert a s ∧ s.card + 1 = (insert a s).card
state_after: no goals

tactic: rintro ⟨hst, h⟩
state_before: case mpr
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
⊢ s ⊆ t ∧ s.card + 1 = t.card → ∃ a ∉ s, insert a s = t
state_after: case mpr.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
⊢ ∃ a ∉ s, insert a s = t

tactic: obtain ⟨a, ha⟩ : ∃ a, t \ s = {a} :=
  card_eq_one.1 (by rw [card_sdiff hst, ← h, Nat.add_sub_cancel_left])
state_before: case mpr.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
⊢ ∃ a ∉ s, insert a s = t
state_after: case mpr.intro.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
a : α
ha : t \ s = {a}
⊢ ∃ a ∉ s, insert a s = t

tactic: refine
  ⟨a, fun hs => (?_ : a ∉ {a}) <| mem_singleton_self _, by
    rw [insert_eq, ← ha, sdiff_union_of_subset hst]⟩
state_before: case mpr.intro.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
a : α
ha : t \ s = {a}
⊢ ∃ a ∉ s, insert a s = t
state_after: case mpr.intro.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
a : α
ha : t \ s = {a}
hs : a ∈ s
⊢ a ∉ {a}

tactic: rw [← ha]
state_before: case mpr.intro.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
a : α
ha : t \ s = {a}
hs : a ∈ s
⊢ a ∉ {a}
state_after: case mpr.intro.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
a : α
ha : t \ s = {a}
hs : a ∈ s
⊢ a ∉ t \ s

tactic: exact not_mem_sdiff_of_mem_right hs
state_before: case mpr.intro.intro
α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
a : α
ha : t \ s = {a}
hs : a ∈ s
⊢ a ∉ t \ s
state_after: no goals

tactic: rw [card_sdiff hst, ← h, Nat.add_sub_cancel_left]
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
⊢ (t \ s).card = 1
state_after: no goals

tactic: rw [insert_eq, ← ha, sdiff_union_of_subset hst]
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s✝ t✝ u : Finset α
f : α → β
n : ℕ
inst✝ : DecidableEq α
s t : Finset α
hst : s ⊆ t
h : s.card + 1 = t.card
a : α
ha : t \ s = {a}
⊢ insert a s = t
state_after: no goals