l3lab/ntp-mathlib huggingface dataset:
/-- The convolution `f * g` is continuous if `f` is locally integrable and `g` is continuous and
compactly supported. Version where `g` depends on an additional parameter in an open subset `s` of
a parameter space `P` (and the compact support `k` is independent of the parameter in `s`),
given in terms of compositions with an additional continuous map. -/
theorem continuousOn_convolution_right_with_param_comp {s : Set P} {v : P → G}
    (hv : ContinuousOn v s) {g : P → G → E'} {k : Set G} (hk : IsCompact k)
    (hgs : ∀ p, ∀ x, p ∈ s → x ∉ k → g p x = 0) (hf : LocallyIntegrable f μ)
    (hg : ContinuousOn (↿g) (s ×ˢ univ)) : ContinuousOn (fun x => (f ⋆[L, μ] g x) (v x)) s := by
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedAddCommGroup E'
inst✝¹³ : NormedAddCommGroup E''
inst✝¹² : NormedAddCommGroup F
f f' : G → E
g✝ g' : G → E'
x x' : G
y y' : E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : NormedSpace 𝕜 E'
inst✝⁸ : NormedSpace 𝕜 E''
inst✝⁷ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁶ : MeasurableSpace G
μ ν : Measure G
inst✝⁵ : NormedSpace ℝ F
inst✝⁴ : AddGroup G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalAddGroup G
inst✝¹ : BorelSpace G
inst✝ : TopologicalSpace P
s : Set P
v : P → G
hv : ContinuousOn v s
g : P → G → E'
k : Set G
hk : IsCompact k
hgs : ∀ (p : P) (x : G), p ∈ s → x ∉ k → g p x = 0
hf : LocallyIntegrable f
hg : ContinuousOn (↿g) (s ×ˢ univ)
⊢ ContinuousOn (fun x => f ⋆[L, v x] g x) s

Next tactic:
apply
    (continuousOn_convolution_right_with_param L hk hgs hf hg).comp (continuousOn_id.prod hv)
/-- The convolution `f * g` is continuous if `f` is locally integrable and `g` is continuous and
compactly supported. Version where `g` depends on an additional parameter in an open subset `s` of
a parameter space `P` (and the compact support `k` is independent of the parameter in `s`),
given in terms of compositions with an additional continuous map. -/
theorem continuousOn_convolution_right_with_param_comp {s : Set P} {v : P → G}
    (hv : ContinuousOn v s) {g : P → G → E'} {k : Set G} (hk : IsCompact k)
    (hgs : ∀ p, ∀ x, p ∈ s → x ∉ k → g p x = 0) (hf : LocallyIntegrable f μ)
    (hg : ContinuousOn (↿g) (s ×ˢ univ)) : ContinuousOn (fun x => (f ⋆[L, μ] g x) (v x)) s := by
  apply
    (continuousOn_convolution_right_with_param L hk hgs hf hg).comp (continuousOn_id.prod hv)
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedAddCommGroup E'
inst✝¹³ : NormedAddCommGroup E''
inst✝¹² : NormedAddCommGroup F
f f' : G → E
g✝ g' : G → E'
x x' : G
y y' : E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : NormedSpace 𝕜 E'
inst✝⁸ : NormedSpace 𝕜 E''
inst✝⁷ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁶ : MeasurableSpace G
μ ν : Measure G
inst✝⁵ : NormedSpace ℝ F
inst✝⁴ : AddGroup G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalAddGroup G
inst✝¹ : BorelSpace G
inst✝ : TopologicalSpace P
s : Set P
v : P → G
hv : ContinuousOn v s
g : P → G → E'
k : Set G
hk : IsCompact k
hgs : ∀ (p : P) (x : G), p ∈ s → x ∉ k → g p x = 0
hf : LocallyIntegrable f
hg : ContinuousOn (↿g) (s ×ˢ univ)
⊢ MapsTo (fun x => (_root_.id x, v x)) s (s ×ˢ univ)

Next tactic:
intro x hx
/-- The convolution `f * g` is continuous if `f` is locally integrable and `g` is continuous and
compactly supported. Version where `g` depends on an additional parameter in an open subset `s` of
a parameter space `P` (and the compact support `k` is independent of the parameter in `s`),
given in terms of compositions with an additional continuous map. -/
theorem continuousOn_convolution_right_with_param_comp {s : Set P} {v : P → G}
    (hv : ContinuousOn v s) {g : P → G → E'} {k : Set G} (hk : IsCompact k)
    (hgs : ∀ p, ∀ x, p ∈ s → x ∉ k → g p x = 0) (hf : LocallyIntegrable f μ)
    (hg : ContinuousOn (↿g) (s ×ˢ univ)) : ContinuousOn (fun x => (f ⋆[L, μ] g x) (v x)) s := by
  apply
    (continuousOn_convolution_right_with_param L hk hgs hf hg).comp (continuousOn_id.prod hv)
  intro x hx
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedAddCommGroup E'
inst✝¹³ : NormedAddCommGroup E''
inst✝¹² : NormedAddCommGroup F
f f' : G → E
g✝ g' : G → E'
x✝ x' : G
y y' : E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : NormedSpace 𝕜 E'
inst✝⁸ : NormedSpace 𝕜 E''
inst✝⁷ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁶ : MeasurableSpace G
μ ν : Measure G
inst✝⁵ : NormedSpace ℝ F
inst✝⁴ : AddGroup G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalAddGroup G
inst✝¹ : BorelSpace G
inst✝ : TopologicalSpace P
s : Set P
v : P → G
hv : ContinuousOn v s
g : P → G → E'
k : Set G
hk : IsCompact k
hgs : ∀ (p : P) (x : G), p ∈ s → x ∉ k → g p x = 0
hf : LocallyIntegrable f
hg : ContinuousOn (↿g) (s ×ˢ univ)
x : P
hx : x ∈ s
⊢ (fun x => (_root_.id x, v x)) x ∈ s ×ˢ univ

Next tactic:
simp only [hx, prod_mk_mem_set_prod_eq, mem_univ, and_self_iff, id.def]
/-- The convolution is continuous if one function is locally integrable and the other has compact
support and is continuous. -/
theorem HasCompactSupport.continuous_convolution_right (hcg : HasCompactSupport g)
    (hf : LocallyIntegrable f μ) (hg : Continuous g) : Continuous (f ⋆[L, μ] g) := by
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedAddCommGroup E'
inst✝¹³ : NormedAddCommGroup E''
inst✝¹² : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : NormedSpace 𝕜 E'
inst✝⁸ : NormedSpace 𝕜 E''
inst✝⁷ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁶ : MeasurableSpace G
μ ν : Measure G
inst✝⁵ : NormedSpace ℝ F
inst✝⁴ : AddGroup G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalAddGroup G
inst✝¹ : BorelSpace G
inst✝ : TopologicalSpace P
hcg : HasCompactSupport g
hf : LocallyIntegrable f
hg : Continuous g
⊢ Continuous (convolution f g L)

Next tactic:
rw [continuous_iff_continuousOn_univ]
/-- The convolution is continuous if one function is locally integrable and the other has compact
support and is continuous. -/
theorem HasCompactSupport.continuous_convolution_right (hcg : HasCompactSupport g)
    (hf : LocallyIntegrable f μ) (hg : Continuous g) : Continuous (f ⋆[L, μ] g) := by
  rw [continuous_iff_continuousOn_univ]
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedAddCommGroup E'
inst✝¹³ : NormedAddCommGroup E''
inst✝¹² : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : NormedSpace 𝕜 E'
inst✝⁸ : NormedSpace 𝕜 E''
inst✝⁷ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁶ : MeasurableSpace G
μ ν : Measure G
inst✝⁵ : NormedSpace ℝ F
inst✝⁴ : AddGroup G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalAddGroup G
inst✝¹ : BorelSpace G
inst✝ : TopologicalSpace P
hcg : HasCompactSupport g
hf : LocallyIntegrable f
hg : Continuous g
⊢ ContinuousOn (convolution f g L) univ

Next tactic:
let g' : G → G → E' := fun _ q => g q
/-- The convolution is continuous if one function is locally integrable and the other has compact
support and is continuous. -/
theorem HasCompactSupport.continuous_convolution_right (hcg : HasCompactSupport g)
    (hf : LocallyIntegrable f μ) (hg : Continuous g) : Continuous (f ⋆[L, μ] g) := by
  rw [continuous_iff_continuousOn_univ]
  let g' : G → G → E' := fun _ q => g q
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedAddCommGroup E'
inst✝¹³ : NormedAddCommGroup E''
inst✝¹² : NormedAddCommGroup F
f f' : G → E
g g'✝ : G → E'
x x' : G
y y' : E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : NormedSpace 𝕜 E'
inst✝⁸ : NormedSpace 𝕜 E''
inst✝⁷ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁶ : MeasurableSpace G
μ ν : Measure G
inst✝⁵ : NormedSpace ℝ F
inst✝⁴ : AddGroup G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalAddGroup G
inst✝¹ : BorelSpace G
inst✝ : TopologicalSpace P
hcg : HasCompactSupport g
hf : LocallyIntegrable f
hg : Continuous g
g' : G → G → E' := fun x q => g q
⊢ ContinuousOn (convolution f g L) univ

Next tactic:
have : ContinuousOn (↿g') (univ ×ˢ univ) := (hg.comp continuous_snd).continuousOn
/-- The convolution is continuous if one function is locally integrable and the other has compact
support and is continuous. -/
theorem HasCompactSupport.continuous_convolution_right (hcg : HasCompactSupport g)
    (hf : LocallyIntegrable f μ) (hg : Continuous g) : Continuous (f ⋆[L, μ] g) := by
  rw [continuous_iff_continuousOn_univ]
  let g' : G → G → E' := fun _ q => g q
  have : ContinuousOn (↿g') (univ ×ˢ univ) := (hg.comp continuous_snd).continuousOn
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedAddCommGroup E'
inst✝¹³ : NormedAddCommGroup E''
inst✝¹² : NormedAddCommGroup F
f f' : G → E
g g'✝ : G → E'
x x' : G
y y' : E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : NormedSpace 𝕜 E'
inst✝⁸ : NormedSpace 𝕜 E''
inst✝⁷ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁶ : MeasurableSpace G
μ ν : Measure G
inst✝⁵ : NormedSpace ℝ F
inst✝⁴ : AddGroup G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalAddGroup G
inst✝¹ : BorelSpace G
inst✝ : TopologicalSpace P
hcg : HasCompactSupport g
hf : LocallyIntegrable f
hg : Continuous g
g' : G → G → E' := fun x q => g q
this : ContinuousOn (↿g') (univ ×ˢ univ)
⊢ ContinuousOn (convolution f g L) univ

Next tactic:
exact continuousOn_convolution_right_with_param_comp L
    (continuous_iff_continuousOn_univ.1 continuous_id) hcg
    (fun p x _ hx => image_eq_zero_of_nmem_tsupport hx) hf this
/-- The convolution is continuous if one function is integrable and the other is bounded and
continuous. -/
theorem BddAbove.continuous_convolution_right_of_integrable
    [FirstCountableTopology G] [SecondCountableTopologyEither G E']
    (hbg : BddAbove (range fun x => ‖g x‖)) (hf : Integrable f μ) (hg : Continuous g) :
    Continuous (f ⋆[L, μ] g) := by
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedAddCommGroup E'
inst✝¹⁵ : NormedAddCommGroup E''
inst✝¹⁴ : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹³ : NontriviallyNormedField 𝕜
inst✝¹² : NormedSpace 𝕜 E
inst✝¹¹ : NormedSpace 𝕜 E'
inst✝¹⁰ : NormedSpace 𝕜 E''
inst✝⁹ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁸ : MeasurableSpace G
μ ν : Measure G
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : AddGroup G
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup G
inst✝³ : BorelSpace G
inst✝² : TopologicalSpace P
inst✝¹ : FirstCountableTopology G
inst✝ : SecondCountableTopologyEither G E'
hbg : BddAbove (range fun x => ‖g x‖)
hf : Integrable f
hg : Continuous g
⊢ Continuous (convolution f g L)

Next tactic:
refine' continuous_iff_continuousAt.mpr fun x₀ => _
/-- The convolution is continuous if one function is integrable and the other is bounded and
continuous. -/
theorem BddAbove.continuous_convolution_right_of_integrable
    [FirstCountableTopology G] [SecondCountableTopologyEither G E']
    (hbg : BddAbove (range fun x => ‖g x‖)) (hf : Integrable f μ) (hg : Continuous g) :
    Continuous (f ⋆[L, μ] g) := by
  refine' continuous_iff_continuousAt.mpr fun x₀ => _
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedAddCommGroup E'
inst✝¹⁵ : NormedAddCommGroup E''
inst✝¹⁴ : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹³ : NontriviallyNormedField 𝕜
inst✝¹² : NormedSpace 𝕜 E
inst✝¹¹ : NormedSpace 𝕜 E'
inst✝¹⁰ : NormedSpace 𝕜 E''
inst✝⁹ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁸ : MeasurableSpace G
μ ν : Measure G
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : AddGroup G
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup G
inst✝³ : BorelSpace G
inst✝² : TopologicalSpace P
inst✝¹ : FirstCountableTopology G
inst✝ : SecondCountableTopologyEither G E'
hbg : BddAbove (range fun x => ‖g x‖)
hf : Integrable f
hg : Continuous g
x₀ : G
⊢ ContinuousAt (convolution f g L) x₀

Next tactic:
have : ∀ᶠ x in 𝓝 x₀, ∀ᵐ t : G ∂μ, ‖L (f t) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖ := by
    refine' eventually_of_forall fun x => eventually_of_forall fun t => _
    apply_rules [L.le_of_op_norm₂_le_of_le, le_rfl, le_ciSup hbg (x - t)]
/-- The convolution is continuous if one function is integrable and the other is bounded and
continuous. -/
theorem BddAbove.continuous_convolution_right_of_integrable
    [FirstCountableTopology G] [SecondCountableTopologyEither G E']
    (hbg : BddAbove (range fun x => ‖g x‖)) (hf : Integrable f μ) (hg : Continuous g) :
    Continuous (f ⋆[L, μ] g) := by
  refine' continuous_iff_continuousAt.mpr fun x₀ => _
  have : ∀ᶠ x in 𝓝 x₀, ∀ᵐ t : G ∂μ, ‖L (f t) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖ := by
    

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedAddCommGroup E'
inst✝¹⁵ : NormedAddCommGroup E''
inst✝¹⁴ : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹³ : NontriviallyNormedField 𝕜
inst✝¹² : NormedSpace 𝕜 E
inst✝¹¹ : NormedSpace 𝕜 E'
inst✝¹⁰ : NormedSpace 𝕜 E''
inst✝⁹ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁸ : MeasurableSpace G
μ ν : Measure G
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : AddGroup G
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup G
inst✝³ : BorelSpace G
inst✝² : TopologicalSpace P
inst✝¹ : FirstCountableTopology G
inst✝ : SecondCountableTopologyEither G E'
hbg : BddAbove (range fun x => ‖g x‖)
hf : Integrable f
hg : Continuous g
x₀ : G
⊢ ∀ᶠ (x : G) in 𝓝 x₀, ∀ᵐ (t : G) ∂μ, ‖(L (f t)) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖

Next tactic:
refine' eventually_of_forall fun x => eventually_of_forall fun t => _
/-- The convolution is continuous if one function is integrable and the other is bounded and
continuous. -/
theorem BddAbove.continuous_convolution_right_of_integrable
    [FirstCountableTopology G] [SecondCountableTopologyEither G E']
    (hbg : BddAbove (range fun x => ‖g x‖)) (hf : Integrable f μ) (hg : Continuous g) :
    Continuous (f ⋆[L, μ] g) := by
  refine' continuous_iff_continuousAt.mpr fun x₀ => _
  have : ∀ᶠ x in 𝓝 x₀, ∀ᵐ t : G ∂μ, ‖L (f t) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖ := by
    refine' eventually_of_forall fun x => eventually_of_forall fun t => _
    

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedAddCommGroup E'
inst✝¹⁵ : NormedAddCommGroup E''
inst✝¹⁴ : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x✝ x' : G
y y' : E
inst✝¹³ : NontriviallyNormedField 𝕜
inst✝¹² : NormedSpace 𝕜 E
inst✝¹¹ : NormedSpace 𝕜 E'
inst✝¹⁰ : NormedSpace 𝕜 E''
inst✝⁹ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁸ : MeasurableSpace G
μ ν : Measure G
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : AddGroup G
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup G
inst✝³ : BorelSpace G
inst✝² : TopologicalSpace P
inst✝¹ : FirstCountableTopology G
inst✝ : SecondCountableTopologyEither G E'
hbg : BddAbove (range fun x => ‖g x‖)
hf : Integrable f
hg : Continuous g
x₀ x t : G
⊢ ‖(L (f t)) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖

Next tactic:
apply_rules [L.le_of_op_norm₂_le_of_le, le_rfl, le_ciSup hbg (x - t)]
/-- The convolution is continuous if one function is integrable and the other is bounded and
continuous. -/
theorem BddAbove.continuous_convolution_right_of_integrable
    [FirstCountableTopology G] [SecondCountableTopologyEither G E']
    (hbg : BddAbove (range fun x => ‖g x‖)) (hf : Integrable f μ) (hg : Continuous g) :
    Continuous (f ⋆[L, μ] g) := by
  refine' continuous_iff_continuousAt.mpr fun x₀ => _
  have : ∀ᶠ x in 𝓝 x₀, ∀ᵐ t : G ∂μ, ‖L (f t) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖ := by
    refine' eventually_of_forall fun x => eventually_of_forall fun t => _
    apply_rules [L.le_of_op_norm₂_le_of_le, le_rfl, le_ciSup hbg (x - t)]
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedAddCommGroup E'
inst✝¹⁵ : NormedAddCommGroup E''
inst✝¹⁴ : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹³ : NontriviallyNormedField 𝕜
inst✝¹² : NormedSpace 𝕜 E
inst✝¹¹ : NormedSpace 𝕜 E'
inst✝¹⁰ : NormedSpace 𝕜 E''
inst✝⁹ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁸ : MeasurableSpace G
μ ν : Measure G
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : AddGroup G
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup G
inst✝³ : BorelSpace G
inst✝² : TopologicalSpace P
inst✝¹ : FirstCountableTopology G
inst✝ : SecondCountableTopologyEither G E'
hbg : BddAbove (range fun x => ‖g x‖)
hf : Integrable f
hg : Continuous g
x₀ : G
this : ∀ᶠ (x : G) in 𝓝 x₀, ∀ᵐ (t : G) ∂μ, ‖(L (f t)) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖
⊢ ContinuousAt (convolution f g L) x₀

Next tactic:
refine' continuousAt_of_dominated _ this _ _
/-- The convolution is continuous if one function is integrable and the other is bounded and
continuous. -/
theorem BddAbove.continuous_convolution_right_of_integrable
    [FirstCountableTopology G] [SecondCountableTopologyEither G E']
    (hbg : BddAbove (range fun x => ‖g x‖)) (hf : Integrable f μ) (hg : Continuous g) :
    Continuous (f ⋆[L, μ] g) := by
  refine' continuous_iff_continuousAt.mpr fun x₀ => _
  have : ∀ᶠ x in 𝓝 x₀, ∀ᵐ t : G ∂μ, ‖L (f t) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖ := by
    refine' eventually_of_forall fun x => eventually_of_forall fun t => _
    apply_rules [L.le_of_op_norm₂_le_of_le, le_rfl, le_ciSup hbg (x - t)]
  refine' continuousAt_of_dominated _ this _ _
  · 

Proof state:
case refine'_1
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedAddCommGroup E'
inst✝¹⁵ : NormedAddCommGroup E''
inst✝¹⁴ : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹³ : NontriviallyNormedField 𝕜
inst✝¹² : NormedSpace 𝕜 E
inst✝¹¹ : NormedSpace 𝕜 E'
inst✝¹⁰ : NormedSpace 𝕜 E''
inst✝⁹ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁸ : MeasurableSpace G
μ ν : Measure G
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : AddGroup G
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup G
inst✝³ : BorelSpace G
inst✝² : TopologicalSpace P
inst✝¹ : FirstCountableTopology G
inst✝ : SecondCountableTopologyEither G E'
hbg : BddAbove (range fun x => ‖g x‖)
hf : Integrable f
hg : Continuous g
x₀ : G
this : ∀ᶠ (x : G) in 𝓝 x₀, ∀ᵐ (t : G) ∂μ, ‖(L (f t)) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖
⊢ ∀ᶠ (x : G) in 𝓝 x₀, AEStronglyMeasurable (fun a => (L (f a)) (g (x - a))) μ

Next tactic:
exact eventually_of_forall fun x =>
      hf.aestronglyMeasurable.convolution_integrand_snd' L hg.aestronglyMeasurable
/-- The convolution is continuous if one function is integrable and the other is bounded and
continuous. -/
theorem BddAbove.continuous_convolution_right_of_integrable
    [FirstCountableTopology G] [SecondCountableTopologyEither G E']
    (hbg : BddAbove (range fun x => ‖g x‖)) (hf : Integrable f μ) (hg : Continuous g) :
    Continuous (f ⋆[L, μ] g) := by
  refine' continuous_iff_continuousAt.mpr fun x₀ => _
  have : ∀ᶠ x in 𝓝 x₀, ∀ᵐ t : G ∂μ, ‖L (f t) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖ := by
    refine' eventually_of_forall fun x => eventually_of_forall fun t => _
    apply_rules [L.le_of_op_norm₂_le_of_le, le_rfl, le_ciSup hbg (x - t)]
  refine' continuousAt_of_dominated _ this _ _
  · exact eventually_of_forall fun x =>
      hf.aestronglyMeasurable.convolution_integrand_snd' L hg.aestronglyMeasurable
  · 

Proof state:
case refine'_2
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedAddCommGroup E'
inst✝¹⁵ : NormedAddCommGroup E''
inst✝¹⁴ : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹³ : NontriviallyNormedField 𝕜
inst✝¹² : NormedSpace 𝕜 E
inst✝¹¹ : NormedSpace 𝕜 E'
inst✝¹⁰ : NormedSpace 𝕜 E''
inst✝⁹ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁸ : MeasurableSpace G
μ ν : Measure G
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : AddGroup G
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup G
inst✝³ : BorelSpace G
inst✝² : TopologicalSpace P
inst✝¹ : FirstCountableTopology G
inst✝ : SecondCountableTopologyEither G E'
hbg : BddAbove (range fun x => ‖g x‖)
hf : Integrable f
hg : Continuous g
x₀ : G
this : ∀ᶠ (x : G) in 𝓝 x₀, ∀ᵐ (t : G) ∂μ, ‖(L (f t)) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖
⊢ Integrable fun a => ‖L‖ * ‖f a‖ * ⨆ i, ‖g i‖

Next tactic:
exact (hf.norm.const_mul _).mul_const _
/-- The convolution is continuous if one function is integrable and the other is bounded and
continuous. -/
theorem BddAbove.continuous_convolution_right_of_integrable
    [FirstCountableTopology G] [SecondCountableTopologyEither G E']
    (hbg : BddAbove (range fun x => ‖g x‖)) (hf : Integrable f μ) (hg : Continuous g) :
    Continuous (f ⋆[L, μ] g) := by
  refine' continuous_iff_continuousAt.mpr fun x₀ => _
  have : ∀ᶠ x in 𝓝 x₀, ∀ᵐ t : G ∂μ, ‖L (f t) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖ := by
    refine' eventually_of_forall fun x => eventually_of_forall fun t => _
    apply_rules [L.le_of_op_norm₂_le_of_le, le_rfl, le_ciSup hbg (x - t)]
  refine' continuousAt_of_dominated _ this _ _
  · exact eventually_of_forall fun x =>
      hf.aestronglyMeasurable.convolution_integrand_snd' L hg.aestronglyMeasurable
  · exact (hf.norm.const_mul _).mul_const _
  · 

Proof state:
case refine'_3
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedAddCommGroup E'
inst✝¹⁵ : NormedAddCommGroup E''
inst✝¹⁴ : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹³ : NontriviallyNormedField 𝕜
inst✝¹² : NormedSpace 𝕜 E
inst✝¹¹ : NormedSpace 𝕜 E'
inst✝¹⁰ : NormedSpace 𝕜 E''
inst✝⁹ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁸ : MeasurableSpace G
μ ν : Measure G
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : AddGroup G
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup G
inst✝³ : BorelSpace G
inst✝² : TopologicalSpace P
inst✝¹ : FirstCountableTopology G
inst✝ : SecondCountableTopologyEither G E'
hbg : BddAbove (range fun x => ‖g x‖)
hf : Integrable f
hg : Continuous g
x₀ : G
this : ∀ᶠ (x : G) in 𝓝 x₀, ∀ᵐ (t : G) ∂μ, ‖(L (f t)) (g (x - t))‖ ≤ ‖L‖ * ‖f t‖ * ⨆ i, ‖g i‖
⊢ ∀ᵐ (a : G) ∂μ, ContinuousAt (fun x => (L (f a)) (g (x - a))) x₀

Next tactic:
exact eventually_of_forall fun t => (L.continuous₂.comp₂ continuous_const <|
      hg.comp <| continuous_id.sub continuous_const).continuousAt
/-- Commutativity of convolution -/
theorem convolution_flip : g ⋆[L.flip, μ] f = f ⋆[L, μ] g := by
  

Proof state:
𝕜 : Type u𝕜
G : Type uG
E : Type uE
E' : Type uE'
E'' : Type uE''
F : Type uF
F' : Type uF'
F'' : Type uF''
P : Type uP
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedAddCommGroup E'
inst✝¹³ : NormedAddCommGroup E''
inst✝¹² : NormedAddCommGroup F
f f' : G → E
g g' : G → E'
x x' : G
y y' : E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : NormedSpace 𝕜 E'
inst✝⁸ : NormedSpace 𝕜 E''
inst✝⁷ : NormedSpace 𝕜 F
L : E →L[𝕜] E' →L[𝕜] F
inst✝⁶ : MeasurableSpace G
μ ν : Measure G
inst✝⁵ : NormedSpace ℝ F
inst✝⁴ : AddCommGroup G
inst✝³ : IsAddLeftInvariant μ
inst✝² : IsNegInvariant μ
inst✝¹ : MeasurableNeg G
inst✝ : MeasurableAdd G
⊢ convolution g f (ContinuousLinearMap.flip L) = convolution f g L

Next tactic:
ext1 x