-- Mathlib/Analysis/Calculus/LineDeriv/IntegrationByParts.lean
lemma integral_bilinear_hasLineDerivAt_right_eq_neg_left_of_integrable_aux1 [SigmaFinite μ]
    {f f' : E × ℝ → F} {g g' : E × ℝ → G} {B : F →L[ℝ] G →L[ℝ] W}
    (hf'g : Integrable (fun x ↦ B (f' x) (g x)) (μ.prod volume))
    (hfg' : Integrable (fun x ↦ B (f x) (g' x)) (μ.prod volume))
    (hfg : Integrable (fun x ↦ B (f x) (g x)) (μ.prod volume))
    (hf : ∀ x, HasLineDerivAt ℝ f (f' x) x (0, 1)) (hg : ∀ x, HasLineDerivAt ℝ g (g' x) x (0, 1)) :
    ∫ x, B (f x) (g' x) ∂(μ.prod volume) = - ∫ x, B (f' x) (g x) ∂(μ.prod volume) := calc
  ∫ x, B (f x) (g' x) ∂(μ.prod volume)
    = ∫ x, (∫ t, B (f (x, t)) (g' (x, t))) ∂μ := integral_prod _ hfg'
  _ = ∫ x, (- ∫ t, B (f' (x, t)) (g (x, t))) ∂μ

Proof state:
case h
E : Type u_1
F : Type u_2
G : Type u_3
W : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
inst✝³ : NormedAddCommGroup W
inst✝² : NormedSpace ℝ W
inst✝¹ : MeasurableSpace E
μ : Measure E
inst✝ : SigmaFinite μ
f f' : E × ℝ → F
g g' : E × ℝ → G
B : F →L[ℝ] G →L[ℝ] W
hf'g : Integrable (fun x => (B (f' x)) (g x)) (μ.prod volume)
hfg' : Integrable (fun x => (B (f x)) (g' x)) (μ.prod volume)
hfg : Integrable (fun x => (B (f x)) (g x)) (μ.prod volume)
hf : ∀ (x : E × ℝ), HasLineDerivAt ℝ f (f' x) x (0, 1)
hg : ∀ (x : E × ℝ), HasLineDerivAt ℝ g (g' x) x (0, 1)
⊢ (fun a => ∫ (t : ℝ), (B (f (a, t))) (g' (a, t))) =ᶠ[ae μ] fun a => -∫ (t : ℝ), (B (f' (a, t))) (g (a, t))

Tactic:
filter_upwards [hf'g.prod_right_ae, hfg'.prod_right_ae, hfg.prod_right_ae]
  with x hf'gx hfg'x hfgx

Result:
case h
E : Type u_1
F : Type u_2
G : Type u_3
W : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
inst✝³ : NormedAddCommGroup W
inst✝² : NormedSpace ℝ W
inst✝¹ : MeasurableSpace E
μ : Measure E
inst✝ : SigmaFinite μ
f f' : E × ℝ → F
g g' : E × ℝ → G
B : F →L[ℝ] G →L[ℝ] W
hf'g : Integrable (fun x => (B (f' x)) (g x)) (μ.prod volume)
hfg' : Integrable (fun x => (B (f x)) (g' x)) (μ.prod volume)
hfg : Integrable (fun x => (B (f x)) (g x)) (μ.prod volume)
hf : ∀ (x : E × ℝ), HasLineDerivAt ℝ f (f' x) x (0, 1)
hg : ∀ (x : E × ℝ), HasLineDerivAt ℝ g (g' x) x (0, 1)
x : E
hf'gx : Integrable (fun y => (B (f' (x, y))) (g (x, y))) volume
hfg'x : Integrable (fun y => (B (f (x, y))) (g' (x, y))) volume
hfgx : Integrable (fun y => (B (f (x, y))) (g (x, y))) volume
⊢ ∫ (t : ℝ), (B (f (x, t))) (g' (x, t)) = -∫ (t : ℝ), (B (f' (x, t))) (g (x, t))

