Documentation

LeanMlir.Proofs.Foundation.GradNodesB

The batched f32 gradient nodes — one *GradB_den per op kind, shared by every conv net #

Every batched train step the suite renders emits the RAW gradient (*GradB) and hands it to an optimizer tail (SGD, heavy-ball, Adam/AdamW, RMSProp, EMA, the data-parallel all-reduce), so one lemma per op kind — "this node denotes the certified Σ_n gradient" — certifies every optimizer variant of every net at once. Each proof is Finset.sum_congr rfl over the batch and then the per-example VJP at batchSlice n. The bf16 kinds (*GradBBf16) are a different real number and are folded in Bf16GradNodes; the fused *SgdB ops are these through StableHLO.lean's *SgdB_eq_grad family (rfl).

Namespaces are the net that first needed the op (kept so that every citation keeps its name):

op kindsnamespaceemitted by
conv / strided-conv (symmetric) W and b, BN γ/β, dense W/b, the *TiedB clause PropsResNet34PoCBevery conv net
XLA-SAME strided conv W, depthwise W, symmetric strided depthwise W, rectangular dense bEnetPoCGEfficientNet-B0, MobileNetV2/V4, ConvNeXt
XLA-SAME strided conv b, depthwise b, XLA-SAME strided depthwise W and bMnv2PaperPoCGMobileNetV2, ConvNeXt
stride-4 patchify conv WCnxPoCGBConvNeXt

The per-token dense and vector-LayerNorm nodes (ViTPoCGB) live in ViTFoldGB, beside the per-example bridges they fold; ConvNeXt's channel-LN and layer-scale nodes in ConvNeXtFoldGB.

⚠ Padding is invisible in the types: the symmetric and XLA-SAME strided kinds have identical types and identical emitted shapes, and only the certificate tells them apart.

Every lemma is ∀ cot; pinning each cotangent to the emitted backward subgraph is each net's *StepTie* file.

theorem Proofs.ResNet34PoCB.convWGradB_den {N ic oc h w kH kW : ℕ} (xN cotN : String) (b : Vec oc) (x : Vec (N * (ic * h * w))) (W : Kernel4 oc ic kH kW) (cot : Vec (N * (oc * h * w))) (idx : Fin (oc * ic * kH * kW)) :
StableHLO.den (StableHLO.SHlo.convWeightGradB xN b x W (StableHLO.SHlo.operand cotN cot)) idx = ∑ n : Fin N, ∑ j : Fin (oc * h * w), pdiv (fun (v' : Vec (oc * ic * kH * kW)) => (conv2d (Kernel4.unflatten v') b (Tensor3.unflatten (StableHLO.batchSlice N (ic * h * w) x n))).flatten) W.flatten idx j * StableHLO.batchSlice N (oc * h * w) cot n j

Batched stride-1 conv weight GRADIENT denotes the certified Σ_n weight gradient. The un-fused peer of EnetPoC.convWB_den: same Σ_n of conv_weight_grad_bridge, with no θ − lr· wrapper because the batched r34 render hands this node to an optimizer tail.

theorem Proofs.ResNet34PoCB.convBGradB_den {N ic oc h w kH kW : ℕ} (cotN : String) (W : Kernel4 oc ic kH kW) (x : Vec (N * (ic * h * w))) (b : Vec oc) (cot : Vec (N * (oc * h * w))) (o : Fin oc) :
StableHLO.den (StableHLO.SHlo.convBiasGradB W x b (StableHLO.SHlo.operand cotN cot)) o = ∑ n : Fin N, ∑ j : Fin (oc * h * w), pdiv (fun (b' : Vec oc) => (conv2d W b' (Tensor3.unflatten (StableHLO.batchSlice N (ic * h * w) x n))).flatten) b o j * StableHLO.batchSlice N (oc * h * w) cot n j

Batched stride-1 conv bias GRADIENT denotes the certified Σ_n bias gradient.

