Theorem: deriv_const_smul'
File: Mathlib/Analysis/Calculus/Deriv/Mul.lean

tactic: by_cases hf : DifferentiableAt 𝕜 f x
state_before: 𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
⊢ deriv (fun y => c • f y) x = c • deriv f x
state_after: case pos
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hf : DifferentiableAt 𝕜 f x
⊢ deriv (fun y => c • f y) x = c • deriv f x

case neg
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hf : ¬DifferentiableAt 𝕜 f x
⊢ deriv (fun y => c • f y) x = c • deriv f x

tactic: exact deriv_const_smul c hf
state_before: case pos
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hf : DifferentiableAt 𝕜 f x
⊢ deriv (fun y => c • f y) x = c • deriv f x
state_after: no goals

tactic: rcases eq_or_ne c 0 with rfl | hc
state_before: case neg
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hf : ¬DifferentiableAt 𝕜 f x
⊢ deriv (fun y => c • f y) x = c • deriv f x
state_after: case neg.inl
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
hf : ¬DifferentiableAt 𝕜 f x
⊢ deriv (fun y => 0 • f y) x = 0 • deriv f x

case neg.inr
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hf : ¬DifferentiableAt 𝕜 f x
hc : c ≠ 0
⊢ deriv (fun y => c • f y) x = c • deriv f x

tactic: simp only [zero_smul, deriv_const']
state_before: case neg.inl
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
hf : ¬DifferentiableAt 𝕜 f x
⊢ deriv (fun y => 0 • f y) x = 0 • deriv f x
state_after: no goals

tactic: have H : ¬DifferentiableAt 𝕜 (fun y ↦ c • f y) x := by
  contrapose! hf
  change DifferentiableAt 𝕜 (fun y ↦ f y) x
  conv => enter [2, y]; rw [← inv_smul_smul₀ hc (f y)]
  exact DifferentiableAt.const_smul hf c⁻¹
state_before: case neg.inr
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hf : ¬DifferentiableAt 𝕜 f x
hc : c ≠ 0
⊢ deriv (fun y => c • f y) x = c • deriv f x
state_after: case neg.inr
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hf : ¬DifferentiableAt 𝕜 f x
hc : c ≠ 0
H : ¬DifferentiableAt 𝕜 (fun y => c • f y) x
⊢ deriv (fun y => c • f y) x = c • deriv f x

tactic: rw [deriv_zero_of_not_differentiableAt hf, deriv_zero_of_not_differentiableAt H, smul_zero]
state_before: case neg.inr
𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hf : ¬DifferentiableAt 𝕜 f x
hc : c ≠ 0
H : ¬DifferentiableAt 𝕜 (fun y => c • f y) x
⊢ deriv (fun y => c • f y) x = c • deriv f x
state_after: no goals

tactic: contrapose! hf
state_before: 𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hf : ¬DifferentiableAt 𝕜 f x
hc : c ≠ 0
⊢ ¬DifferentiableAt 𝕜 (fun y => c • f y) x
state_after: 𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hc : c ≠ 0
hf : DifferentiableAt 𝕜 (fun y => c • f y) x
⊢ DifferentiableAt 𝕜 f x

tactic: change DifferentiableAt 𝕜 (fun y ↦ f y) x
state_before: 𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hc : c ≠ 0
hf : DifferentiableAt 𝕜 (fun y => c • f y) x
⊢ DifferentiableAt 𝕜 f x
state_after: 𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hc : c ≠ 0
hf : DifferentiableAt 𝕜 (fun y => c • f y) x
⊢ DifferentiableAt 𝕜 (fun y => f y) x

tactic: conv => enter [2, y]; rw [← inv_smul_smul₀ hc (f y)]
state_before: 𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hc : c ≠ 0
hf : DifferentiableAt 𝕜 (fun y => c • f y) x
⊢ DifferentiableAt 𝕜 (fun y => f y) x
state_after: 𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hc : c ≠ 0
hf : DifferentiableAt 𝕜 (fun y => c • f y) x
⊢ DifferentiableAt 𝕜 (fun y => c⁻¹ • c • f y) x

tactic: exact DifferentiableAt.const_smul hf c⁻¹
state_before: 𝕜 : Type u
inst✝¹⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
E : Type w
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁹ : NormedAddCommGroup G
inst✝⁸ : NormedSpace 𝕜 G
f✝ f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
R✝ : Type u_2
inst✝⁷ : Semiring R✝
inst✝⁶ : Module R✝ F
inst✝⁵ : SMulCommClass 𝕜 R✝ F
inst✝⁴ : ContinuousConstSMul R✝ F
f : 𝕜 → F
x : 𝕜
R : Type u_3
inst✝³ : Field R
inst✝² : Module R F
inst✝¹ : SMulCommClass 𝕜 R F
inst✝ : ContinuousConstSMul R F
c : R
hc : c ≠ 0
hf : DifferentiableAt 𝕜 (fun y => c • f y) x
⊢ DifferentiableAt 𝕜 (fun y => c⁻¹ • c • f y) x
state_after: no goals