unfold revDerivProj
K : Type u_1
I : Type ?u.202966
inst✝²⁴ : RCLike K
X : Type u_1
inst✝²³ : SemiInnerProductSpace K X
Y : Type u_2
inst✝²² : SemiInnerProductSpace K Y
Z : Type ?u.202996
inst✝²¹ : SemiInnerProductSpace K Z
W : Type ?u.203007
inst✝²⁰ : SemiInnerProductSpace K W
ι : Type u_3
inst✝¹⁹ : IndexType ι
inst✝¹⁸ : LawfulIndexType ι
inst✝¹⁷ : DecidableEq ι
κ : Type ?u.203043
inst✝¹⁶ : IndexType κ
inst✝¹⁵ : LawfulIndexType κ
inst✝¹⁴ : DecidableEq κ
E : Type ?u.203068
EI : I → Type ?u.203073
inst✝¹³ : StructType E I EI
inst✝¹² : IndexType I
inst✝¹¹ : LawfulIndexType I
inst✝¹⁰ : DecidableEq I
inst✝⁹ : SemiInnerProductSpace K E
inst✝⁸ : (i : I) → SemiInnerProductSpace K (EI i)
inst✝⁷ : SemiInnerProductSpaceStruct K E I EI
F : Type ?u.203207
J : Type ?u.203210
FJ : J → Type ?u.203215
inst✝⁶ : StructType F J FJ
inst✝⁵ : IndexType J
inst✝⁴ : LawfulIndexType J
inst✝³ : DecidableEq J
inst✝² : SemiInnerProductSpace K F
inst✝¹ : (j : J) → SemiInnerProductSpace K (FJ j)
inst✝ : SemiInnerProductSpaceStruct K F J FJ
f : X → ι → Y
hf : ∀ (i : ι), HasAdjDiff K fun x => f x i
⊢ (fun x => (fun i => f x i, fun i de dx => dx + (revDerivProj K Unit (fun x i => f x i) x).2 i de)) = fun x =>
    (fun i => f x i, fun x_1 df dx =>
      fold (IndexType.univ ι) (fun dx i => (revDerivUpdate K (fun x => f x i) x).2 (df i) dx) dx)
K : Type u_1
I : Type ?u.202966
inst✝²⁴ : RCLike K
X : Type u_1
inst✝²³ : SemiInnerProductSpace K X
Y : Type u_2
inst✝²² : SemiInnerProductSpace K Y
Z : Type ?u.202996
inst✝²¹ : SemiInnerProductSpace K Z
W : Type ?u.203007
inst✝²⁰ : SemiInnerProductSpace K W
ι : Type u_3
inst✝¹⁹ : IndexType ι
inst✝¹⁸ : LawfulIndexType ι
inst✝¹⁷ : DecidableEq ι
κ : Type ?u.203043
inst✝¹⁶ : IndexType κ
inst✝¹⁵ : LawfulIndexType κ
inst✝¹⁴ : DecidableEq κ
E : Type ?u.203068
EI : I → Type ?u.203073
inst✝¹³ : StructType E I EI
inst✝¹² : IndexType I
inst✝¹¹ : LawfulIndexType I
inst✝¹⁰ : DecidableEq I
inst✝⁹ : SemiInnerProductSpace K E
inst✝⁸ : (i : I) → SemiInnerProductSpace K (EI i)
inst✝⁷ : SemiInnerProductSpaceStruct K E I EI
F : Type ?u.203207
J : Type ?u.203210
FJ : J → Type ?u.203215
inst✝⁶ : StructType F J FJ
inst✝⁵ : IndexType J
inst✝⁴ : LawfulIndexType J
inst✝³ : DecidableEq J
inst✝² : SemiInnerProductSpace K F
inst✝¹ : (j : J) → SemiInnerProductSpace K (FJ j)
inst✝ : SemiInnerProductSpaceStruct K F J FJ
f : X → ι → Y
hf : ∀ (i : ι), HasAdjDiff K fun x => f x i
⊢ (fun x =>
      (fun i => f x i, fun i de dx =>
        dx +
          (let ydf' := revDeriv K (fun x i => f x i) x;
              (ydf'.1, fun i de => ydf'.2 (oneHot i de))).2
            i de)) =
    fun x =>
    (fun i => f x i, fun x_1 df dx =>
      fold (IndexType.univ ι) (fun dx i => (revDerivUpdate K (fun x => f x i) x).2 (df i) dx) dx)