Proof state:
E : Type u_1
F : Type u_2
G : Type u_3
W : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
inst✝³ : NormedAddCommGroup W
inst✝² : NormedSpace ℝ W
inst✝¹ : MeasurableSpace E
μ : Measure E
inst✝ : SigmaFinite μ
f f' : E × ℝ → F
g g' : E × ℝ → G
B : F →L[ℝ] G →L[ℝ] W
hf'g : Integrable (fun x => (B (f' x)) (g x)) (μ.prod volume)
hfg' : Integrable (fun x => (B (f x)) (g' x)) (μ.prod volume)
hfg : Integrable (fun x => (B (f x)) (g x)) (μ.prod volume)
hf : ∀ (x : E × ℝ), HasLineDerivAt ℝ f (f' x) x (0, 1)
hg : ∀ (x : E × ℝ), HasLineDerivAt ℝ g (g' x) x (0, 1)
x : E
hf'gx : Integrable (fun y => (B (f' (x, y))) (g (x, y))) volume
hfg'x : Integrable (fun y => (B (f (x, y))) (g' (x, y))) volume
hfgx : Integrable (fun y => (B (f (x, y))) (g (x, y))) volume
⊢ ∀ (x_1 : ℝ), HasDerivAt (fun x_2 => f (x, x_2)) (f' (x, x_1)) x_1

Tactic:
intro t

Result:
E : Type u_1
F : Type u_2
G : Type u_3
W : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
inst✝³ : NormedAddCommGroup W
inst✝² : NormedSpace ℝ W
inst✝¹ : MeasurableSpace E
μ : Measure E
inst✝ : SigmaFinite μ
f f' : E × ℝ → F
g g' : E × ℝ → G
B : F →L[ℝ] G →L[ℝ] W
hf'g : Integrable (fun x => (B (f' x)) (g x)) (μ.prod volume)
hfg' : Integrable (fun x => (B (f x)) (g' x)) (μ.prod volume)
hfg : Integrable (fun x => (B (f x)) (g x)) (μ.prod volume)
hf : ∀ (x : E × ℝ), HasLineDerivAt ℝ f (f' x) x (0, 1)
hg : ∀ (x : E × ℝ), HasLineDerivAt ℝ g (g' x) x (0, 1)
x : E
hf'gx : Integrable (fun y => (B (f' (x, y))) (g (x, y))) volume
hfg'x : Integrable (fun y => (B (f (x, y))) (g' (x, y))) volume
hfgx : Integrable (fun y => (B (f (x, y))) (g (x, y))) volume
t : ℝ
⊢ HasDerivAt (fun x_1 => f (x, x_1)) (f' (x, t)) t

Proof state:
E : Type u_1
F : Type u_2
G : Type u_3
W : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
inst✝³ : NormedAddCommGroup W
inst✝² : NormedSpace ℝ W
inst✝¹ : MeasurableSpace E
μ : Measure E
inst✝ : SigmaFinite μ
f f' : E × ℝ → F
g g' : E × ℝ → G
B : F →L[ℝ] G →L[ℝ] W
hf'g : Integrable (fun x => (B (f' x)) (g x)) (μ.prod volume)
hfg' : Integrable (fun x => (B (f x)) (g' x)) (μ.prod volume)
hfg : Integrable (fun x => (B (f x)) (g x)) (μ.prod volume)
hf : ∀ (x : E × ℝ), HasLineDerivAt ℝ f (f' x) x (0, 1)
hg : ∀ (x : E × ℝ), HasLineDerivAt ℝ g (g' x) x (0, 1)
⊢ ∫ (x : E), ∫ (t : ℝ), (B (f (x, t))) (g' (x, t)) ∂μ = ∫ (x : E), -∫ (t : ℝ), (B (f' (x, t))) (g (x, t)) ∂μ

Tactic:
apply integral_congr_ae

Result:
case h
E : Type u_1
F : Type u_2
G : Type u_3
W : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
inst✝³ : NormedAddCommGroup W
inst✝² : NormedSpace ℝ W
inst✝¹ : MeasurableSpace E
μ : Measure E
inst✝ : SigmaFinite μ
f f' : E × ℝ → F
g g' : E × ℝ → G
B : F →L[ℝ] G →L[ℝ] W
hf'g : Integrable (fun x => (B (f' x)) (g x)) (μ.prod volume)
hfg' : Integrable (fun x => (B (f x)) (g' x)) (μ.prod volume)
hfg : Integrable (fun x => (B (f x)) (g x)) (μ.prod volume)
hf : ∀ (x : E × ℝ), HasLineDerivAt ℝ f (f' x) x (0, 1)
hg : ∀ (x : E × ℝ), HasLineDerivAt ℝ g (g' x) x (0, 1)
⊢ (fun a => ∫ (t : ℝ), (B (f (a, t))) (g' (a, t))) =ᶠ[ae μ] fun a => -∫ (t : ℝ), (B (f' (a, t))) (g (a, t))

Proof state:
E : Type u_1
F : Type u_2
G : Type u_3
W : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
inst✝³ : NormedAddCommGroup W
inst✝² : NormedSpace ℝ W
inst✝¹ : MeasurableSpace E
μ : Measure E
inst✝ : SigmaFinite μ
f f' : E × ℝ → F
g g' : E × ℝ → G
B : F →L[ℝ] G →L[ℝ] W
hf'g : Integrable (fun x => (B (f' x)) (g x)) (μ.prod volume)
hfg' : Integrable (fun x => (B (f x)) (g' x)) (μ.prod volume)
hfg : Integrable (fun x => (B (f x)) (g x)) (μ.prod volume)
hf : ∀ (x : E × ℝ), HasLineDerivAt ℝ f (f' x) x (0, 1)
hg : ∀ (x : E × ℝ), HasLineDerivAt ℝ g (g' x) x (0, 1)
x : E
hf'gx : Integrable (fun y => (B (f' (x, y))) (g (x, y))) volume
hfg'x : Integrable (fun y => (B (f (x, y))) (g' (x, y))) volume
hfgx : Integrable (fun y => (B (f (x, y))) (g (x, y))) volume
t : ℝ
⊢ HasDerivAt (fun x_1 => g (x, x_1)) (g' (x, t)) t

Tactic:
convert (hg (x, t)).scomp_of_eq t ((hasDerivAt_id t).add (hasDerivAt_const t (-t))) (by simp)
  <;> simp

Result:
no goals