Theorem: Equiv.swap_bijOn_self
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 α
hs : a ∈ s ↔ b ∈ s
⊢ BijOn (⇑(swap a b)) s s
state_after: case refine_1
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
⊢ (swap a b) x ∈ s

case refine_2
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
⊢ x ∈ ⇑(swap a b) '' s

tactic: obtain (rfl | hxa) := eq_or_ne x a
state_before: case refine_2
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
⊢ x ∈ ⇑(swap a b) '' s
state_after: case refine_2.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
b : α
s : Set α
x : α
hx : x ∈ s
hs : x ∈ s ↔ b ∈ s
⊢ x ∈ ⇑(swap x b) '' s

case refine_2.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
⊢ x ∈ ⇑(swap a b) '' s

tactic: obtain (rfl | hxb) := eq_or_ne x b
state_before: case refine_2.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
⊢ x ∈ ⇑(swap a b) '' s
state_after: case refine_2.inr.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a : α
s : Set α
x : α
hx : x ∈ s
hxa : x ≠ a
hs : a ∈ s ↔ x ∈ s
⊢ x ∈ ⇑(swap a x) '' s

case refine_2.inr.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
hxb : x ≠ b
⊢ x ∈ ⇑(swap a b) '' s

tactic: exact ⟨x, hx, swap_apply_of_ne_of_ne hxa hxb⟩
state_before: case refine_2.inr.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
hxb : x ≠ b
⊢ 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 α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
⊢ (swap a b) x ∈ s
state_after: case refine_1.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
b : α
s : Set α
x : α
hx : x ∈ s
hs : x ∈ s ↔ b ∈ s
⊢ (swap x b) x ∈ s

case refine_1.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
⊢ (swap a b) x ∈ s

tactic: obtain (rfl | hxb) := eq_or_ne x b
state_before: case refine_1.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
⊢ (swap a b) x ∈ s
state_after: case refine_1.inr.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a : α
s : Set α
x : α
hx : x ∈ s
hxa : x ≠ a
hs : a ∈ s ↔ x ∈ s
⊢ (swap a x) x ∈ s

case refine_1.inr.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
hxb : x ≠ b
⊢ (swap a b) x ∈ s

tactic: rwa [swap_apply_of_ne_of_ne hxa hxb]
state_before: case refine_1.inr.inr
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a b : α
s : Set α
hs : a ∈ s ↔ b ∈ s
x : α
hx : x ∈ s
hxa : x ≠ a
hxb : x ≠ b
⊢ (swap a b) x ∈ s
state_after: no goals

tactic: rwa [swap_apply_left, ← hs]
state_before: case refine_1.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
b : α
s : Set α
x : α
hx : x ∈ s
hs : x ∈ s ↔ b ∈ s
⊢ (swap x b) x ∈ s
state_after: no goals

tactic: rwa [swap_apply_right, hs]
state_before: case refine_1.inr.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a : α
s : Set α
x : α
hx : x ∈ s
hxa : x ≠ a
hs : a ∈ s ↔ x ∈ s
⊢ (swap a x) x ∈ s
state_after: no goals

tactic: simp [hs.1 hx]
state_before: case refine_2.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
b : α
s : Set α
x : α
hx : x ∈ s
hs : x ∈ s ↔ b ∈ s
⊢ x ∈ ⇑(swap x b) '' s
state_after: no goals

tactic: simp [hs.2 hx]
state_before: case refine_2.inr.inl
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
inst✝ : DecidableEq α
a : α
s : Set α
x : α
hx : x ∈ s
hxa : x ≠ a
hs : a ∈ s ↔ x ∈ s
⊢ x ∈ ⇑(swap a x) '' s
state_after: no goals