Theorem: Real.hasFDerivAt_fourierChar_neg_bilinear_right
File: Mathlib/Analysis/Fourier/FourierTransformDeriv.lean

Proof steps:
state_before: V : Type u_1
W : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : NormedSpace ℝ V
inst✝¹ : NormedAddCommGroup W
inst✝ : NormedSpace ℝ W
L : V →L[ℝ] W →L[ℝ] ℝ
v : V
w : W
⊢ HasFDerivAt (fun w => ↑(𝐞 (-(L v) w))) ((-2 * ↑π * I * ↑(𝐞 (-(L v) w))) • ofRealCLM.comp (L v)) w
state_after: V : Type u_1
W : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : NormedSpace ℝ V
inst✝¹ : NormedAddCommGroup W
inst✝ : NormedSpace ℝ W
L : V →L[ℝ] W →L[ℝ] ℝ
v : V
w : W
ha : HasFDerivAt (fun w' => (L v) w') (L v) w
⊢ HasFDerivAt (fun w => ↑(𝐞 (-(L v) w))) ((-2 * ↑π * I * ↑(𝐞 (-(L v) w))) • ofRealCLM.comp (L v)) w
tactic: have ha : HasFDerivAt (fun w' : W ↦ L v w') (L v) w := ContinuousLinearMap.hasFDerivAt (L v)
state_before: V : Type u_1
W : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : NormedSpace ℝ V
inst✝¹ : NormedAddCommGroup W
inst✝ : NormedSpace ℝ W
L : V →L[ℝ] W →L[ℝ] ℝ
v : V
w : W
ha : HasFDerivAt (fun w' => (L v) w') (L v) w
⊢ HasFDerivAt (fun w => ↑(𝐞 (-(L v) w))) ((-2 * ↑π * I * ↑(𝐞 (-(L v) w))) • ofRealCLM.comp (L v)) w
state_after: case h.e'_10
V : Type u_1
W : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : NormedSpace ℝ V
inst✝¹ : NormedAddCommGroup W
inst✝ : NormedSpace ℝ W
L : V →L[ℝ] W →L[ℝ] ℝ
v : V
w : W
ha : HasFDerivAt (fun w' => (L v) w') (L v) w
⊢ (-2 * ↑π * I * ↑(𝐞 (-(L v) w))) • ofRealCLM.comp (L v) =
    (ContinuousLinearMap.smulRight 1 (2 * ↑π * I * ↑(𝐞 (-(L v) w)))).comp (-L v)
tactic: convert (hasDerivAt_fourierChar (-L v w)).hasFDerivAt.comp w ha.neg using 1
state_before: case h.e'_10
V : Type u_1
W : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : NormedSpace ℝ V
inst✝¹ : NormedAddCommGroup W
inst✝ : NormedSpace ℝ W
L : V →L[ℝ] W →L[ℝ] ℝ
v : V
w : W
ha : HasFDerivAt (fun w' => (L v) w') (L v) w
⊢ (-2 * ↑π * I * ↑(𝐞 (-(L v) w))) • ofRealCLM.comp (L v) =
    (ContinuousLinearMap.smulRight 1 (2 * ↑π * I * ↑(𝐞 (-(L v) w)))).comp (-L v)
state_after: case h.e'_10.h
V : Type u_1
W : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : NormedSpace ℝ V
inst✝¹ : NormedAddCommGroup W
inst✝ : NormedSpace ℝ W
L : V →L[ℝ] W →L[ℝ] ℝ
v : V
w : W
ha : HasFDerivAt (fun w' => (L v) w') (L v) w
y : W
⊢ ((-2 * ↑π * I * ↑(𝐞 (-(L v) w))) • ofRealCLM.comp (L v)) y =
    ((ContinuousLinearMap.smulRight 1 (2 * ↑π * I * ↑(𝐞 (-(L v) w)))).comp (-L v)) y
tactic: ext y
state_before: case h.e'_10.h
V : Type u_1
W : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : NormedSpace ℝ V
inst✝¹ : NormedAddCommGroup W
inst✝ : NormedSpace ℝ W
L : V →L[ℝ] W →L[ℝ] ℝ
v : V
w : W
ha : HasFDerivAt (fun w' => (L v) w') (L v) w
y : W
⊢ ((-2 * ↑π * I * ↑(𝐞 (-(L v) w))) • ofRealCLM.comp (L v)) y =
    ((ContinuousLinearMap.smulRight 1 (2 * ↑π * I * ↑(𝐞 (-(L v) w)))).comp (-L v)) y
state_after: case h.e'_10.h
V : Type u_1
W : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : NormedSpace ℝ V
inst✝¹ : NormedAddCommGroup W
inst✝ : NormedSpace ℝ W
L : V →L[ℝ] W →L[ℝ] ℝ
v : V
w : W
ha : HasFDerivAt (fun w' => (L v) w') (L v) w
y : W
⊢ 2 * ↑π * I * ↑(𝐞 (-(L v) w)) * ↑((L v) y) = ↑((L v) y) * (2 * ↑π * I * ↑(𝐞 (-(L v) w)))
tactic: simp only [neg_mul, ContinuousLinearMap.coe_smul', ContinuousLinearMap.coe_comp', Pi.smul_apply,
    Function.comp_apply, ofRealCLM_apply, smul_eq_mul, ContinuousLinearMap.comp_neg,
    ContinuousLinearMap.neg_apply, ContinuousLinearMap.smulRight_apply,
    ContinuousLinearMap.one_apply, real_smul, neg_inj]
state_before: case h.e'_10.h
V : Type u_1
W : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : NormedSpace ℝ V
inst✝¹ : NormedAddCommGroup W
inst✝ : NormedSpace ℝ W
L : V →L[ℝ] W →L[ℝ] ℝ
v : V
w : W
ha : HasFDerivAt (fun w' => (L v) w') (L v) w
y : W
⊢ 2 * ↑π * I * ↑(𝐞 (-(L v) w)) * ↑((L v) y) = ↑((L v) y) * (2 * ↑π * I * ↑(𝐞 (-(L v) w)))
state_after: no goals
tactic: ring