-- Mathlib/Topology/PartitionOfUnity.lean
theorem exists_finset_toPOUFun_eventuallyEq (i : ι) (x : X) : ∃ t : Finset ι,
    f.toPOUFun i =ᶠ[𝓝 x] f i * ∏ j ∈ t.filter fun j => WellOrderingRel j i, (1 - f j)

Proof state:
case h
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
⊢ f.toPOUFun i =ᶠ[𝓝 x] ⇑(f i) * ⇑(∏ j ∈ Finset.filter (fun j => WellOrderingRel j i) hf.toFinset, (1 - f j))

Tactic:
filter_upwards [hU] with y hyU

Result:
case h
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
y : X
hyU : y ∈ U
⊢ f.toPOUFun i y = (⇑(f i) * ⇑(∏ j ∈ Finset.filter (fun j => WellOrderingRel j i) hf.toFinset, (1 - f j))) y

Proof state:
case h
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
y : X
hyU : y ∈ U
⊢ f.toPOUFun i y = (⇑(f i) * ⇑(∏ j ∈ Finset.filter (fun j => WellOrderingRel j i) hf.toFinset, (1 - f j))) y

Tactic:
simp only [ContinuousMap.coe_prod, Pi.mul_apply, Finset.prod_apply]

Result:
case h
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
y : X
hyU : y ∈ U
⊢ f.toPOUFun i y = (f i) y * ∏ c ∈ Finset.filter (fun j => WellOrderingRel j i) hf.toFinset, (1 - f c) y

Proof state:
case intro.intro
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
⊢ ∃ t, f.toPOUFun i =ᶠ[𝓝 x] ⇑(f i) * ⇑(∏ j ∈ Finset.filter (fun j => WellOrderingRel j i) t, (1 - f j))

Tactic:
use hf.toFinset

Result:
case h
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
⊢ f.toPOUFun i =ᶠ[𝓝 x] ⇑(f i) * ⇑(∏ j ∈ Finset.filter (fun j => WellOrderingRel j i) hf.toFinset, (1 - f j))

Proof state:
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
⊢ ∃ t, f.toPOUFun i =ᶠ[𝓝 x] ⇑(f i) * ⇑(∏ j ∈ Finset.filter (fun j => WellOrderingRel j i) t, (1 - f j))

Tactic:
rcases f.locallyFinite x with ⟨U, hU, hf⟩

Result:
case intro.intro
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
⊢ ∃ t, f.toPOUFun i =ᶠ[𝓝 x] ⇑(f i) * ⇑(∏ j ∈ Finset.filter (fun j => WellOrderingRel j i) t, (1 - f j))

Proof state:
case h
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
y : X
hyU : y ∈ U
⊢ f.toPOUFun i y = (f i) y * ∏ c ∈ Finset.filter (fun j => WellOrderingRel j i) hf.toFinset, (1 - f c) y

Tactic:
apply toPOUFun_eq_mul_prod

Result:
case h.ht
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
y : X
hyU : y ∈ U
⊢ ∀ (j : ι), WellOrderingRel j i → (f j) y ≠ 0 → j ∈ hf.toFinset

Proof state:
case h.ht
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
y : X
hyU : y ∈ U
j : ι
a✝ : WellOrderingRel j i
hj : (f j) y ≠ 0
⊢ j ∈ hf.toFinset

Tactic:
exact hf.mem_toFinset.2 ⟨y, ⟨hj, hyU⟩⟩

Result:
no goals

Proof state:
case h.ht
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
y : X
hyU : y ∈ U
⊢ ∀ (j : ι), WellOrderingRel j i → (f j) y ≠ 0 → j ∈ hf.toFinset

Tactic:
intro j _ hj

Result:
case h.ht
ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
x : X
U : Set X
hU : U ∈ 𝓝 x
hf : {i | ((fun i => support ⇑(f i)) i ∩ U).Nonempty}.Finite
y : X
hyU : y ∈ U
j : ι
a✝ : WellOrderingRel j i
hj : (f j) y ≠ 0
⊢ j ∈ hf.toFinset