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

tactic: cases' t.finite_or_infinite with ht ht
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
⊢ (∃ a ∉ s, insert a s = t) ↔ s ⊆ t ∧ s.ncard + 1 = t.ncard
state_after: case inl
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
⊢ (∃ a ∉ s, insert a s = t) ↔ s ⊆ t ∧ s.ncard + 1 = t.ncard

case inr
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Infinite
⊢ (∃ a ∉ s, insert a s = t) ↔ s ⊆ t ∧ s.ncard + 1 = t.ncard

tactic: simp only [ht.ncard, exists_prop, add_eq_zero, and_false, iff_false, not_exists, not_and]
state_before: case inr
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Infinite
⊢ (∃ a ∉ s, insert a s = t) ↔ s ⊆ t ∧ s.ncard + 1 = t.ncard
state_after: case inr
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Infinite
⊢ ∀ x ∉ s, ¬insert x s = t

tactic: rintro x - rfl
state_before: case inr
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Infinite
⊢ ∀ x ∉ s, ¬insert x s = t
state_after: case inr
α : Type u_1
β : Type u_2
s : Set α
f : α → β
hs : autoParam s.Finite _auto✝
x : α
ht : (insert x s).Infinite
⊢ False

tactic: exact ht (hs.insert x)
state_before: case inr
α : Type u_1
β : Type u_2
s : Set α
f : α → β
hs : autoParam s.Finite _auto✝
x : α
ht : (insert x s).Infinite
⊢ False
state_after: no goals

tactic: rw [ncard_eq_toFinset_card _ hs, ncard_eq_toFinset_card _ ht,
  ← @Finite.toFinset_subset_toFinset _ _ _ hs ht, ← Finset.exists_eq_insert_iff]
state_before: case inl
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
⊢ (∃ a ∉ s, insert a s = t) ↔ s ⊆ t ∧ s.ncard + 1 = t.ncard
state_after: case inl
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
⊢ (∃ a ∉ s, insert a s = t) ↔ ∃ a ∉ Finite.toFinset hs, insert a (Finite.toFinset hs) = ht.toFinset

tactic: convert Iff.rfl using 2
state_before: case inl
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
⊢ (∃ a ∉ s, insert a s = t) ↔ ∃ a ∉ Finite.toFinset hs, insert a (Finite.toFinset hs) = ht.toFinset
state_after: case h.e'_2.h.e'_2
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
⊢ (fun a => a ∉ Finite.toFinset hs ∧ insert a (Finite.toFinset hs) = ht.toFinset) = fun a => a ∉ s ∧ insert a s = t

tactic: simp
state_before: case h.e'_2.h.e'_2
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
⊢ (fun a => a ∉ Finite.toFinset hs ∧ insert a (Finite.toFinset hs) = ht.toFinset) = fun a => a ∉ s ∧ insert a s = t
state_after: case h.e'_2.h.e'_2
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
⊢ (fun a => a ∉ s ∧ insert a (Finite.toFinset hs) = ht.toFinset) = fun a => a ∉ s ∧ insert a s = t

tactic: ext x
state_before: case h.e'_2.h.e'_2
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
⊢ (fun a => a ∉ s ∧ insert a (Finite.toFinset hs) = ht.toFinset) = fun a => a ∉ s ∧ insert a s = t
state_after: case h.e'_2.h.e'_2.h.a
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
x : α
⊢ x ∉ s ∧ insert x (Finite.toFinset hs) = ht.toFinset ↔ x ∉ s ∧ insert x s = t

tactic: simp [Finset.ext_iff, Set.ext_iff]
state_before: case h.e'_2.h.e'_2.h.a
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hs : autoParam s.Finite _auto✝
ht : t.Finite
x : α
⊢ x ∉ s ∧ insert x (Finite.toFinset hs) = ht.toFinset ↔ x ∉ s ∧ insert x s = t
state_after: no goals