Theorem: finprod_eq_prod_of_mulSupport_subset
File: Mathlib/Algebra/BigOperators/Finprod.lean

tactic: have A : mulSupport (f ∘ PLift.down) = Equiv.plift.symm '' mulSupport f := by
  rw [mulSupport_comp_eq_preimage]
  exact (Equiv.plift.symm.image_eq_preimage _).symm
state_before: α : Type u_1
β : Type ?u.176909
ι : Type ?u.176912
G : Type ?u.176915
M : Type u_2
N : Type ?u.176921
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f : α → M
s : Finset α
h : mulSupport f ⊆ ↑s
⊢ (∏ᶠ (i : α), f i) = ∏ i in s, f i

tactic: have : mulSupport (f ∘ PLift.down) ⊆ s.map Equiv.plift.symm.toEmbedding := by
  rw [A, Finset.coe_map]
  exact image_subset _ h
state_before: α : Type u_1
β : Type ?u.176909
ι : Type ?u.176912
G : Type ?u.176915
M : Type u_2
N : Type ?u.176921
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f : α → M
s : Finset α
h : mulSupport f ⊆ ↑s
A : mulSupport (f ∘ PLift.down) = ↑Equiv.plift.symm '' mulSupport f
⊢ (∏ᶠ (i : α), f i) = ∏ i in s, f i

tactic: rw [finprod_eq_prod_pLift_of_mulSupport_subset this]
state_before: α : Type u_1
β : Type ?u.176909
ι : Type ?u.176912
G : Type ?u.176915
M : Type u_2
N : Type ?u.176921
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f : α → M
s : Finset α
h : mulSupport f ⊆ ↑s
A : mulSupport (f ∘ PLift.down) = ↑Equiv.plift.symm '' mulSupport f
this : mulSupport (f ∘ PLift.down) ⊆ ↑(Finset.map (Equiv.toEmbedding Equiv.plift.symm) s)
⊢ (∏ᶠ (i : α), f i) = ∏ i in s, f i

tactic: simp only [Finset.prod_map, Equiv.coe_toEmbedding]
state_before: α : Type u_1
β : Type ?u.176909
ι : Type ?u.176912
G : Type ?u.176915
M : Type u_2
N : Type ?u.176921
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f : α → M
s : Finset α
h : mulSupport f ⊆ ↑s
A : mulSupport (f ∘ PLift.down) = ↑Equiv.plift.symm '' mulSupport f
this : mulSupport (f ∘ PLift.down) ⊆ ↑(Finset.map (Equiv.toEmbedding Equiv.plift.symm) s)
⊢ ∏ i in Finset.map (Equiv.toEmbedding Equiv.plift.symm) s, f i.down = ∏ i in s, f i

tactic: congr
state_before: α : Type u_1
β : Type ?u.176909
ι : Type ?u.176912
G : Type ?u.176915
M : Type u_2
N : Type ?u.176921
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f : α → M
s : Finset α
h : mulSupport f ⊆ ↑s
A : mulSupport (f ∘ PLift.down) = ↑Equiv.plift.symm '' mulSupport f
this : mulSupport (f ∘ PLift.down) ⊆ ↑(Finset.map (Equiv.toEmbedding Equiv.plift.symm) s)
⊢ ∏ x in s, f (↑Equiv.plift.symm x).down = ∏ i in s, f i

tactic: rw [mulSupport_comp_eq_preimage]
state_before: α : Type u_1
β : Type ?u.176909
ι : Type ?u.176912
G : Type ?u.176915
M : Type u_2
N : Type ?u.176921
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f : α → M
s : Finset α
h : mulSupport f ⊆ ↑s
⊢ mulSupport (f ∘ PLift.down) = ↑Equiv.plift.symm '' mulSupport f

tactic: exact (Equiv.plift.symm.image_eq_preimage _).symm
state_before: α : Type u_1
β : Type ?u.176909
ι : Type ?u.176912
G : Type ?u.176915
M : Type u_2
N : Type ?u.176921
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f : α → M
s : Finset α
h : mulSupport f ⊆ ↑s
⊢ PLift.down ⁻¹' mulSupport f = ↑Equiv.plift.symm '' mulSupport f

tactic: rw [A, Finset.coe_map]
state_before: α : Type u_1
β : Type ?u.176909
ι : Type ?u.176912
G : Type ?u.176915
M : Type u_2
N : Type ?u.176921
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f : α → M
s : Finset α
h : mulSupport f ⊆ ↑s
A : mulSupport (f ∘ PLift.down) = ↑Equiv.plift.symm '' mulSupport f
⊢ mulSupport (f ∘ PLift.down) ⊆ ↑(Finset.map (Equiv.toEmbedding Equiv.plift.symm) s)

tactic: exact image_subset _ h
state_before: α : Type u_1
β : Type ?u.176909
ι : Type ?u.176912
G : Type ?u.176915
M : Type u_2
N : Type ?u.176921
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f : α → M
s : Finset α
h : mulSupport f ⊆ ↑s
A : mulSupport (f ∘ PLift.down) = ↑Equiv.plift.symm '' mulSupport f
⊢ ↑Equiv.plift.symm '' mulSupport f ⊆ ↑(Equiv.toEmbedding Equiv.plift.symm) '' ↑s