Theorem: Finset.mulIndicator_biUnion
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

tactic: classical
refine Finset.induction_on s (by simp) fun i s hi ih hs ↦ funext fun j ↦ ?_
rw [prod_insert hi, set_biUnion_insert, mulIndicator_union_of_not_mem_inter,
  ih (hs.subset <| subset_insert _ _)]
simp only [not_exists, exists_prop, mem_iUnion, mem_inter_iff, not_and]
exact fun hji i' hi' hji' ↦ (ne_of_mem_of_not_mem hi' hi).symm <|
  hs.elim_set (mem_insert_self _ _) (mem_insert_of_mem hi') _ hji hji'
state_before: ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s : Finset ι
t : ι → Set κ
f : κ → β
⊢ (↑s).PairwiseDisjoint t → (⋃ i ∈ s, t i).mulIndicator f = fun a => ∏ i ∈ s, (t i).mulIndicator f a
state_after: no goals

tactic: refine Finset.induction_on s (by simp) fun i s hi ih hs ↦ funext fun j ↦ ?_
state_before: ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s : Finset ι
t : ι → Set κ
f : κ → β
⊢ (↑s).PairwiseDisjoint t → (⋃ i ∈ s, t i).mulIndicator f = fun a => ∏ i ∈ s, (t i).mulIndicator f a
state_after: ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝¹ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s✝ : Finset ι
t : ι → Set κ
f : κ → β
i : ι
s : Finset ι
hi : i ∉ s
ih : (↑s).PairwiseDisjoint t → (⋃ i ∈ s, t i).mulIndicator f = fun a => ∏ i ∈ s, (t i).mulIndicator f a
hs : (↑(insert i s)).PairwiseDisjoint t
j : κ
⊢ (⋃ i_1 ∈ insert i s, t i_1).mulIndicator f j = ∏ i ∈ insert i s, (t i).mulIndicator f j

tactic: rw [prod_insert hi, set_biUnion_insert, mulIndicator_union_of_not_mem_inter,
  ih (hs.subset <| subset_insert _ _)]
state_before: ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝¹ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s✝ : Finset ι
t : ι → Set κ
f : κ → β
i : ι
s : Finset ι
hi : i ∉ s
ih : (↑s).PairwiseDisjoint t → (⋃ i ∈ s, t i).mulIndicator f = fun a => ∏ i ∈ s, (t i).mulIndicator f a
hs : (↑(insert i s)).PairwiseDisjoint t
j : κ
⊢ (⋃ i_1 ∈ insert i s, t i_1).mulIndicator f j = ∏ i ∈ insert i s, (t i).mulIndicator f j
state_after: case h
ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝¹ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s✝ : Finset ι
t : ι → Set κ
f : κ → β
i : ι
s : Finset ι
hi : i ∉ s
ih : (↑s).PairwiseDisjoint t → (⋃ i ∈ s, t i).mulIndicator f = fun a => ∏ i ∈ s, (t i).mulIndicator f a
hs : (↑(insert i s)).PairwiseDisjoint t
j : κ
⊢ j ∉ t i ∩ ⋃ x ∈ s, t x

tactic: simp only [not_exists, exists_prop, mem_iUnion, mem_inter_iff, not_and]
state_before: case h
ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝¹ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s✝ : Finset ι
t : ι → Set κ
f : κ → β
i : ι
s : Finset ι
hi : i ∉ s
ih : (↑s).PairwiseDisjoint t → (⋃ i ∈ s, t i).mulIndicator f = fun a => ∏ i ∈ s, (t i).mulIndicator f a
hs : (↑(insert i s)).PairwiseDisjoint t
j : κ
⊢ j ∉ t i ∩ ⋃ x ∈ s, t x
state_after: case h
ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝¹ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s✝ : Finset ι
t : ι → Set κ
f : κ → β
i : ι
s : Finset ι
hi : i ∉ s
ih : (↑s).PairwiseDisjoint t → (⋃ i ∈ s, t i).mulIndicator f = fun a => ∏ i ∈ s, (t i).mulIndicator f a
hs : (↑(insert i s)).PairwiseDisjoint t
j : κ
⊢ j ∈ t i → ∀ x ∈ s, j ∉ t x

tactic: exact fun hji i' hi' hji' ↦ (ne_of_mem_of_not_mem hi' hi).symm <|
  hs.elim_set (mem_insert_self _ _) (mem_insert_of_mem hi') _ hji hji'
state_before: case h
ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝¹ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s✝ : Finset ι
t : ι → Set κ
f : κ → β
i : ι
s : Finset ι
hi : i ∉ s
ih : (↑s).PairwiseDisjoint t → (⋃ i ∈ s, t i).mulIndicator f = fun a => ∏ i ∈ s, (t i).mulIndicator f a
hs : (↑(insert i s)).PairwiseDisjoint t
j : κ
⊢ j ∈ t i → ∀ x ∈ s, j ∉ t x
state_after: no goals

tactic: simp
state_before: ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s : Finset ι
t : ι → Set κ
f : κ → β
⊢ (↑∅).PairwiseDisjoint t → (⋃ i ∈ ∅, t i).mulIndicator f = fun a => ∏ i ∈ ∅, (t i).mulIndicator f a
state_after: no goals