Theorem: Finset.pi_singletons
File: Mathlib/Data/Finset/Pi.lean

tactic: rw [eq_singleton_iff_unique_mem]
state_before: α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
⊢ (s.pi fun a => {f a}) = {fun a x => f a}
state_after: α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
⊢ ((fun a x => f a) ∈ s.pi fun a => {f a}) ∧ ∀ x ∈ s.pi fun a => {f a}, x = fun a x => f a

tactic: constructor
state_before: α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
⊢ ((fun a x => f a) ∈ s.pi fun a => {f a}) ∧ ∀ x ∈ s.pi fun a => {f a}, x = fun a x => f a
state_after: case left
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
⊢ (fun a x => f a) ∈ s.pi fun a => {f a}

case right
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
⊢ ∀ x ∈ s.pi fun a => {f a}, x = fun a x => f a

tactic: intro a ha
state_before: case right
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
⊢ ∀ x ∈ s.pi fun a => {f a}, x = fun a x => f a
state_after: case right
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
a : (a : α) → a ∈ s → β
ha : a ∈ s.pi fun a => {f a}
⊢ a = fun a x => f a

tactic: ext i hi
state_before: case right
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
a : (a : α) → a ∈ s → β
ha : a ∈ s.pi fun a => {f a}
⊢ a = fun a x => f a
state_after: case right.h.h
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
a : (a : α) → a ∈ s → β
ha : a ∈ s.pi fun a => {f a}
i : α
hi : i ∈ s
⊢ a i hi = f i

tactic: rw [mem_pi] at ha
state_before: case right.h.h
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
a : (a : α) → a ∈ s → β
ha : a ∈ s.pi fun a => {f a}
i : α
hi : i ∈ s
⊢ a i hi = f i
state_after: case right.h.h
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
a : (a : α) → a ∈ s → β
ha : ∀ (a_1 : α) (h : a_1 ∈ s), a a_1 h ∈ {f a_1}
i : α
hi : i ∈ s
⊢ a i hi = f i

tactic: simpa using ha i hi
state_before: case right.h.h
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
a : (a : α) → a ∈ s → β
ha : ∀ (a_1 : α) (h : a_1 ∈ s), a a_1 h ∈ {f a_1}
i : α
hi : i ∈ s
⊢ a i hi = f i
state_after: no goals

tactic: simp
state_before: case left
α : Type u_1
β✝ : α → Type u
δ : α → Sort v
inst✝ : DecidableEq α
s✝ : Finset α
t : (a : α) → Finset (β✝ a)
β : Type u_2
s : Finset α
f : α → β
⊢ (fun a x => f a) ∈ s.pi fun a => {f a}
state_after: no goals