Theorem: SmoothBumpFunction.smooth_smul
File: Mathlib/Geometry/Manifold/BumpFunction.lean

Proof steps:
state_before: E : Type uE
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : FiniteDimensional ℝ E
H : Type uH
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝³ : T2Space M
inst✝² : SmoothManifoldWithCorners I M
G : Type u_1
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
g : M → G
hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source
⊢ Smooth I 𝓘(ℝ, G) fun x => ↑f x • g x
state_after: E : Type uE
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : FiniteDimensional ℝ E
H : Type uH
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝³ : T2Space M
inst✝² : SmoothManifoldWithCorners I M
G : Type u_1
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
g : M → G
hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source
x : M
hx : x ∈ tsupport fun x => ↑f x • g x
⊢ ContMDiffAt I 𝓘(ℝ, G) ⊤ (fun x => ↑f x • g x) x
tactic: refine contMDiff_of_tsupport fun x hx => ?_
state_before: E : Type uE
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : FiniteDimensional ℝ E
H : Type uH
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝³ : T2Space M
inst✝² : SmoothManifoldWithCorners I M
G : Type u_1
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
g : M → G
hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source
x : M
hx : x ∈ tsupport fun x => ↑f x • g x
⊢ ContMDiffAt I 𝓘(ℝ, G) ⊤ (fun x => ↑f x • g x) x
state_after: E : Type uE
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : FiniteDimensional ℝ E
H : Type uH
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝³ : T2Space M
inst✝² : SmoothManifoldWithCorners I M
G : Type u_1
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
g : M → G
hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source
x : M
hx : x ∈ tsupport fun x => ↑f x • g x
this : x ∈ (chartAt H c).source
⊢ ContMDiffAt I 𝓘(ℝ, G) ⊤ (fun x => ↑f x • g x) x
tactic: have : x ∈ (chartAt H c).source :=
  -- Porting note: was a more readable `calc`
  -- calc
  --   x ∈ tsupport fun x => f x • g x := hx
  --   _ ⊆ tsupport f := tsupport_smul_subset_left _ _
  --   _ ⊆ (chart_at _ c).source := f.tsupport_subset_chartAt_source
    f.tsupport_subset_chartAt_source <| tsupport_smul_subset_left _ _ hx
state_before: E : Type uE
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : FiniteDimensional ℝ E
H : Type uH
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝³ : T2Space M
inst✝² : SmoothManifoldWithCorners I M
G : Type u_1
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
g : M → G
hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source
x : M
hx : x ∈ tsupport fun x => ↑f x • g x
this : x ∈ (chartAt H c).source
⊢ ContMDiffAt I 𝓘(ℝ, G) ⊤ (fun x => ↑f x • g x) x
state_after: no goals
tactic: exact f.smoothAt.smul ((hg _ this).contMDiffAt <| (chartAt _ _).open_source.mem_nhds this)