Theorem: Set.eq_insert_of_ncard_eq_succ
File: Mathlib/Data/Set/Card.lean

tactic: have hsf := finite_of_ncard_pos (n.zero_lt_succ.trans_eq h.symm)
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
n : ℕ
h : s.ncard = n + 1
⊢ ∃ a t, a ∉ t ∧ insert a t = s ∧ t.ncard = n
state_after: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
n : ℕ
h : s.ncard = n + 1
hsf : s.Finite
⊢ ∃ a t, a ∉ t ∧ insert a t = s ∧ t.ncard = n

tactic: rw [ncard_eq_toFinset_card _ hsf, Finset.card_eq_succ] at h
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
n : ℕ
h : s.ncard = n + 1
hsf : s.Finite
⊢ ∃ a t, a ∉ t ∧ insert a t = s ∧ t.ncard = n
state_after: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
n : ℕ
hsf : s.Finite
h : ∃ a t, a ∉ t ∧ insert a t = hsf.toFinset ∧ t.card = n
⊢ ∃ a t, a ∉ t ∧ insert a t = s ∧ t.ncard = n

tactic: obtain ⟨a, t, hat, hts, rfl⟩ := h
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
n : ℕ
hsf : s.Finite
h : ∃ a t, a ∉ t ∧ insert a t = hsf.toFinset ∧ t.card = n
⊢ ∃ a t, a ∉ t ∧ insert a t = s ∧ t.ncard = n
state_after: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : insert a t = hsf.toFinset
⊢ ∃ a t_1, a ∉ t_1 ∧ insert a t_1 = s ∧ t_1.ncard = t.card

tactic: simp only [Finset.ext_iff, Finset.mem_insert, Finite.mem_toFinset] at hts
state_before: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : insert a t = hsf.toFinset
⊢ ∃ a t_1, a ∉ t_1 ∧ insert a t_1 = s ∧ t_1.ncard = t.card
state_after: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : ∀ (a_1 : α), a_1 = a ∨ a_1 ∈ t ↔ a_1 ∈ s
⊢ ∃ a t_1, a ∉ t_1 ∧ insert a t_1 = s ∧ t_1.ncard = t.card

tactic: refine ⟨a, t, hat, ?_, ?_⟩
state_before: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : ∀ (a_1 : α), a_1 = a ∨ a_1 ∈ t ↔ a_1 ∈ s
⊢ ∃ a t_1, a ∉ t_1 ∧ insert a t_1 = s ∧ t_1.ncard = t.card
state_after: case intro.intro.intro.intro.refine_1
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : ∀ (a_1 : α), a_1 = a ∨ a_1 ∈ t ↔ a_1 ∈ s
⊢ insert a ↑t = s

case intro.intro.intro.intro.refine_2
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : ∀ (a_1 : α), a_1 = a ∨ a_1 ∈ t ↔ a_1 ∈ s
⊢ (↑t).ncard = t.card

tactic: simp
state_before: case intro.intro.intro.intro.refine_2
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : ∀ (a_1 : α), a_1 = a ∨ a_1 ∈ t ↔ a_1 ∈ s
⊢ (↑t).ncard = t.card
state_after: no goals

tactic: simp only [Finset.mem_coe, ext_iff, mem_insert_iff]
state_before: case intro.intro.intro.intro.refine_1
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : ∀ (a_1 : α), a_1 = a ∨ a_1 ∈ t ↔ a_1 ∈ s
⊢ insert a ↑t = s
state_after: case intro.intro.intro.intro.refine_1
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : ∀ (a_1 : α), a_1 = a ∨ a_1 ∈ t ↔ a_1 ∈ s
⊢ ∀ (x : α), x = a ∨ x ∈ t ↔ x ∈ s

tactic: tauto
state_before: case intro.intro.intro.intro.refine_1
α : Type u_1
β : Type u_2
s t✝ : Set α
f : α → β
hsf : s.Finite
a : α
t : Finset α
hat : a ∉ t
hts : ∀ (a_1 : α), a_1 = a ∨ a_1 ∈ t ↔ a_1 ∈ s
⊢ ∀ (x : α), x = a ∨ x ∈ t ↔ x ∈ s
state_after: no goals