Theorem: Set.insert_image_compl_eq_range
File: Mathlib/Data/Set/Image.lean

tactic: ext y
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
⊢ insert (f x) (f '' {x}ᶜ) = range f

tactic: rw [mem_range, mem_insert_iff, mem_image]
state_before: case h
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
⊢ y ∈ insert (f x) (f '' {x}ᶜ) ↔ y ∈ range f

tactic: constructor
state_before: case h
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
⊢ (y = f x ∨ ∃ x_1, x_1 ∈ {x}ᶜ ∧ f x_1 = y) ↔ ∃ y_1, f y_1 = y

tactic: rintro (h | ⟨x', _, h⟩)
state_before: case h.mp
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
⊢ (y = f x ∨ ∃ x_1, x_1 ∈ {x}ᶜ ∧ f x_1 = y) → ∃ y_1, f y_1 = y

tactic: exact ⟨x, h.symm⟩
state_before: case h.mp.inl
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
h : y = f x
⊢ ∃ y_1, f y_1 = y

tactic: exact ⟨x', h⟩
state_before: case h.mp.inr.intro.intro
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
x' : α
left✝ : x' ∈ {x}ᶜ
h : f x' = y
⊢ ∃ y_1, f y_1 = y

tactic: rintro ⟨x', h⟩
state_before: case h.mpr
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
⊢ (∃ y_1, f y_1 = y) → y = f x ∨ ∃ x_1, x_1 ∈ {x}ᶜ ∧ f x_1 = y

tactic: by_cases hx : x' = x
state_before: case h.mpr.intro
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
x' : α
h : f x' = y
⊢ y = f x ∨ ∃ x_1, x_1 ∈ {x}ᶜ ∧ f x_1 = y

tactic: left
state_before: case pos
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
x' : α
h : f x' = y
hx : x' = x
⊢ y = f x ∨ ∃ x_1, x_1 ∈ {x}ᶜ ∧ f x_1 = y

tactic: rw [← h, hx]
state_before: case pos.h
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
x' : α
h : f x' = y
hx : x' = x
⊢ y = f x

tactic: right
state_before: case neg
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
x' : α
h : f x' = y
hx : ¬x' = x
⊢ y = f x ∨ ∃ x_1, x_1 ∈ {x}ᶜ ∧ f x_1 = y

tactic: refine' ⟨_, _, h⟩
state_before: case neg.h
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
x' : α
h : f x' = y
hx : ¬x' = x
⊢ ∃ x_1, x_1 ∈ {x}ᶜ ∧ f x_1 = y

tactic: rw [mem_compl_singleton_iff]
state_before: case neg.h
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
x' : α
h : f x' = y
hx : ¬x' = x
⊢ x' ∈ {x}ᶜ

tactic: exact hx
state_before: case neg.h
α : Type u_2
β : Type u_1
γ : Type ?u.73337
ι : Sort ?u.73340
ι' : Sort ?u.73343
f✝ : ι → α
s t : Set α
f : α → β
x : α
y : β
x' : α
h : f x' = y
hx : ¬x' = x
⊢ x' ≠ x