declaration: theorem SciLean.SciLean.cderiv.arg_dx.CDifferentiable_rule {K : Type u_1} [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] {Z : Type u_3} [SciLean.Vec K Z] (f : Y → Z) (g : X → Y) (y : Y) (hf : SciLean.CDifferentiable K f) (hg : SciLean.CDifferentiable K g) : SciLean.CDifferentiable K fun dx' => SciLean.cderiv K f y (g dx')


declaration: theorem SciLean.Prod.fst.arg_self.cderiv_rule_at {K : Type u_3} [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_1} [SciLean.Vec K Y] {Z : Type u_2} [SciLean.Vec K Z] (x : X) (f : X → Y × Z) (hf : SciLean.CDifferentiableAt K f x) : SciLean.cderiv K (fun x => (f x).1) x = fun dx => (SciLean.cderiv K f x dx).1


declaration: theorem SciLean.cderiv.arg_dx.IsLinearMap_rule_simple {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (f : X → Y) (x : X) (hf : SciLean.CDifferentiableAt K f x) : IsLinearMap K fun dx => SciLean.cderiv K f x dx


declaration:
theorem SciLean.dite.arg_te.cderiv_rule {K : Type u_3} [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] (c : Prop) [dec : Decidable c] (t : c → X → Y) (e : ¬c → X → Y) : (SciLean.cderiv K fun x => if x_1 : c then t x_1 x else e x_1 x) = fun y =>
  if p : c then SciLean.cderiv K (t p) y else SciLean.cderiv K (e p) y


declaration: theorem SciLean.cderiv.arg_dx.IsLinearMap_rule {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] {W : Type u_4} [SciLean.Vec K W] (f : X → Y) (x : X) (dx : W → X) (hf : SciLean.CDifferentiableAt K f x) (hdx : IsLinearMap K dx) : IsLinearMap K fun w => SciLean.cderiv K f x (dx w)


declaration:
theorem SciLean.HSMul.hSMul.arg_a0a1.cderiv_rule {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (f : X → K) (g : X → Y) (hf : SciLean.CDifferentiable K f) (hg : SciLean.CDifferentiable K g) : (SciLean.cderiv K fun x => f x • g x) = fun x =>
  let k := f x;
  let y := g x;
  fun dx => k • SciLean.cderiv K g x dx + SciLean.cderiv K f x dx • y


declaration: theorem SciLean.cderiv_apply {K : Type u_2} [RCLike K] {X : Type u_3} [SciLean.Vec K X] {Y : Type u_4} {Z : Type u_1} [SciLean.Vec K Z] (f : X → Y → Z) (x : X) (dx : X) (y : Y) : SciLean.cderiv K f x dx y = SciLean.cderiv K (fun x' => f x' y) x dx


declaration:
theorem SciLean.cderiv.arg_f.IsSmoothLinearMap_rule {K : Type u_1} [RCLike K] {X : Type u_3} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] {Z : Type u_4} [SciLean.Vec K Z] (f : X → Y → Z) (hf : SciLean.CDifferentiable K fun x =>
  match x with
  | (x, y) => f x y) (hf' : ∀ (y : Y), IsLinearMap K fun x => f x y) : SciLean.IsSmoothLinearMap K fun x => SciLean.cderiv K fun x_1 => f x x_1


declaration: theorem SciLean.IndexType.sum.arg_f.cderiv_rule_at {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] {ι : Type u_4} [SciLean.IndexType ι] (f : X → ι → Y) (x : X) (hf : ∀ (i : ι), SciLean.CDifferentiableAt K (fun x => f x i) x) : SciLean.cderiv K (fun x =>  ∑ i, f x i) x = fun dx =>  ∑ i, SciLean.cderiv K (fun x => f x i) x dx


declaration: def SciLean.HPow.hPow.arg_a0.cderiv_rule_at {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] (n : ℕ) (x : X) (f : X → K) (hf : SciLean.CDifferentiableAt K f x) : SciLean.cderiv K (fun x => f x ^ n) x = fun dx => ↑n * SciLean.cderiv K f x dx * f x ^ (n - 1)


declaration: theorem SciLean.HSub.hSub.arg_a0.cderiv_rule {K : Type u_3} [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] (f : X → Y) (y : Y) : (SciLean.cderiv K fun x => f x - y) = fun x dx => SciLean.cderiv K f x dx


declaration: theorem SciLean.Prod.snd.arg_self.cderiv_rule {K : Type u_3} [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_1} [SciLean.Vec K Y] {Z : Type u_2} [SciLean.Vec K Z] (f : X → Y × Z) (hf : SciLean.CDifferentiable K f) : (SciLean.cderiv K fun x => (f x).2) = fun x dx => (SciLean.cderiv K f x dx).2


declaration: theorem SciLean.cderiv_apply_zero {K : Type u_2} [RCLike K] {X : Type u_3} [SciLean.Vec K X] {Y : Type u_1} [SciLean.Vec K Y] (f : X → Y) (x : X) : SciLean.cderiv K f x 0 = 0


declaration: theorem SciLean.Prod.mk.arg_fstsnd.cderiv_rule {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] {Z : Type u_4} [SciLean.Vec K Z] (g : X → Y) (hg : SciLean.CDifferentiable K g) (f : X → Z) (hf : SciLean.CDifferentiable K f) : (SciLean.cderiv K fun x => (g x, f x)) = fun x dx => (SciLean.cderiv K g x dx, SciLean.cderiv K f x dx)


declaration: theorem SciLean.HSub.hSub.arg_a1.cderiv_rule {K : Type u_3} [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] (f : X → Y) (y : Y) : (SciLean.cderiv K fun x => y - f x) = fun x dx => -SciLean.cderiv K f x dx


declaration: theorem SciLean.HAdd.hAdd.arg_a1.cderiv_rule {K : Type u_3} [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] (f : X → Y) (y : Y) : (SciLean.cderiv K fun x => y + f x) = fun x dx => SciLean.cderiv K f x dx


declaration:
theorem SciLean.SciLean.norm₂.arg_x.cderiv_rule {R : Type u_1} [SciLean.RealScalar R] {X : Type u_2} [SciLean.Vec R X] {Y : Type u_3} [SciLean.SemiHilbert R Y] (f : X → Y) (hf : SciLean.CDifferentiable R f) (hx : ∀ (x : X), f x ≠ 0) : (SciLean.cderiv R fun x => ‖f x‖₂[R]) = fun x dx =>
  let y := f x;
  let dy := SciLean.cderiv R f x dx;
  ‖y‖₂[R]⁻¹ * ⟪dy, y⟫_R


declaration:
theorem SciLean.cderiv.comp_rule_at (K : Type u_1) [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] {Z : Type u_3} [SciLean.Vec K Z] (f : Y → Z) (g : X → Y) (x : X) (hf : SciLean.CDifferentiableAt K f (g x)) (hg : SciLean.CDifferentiableAt K g x) : SciLean.cderiv K (fun x => f (g x)) x =
  let y := g x;
  fun dx =>
  let dy := SciLean.cderiv K g x dx;
  let dz := SciLean.cderiv K f y dy;
  dz


declaration: theorem SciLean.Neg.neg.arg_a0.cderiv_rule' {K : Type u_3} [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] (x : X) (f : X → Y) : SciLean.cderiv K (fun x => -f x) x = fun dx => -SciLean.cderiv K f x dx


declaration: theorem SciLean.IndexType.sum.arg_f.cderiv_rule {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] {ι : Type u_4} [SciLean.IndexType ι] (f : X → ι → Y) (hf : ∀ (i : ι), SciLean.CDifferentiable K fun x => f x i) : (SciLean.cderiv K fun x =>  ∑ i, f x i) = fun x dx =>  ∑ i, SciLean.cderiv K (fun x => f x i) x dx


declaration:
theorem SciLean.SciLean.cderiv.arg_dx.cderiv_rule_at {K : Type u_1} [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] {Z : Type u_3} [SciLean.Vec K Z] (f : Y → Z) (g : X → Y) (y : Y) (dx : X) (hf : SciLean.CDifferentiableAt K f y) (hg : SciLean.CDifferentiableAt K g dx) : SciLean.cderiv K (fun dx' => SciLean.cderiv K f y (g dx')) dx = fun ddx =>
  let ddy := SciLean.cderiv K g dx ddx;
  SciLean.cderiv K f y ddy


declaration: theorem SciLean.HAdd.hAdd.arg_a0a1.cderiv_rule {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (f : X → Y) (g : X → Y) (hf : SciLean.CDifferentiable K f) (hg : SciLean.CDifferentiable K g) : (SciLean.cderiv K fun x => f x + g x) = fun x dx => SciLean.cderiv K f x dx + SciLean.cderiv K g x dx


declaration: theorem SciLean.cderiv_of_linear {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (f : X → Y) (hf : SciLean.IsSmoothLinearMap K f) : SciLean.cderiv K f = fun x dx => f dx


declaration: theorem SciLean.cderiv.pi_rule (K : Type u_1) [RCLike K] {X : Type u_2} [SciLean.Vec K X] {ι : Type u_4} {E : ι → Type u_3} [(i : ι) → SciLean.Vec K (E i)] (f : X → (i : ι) → E i) (hf : ∀ (i : ι), SciLean.CDifferentiable K fun x => f x i) : (SciLean.cderiv K fun x i => f x i) = fun x dx i => SciLean.cderiv K (fun x => f x i) x dx


declaration:
theorem SciLean.ite.arg_chte.cderiv_rule {K : Type u_2} [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (c : X → Prop) [dec : (x : X) → Decidable (c x)] (t : X → Y) (e : X → Y) (ht : ∀ x ∈ closure c, SciLean.CDifferentiableAt K t x) (he : ∀ x ∈ (interior c)ᶜ, SciLean.CDifferentiableAt K e x) (hc : ∀ x ∈ frontier c, SciLean.cderiv K t x = SciLean.cderiv K e x) : (SciLean.cderiv K fun x => if c x then t x else e x) = fun y =>
  if c y then SciLean.cderiv K t y else SciLean.cderiv K e y


declaration:
theorem SciLean.Inner.inner.arg_a0a1.cderiv_rule_at {R : Type u_1} [SciLean.RealScalar R] {X : Type u_2} [SciLean.Vec R X] {Y : Type u_3} [SciLean.SemiHilbert R Y] (f : X → Y) (g : X → Y) (x : X) (hf : SciLean.CDifferentiableAt R f x) (hg : SciLean.CDifferentiableAt R g x) : SciLean.cderiv R (fun x => ⟪f x, g x⟫_R) x = fun dx =>
  let y₁ := f x;
  let dy₁ := SciLean.cderiv R f x dx;
  let y₂ := g x;
  let dy₂ := SciLean.cderiv R g x dx;
  ⟪dy₁, y₂⟫_R + ⟪y₁, dy₂⟫_R


declaration:
theorem SciLean.Inner.inner.arg_a0a1.cderiv_rule {R : Type u_1} [SciLean.RealScalar R] {X : Type u_2} [SciLean.Vec R X] {Y : Type u_3} [SciLean.SemiHilbert R Y] (f : X → Y) (g : X → Y) (hf : SciLean.CDifferentiable R f) (hg : SciLean.CDifferentiable R g) : (SciLean.cderiv R fun x => ⟪f x, g x⟫_R) = fun x dx =>
  let y₁ := f x;
  let dy₁ := SciLean.cderiv R f x dx;
  let y₂ := g x;
  let dy₂ := SciLean.cderiv R g x dx;
  ⟪dy₁, y₂⟫_R + ⟪y₁, dy₂⟫_R


declaration: theorem SciLean.Neg.neg.arg_a0.cderiv_rule {K : Type u_3} [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] (f : X → Y) : (SciLean.cderiv K fun x => -f x) = fun x dx => -SciLean.cderiv K f x dx


declaration: theorem SciLean.cderiv.apply_rule (K : Type u_3) [RCLike K] {ι : Type u_1} {E : ι → Type u_2} [(i : ι) → SciLean.Vec K (E i)] (i : ι) : (SciLean.cderiv K fun x => x i) = fun x dx => dx i


declaration: theorem SciLean.HSub.hSub.arg_a0a1.cderiv_rule_at {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (x : X) (f : X → Y) (g : X → Y) (hf : SciLean.CDifferentiableAt K f x) (hg : SciLean.CDifferentiableAt K g x) : SciLean.cderiv K (fun x => f x - g x) x = fun dx => SciLean.cderiv K f x dx - SciLean.cderiv K g x dx


declaration: theorem SciLean.SciLean.cderiv.arg_dx.CDifferentiableAt_rule {K : Type u_1} [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] {Z : Type u_3} [SciLean.Vec K Z] (f : Y → Z) (g : X → Y) (y : Y) (dx : X) (hf : SciLean.CDifferentiableAt K f y) (hg : SciLean.CDifferentiableAt K g dx) : SciLean.CDifferentiableAt K (fun dx' => SciLean.cderiv K f y (g dx')) dx


declaration:
theorem SciLean.HSMul.hSMul.arg_a0a1.cderiv_rule_at {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (x : X) (f : X → K) (g : X → Y) (hf : SciLean.CDifferentiableAt K f x) (hg : SciLean.CDifferentiableAt K g x) : SciLean.cderiv K (fun x => f x • g x) x =
  let k := f x;
  let y := g x;
  fun dx => k • SciLean.cderiv K g x dx + SciLean.cderiv K f x dx • y


declaration: theorem SciLean.cderiv.id_rule (K : Type u_2) [RCLike K] {X : Type u_1} [SciLean.Vec K X] : (SciLean.cderiv K fun x => x) = fun x dx => dx


declaration:
theorem SciLean.SciLean.norm₂.arg_x.cderiv_rule_at {R : Type u_1} [SciLean.RealScalar R] {X : Type u_2} [SciLean.Vec R X] {Y : Type u_3} [SciLean.SemiHilbert R Y] (f : X → Y) (x : X) (hf : SciLean.CDifferentiableAt R f x) (hx : f x ≠ 0) : SciLean.cderiv R (fun x => ‖f x‖₂[R]) x = fun dx =>
  let y := f x;
  let dy := SciLean.cderiv R f x dx;
  ‖y‖₂[R]⁻¹ * ⟪dy, y⟫_R


declaration:
theorem SciLean.HDiv.hDiv.arg_a0a1.cderiv_rule_at {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] (x : X) (f : X → K) (g : X → K) (hf : SciLean.CDifferentiableAt K f x) (hg : SciLean.CDifferentiableAt K g x) (hx : g x ≠ 0) : SciLean.cderiv K (fun x => f x / g x) x =
  let k := f x;
  let k' := g x;
  fun dx => (SciLean.cderiv K f x dx * k' - k * SciLean.cderiv K g x dx) / k' ^ 2


declaration: theorem SciLean.cderiv.pi_rule_at (K : Type u_1) [RCLike K] {X : Type u_2} [SciLean.Vec K X] {ι : Type u_4} {E : ι → Type u_3} [(i : ι) → SciLean.Vec K (E i)] (f : X → (i : ι) → E i) (x : X) (hf : ∀ (i : ι), SciLean.CDifferentiableAt K (fun x => f x i) x) : SciLean.cderiv K (fun x i => f x i) x = fun dx i => SciLean.cderiv K (fun x => f x i) x dx


declaration: theorem SciLean.HAdd.hAdd.arg_a0a1.cderiv_rule_at {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (x : X) (f : X → Y) (g : X → Y) (hf : SciLean.CDifferentiableAt K f x) (hg : SciLean.CDifferentiableAt K g x) : SciLean.cderiv K (fun x => f x + g x) x = fun dx => SciLean.cderiv K f x dx + SciLean.cderiv K g x dx


declaration:
theorem SciLean.HMul.hMul.arg_a0a1.cderiv_rule {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] (f : X → K) (g : X → K) (hf : SciLean.CDifferentiable K f) (hg : SciLean.CDifferentiable K g) : (SciLean.cderiv K fun x => f x * g x) = fun x =>
  let fx := f x;
  let gx := g x;
  fun dx => SciLean.cderiv K g x dx * fx + SciLean.cderiv K f x dx * gx


declaration: theorem SciLean.ite.arg_te.cderiv_rule {K : Type u_3} [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] (c : Prop) [dec : Decidable c] (t : X → Y) (e : X → Y) : (SciLean.cderiv K fun x => if c then t x else e x) = fun y => if c then SciLean.cderiv K t y else SciLean.cderiv K e y


declaration:
theorem SciLean.cderiv.let_rule_at (K : Type u_1) [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] {Z : Type u_4} [SciLean.Vec K Z] (f : X → Y → Z) (g : X → Y) (x : X) (hf : SciLean.CDifferentiableAt K (↿f) (x, g x)) (hg : SciLean.CDifferentiableAt K g x) : SciLean.cderiv K
    (fun x =>
      let y := g x;
      f x y)
    x =
  let y := g x;
  fun dx =>
  let dy := SciLean.cderiv K g x dx;
  let dz := SciLean.cderiv K (fun xy => f xy.1 xy.2) (x, y) (dx, dy);
  dz


declaration: theorem SciLean.HSub.hSub.arg_a0a1.cderiv_rule {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (f : X → Y) (g : X → Y) (hf : SciLean.CDifferentiable K f) (hg : SciLean.CDifferentiable K g) : (SciLean.cderiv K fun x => f x - g x) = fun x dx => SciLean.cderiv K f x dx - SciLean.cderiv K g x dx


declaration: def SciLean.HPow.hPow.arg_a0.cderiv_rule {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] (n : ℕ) (f : X → K) (hf : SciLean.CDifferentiable K f) : (SciLean.cderiv K fun x => f x ^ n) = fun x dx => ↑n * SciLean.cderiv K f x dx * f x ^ (n - 1)


declaration:
theorem SciLean.HMul.hMul.arg_a0a1.cderiv_rule_at {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] (x : X) (f : X → K) (g : X → K) (hf : SciLean.CDifferentiableAt K f x) (hg : SciLean.CDifferentiableAt K g x) : SciLean.cderiv K (fun x => f x * g x) x =
  let fx := f x;
  let gx := g x;
  fun dx => SciLean.cderiv K g x dx * fx + SciLean.cderiv K f x dx * gx


declaration:
theorem SciLean.cderiv.let_rule (K : Type u_1) [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] {Z : Type u_4} [SciLean.Vec K Z] (f : X → Y → Z) (g : X → Y) (hf : SciLean.CDifferentiable K fun xy => f xy.1 xy.2) (hg : SciLean.CDifferentiable K g) : (SciLean.cderiv K fun x =>
    let y := g x;
    f x y) =
  fun x =>
  let y := g x;
  fun dx =>
  let dy := SciLean.cderiv K g x dx;
  let dz := SciLean.cderiv K (fun xy => f xy.1 xy.2) (x, y) (dx, dy);
  dz


declaration: theorem SciLean.cderiv.const_rule (K : Type u_3) [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] (x : X) : (SciLean.cderiv K fun x_1 => x) = fun x dx => 0


declaration:
theorem SciLean.cderiv.comp_rule (K : Type u_1) [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] {Z : Type u_3} [SciLean.Vec K Z] (f : Y → Z) (g : X → Y) (hf : SciLean.CDifferentiable K f) (hg : SciLean.CDifferentiable K g) : (SciLean.cderiv K fun x => f (g x)) = fun x =>
  let y := g x;
  fun dx =>
  let dy := SciLean.cderiv K g x dx;
  let dz := SciLean.cderiv K f y dy;
  dz


declaration: theorem SciLean.Prod.snd.arg_self.cderiv_rule_at {K : Type u_3} [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_1} [SciLean.Vec K Y] {Z : Type u_2} [SciLean.Vec K Z] (x : X) (f : X → Y × Z) (hf : SciLean.CDifferentiableAt K f x) : SciLean.cderiv K (fun x => (f x).2) x = fun dx => (SciLean.cderiv K f x dx).2


declaration:
theorem SciLean.SciLean.cderiv.arg_dx.cderiv_rule {K : Type u_1} [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] {Z : Type u_3} [SciLean.Vec K Z] (f : Y → Z) (g : X → Y) (y : Y) (hf : SciLean.CDifferentiable K f) (hg : SciLean.CDifferentiable K g) : (SciLean.cderiv K fun dx => SciLean.cderiv K f y (g dx)) = fun dx ddx =>
  let ddy := SciLean.cderiv K g dx ddx;
  SciLean.cderiv K f y ddy


declaration: theorem SciLean.cderiv.arg_f.IsLinearMap_rule {K : Type u_1} [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] {Z : Type u_3} [SciLean.Vec K Z] (f : X → Y → Z) (hf : ∀ (x : X), SciLean.CDifferentiable K fun y => f x y) (hf' : ∀ (y : Y), IsLinearMap K fun x => f x y) : IsLinearMap K fun x => SciLean.cderiv K fun x_1 => f x x_1


SciLean.cderiv

declaration: def SciLean.cderiv (K : Type u_1) [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] (f : X → Y) (x : X) (dx : X) : Y


declaration: theorem SciLean.Prod.fst.arg_self.cderiv_rule {K : Type u_3} [RCLike K] {X : Type u_4} [SciLean.Vec K X] {Y : Type u_1} [SciLean.Vec K Y] {Z : Type u_2} [SciLean.Vec K Z] (f : X → Y × Z) (hf : SciLean.CDifferentiable K f) : (SciLean.cderiv K fun x => (f x).1) = fun x dx => (SciLean.cderiv K f x dx).1


declaration:
theorem SciLean.SciLean.Norm2.norm2.arg_a0.cderiv_rule {R : Type u_1} [SciLean.RealScalar R] {X : Type u_2} [SciLean.Vec R X] {Y : Type u_3} [SciLean.SemiHilbert R Y] (f : X → Y) (hf : SciLean.CDifferentiable R f) : (SciLean.cderiv R fun x => ‖f x‖₂²) = fun x dx =>
  let y := f x;
  let dy := SciLean.cderiv R f x dx;
  2 * ⟪dy, y⟫_R


declaration:
theorem SciLean.HDiv.hDiv.arg_a0a1.cderiv_rule {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] (f : X → K) (g : X → K) (hf : SciLean.CDifferentiable K f) (hg : SciLean.CDifferentiable K g) (hx : ∀ (x : X), g x ≠ 0) : (SciLean.cderiv K fun x => f x / g x) = fun x =>
  let k := f x;
  let k' := g x;
  fun dx => (SciLean.cderiv K f x dx * k' - k * SciLean.cderiv K g x dx) / k' ^ 2


declaration: theorem SciLean.HAdd.hAdd.arg_a0.cderiv_rule {K : Type u_3} [RCLike K] {X : Type u_1} [SciLean.Vec K X] {Y : Type u_2} [SciLean.Vec K Y] (f : X → Y) (y : Y) : (SciLean.cderiv K fun x => f x + y) = fun x dx => SciLean.cderiv K f x dx


declaration:
theorem SciLean.SciLean.Norm2.norm2.arg_a0.cderiv_rule_at {R : Type u_1} [SciLean.RealScalar R] {X : Type u_2} [SciLean.Vec R X] {Y : Type u_3} [SciLean.SemiHilbert R Y] (f : X → Y) (x : X) (hf : SciLean.CDifferentiableAt R f x) : SciLean.cderiv R (fun x => ‖f x‖₂²) x = fun dx =>
  let y := f x;
  let dy := SciLean.cderiv R f x dx;
  2 * ⟪dy, y⟫_R


declaration: theorem SciLean.Prod.mk.arg_fstsnd.cderiv_rule_at {K : Type u_1} [RCLike K] {X : Type u_2} [SciLean.Vec K X] {Y : Type u_3} [SciLean.Vec K Y] {Z : Type u_4} [SciLean.Vec K Z] (x : X) (g : X → Y) (hg : SciLean.CDifferentiableAt K g x) (f : X → Z) (hf : SciLean.CDifferentiableAt K f x) : SciLean.cderiv K (fun x => (g x, f x)) x = fun dx => (SciLean.cderiv K g x dx, SciLean.cderiv K f x dx)


SciLean.scalarCDeriv

declaration: def SciLean.scalarCDeriv (K : Type u_1) [RCLike K] {X : Type u_2} [SciLean.Vec K X] (f : K → X) (t : K) : X