Theorem: Equiv.swap_bijOn_exchange
File: Mathlib/Logic/Equiv/Set.lean

tactic: refine ⟨fun x hx ↦ ?_, (Equiv.injective _).injOn, fun x hx ↦ ?_⟩
state_before: α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
⊢ BijOn (⇑(swap a b)) s (insert b (s \ {a}))
state_after: case refine_1
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ s
⊢ (swap a b) x ∈ insert b (s \ {a})

case refine_2
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ insert b (s \ {a})
⊢ x ∈ ⇑(swap a b) '' s

tactic: obtain (rfl | hxb) := eq_or_ne x b
state_before: case refine_2
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ insert b (s \ {a})
⊢ x ∈ ⇑(swap a b) '' s
state_after: case refine_2.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a : α
s : Set α
ha : a ∈ s
x : α
hb : x ∉ s
hx : x ∈ insert x (s \ {a})
⊢ x ∈ ⇑(swap a x) '' s

case refine_2.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ insert b (s \ {a})
hxb : x ≠ b
⊢ x ∈ ⇑(swap a b) '' s

tactic: simp only [mem_insert_iff, mem_diff, mem_singleton_iff, or_iff_right hxb] at hx
state_before: case refine_2.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ insert b (s \ {a})
hxb : x ≠ b
⊢ x ∈ ⇑(swap a b) '' s
state_after: case refine_2.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hxb : x ≠ b
hx : x ∈ s ∧ ¬x = a
⊢ x ∈ ⇑(swap a b) '' s

tactic: exact ⟨x, hx.1, swap_apply_of_ne_of_ne hx.2 hxb⟩
state_before: case refine_2.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hxb : x ≠ b
hx : x ∈ s ∧ ¬x = a
⊢ x ∈ ⇑(swap a b) '' s
state_after: no goals

tactic: obtain (rfl | hxa) := eq_or_ne x a
state_before: case refine_1
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ s
⊢ (swap a b) x ∈ insert b (s \ {a})
state_after: case refine_1.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
b : α
s : Set α
hb : b ∉ s
x : α
hx ha : x ∈ s
⊢ (swap x b) x ∈ insert b (s \ {x})

case refine_1.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ s
hxa : x ≠ a
⊢ (swap a b) x ∈ insert b (s \ {a})

tactic: rw [swap_apply_of_ne_of_ne hxa (by rintro rfl; contradiction)]
state_before: case refine_1.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ s
hxa : x ≠ a
⊢ (swap a b) x ∈ insert b (s \ {a})
state_after: case refine_1.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ s
hxa : x ≠ a
⊢ x ∈ insert b (s \ {a})

tactic: exact .inr ⟨hx, hxa⟩
state_before: case refine_1.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ s
hxa : x ≠ a
⊢ x ∈ insert b (s \ {a})
state_after: no goals

tactic: simp [swap_apply_left]
state_before: case refine_1.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
b : α
s : Set α
hb : b ∉ s
x : α
hx ha : x ∈ s
⊢ (swap x b) x ∈ insert b (s \ {x})
state_after: no goals

tactic: rintro rfl
state_before: α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
ha : a ∈ s
hb : b ∉ s
x : α
hx : x ∈ s
hxa : x ≠ a
⊢ x ≠ b
state_after: α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a : α
s : Set α
ha : a ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
hb : x ∉ s
⊢ False

tactic: contradiction
state_before: α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a : α
s : Set α
ha : a ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
hb : x ∉ s
⊢ False
state_after: no goals

tactic: exact ⟨a, ha, by simp⟩
state_before: case refine_2.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a : α
s : Set α
ha : a ∈ s
x : α
hb : x ∉ s
hx : x ∈ insert x (s \ {a})
⊢ x ∈ ⇑(swap a x) '' s
state_after: no goals

tactic: simp
state_before: α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a : α
s : Set α
ha : a ∈ s
x : α
hb : x ∉ s
hx : x ∈ insert x (s \ {a})
⊢ (swap a x) a = x
state_after: no goals