Theorem: SciLean.fderiv.comp_rule_at (SciLean/Core/FunctionTransformations/FDeriv.lean)

State before:
K : Type u_3
inst✝⁹ : RCLike K
X : Type u_4
inst✝⁸ : NormedAddCommGroup X
inst✝⁷ : NormedSpace K X
Y : Type u_2
inst✝⁶ : NormedAddCommGroup Y
inst✝⁵ : NormedSpace K Y
Z : Type u_1
inst✝⁴ : NormedAddCommGroup Z
inst✝³ : NormedSpace K Z
ι : Type ?u.41811
inst✝² : Fintype ι
E : ι → Type ?u.41819
inst✝¹ : (i : ι) → NormedAddCommGroup (E i)
inst✝ : (i : ι) → NormedSpace K (E i)
f : Y → Z
g : X → Y
x : X
hf : DifferentiableAt K f (g x)
hg : DifferentiableAt K g x
⊢ fderiv K (fun x => f (g x)) x =
    let y := g x;
    fun dx =>L[K]
      let dy := (fderiv K g x) dx;
      let dz := (fderiv K f y) dy;
      dz
Tactic:
rw[show (fun x => f (g x)) = f ∘ g by rfl]
State after:
K : Type u_3
inst✝⁹ : RCLike K
X : Type u_4
inst✝⁸ : NormedAddCommGroup X
inst✝⁷ : NormedSpace K X
Y : Type u_2
inst✝⁶ : NormedAddCommGroup Y
inst✝⁵ : NormedSpace K Y
Z : Type u_1
inst✝⁴ : NormedAddCommGroup Z
inst✝³ : NormedSpace K Z
ι : Type ?u.41811
inst✝² : Fintype ι
E : ι → Type ?u.41819
inst✝¹ : (i : ι) → NormedAddCommGroup (E i)
inst✝ : (i : ι) → NormedSpace K (E i)
f : Y → Z
g : X → Y
x : X
hf : DifferentiableAt K f (g x)
hg : DifferentiableAt K g x
⊢ fderiv K (f ∘ g) x =
    let y := g x;
    fun dx =>L[K]
      let dy := (fderiv K g x) dx;
      let dz := (fderiv K f y) dy;
      dz

State before:
K : Type u_3
inst✝⁹ : RCLike K
X : Type u_4
inst✝⁸ : NormedAddCommGroup X
inst✝⁷ : NormedSpace K X
Y : Type u_2
inst✝⁶ : NormedAddCommGroup Y
inst✝⁵ : NormedSpace K Y
Z : Type u_1
inst✝⁴ : NormedAddCommGroup Z
inst✝³ : NormedSpace K Z
ι : Type ?u.41811
inst✝² : Fintype ι
E : ι → Type ?u.41819
inst✝¹ : (i : ι) → NormedAddCommGroup (E i)
inst✝ : (i : ι) → NormedSpace K (E i)
f : Y → Z
g : X → Y
x : X
hf : DifferentiableAt K f (g x)
hg : DifferentiableAt K g x
⊢ fderiv K (f ∘ g) x =
    let y := g x;
    fun dx =>L[K]
      let dy := (fderiv K g x) dx;
      let dz := (fderiv K f y) dy;
      dz
Tactic:
rw[fderiv.comp x hf hg]
State after:
K : Type u_3
inst✝⁹ : RCLike K
X : Type u_4
inst✝⁸ : NormedAddCommGroup X
inst✝⁷ : NormedSpace K X
Y : Type u_2
inst✝⁶ : NormedAddCommGroup Y
inst✝⁵ : NormedSpace K Y
Z : Type u_1
inst✝⁴ : NormedAddCommGroup Z
inst✝³ : NormedSpace K Z
ι : Type ?u.41811
inst✝² : Fintype ι
E : ι → Type ?u.41819
inst✝¹ : (i : ι) → NormedAddCommGroup (E i)
inst✝ : (i : ι) → NormedSpace K (E i)
f : Y → Z
g : X → Y
x : X
hf : DifferentiableAt K f (g x)
hg : DifferentiableAt K g x
⊢ ContinuousLinearMap.comp (fderiv K f (g x)) (fderiv K g x) =
    let y := g x;
    fun dx =>L[K]
      let dy := (fderiv K g x) dx;
      let dz := (fderiv K f y) dy;
      dz

