Theorem: Fintype.piFinset_update_eq_filter_piFinset_mem
File: Mathlib/Data/Fintype/Pi.lean

tactic: ext f
state_before: α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
⊢ piFinset (Function.update s i t) = filter (fun f => f i ∈ t) (piFinset s)
state_after: case a
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
⊢ f ∈ piFinset (Function.update s i t) ↔ f ∈ filter (fun f => f i ∈ t) (piFinset s)

tactic: simp only [mem_piFinset, mem_filter]
state_before: case a
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
⊢ f ∈ piFinset (Function.update s i t) ↔ f ∈ filter (fun f => f i ∈ t) (piFinset s)
state_after: case a
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
⊢ (∀ (a : α), f a ∈ Function.update s i t a) ↔ (∀ (a : α), f a ∈ s a) ∧ f i ∈ t

tactic: refine ⟨fun h ↦ ?_, fun h j ↦ ?_⟩
state_before: case a
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
⊢ (∀ (a : α), f a ∈ Function.update s i t a) ↔ (∀ (a : α), f a ∈ s a) ∧ f i ∈ t
state_after: case a.refine_1
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : ∀ (a : α), f a ∈ Function.update s i t a
⊢ (∀ (a : α), f a ∈ s a) ∧ f i ∈ t

case a.refine_2
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : (∀ (a : α), f a ∈ s a) ∧ f i ∈ t
j : α
⊢ f j ∈ Function.update s i t j

tactic: have := by simpa using h i
state_before: case a.refine_1
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : ∀ (a : α), f a ∈ Function.update s i t a
⊢ (∀ (a : α), f a ∈ s a) ∧ f i ∈ t
state_after: case a.refine_1
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : ∀ (a : α), f a ∈ Function.update s i t a
this : f i ∈ t
⊢ (∀ (a : α), f a ∈ s a) ∧ f i ∈ t

tactic: refine ⟨fun j ↦ ?_, this⟩
state_before: case a.refine_1
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : ∀ (a : α), f a ∈ Function.update s i t a
this : f i ∈ t
⊢ (∀ (a : α), f a ∈ s a) ∧ f i ∈ t
state_after: case a.refine_1
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : ∀ (a : α), f a ∈ Function.update s i t a
this : f i ∈ t
j : α
⊢ f j ∈ s j

tactic: obtain rfl | hji := eq_or_ne j i
state_before: case a.refine_1
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : ∀ (a : α), f a ∈ Function.update s i t a
this : f i ∈ t
j : α
⊢ f j ∈ s j
state_after: case a.refine_1.inl
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
f : (a : α) → δ a
j : α
t : Finset (δ j)
hts : t ⊆ s j
h : ∀ (a : α), f a ∈ Function.update s j t a
this : f j ∈ t
⊢ f j ∈ s j

case a.refine_1.inr
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : ∀ (a : α), f a ∈ Function.update s i t a
this : f i ∈ t
j : α
hji : j ≠ i
⊢ f j ∈ s j

tactic: simpa using h i
state_before: α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : ∀ (a : α), f a ∈ Function.update s i t a
⊢ ?m.28415
state_after: no goals

tactic: exact hts this
state_before: case a.refine_1.inl
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
f : (a : α) → δ a
j : α
t : Finset (δ j)
hts : t ⊆ s j
h : ∀ (a : α), f a ∈ Function.update s j t a
this : f j ∈ t
⊢ f j ∈ s j
state_after: no goals

tactic: simpa [hji] using h j
state_before: case a.refine_1.inr
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : ∀ (a : α), f a ∈ Function.update s i t a
this : f i ∈ t
j : α
hji : j ≠ i
⊢ f j ∈ s j
state_after: no goals

tactic: obtain rfl | hji := eq_or_ne j i
state_before: case a.refine_2
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : (∀ (a : α), f a ∈ s a) ∧ f i ∈ t
j : α
⊢ f j ∈ Function.update s i t j
state_after: case a.refine_2.inl
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
f : (a : α) → δ a
j : α
t : Finset (δ j)
hts : t ⊆ s j
h : (∀ (a : α), f a ∈ s a) ∧ f j ∈ t
⊢ f j ∈ Function.update s j t j

case a.refine_2.inr
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : (∀ (a : α), f a ∈ s a) ∧ f i ∈ t
j : α
hji : j ≠ i
⊢ f j ∈ Function.update s i t j

tactic: simpa using h.2
state_before: case a.refine_2.inl
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
f : (a : α) → δ a
j : α
t : Finset (δ j)
hts : t ⊆ s j
h : (∀ (a : α), f a ∈ s a) ∧ f j ∈ t
⊢ f j ∈ Function.update s j t j
state_after: no goals

tactic: simpa [hji] using h.1 j
state_before: case a.refine_2.inr
α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
γ : α → Type u_2
δ : α → Type u_3
s✝ : (a : α) → Finset (γ a)
inst✝ : (a : α) → DecidableEq (δ a)
s : (i : α) → Finset (δ i)
i : α
t : Finset (δ i)
hts : t ⊆ s i
f : (a : α) → δ a
h : (∀ (a : α), f a ∈ s a) ∧ f i ∈ t
j : α
hji : j ≠ i
⊢ f j ∈ Function.update s i t j
state_after: no goals