theorem Proofs.ResNet34PoCB.convStridedWGradB_den {N ic oc h w kH kW : ℕ} (xN cotN : String) (b : Vec oc) (x : Vec (N * (ic * (2 * h) * (2 * w)))) (W : Kernel4 oc ic kH kW) (cot : Vec (N * (oc * h * w))) (idx : Fin (oc * ic * kH * kW)) :
StableHLO.den (StableHLO.SHlo.convStridedWeightGradB xN b x W (StableHLO.SHlo.operand cotN cot)) idx = ∑ n : Fin N, ∑ j : Fin (oc * h * w), pdiv (fun (v' : Vec (oc * ic * kH * kW)) => flatConvStride2 (Kernel4.unflatten v') b (StableHLO.batchSlice N (ic * (2 * h) * (2 * w)) x n)) W.flatten idx j * StableHLO.batchSlice N (oc * h * w) cot n j

Batched strided conv weight GRADIENT denotes the certified Σ_n weight gradient. Generic in the kernel size, so the one lemma certifies the 7x7 stem AND every 3x3 downsample W1 AND every 1x1 projection Wp.

theorem Proofs.ResNet34PoCB.convStridedBGradB_den {N ic oc h w kH kW : ℕ} (cotN : String) (W : Kernel4 oc ic kH kW) (x : Vec (N * (ic * (2 * h) * (2 * w)))) (b : Vec oc) (cot : Vec (N * (oc * h * w))) (o : Fin oc) :
StableHLO.den (StableHLO.SHlo.convStridedBiasGradB W x b (StableHLO.SHlo.operand cotN cot)) o = ∑ n : Fin N, ∑ j : Fin (oc * h * w), pdiv (fun (b' : Vec oc) => flatConvStride2 W b' (StableHLO.batchSlice N (ic * (2 * h) * (2 * w)) x n)) b o j * StableHLO.batchSlice N (oc * h * w) cot n j

Batched strided conv bias GRADIENT denotes the certified Σ_n bias gradient.

theorem Proofs.ResNet34PoCB.bnGammaGradB_den {N oc h w : ℕ} (vN epsStr cotN : String) (ε : ℝ) (γ β : Vec oc) (v cot : Vec (N * (oc * (h * w)))) (c : Fin oc) :
StableHLO.den (StableHLO.SHlo.bnGammaGradB vN epsStr ε v (StableHLO.SHlo.operand cotN cot)) c = ∑ j : Fin (oc * (N * (h * w))), pdiv (fun (γ' : Vec oc) => bnPerChannelFlat oc (N * (h * w)) ε γ' β (bnchwFwd N oc h w v)) γ c j * bnchwFwd N oc h w cot j

Batched BN γ GRADIENT denotes the certified per-channel γ gradient over the merged batch+spatial axis m = N·(h·w). γ enters affinely, so there is no batch coupling in the PARAM gradient and this is bnPerChannel_grad_gamma_correct at that width, through the network→oc-major reindex bnchwFwd. Generic in the free β.

theorem Proofs.ResNet34PoCB.bnBetaGradB_den {N oc h w : ℕ} (cotN : String) (ε : ℝ) (γ β : Vec oc) (v : Vec (oc * (N * (h * w)))) (cot : Vec (N * (oc * (h * w)))) (c : Fin oc) :
StableHLO.den (StableHLO.SHlo.operand cotN cot).bnBetaGradB c = ∑ j : Fin (oc * (N * (h * w))), pdiv (fun (β' : Vec oc) => bnPerChannelFlat oc (N * (h * w)) ε γ β' v) β c j * bnchwFwd N oc h w cot j

Batched BN β GRADIENT denotes the certified per-channel β gradient Σ_{batch,spatial} cot at m = N·(h·w). Carries a free v/γ — β's gradient is the channel sum and depends on neither.

def Proofs.ResNet34PoCB.BnPairTiedB (N oc h w : ℕ) (vN epsStr cotN : String) (ε : ℝ) (γ β : Vec oc) (v cot : Vec (N * (oc * (h * w)))) :

One batched BN layer's γ and β gradient nodes, tied — the pair every step tie states per BatchNorm: the emitted bnGammaGradB / bnBetaGradB denote the certified per-channel γ and β gradients over the merged batch+spatial axis, at the layer's pre-BN activation v and its output cotangent cot (both in the network layout).

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem Proofs.ResNet34PoCB.bnPairTiedB_holds {N oc h w : ℕ} {vN epsStr cotN : String} {ε : ℝ} {γ β : Vec oc} {v cot : Vec (N * (oc * (h * w)))} :
    BnPairTiedB N oc h w vN epsStr cotN ε γ β v cot
    theorem Proofs.ResNet34PoCB.denseWGradB_den {N a c : ℕ} (xN cotN : String) (x : Vec (N * a)) (W : Mat a c) (b : Vec c) (cot : Vec (N * c)) (i : Fin a) (j : Fin c) :

    Batched dense weight GRADIENT denotes the certified Σ_n outer product.

    theorem Proofs.ResNet34PoCB.denseBGradB_den {N c : ℕ} (cotN : String) (W : Mat c c) (x b : Vec c) (cot : Vec (N * c)) (j : Fin c) :
    StableHLO.den (StableHLO.SHlo.operand cotN cot).denseBiasGradB j = ∑ n : Fin N, ∑ k : Fin c, pdiv (fun (b' : Vec c) => dense W b' x) b j k * StableHLO.batchSlice N c cot n k

    Batched dense bias GRADIENT denotes the certified Σ_n cotangent sum.

    def Proofs.ResNet34PoCB.ConvWTiedB (N h w : ℕ) {ic oc kH kW : ℕ} (xN cotN : String) (b : Vec oc) (x : Vec (N * (ic * h * w))) (W : Kernel4 oc ic kH kW) (cot : Vec (N * (oc * h * w))) :

    A stride-1 conv weight gradient node, tied (convWGradB_den).

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      def Proofs.ResNet34PoCB.ConvBTiedB (N h w : ℕ) {ic oc kH kW : ℕ} (cotN : String) (W : Kernel4 oc ic kH kW) (x : Vec (N * (ic * h * w))) (b : Vec oc) (cot : Vec (N * (oc * h * w))) :

      A stride-1 conv bias gradient node, tied (convBGradB_den).

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        def Proofs.ResNet34PoCB.ConvStridedWTiedB (N h w : ℕ) {ic oc kH kW : ℕ} (xN cotN : String) (b : Vec oc) (x : Vec (N * (ic * (2 * h) * (2 * w)))) (W : Kernel4 oc ic kH kW) (cot : Vec (N * (oc * h * w))) :

        A stride-2 (symmetric-pad) conv weight gradient node, tied (convStridedWGradB_den).

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          def Proofs.ResNet34PoCB.ConvStridedBTiedB (N h w : ℕ) {ic oc kH kW : ℕ} (cotN : String) (W : Kernel4 oc ic kH kW) (x : Vec (N * (ic * (2 * h) * (2 * w)))) (b : Vec oc) (cot : Vec (N * (oc * h * w))) :

          A stride-2 (symmetric-pad) conv bias gradient node, tied (convStridedBGradB_den).

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            def Proofs.ResNet34PoCB.ConvStridedXlaWTiedB (N h w : ℕ) {ic oc kH kW : ℕ} (xN cotN : String) (b : Vec oc) (x : Vec (N * (ic * (2 * h) * (2 * w)))) (W : Kernel4 oc ic kH kW) (cot : Vec (N * (oc * h * w))) :

            A stride-2 XLA-SAME conv weight gradient node, tied (EnetPoCG.convStridedXlaWGradB_den).

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              def Proofs.ResNet34PoCB.DepthwiseWTiedB (N h w : ℕ) {c kH kW : ℕ} (xN cotN : String) (b : Vec c) (x : Vec (N * (c * h * w))) (W : DepthwiseKernel c kH kW) (cot : Vec (N * (c * h * w))) :

              A stride-1 depthwise weight gradient node, tied (EnetPoCG.depthwiseWGradB_den).

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                def Proofs.ResNet34PoCB.DepthwiseBTiedB (N h w : ℕ) {c kH kW : ℕ} (cotN : String) (W : DepthwiseKernel c kH kW) (x : Vec (N * (c * h * w))) (b : Vec c) (cot : Vec (N * (c * h * w))) :

                A stride-1 depthwise bias gradient node, tied (Mnv2PaperPoCG.depthwiseBGradB_den).

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  def Proofs.ResNet34PoCB.DepthwiseStridedWTiedB (N h w : ℕ) {c kH kW : ℕ} (xN cotN : String) (b : Vec c) (x : Vec (N * (c * (2 * h) * (2 * w)))) (W : DepthwiseKernel c kH kW) (cot : Vec (N * (c * h * w))) :

                  A stride-2 depthwise weight gradient node, tied (EnetPoCG.depthwiseStridedWGradB_den).

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    def Proofs.ResNet34PoCB.DenseWTiedB (N : ℕ) {a c : ℕ} (xN cotN : String) (x : Vec (N * a)) (W : Mat a c) (b : Vec c) (cot : Vec (N * c)) :

                    A dense weight gradient node, tied (denseWGradB_den).

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      def Proofs.ResNet34PoCB.DenseBTiedB (N : ℕ) {a c : ℕ} (cotN : String) (W : Mat a c) (x : Vec a) (b : Vec c) (cot : Vec (N * c)) :

                      A dense bias gradient node, tied — free in W and x, which b's gradient ignores.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem Proofs.EnetPoCG.denseBGradB_den {N a c : ℕ} (cotN : String) (W : Mat a c) (x : Vec a) (b : Vec c) (cot : Vec (N * c)) (j : Fin c) :
                        StableHLO.den (StableHLO.SHlo.operand cotN cot).denseBiasGradB j = ∑ n : Fin N, ∑ k : Fin c, pdiv (fun (b' : Vec c) => dense W b' x) b j k * StableHLO.batchSlice N c cot n k

                        Batched dense bias GRADIENT denotes the certified Σ_n cotangent sum. r34's peer at a RECTANGULAR witness Mat a c, which the SE's c → r squeeze needs; the gradient is the channel sum and depends on neither W nor x, so the widening is free.

                        theorem Proofs.EnetPoCG.convStridedXlaWGradB_den {N ic oc h w kH kW : ℕ} (xN cotN : String) (b : Vec oc) (x : Vec (N * (ic * (2 * h) * (2 * w)))) (W : Kernel4 oc ic kH kW) (cot : Vec (N * (oc * h * w))) (idx : Fin (oc * ic * kH * kW)) :
                        StableHLO.den (StableHLO.SHlo.convStridedXlaWeightGradB xN b x W (StableHLO.SHlo.operand cotN cot)) idx = ∑ n : Fin N, ∑ j : Fin (oc * h * w), pdiv (fun (v' : Vec (oc * ic * kH * kW)) => flatConvStride2Xla (Kernel4.unflatten v') b (StableHLO.batchSlice N (ic * (2 * h) * (2 * w)) x n)) W.flatten idx j * StableHLO.batchSlice N (oc * h * w) cot n j

                        Batched XLA-SAME strided conv weight GRADIENT denotes the certified Σ_n weight gradient. B0's 3×3/s2 stem, the net's one XLA-phase site. Σ_n of flatConvStride2Xla_weight_grad_has_vjp.correct — the odd-phase weight VJP, so the certified gradient is the gradient of the net that ships.

                        theorem Proofs.EnetPoCG.depthwiseWGradB_den {N c h w kH kW : ℕ} (xN cotN : String) (b : Vec c) (x : Vec (N * (c * h * w))) (W : DepthwiseKernel c kH kW) (cot : Vec (N * (c * h * w))) (idx : Fin (c * kH * kW)) :
                        StableHLO.den (StableHLO.SHlo.depthwiseWeightGradB xN b x W (StableHLO.SHlo.operand cotN cot)) idx = ∑ n : Fin N, ∑ j : Fin (c * h * w), pdiv (fun (v' : Vec (c * kH * kW)) => (depthwiseConv2d (Tensor3.unflatten v') b (Tensor3.unflatten (StableHLO.batchSlice N (c * h * w) x n))).flatten) (Tensor3.flatten W) idx j * StableHLO.batchSlice N (c * h * w) cot n j

                        Batched stride-1 depthwise weight GRADIENT denotes the certified Σ_n weight gradient. Σ_n of the flattened depthwise_weight_grad_has_vjp3.correct. Generic in the kernel size, so the one lemma covers every 3×3 and every 5×5 depthwise.

                        theorem Proofs.EnetPoCG.depthwiseStridedWGradB_den {N c h w kH kW : ℕ} (xN cotN : String) (b : Vec c) (x : Vec (N * (c * (2 * h) * (2 * w)))) (W : DepthwiseKernel c kH kW) (cot : Vec (N * (c * h * w))) (idx : Fin (c * kH * kW)) :
                        StableHLO.den (StableHLO.SHlo.depthwiseStridedWeightGradB xN b x W (StableHLO.SHlo.operand cotN cot)) idx = ∑ n : Fin N, ∑ j : Fin (c * h * w), pdiv (fun (v' : Vec (c * kH * kW)) => depthwiseStride2Flat (Tensor3.unflatten v') b (StableHLO.batchSlice N (c * (2 * h) * (2 * w)) x n)) (Tensor3.flatten W) idx j * StableHLO.batchSlice N (c * h * w) cot n j

                        Batched strided depthwise weight GRADIENT denotes the certified Σ_n weight gradient. The strided VJP is already flat, so this is Σ_n of depthwiseStride2_weight_grad_has_vjp.correct.

                        theorem Proofs.Mnv2PaperPoCG.convStridedXlaBGradB_den {N ic oc h w kH kW : ℕ} (cotN : String) (W : Kernel4 oc ic kH kW) (x : Vec (N * (ic * (2 * h) * (2 * w)))) (b : Vec oc) (cot : Vec (N * (oc * h * w))) (o : Fin oc) :
                        StableHLO.den (StableHLO.SHlo.convStridedXlaBiasGradB W x b (StableHLO.SHlo.operand cotN cot)) o = ∑ n : Fin N, ∑ j : Fin (oc * h * w), pdiv (fun (b' : Vec oc) => flatConvStride2Xla W b' (StableHLO.batchSlice N (ic * (2 * h) * (2 * w)) x n)) b o j * StableHLO.batchSlice N (oc * h * w) cot n j

                        Batched XLA-SAME strided conv bias GRADIENT denotes the certified Σ_n bias gradient. The stem's bias slot, at convBias := true. Same reduce text as the stride-1 bias grad; the den is the odd-phase bias VJP.

                        theorem Proofs.Mnv2PaperPoCG.depthwiseBGradB_den {N c h w kH kW : ℕ} (cotN : String) (W : DepthwiseKernel c kH kW) (x : Vec (N * (c * h * w))) (b : Vec c) (cot : Vec (N * (c * h * w))) (o : Fin c) :
                        StableHLO.den (StableHLO.SHlo.depthwiseBiasGradB W x b (StableHLO.SHlo.operand cotN cot)) o = ∑ n : Fin N, ∑ j : Fin (c * h * w), pdiv (fun (b' : Vec c) => (depthwiseConv2d W b' (Tensor3.unflatten (StableHLO.batchSlice N (c * h * w) x n))).flatten) b o j * StableHLO.batchSlice N (c * h * w) cot n j

                        Batched stride-1 depthwise bias GRADIENT denotes the certified Σ_n bias gradient. The depthwise bias slots at convBias := true. EfficientNet has no instance of this op — its depthwise convs are followed by BatchNorm, so their bias is always folded.

                        theorem Proofs.Mnv2PaperPoCG.depthwiseStridedXlaWGradB_den {N c h w kH kW : ℕ} (xN cotN : String) (b : Vec c) (x : Vec (N * (c * (2 * h) * (2 * w)))) (W : DepthwiseKernel c kH kW) (cot : Vec (N * (c * h * w))) (idx : Fin (c * kH * kW)) :
                        StableHLO.den (StableHLO.SHlo.depthwiseStridedXlaWeightGradB xN b x W (StableHLO.SHlo.operand cotN cot)) idx = ∑ n : Fin N, ∑ j : Fin (c * h * w), pdiv (fun (v' : Vec (c * kH * kW)) => depthwiseStride2FlatXla (Tensor3.unflatten v') b (StableHLO.batchSlice N (c * (2 * h) * (2 * w)) x n)) (Tensor3.flatten W) idx j * StableHLO.batchSlice N (c * h * w) cot n j

                        Batched XLA-SAME strided depthwise weight GRADIENT denotes the certified Σ_n weight gradient. The four stride-2 depthwises (b2/b4/b7/b14). ⚠ This is the Xla op — its weight-grad correlation keeps the [p−1, p+1] pad, the opposite asymmetry from the input-grad, and that asymmetry is the whole content of the variant. B0's strided depthwise is the SYMMETRIC op, so the two nets do not share this certificate.

                        theorem Proofs.Mnv2PaperPoCG.depthwiseStridedXlaBGradB_den {N c h w kH kW : ℕ} (cotN : String) (W : DepthwiseKernel c kH kW) (x : Vec (N * (c * (2 * h) * (2 * w)))) (b : Vec c) (cot : Vec (N * (c * h * w))) (o : Fin c) :
                        StableHLO.den (StableHLO.SHlo.depthwiseStridedXlaBiasGradB W x b (StableHLO.SHlo.operand cotN cot)) o = ∑ n : Fin N, ∑ j : Fin (c * h * w), pdiv (fun (b' : Vec c) => depthwiseStride2FlatXla W b' (StableHLO.batchSlice N (c * (2 * h) * (2 * w)) x n)) b o j * StableHLO.batchSlice N (c * h * w) cot n j

                        Batched XLA-SAME strided depthwise bias GRADIENT denotes the certified Σ_n bias gradient. At convBias := true.

                        theorem Proofs.CnxPoCGB.psWGradB_den {N ic oc h w kH kW : ℕ} (xN cotN : String) (b : Vec oc) (x : Vec (N * (ic * (2 * (2 * h)) * (2 * (2 * w))))) (W : Kernel4 oc ic kH kW) (cot : Vec (N * (oc * h * w))) (idx : Fin (oc * ic * kH * kW)) :
                        StableHLO.den (StableHLO.SHlo.convStride4WeightGradB xN b x W (StableHLO.SHlo.operand cotN cot)) idx = ∑ n : Fin N, ∑ j : Fin (oc * h * w), pdiv (fun (v' : Vec (oc * ic * kH * kW)) => flatConvStride4 (Kernel4.unflatten v') b (StableHLO.batchSlice N (ic * (2 * (2 * h)) * (2 * (2 * w))) x n)) W.flatten idx j * StableHLO.batchSlice N (oc * h * w) cot n j

                        Batched patchify-stem weight GRADIENT denotes the certified Σ_n weight gradient. ⚠ The emitted convolution contracts the batch axis itself (the transpose trick), so the outer sum is inside one op rather than across N of them — same as the strided ops.

                        Each tie clause holds #

                        One lemma per clause above, every argument implicit: a step tie's conjunction of clauses is then an anonymous constructor of these, its arguments read off the goal.

                        theorem Proofs.ResNet34PoCB.convWTiedB_holds {N h w ic oc kH kW : ℕ} {xN cotN : String} {b : Vec oc} {x : Vec (N * (ic * h * w))} {W : Kernel4 oc ic kH kW} {cot : Vec (N * (oc * h * w))} :
                        ConvWTiedB N h w xN cotN b x W cot
                        theorem Proofs.ResNet34PoCB.convBTiedB_holds {N h w ic oc kH kW : ℕ} {cotN : String} {W : Kernel4 oc ic kH kW} {x : Vec (N * (ic * h * w))} {b : Vec oc} {cot : Vec (N * (oc * h * w))} :
                        ConvBTiedB N h w cotN W x b cot
                        theorem Proofs.ResNet34PoCB.convStridedWTiedB_holds {N h w ic oc kH kW : ℕ} {xN cotN : String} {b : Vec oc} {x : Vec (N * (ic * (2 * h) * (2 * w)))} {W : Kernel4 oc ic kH kW} {cot : Vec (N * (oc * h * w))} :
                        ConvStridedWTiedB N h w xN cotN b x W cot
                        theorem Proofs.ResNet34PoCB.convStridedBTiedB_holds {N h w ic oc kH kW : ℕ} {cotN : String} {W : Kernel4 oc ic kH kW} {x : Vec (N * (ic * (2 * h) * (2 * w)))} {b : Vec oc} {cot : Vec (N * (oc * h * w))} :
                        ConvStridedBTiedB N h w cotN W x b cot
                        theorem Proofs.ResNet34PoCB.convStridedXlaWTiedB_holds {N h w ic oc kH kW : ℕ} {xN cotN : String} {b : Vec oc} {x : Vec (N * (ic * (2 * h) * (2 * w)))} {W : Kernel4 oc ic kH kW} {cot : Vec (N * (oc * h * w))} :
                        ConvStridedXlaWTiedB N h w xN cotN b x W cot
                        theorem Proofs.ResNet34PoCB.depthwiseWTiedB_holds {N h w c kH kW : ℕ} {xN cotN : String} {b : Vec c} {x : Vec (N * (c * h * w))} {W : DepthwiseKernel c kH kW} {cot : Vec (N * (c * h * w))} :
                        DepthwiseWTiedB N h w xN cotN b x W cot
                        theorem Proofs.ResNet34PoCB.depthwiseBTiedB_holds {N h w c kH kW : ℕ} {cotN : String} {W : DepthwiseKernel c kH kW} {x : Vec (N * (c * h * w))} {b : Vec c} {cot : Vec (N * (c * h * w))} :
                        DepthwiseBTiedB N h w cotN W x b cot
                        theorem Proofs.ResNet34PoCB.depthwiseStridedWTiedB_holds {N h w c kH kW : ℕ} {xN cotN : String} {b : Vec c} {x : Vec (N * (c * (2 * h) * (2 * w)))} {W : DepthwiseKernel c kH kW} {cot : Vec (N * (c * h * w))} :
                        DepthwiseStridedWTiedB N h w xN cotN b x W cot
                        theorem Proofs.ResNet34PoCB.denseWTiedB_holds {N a c : ℕ} {xN cotN : String} {x : Vec (N * a)} {W : Mat a c} {b : Vec c} {cot : Vec (N * c)} :
                        DenseWTiedB N xN cotN x W b cot
                        theorem Proofs.ResNet34PoCB.denseBTiedB_holds {N a c : ℕ} {cotN : String} {W : Mat a c} {x : Vec a} {b : Vec c} {cot : Vec (N * c)} :
                        DenseBTiedB N cotN W x b cot