unfold revDerivUpdate
K : Type u_1
inst✝³ : RCLike K
X : Type u_3
inst✝² : SemiInnerProductSpace K X
Y : Type u_3
inst✝¹ : SemiInnerProductSpace K Y
W : Type u_2
inst✝ : SemiInnerProductSpace K W
f : W → X
g : W → Y
hf : HasAdjDiff K f
hg : HasAdjDiff K g
⊢ (revDerivUpdate K fun w => { fst := f w, snd := g w }) = fun w =>
    let xdf' := revDerivUpdate K f w;
    let ydg' := revDerivUpdate K g w;
    ({ fst := xdf'.1, snd := ydg'.1 }, fun dxy dw => xdf'.2 dxy.fst (ydg'.2 dxy.snd dw))
K : Type u_1
inst✝³ : RCLike K
X : Type u_3
inst✝² : SemiInnerProductSpace K X
Y : Type u_3
inst✝¹ : SemiInnerProductSpace K Y
W : Type u_2
inst✝ : SemiInnerProductSpace K W
f : W → X
g : W → Y
hf : HasAdjDiff K f
hg : HasAdjDiff K g
⊢ (fun x =>
      let ydf := revDeriv K (fun w => { fst := f w, snd := g w }) x;
      (ydf.1, fun dy dx => dx + ydf.2 dy)) =
    fun w =>
    let xdf' :=
      let ydf := revDeriv K f w;
      (ydf.1, fun dy dx => dx + ydf.2 dy);
    let ydg' :=
      let ydf := revDeriv K g w;
      (ydf.1, fun dy dx => dx + ydf.2 dy);
    ({ fst := xdf'.1, snd := ydg'.1 }, fun dxy dw => xdf'.2 dxy.fst (ydg'.2 dxy.snd dw))