Theorem: Sym2.filter_image_mk_isDiag
File: Mathlib/Data/Sym/Sym2.lean

tactic: ext z
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
⊢ filter IsDiag (image Sym2.mk (s ×ˢ s)) = image Sym2.mk s.diag
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
z : Sym2 α
⊢ z ∈ filter IsDiag (image Sym2.mk (s ×ˢ s)) ↔ z ∈ image Sym2.mk s.diag

tactic: induction' z
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
z : Sym2 α
⊢ z ∈ filter IsDiag (image Sym2.mk (s ×ˢ s)) ↔ z ∈ image Sym2.mk s.diag
state_after: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ s(x✝, y✝) ∈ filter IsDiag (image Sym2.mk (s ×ˢ s)) ↔ s(x✝, y✝) ∈ image Sym2.mk s.diag

tactic: simp only [mem_image, mem_diag, exists_prop, mem_filter, Prod.exists, mem_product]
state_before: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ s(x✝, y✝) ∈ filter IsDiag (image Sym2.mk (s ×ˢ s)) ↔ s(x✝, y✝) ∈ image Sym2.mk s.diag
state_after: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ s(x✝, y✝).IsDiag ↔ ∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)

tactic: constructor
state_before: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ s(x✝, y✝).IsDiag ↔ ∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)
state_after: case a.h.mp
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ s(x✝, y✝).IsDiag → ∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)

case a.h.mpr
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)) → (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ s(x✝, y✝).IsDiag

tactic: rintro ⟨⟨a, b, ⟨ha, hb⟩, h⟩, hab⟩
state_before: case a.h.mp
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ s(x✝, y✝).IsDiag → ∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)
state_after: case a.h.mp.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
hab : s(x✝, y✝).IsDiag
a b : α
h : s(a, b) = s(x✝, y✝)
ha : a ∈ s
hb : b ∈ s
⊢ ∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)

tactic: rw [← h, Sym2.mk_isDiag_iff] at hab
state_before: case a.h.mp.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
hab : s(x✝, y✝).IsDiag
a b : α
h : s(a, b) = s(x✝, y✝)
ha : a ∈ s
hb : b ∈ s
⊢ ∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)
state_after: case a.h.mp.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ a b : α
hab : a = b
h : s(a, b) = s(x✝, y✝)
ha : a ∈ s
hb : b ∈ s
⊢ ∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)

tactic: exact ⟨a, b, ⟨ha, hab⟩, h⟩
state_before: case a.h.mp.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ a b : α
hab : a = b
h : s(a, b) = s(x✝, y✝)
ha : a ∈ s
hb : b ∈ s
⊢ ∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)
state_after: no goals

tactic: rintro ⟨a, b, ⟨ha, rfl⟩, h⟩
state_before: case a.h.mpr
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ a = b) ∧ s(a, b) = s(x✝, y✝)) → (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ s(x✝, y✝).IsDiag
state_after: case a.h.mpr.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ a : α
ha : a ∈ s
h : s(a, a) = s(x✝, y✝)
⊢ (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ s(x✝, y✝).IsDiag

tactic: rw [← h]
state_before: case a.h.mpr.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ a : α
ha : a ∈ s
h : s(a, a) = s(x✝, y✝)
⊢ (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ s(x✝, y✝).IsDiag
state_after: case a.h.mpr.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ a : α
ha : a ∈ s
h : s(a, a) = s(x✝, y✝)
⊢ (∃ a_1 b, (a_1 ∈ s ∧ b ∈ s) ∧ s(a_1, b) = s(a, a)) ∧ s(a, a).IsDiag

tactic: exact ⟨⟨a, a, ⟨ha, ha⟩, rfl⟩, rfl⟩
state_before: case a.h.mpr.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ a : α
ha : a ∈ s
h : s(a, a) = s(x✝, y✝)
⊢ (∃ a_1 b, (a_1 ∈ s ∧ b ∈ s) ∧ s(a_1, b) = s(a, a)) ∧ s(a, a).IsDiag
state_after: no goals