Theorem: Finset.sym2_eq_image
File: Mathlib/Data/Finset/Sym.lean

tactic: ext z
state_before: α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
⊢ s.sym2 = image Sym2.mk (s ×ˢ s)
state_after: case a
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
⊢ z ∈ s.sym2 ↔ z ∈ image Sym2.mk (s ×ˢ s)

tactic: refine z.ind fun x y ↦ ?_
state_before: case a
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
⊢ z ∈ s.sym2 ↔ z ∈ image Sym2.mk (s ×ˢ s)
state_after: case a
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
⊢ s(x, y) ∈ s.sym2 ↔ s(x, y) ∈ image Sym2.mk (s ×ˢ s)

tactic: rw [mk_mem_sym2_iff, mem_image]
state_before: case a
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
⊢ s(x, y) ∈ s.sym2 ↔ s(x, y) ∈ image Sym2.mk (s ×ˢ s)
state_after: case a
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
⊢ x ∈ s ∧ y ∈ s ↔ ∃ a ∈ s ×ˢ s, Sym2.mk a = s(x, y)

tactic: constructor
state_before: case a
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
⊢ x ∈ s ∧ y ∈ s ↔ ∃ a ∈ s ×ˢ s, Sym2.mk a = s(x, y)
state_after: case a.mp
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
⊢ x ∈ s ∧ y ∈ s → ∃ a ∈ s ×ˢ s, Sym2.mk a = s(x, y)

case a.mpr
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
⊢ (∃ a ∈ s ×ˢ s, Sym2.mk a = s(x, y)) → x ∈ s ∧ y ∈ s

tactic: intro h
state_before: case a.mp
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
⊢ x ∈ s ∧ y ∈ s → ∃ a ∈ s ×ˢ s, Sym2.mk a = s(x, y)
state_after: case a.mp
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
h : x ∈ s ∧ y ∈ s
⊢ ∃ a ∈ s ×ˢ s, Sym2.mk a = s(x, y)

tactic: use (x, y)
state_before: case a.mp
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
h : x ∈ s ∧ y ∈ s
⊢ ∃ a ∈ s ×ˢ s, Sym2.mk a = s(x, y)
state_after: case h
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
h : x ∈ s ∧ y ∈ s
⊢ (x, y) ∈ s ×ˢ s ∧ s(x, y) = s(x, y)

tactic: simp only [mem_product, h, and_self, true_and]
state_before: case h
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
h : x ∈ s ∧ y ∈ s
⊢ (x, y) ∈ s ×ˢ s ∧ s(x, y) = s(x, y)
state_after: no goals

tactic: rintro ⟨⟨a, b⟩, h⟩
state_before: case a.mpr
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a b : α
z : Sym2 α
x y : α
⊢ (∃ a ∈ s ×ˢ s, Sym2.mk a = s(x, y)) → x ∈ s ∧ y ∈ s
state_after: case a.mpr.intro.mk
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a✝ b✝ : α
z : Sym2 α
x y a b : α
h : (a, b) ∈ s ×ˢ s ∧ s(a, b) = s(x, y)
⊢ x ∈ s ∧ y ∈ s

tactic: simp only [mem_product, Sym2.eq_iff] at h
state_before: case a.mpr.intro.mk
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a✝ b✝ : α
z : Sym2 α
x y a b : α
h : (a, b) ∈ s ×ˢ s ∧ s(a, b) = s(x, y)
⊢ x ∈ s ∧ y ∈ s
state_after: case a.mpr.intro.mk
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a✝ b✝ : α
z : Sym2 α
x y a b : α
h : (a ∈ s ∧ b ∈ s) ∧ (a = x ∧ b = y ∨ a = y ∧ b = x)
⊢ x ∈ s ∧ y ∈ s

tactic: obtain ⟨h, (⟨rfl, rfl⟩ | ⟨rfl, rfl⟩)⟩ := h
  <;> simp [h]
state_before: case a.mpr.intro.mk
α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
a✝ b✝ : α
z : Sym2 α
x y a b : α
h : (a ∈ s ∧ b ∈ s) ∧ (a = x ∧ b = y ∨ a = y ∧ b = x)
⊢ x ∈ s ∧ y ∈ s
state_after: no goals