State before:
K : Type u_3
inst✝⁹ : RCLike K
X : Type u_4
inst✝⁸ : NormedAddCommGroup X
inst✝⁷ : NormedSpace K X
Y : Type u_2
inst✝⁶ : NormedAddCommGroup Y
inst✝⁵ : NormedSpace K Y
Z : Type u_1
inst✝⁴ : NormedAddCommGroup Z
inst✝³ : NormedSpace K Z
ι : Type ?u.41811
inst✝² : Fintype ι
E : ι → Type ?u.41819
inst✝¹ : (i : ι) → NormedAddCommGroup (E i)
inst✝ : (i : ι) → NormedSpace K (E i)
f : Y → Z
g : X → Y
x : X
hf : DifferentiableAt K f (g x)
hg : DifferentiableAt K g x
⊢ ContinuousLinearMap.comp (fderiv K f (g x)) (fderiv K g x) =
    let y := g x;
    fun dx =>L[K]
      let dy := (fderiv K g x) dx;
      let dz := (fderiv K f y) dy;
      dz
Tactic:
ext dx
State after:
case h
K : Type u_3
inst✝⁹ : RCLike K
X : Type u_4
inst✝⁸ : NormedAddCommGroup X
inst✝⁷ : NormedSpace K X
Y : Type u_2
inst✝⁶ : NormedAddCommGroup Y
inst✝⁵ : NormedSpace K Y
Z : Type u_1
inst✝⁴ : NormedAddCommGroup Z
inst✝³ : NormedSpace K Z
ι : Type ?u.41811
inst✝² : Fintype ι
E : ι → Type ?u.41819
inst✝¹ : (i : ι) → NormedAddCommGroup (E i)
inst✝ : (i : ι) → NormedSpace K (E i)
f : Y → Z
g : X → Y
x : X
hf : DifferentiableAt K f (g x)
hg : DifferentiableAt K g x
dx : X
⊢ (ContinuousLinearMap.comp (fderiv K f (g x)) (fderiv K g x)) dx =
    (let y := g x;
      fun dx =>L[K]
        let dy := (fderiv K g x) dx;
        let dz := (fderiv K f y) dy;
        dz)
      dx

State before:
case h
K : Type u_3
inst✝⁹ : RCLike K
X : Type u_4
inst✝⁸ : NormedAddCommGroup X
inst✝⁷ : NormedSpace K X
Y : Type u_2
inst✝⁶ : NormedAddCommGroup Y
inst✝⁵ : NormedSpace K Y
Z : Type u_1
inst✝⁴ : NormedAddCommGroup Z
inst✝³ : NormedSpace K Z
ι : Type ?u.41811
inst✝² : Fintype ι
E : ι → Type ?u.41819
inst✝¹ : (i : ι) → NormedAddCommGroup (E i)
inst✝ : (i : ι) → NormedSpace K (E i)
f : Y → Z
g : X → Y
x : X
hf : DifferentiableAt K f (g x)
hg : DifferentiableAt K g x
dx : X
⊢ (ContinuousLinearMap.comp (fderiv K f (g x)) (fderiv K g x)) dx =
    (let y := g x;
      fun dx =>L[K]
        let dy := (fderiv K g x) dx;
        let dz := (fderiv K f y) dy;
        dz)
      dx
Tactic:
simp
State after:
no goals

State before:
K : Type u_3
inst✝⁹ : RCLike K
X : Type u_4
inst✝⁸ : NormedAddCommGroup X
inst✝⁷ : NormedSpace K X
Y : Type u_2
inst✝⁶ : NormedAddCommGroup Y
inst✝⁵ : NormedSpace K Y
Z : Type u_1
inst✝⁴ : NormedAddCommGroup Z
inst✝³ : NormedSpace K Z
ι : Type ?u.41811
inst✝² : Fintype ι
E : ι → Type ?u.41819
inst✝¹ : (i : ι) → NormedAddCommGroup (E i)
inst✝ : (i : ι) → NormedSpace K (E i)
f : Y → Z
g : X → Y
x : X
hf : DifferentiableAt K f (g x)
hg : DifferentiableAt K g x
⊢ (fun x => f (g x)) = f ∘ g
Tactic:
rfl
State after:
no goals