-- Mathlib/Analysis/Normed/Lp/lpSpace.lean
theorem norm_const_smul_le (hp : p ≠ 0) (c : 𝕜) (f : lp E p) : ‖c • f‖ ≤ ‖c‖ * ‖f‖

Proof state:
case inr.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
p : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp✝ : p ≠ 0
c : 𝕜
f : ↥(lp E p)
hp : 0 < p.toReal
inst : NNNorm ↥(lp E p) := { nnnorm := fun f => ⟨‖f‖, ⋯⟩ }
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖

Tactic:
have coe_nnnorm : ∀ f : lp E p, ↑‖f‖₊ = ‖f‖ := fun _ => rfl

Result:
case inr.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
p : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp✝ : p ≠ 0
c : 𝕜
f : ↥(lp E p)
hp : 0 < p.toReal
inst : NNNorm ↥(lp E p) := { nnnorm := fun f => ⟨‖f‖, ⋯⟩ }
coe_nnnorm : ∀ (f : ↥(lp E p)), ↑‖f‖₊ = ‖f‖
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖

Proof state:
case inr.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
p : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp✝ : p ≠ 0
c : 𝕜
f : ↥(lp E p)
hp : 0 < p.toReal
inst : NNNorm ↥(lp E p)
coe_nnnorm : ∀ (f : ↥(lp E p)), ↑‖f‖₊ = ‖f‖
⊢ ‖c • f‖₊ ^ p.toReal ≤ (‖c‖₊ * ‖f‖₊) ^ p.toReal

Tactic:
rw [NNReal.mul_rpow]

Result:
case inr.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
p : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp✝ : p ≠ 0
c : 𝕜
f : ↥(lp E p)
hp : 0 < p.toReal
inst : NNNorm ↥(lp E p)
coe_nnnorm : ∀ (f : ↥(lp E p)), ↑‖f‖₊ = ‖f‖
⊢ ‖c • f‖₊ ^ p.toReal ≤ ‖c‖₊ ^ p.toReal * ‖f‖₊ ^ p.toReal

Proof state:
case inr.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
p : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp✝ : p ≠ 0
c : 𝕜
f : ↥(lp E p)
hp : 0 < p.toReal
inst : NNNorm ↥(lp E p)
coe_nnnorm : ∀ (f : ↥(lp E p)), ↑‖f‖₊ = ‖f‖
hLHS : HasSum (fun i => ‖↑(c • f) i‖ ^ p.toReal) (‖c • f‖ ^ p.toReal)
hRHS : HasSum (fun i => ‖c‖ ^ p.toReal * ‖↑f i‖ ^ p.toReal) (‖c‖ ^ p.toReal * ‖f‖ ^ p.toReal)
⊢ ‖c • f‖₊ ^ p.toReal ≤ ‖c‖₊ ^ p.toReal * ‖f‖₊ ^ p.toReal

Tactic:
simp_rw [← coe_nnnorm, ← _root_.coe_nnnorm, ← NNReal.coe_rpow, ← NNReal.coe_mul,
  NNReal.hasSum_coe] at hRHS hLHS

Result:
case inr.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
p : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp✝ : p ≠ 0
c : 𝕜
f : ↥(lp E p)
hp : 0 < p.toReal
inst : NNNorm ↥(lp E p)
coe_nnnorm : ∀ (f : ↥(lp E p)), ↑‖f‖₊ = ‖f‖
hRHS : HasSum (fun a => ‖c‖₊ ^ p.toReal * ‖↑f a‖₊ ^ p.toReal) (‖c‖₊ ^ p.toReal * ‖f‖₊ ^ p.toReal)
hLHS : HasSum (fun a => ‖↑(c • f) a‖₊ ^ p.toReal) (‖c • f‖₊ ^ p.toReal)
⊢ ‖c • f‖₊ ^ p.toReal ≤ ‖c‖₊ ^ p.toReal * ‖f‖₊ ^ p.toReal

Proof state:
case inr.inl.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : ↥(lp E ⊤)
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖

Tactic:
refine hcf.right ?_

Result:
case inr.inl.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : ↥(lp E ⊤)
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
⊢ ‖c‖ * ‖f‖ ∈ upperBounds (Set.range fun i => ‖↑(c • f) i‖)

Proof state:
case inr.inl.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : ↥(lp E ⊤)
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
this : ∀ (a : α), ‖c‖ * ‖↑f a‖ ≤ ‖c‖ * ‖f‖
⊢ ∀ (a : α), ‖↑(c • f) a‖ ≤ ‖c‖ * ‖f‖

Tactic:
intro a

Result:
case inr.inl.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : ↥(lp E ⊤)
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
this : ∀ (a : α), ‖c‖ * ‖↑f a‖ ≤ ‖c‖ * ‖f‖
a : α
⊢ ‖↑(c • f) a‖ ≤ ‖c‖ * ‖f‖

Proof state:
case inr.inl.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : ↥(lp E ⊤)
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
⊢ ‖c‖ * ‖f‖ ∈ upperBounds (Set.range fun i => ‖↑(c • f) i‖)

Tactic:
have := hfc.left

Result:
case inr.inl.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : ↥(lp E ⊤)
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
this : ‖c‖ * ‖f‖ ∈ upperBounds (Set.range fun x => ‖c‖ * ‖↑f x‖)
⊢ ‖c‖ * ‖f‖ ∈ upperBounds (Set.range fun i => ‖↑(c • f) i‖)

Proof state:
case inr.inl.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : ↥(lp E ⊤)
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
this : ‖c‖ * ‖f‖ ∈ upperBounds (Set.range fun x => ‖c‖ * ‖↑f x‖)
⊢ ‖c‖ * ‖f‖ ∈ upperBounds (Set.range fun i => ‖↑(c • f) i‖)

Tactic:
simp_rw [mem_upperBounds, Set.mem_range,
  forall_exists_index, forall_apply_eq_imp_iff] at this ⊢

Result:
case inr.inl.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
c : 𝕜
hp : ⊤ ≠ 0
f : ↥(lp E ⊤)
h✝ : Nonempty α
hcf : IsLUB (Set.range fun i => ‖↑(c • f) i‖) ‖c • f‖
hfc : IsLUB (Set.range fun x => ‖c‖ * ‖↑f x‖) (‖c‖ * ‖f‖)
this : ∀ (a : α), ‖c‖ * ‖↑f a‖ ≤ ‖c‖ * ‖f‖
⊢ ∀ (a : α), ‖↑(c • f) a‖ ≤ ‖c‖ * ‖f‖

Proof state:
case inr.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
p : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp✝ : p ≠ 0
c : 𝕜
f : ↥(lp E p)
hp : 0 < p.toReal
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖

Tactic:
letI inst : NNNorm (lp E p) := ⟨fun f => ⟨‖f‖, norm_nonneg' _⟩⟩

Result:
case inr.inr
𝕜 : Type u_1
α : Type u_3
E : α → Type u_4
p : ℝ≥0∞
inst✝³ : (i : α) → NormedAddCommGroup (E i)
inst✝² : NormedRing 𝕜
inst✝¹ : (i : α) → Module 𝕜 (E i)
inst✝ : ∀ (i : α), BoundedSMul 𝕜 (E i)
hp✝ : p ≠ 0
c : 𝕜
f : ↥(lp E p)
hp : 0 < p.toReal
inst : NNNorm ↥(lp E p) := { nnnorm := fun f => ⟨‖f‖, ⋯⟩ }
⊢ ‖c • f‖ ≤ ‖c‖ * ‖f‖