Documentation

LeanMlir.Proofs.Nets.ConvNeXt.ConvNeXtStepTieGB

ConvNeXt-T's T3 §1a TIE at the BATCHED index, the UN-FUSED gradient and the SMOOTHED loss #

ConvNeXtStepTie.lean ties all 182 parameters of the SGD-inline convnext_train_step.mlir: each fused θ − lr·g op dens to the certified step at the cotangent the emitted backward chain delivers, per example, at a hard label. This file is that statement re-pointed along the THREE axes 4b and 4c left open (planning/archive/proofs_tier_to_paper_nets.md §4b, §4c-quater) — and unlike EfficientNet-B0's (EfficientNetStepTieG.lean, two axes), ConvNeXt's per-example capstone was at a single image with the batch outside the AST, so the index is the third.

Axis 1 — the OPTIMIZER FORM. Every conjunct is at the RAW gradient node (*GradB), which is what convnext_adam_train_step.mlir and every convnextin_* artifact emit; the fused op appears only in the SGD-inline file. One statement covers AdamW, the wx/clip variants, EMA and the data-parallel twins, because they all consume this node. ConvNeXtFoldGB.lean (§4c-quater) is the fold each conjunct delegates to.

Axis 2 — the LOSS. The capstone's top-of-chain cotangent is smoothedLossCotGraphDiv's, at a GENERAL target: the six-op chain expe → softmaxDiv → subB → scaleB → addVB → shiftB → divConstB this render emits, with the target arriving as the graph input %onehot — a soft vector under mixup or cutmix. The fused file pins it to softmax − oneHot, the gradient of plain cross-entropy at a hard label, which no ImageNet artifact computes. ⚠ ConvNeXt's chain runs at the plain width N·K (no row index), so there is no rowB/unrowB cast anywhere here.

Axis 3 — the INDEX. N is a binder. Every forward activation is batchMap N of the per-example prefix the fused file threads (cnxStemFwdO, cnxBlockFwdChO, cnxDownFwdChO), and every cotangent is batchMapAux N of the per-example chain (cnxBlockCotInChAt, cnxDownCotInChAt, ConvNeXtChainClose's cnxCotP/E/N, chanLNTensor3Back). That lift is honest for this net and for no BatchNorm net: LayerNorm, GELU, the convolutions, layer scale and the residual add are all batch-separable, so the batched op IS the per-example op under batchMap — which is what the *B constructors' den arms say. nC is a binder too: the Imagenette artifact is nC = 10, the ImageNet ones nC = 1000.

What is NOT new, and why the file is a transformation rather than a proof #

Every activation, every Jacobian witness and every chain cotangent is ConvNeXtStepTie.lean's, lifted; every conjunct's proof is one CnxPoCGB.*_den lemma. The wN, bN, gN, lrStr and lr binders disappear with the fused wrapper, exactly as they did for B0. ⚠ The head takes g as a PARAMETER where the fused cnxHeadChTied computed it from a label — that is the whole of axis 2 at the block level; the per-block ties were already loss-agnostic.

Conventions carried unchanged from the fused file: channel LayerNorm (chanLNTensor3, a Vec c affine, h·w statistics per example) at all 22 spatial sites, the head at ViT's vector LN on one row, per-channel layer scale, GELU (no kink — no smoothness hypothesis anywhere), SYMMETRIC padding at the 4×4/s4 stem and the three 2×2/s2 downsamples. Stated at the literal widths of ConvNeXt-T; S and B are other nets. ⛔ ONE REPLICA: in convnextin_adamdp* every gradient node feeds allReduceMeanF, the collective as an AST node since 4d piece 2 (2026-09-07); DataParallelNode.lean composes the per-replica statement with the replica mean. ⛔ The %dgi…%dgapf GAP backward is hand-written text on both chains (a declared carve-out); its value here is globalAvgPoolFlat_has_vjp.backward, as in the fused file.

Per-example internal cotangents as functions of a block's INPUT #

ConvNeXtChainClose's cnxCotE/N and chanLNTensor3Back take the saved activations as arguments; batchMapAux lifts a function of (one saved value, one input), so these recompute the activations from the block input, exactly as cnxBlockCotInChAt does.

noncomputable def Proofs.CnxTiePoCGB.blkCotE {c cExp h w : } (ε : ) (Wdw : DepthwiseKernel c 7 7) (bdw ng nbt : Vec c) (Wex : Kernel4 cExp c 1 1) (bex : Vec cExp) (Wpr : Kernel4 c cExp 1 1) (bpr lg : Vec c) (xin dyOut : Vec (c * h * w)) :
Vec (cExp * h * w)

Cotangent at the expand output (pre-GELU), from the block input and output cotangent.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    noncomputable def Proofs.CnxTiePoCGB.blkCotN {c cExp h w : } (ε : ) (Wdw : DepthwiseKernel c 7 7) (bdw ng nbt : Vec c) (Wex : Kernel4 cExp c 1 1) (bex : Vec cExp) (Wpr : Kernel4 c cExp 1 1) (bpr lg : Vec c) (xin dyOut : Vec (c * h * w)) :
    Vec (c * h * w)

    Cotangent at the channel-LN output, from the block input and output cotangent.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      noncomputable def Proofs.CnxTiePoCGB.blkCotD {c cExp h w : } (ε : ) (Wdw : DepthwiseKernel c 7 7) (bdw ng nbt : Vec c) (Wex : Kernel4 cExp c 1 1) (bex : Vec cExp) (Wpr : Kernel4 c cExp 1 1) (bpr lg : Vec c) (xin dyOut : Vec (c * h * w)) :
      Vec (c * h * w)

      Cotangent at the depthwise output (the channel-LN input-VJP of blkCotN).

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        noncomputable def Proofs.CnxTiePoCGB.dnCotN {ci co h w : } (ε : ) (dng dnbt : Vec ci) (Wd : Kernel4 co ci 2 2) (bd : Vec co) (xin : Vec (ci * (2 * h) * (2 * w))) (dyOut : Vec (co * h * w)) :
        Vec (ci * (2 * h) * (2 * w))

        Downsample: cotangent at the LN output, i.e. the strided conv's input-VJP.

        Equations
        Instances For
          noncomputable def Proofs.CnxTiePoCGB.stemCotPatch {c h w : } (ε : ) (Wst : Kernel4 c 3 4 4) (psb psng : Vec c) (x : Vec (3 * (2 * (2 * h)) * (2 * (2 * w)))) (dyStem : Vec (c * h * w)) :
          Vec (c * h * w)

          Stem: cotangent at the patchify output, the stem LN's input-VJP of dyStem.

          Equations
          Instances For
            noncomputable def Proofs.CnxTiePoCGB.headCotHn {nC : } (Wfc : Mat 768 nC) (bfc : Vec nC) (hn : Vec 768) (g : Vec nC) :
            Vec (1 * 768)

            Head: the dense backward at one example's LN output and loss cotangent.

            Equations
            Instances For
              @[irreducible]
              noncomputable def Proofs.CnxTiePoCGB.cnxHeadDyXheadChN {h w nC : } (ε : ) (hng hnbt : Vec 768) (Wfc : Mat 768 nC) (bfc : Vec nC) (xhead : Vec (768 * h * w)) (g : Vec nC) :
              Vec (768 * h * w)

              The cotangent at the last block output, per example, at a GENERAL class count — CnxTiePoC.cnxHeadDyXheadCh with nC a binder (that one is at the literal 10).

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                ConvNeXt block — all 9 gradient nodes, batched #

                def Proofs.CnxTiePoCGB.cnxBlockChTiedGB (N : ) {c cExp h w : } (xN epsStr cotN : String) (ε : ) (Wdw : DepthwiseKernel c 7 7) (bdw ng nbt : Vec c) (Wex : Kernel4 cExp c 1 1) (bex : Vec cExp) (Wpr : Kernel4 c cExp 1 1) (bpr lg : Vec c) (xin dyOut : Vec (N * (c * h * w))) :

                ConvNeXt block, tied at the batched gradient nodes. All 9 params (depthwise 7×7 W+b, channel-LN γ/β at Vec c, expand/project 1×1 W+b, per-channel layer-scale γ) denote the certified Σ_n gradient at the real batched block forward and the chain cotangents driven by dyOut.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  theorem Proofs.CnxTiePoCGB.cnx_block_ch_tiedGB (N : ) {c cExp h w : } (xN epsStr cotN : String) (ε : ) (Wdw : DepthwiseKernel c 7 7) (bdw ng nbt : Vec c) (Wex : Kernel4 cExp c 1 1) (bex : Vec cExp) (Wpr : Kernel4 c cExp 1 1) (bpr lg : Vec c) (xin dyOut : Vec (N * (c * h * w))) :
                  cnxBlockChTiedGB N xN epsStr cotN ε Wdw bdw ng nbt Wex bex Wpr bpr lg xin dyOut

                  Downsample — channel-LN → 2×2/s2 conv, all 4 gradient nodes, batched #

                  def Proofs.CnxTiePoCGB.cnxDownChTiedGB (N : ) {ci co h w : } (xN epsStr cotN : String) (ε : ) (dng dnbt : Vec ci) (Wd : Kernel4 co ci 2 2) (bd : Vec co) (xin : Vec (N * (ci * (2 * h) * (2 * w)))) (dyOut : Vec (N * (co * h * w))) :

                  Downsample, tied at the batched gradient nodes. Channel-LN γ/β at the ci·(2h)·(2w) input grid, plus the strided conv's weight and bias.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    theorem Proofs.CnxTiePoCGB.cnx_down_ch_tiedGB (N : ) {ci co h w : } (xN epsStr cotN : String) (ε : ) (dng dnbt : Vec ci) (Wd : Kernel4 co ci 2 2) (bd : Vec co) (xin : Vec (N * (ci * (2 * h) * (2 * w)))) (dyOut : Vec (N * (co * h * w))) :
                    cnxDownChTiedGB N xN epsStr cotN ε dng dnbt Wd bd xin dyOut

                    Stem — 4×4/s4 patchify conv → channel-LN, all 4 gradient nodes, batched #

                    The bias grad is a pure cotangent reduce, so the render emits it as a stride-1 convBiasGradB at the OUTPUT resolution and the carried W/x are generic (xstem is a free parameter here, as Tensor3 3 h w is in the fused file). The weight is convStride4WeightGradB, at its gradient on both chains.

                    def Proofs.CnxTiePoCGB.cnxStemChTiedGB (N : ) {c h w : } (xN epsStr cotN : String) (ε : ) (Wst : Kernel4 c 3 4 4) (psb psng psnbt : Vec c) (x : Vec (N * (3 * (2 * (2 * h)) * (2 * (2 * w))))) (xstem : Vec (N * (3 * h * w))) (dyStem : Vec (N * (c * h * w))) :

                    Stem, tied at the batched gradient nodes. Channel-LN γ/β, the conv bias, the conv weight.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      theorem Proofs.CnxTiePoCGB.cnx_stem_ch_tiedGB (N : ) {c h w : } (xN epsStr cotN : String) (ε : ) (Wst : Kernel4 c 3 4 4) (psb psng psnbt : Vec c) (x : Vec (N * (3 * (2 * (2 * h)) * (2 * (2 * w))))) (xstem : Vec (N * (3 * h * w))) (dyStem : Vec (N * (c * h * w))) :
                      cnxStemChTiedGB N xN epsStr cotN ε Wst psb psng psnbt x xstem dyStem

                      Head — GAP → vector-LN at one row → dense, all 4 gradient nodes, batched #

                      Stated at the LITERAL 768 for the fused file's reason: 1 * m does not reduce at a variable m. g is a PARAMETER — the loss cotangent arrives from smoothedLossCotGraphDiv in the capstone.

                      def Proofs.CnxTiePoCGB.cnxHeadChTiedGB (N : ) {h w nC : } (xN epsStr cotN dN : String) (ε : ) (hng hnbt : Vec 768) (Wfc : Mat 768 nC) (bfc : Vec nC) (xhead : Vec (N * (768 * h * w))) (g : Vec (N * nC)) :

                      Head, tied at the batched gradient nodes. The head-LN γ/β at the pooled row, the classifier weight at the LN output, the classifier bias PER EXAMPLE (biasGradB is the identity on its operand; the batch reduce is emitted text — CnxPoCGB.headBGradB_den).

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem Proofs.CnxTiePoCGB.cnx_head_ch_tiedGB (N : ) {h w nC : } (xN epsStr cotN dN : String) (ε : ) (hng hnbt : Vec 768) (Wfc : Mat 768 nC) (bfc : Vec nC) (xhead : Vec (N * (768 * h * w))) (g : Vec (N * nC)) :
                        cnxHeadChTiedGB N xN epsStr cotN dN ε hng hnbt Wfc bfc xhead g

                        @[irreducible] wrappers — keep the 22-deep capstone thread opaque (the r34/mnv2 heartbeat lesson) #

                        @[irreducible]
                        def Proofs.CnxTiePoCGB.cnxBlockChTiedGBAt (N : ) {c cExp h w : } (xN epsStr cotN : String) (ε : ) (Wdw : DepthwiseKernel c 7 7) (bdw ng nbt : Vec c) (Wex : Kernel4 cExp c 1 1) (bex : Vec cExp) (Wpr : Kernel4 c cExp 1 1) (bpr lg : Vec c) (xin dyOut : Vec (N * (c * h * w))) :
                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          theorem Proofs.CnxTiePoCGB.cnx_block_ch_tiedGBAt (N : ) {c cExp h w : } (xN epsStr cotN : String) (ε : ) (Wdw : DepthwiseKernel c 7 7) (bdw ng nbt : Vec c) (Wex : Kernel4 cExp c 1 1) (bex : Vec cExp) (Wpr : Kernel4 c cExp 1 1) (bpr lg : Vec c) (xin dyOut : Vec (N * (c * h * w))) :
                          cnxBlockChTiedGBAt N xN epsStr cotN ε Wdw bdw ng nbt Wex bex Wpr bpr lg xin dyOut
                          @[irreducible]
                          def Proofs.CnxTiePoCGB.cnxDownChTiedGBAt (N : ) {ci co h w : } (xN epsStr cotN : String) (ε : ) (dng dnbt : Vec ci) (Wd : Kernel4 co ci 2 2) (bd : Vec co) (xin : Vec (N * (ci * (2 * h) * (2 * w)))) (dyOut : Vec (N * (co * h * w))) :
                          Equations
                          Instances For
                            theorem Proofs.CnxTiePoCGB.cnx_down_ch_tiedGBAt (N : ) {ci co h w : } (xN epsStr cotN : String) (ε : ) (dng dnbt : Vec ci) (Wd : Kernel4 co ci 2 2) (bd : Vec co) (xin : Vec (N * (ci * (2 * h) * (2 * w)))) (dyOut : Vec (N * (co * h * w))) :
                            cnxDownChTiedGBAt N xN epsStr cotN ε dng dnbt Wd bd xin dyOut
                            @[irreducible]
                            def Proofs.CnxTiePoCGB.cnxStemChTiedGBAt (N : ) {c h w : } (xN epsStr cotN : String) (ε : ) (Wst : Kernel4 c 3 4 4) (psb psng psnbt : Vec c) (x : Vec (N * (3 * (2 * (2 * h)) * (2 * (2 * w))))) (xstem : Vec (N * (3 * h * w))) (dyStem : Vec (N * (c * h * w))) :
                            Equations
                            Instances For
                              theorem Proofs.CnxTiePoCGB.cnx_stem_ch_tiedGBAt (N : ) {c h w : } (xN epsStr cotN : String) (ε : ) (Wst : Kernel4 c 3 4 4) (psb psng psnbt : Vec c) (x : Vec (N * (3 * (2 * (2 * h)) * (2 * (2 * w))))) (xstem : Vec (N * (3 * h * w))) (dyStem : Vec (N * (c * h * w))) :
                              cnxStemChTiedGBAt N xN epsStr cotN ε Wst psb psng psnbt x xstem dyStem
                              @[irreducible]
                              def Proofs.CnxTiePoCGB.cnxHeadChTiedGBAt (N : ) {h w nC : } (xN epsStr cotN dN : String) (ε : ) (hng hnbt : Vec 768) (Wfc : Mat 768 nC) (bfc : Vec nC) (xhead : Vec (N * (768 * h * w))) (g : Vec (N * nC)) :
                              Equations
                              Instances For
                                theorem Proofs.CnxTiePoCGB.cnx_head_ch_tiedGBAt (N : ) {h w nC : } (xN epsStr cotN dN : String) (ε : ) (hng hnbt : Vec 768) (Wfc : Mat 768 nC) (bfc : Vec nC) (xhead : Vec (N * (768 * h * w))) (g : Vec (N * nC)) :
                                cnxHeadChTiedGBAt N xN epsStr cotN dN ε hng hnbt Wfc bfc xhead g

                                The whole-net capstone — all 182 params through the REAL batched forward + composed cotangent #

                                The fused file's thread, lifted: block inputs are batchMap N of the forward prefixes, and the backward cotangents are batchMapAux N of the per-example chain, composed from the smoothed loss g down through the head, every block's backward with the residual fan-in + dyOut at each of the eighteen identity-skip merges, the channel-LN-back at each of the three downsamples, and the stem LN's own back before the patchify conv's gradients.

                                theorem Proofs.CnxTiePoCGB.cnx_net_tiedGB (N : ) {nC : } (xN epsStr cotN dN aStr negAK bStr logN ohN : String) (ε α B : ) (Wst : Kernel4 96 3 4 4) (psb psng psnbt : Vec 96) (xstem : Vec (N * (3 * 56 * 56))) (aW1 : DepthwiseKernel 96 7 7) (aB1 nG1 nB1 : Vec 96) (eW1 : Kernel4 384 96 1 1) (eB1 : Vec 384) (pW1 : Kernel4 96 384 1 1) (pB1 sL1 : Vec 96) (aW2 : DepthwiseKernel 96 7 7) (aB2 nG2 nB2 : Vec 96) (eW2 : Kernel4 384 96 1 1) (eB2 : Vec 384) (pW2 : Kernel4 96 384 1 1) (pB2 sL2 : Vec 96) (aW3 : DepthwiseKernel 96 7 7) (aB3 nG3 nB3 : Vec 96) (eW3 : Kernel4 384 96 1 1) (eB3 : Vec 384) (pW3 : Kernel4 96 384 1 1) (pB3 sL3 dG0 dT0 : Vec 96) (dW0 : Kernel4 192 96 2 2) (dB0 : Vec 192) (aW4 : DepthwiseKernel 192 7 7) (aB4 nG4 nB4 : Vec 192) (eW4 : Kernel4 768 192 1 1) (eB4 : Vec 768) (pW4 : Kernel4 192 768 1 1) (pB4 sL4 : Vec 192) (aW5 : DepthwiseKernel 192 7 7) (aB5 nG5 nB5 : Vec 192) (eW5 : Kernel4 768 192 1 1) (eB5 : Vec 768) (pW5 : Kernel4 192 768 1 1) (pB5 sL5 : Vec 192) (aW6 : DepthwiseKernel 192 7 7) (aB6 nG6 nB6 : Vec 192) (eW6 : Kernel4 768 192 1 1) (eB6 : Vec 768) (pW6 : Kernel4 192 768 1 1) (pB6 sL6 dG1 dT1 : Vec 192) (dW1 : Kernel4 384 192 2 2) (dB1 : Vec 384) (aW7 : DepthwiseKernel 384 7 7) (aB7 nG7 nB7 : Vec 384) (eW7 : Kernel4 1536 384 1 1) (eB7 : Vec 1536) (pW7 : Kernel4 384 1536 1 1) (pB7 sL7 : Vec 384) (aW8 : DepthwiseKernel 384 7 7) (aB8 nG8 nB8 : Vec 384) (eW8 : Kernel4 1536 384 1 1) (eB8 : Vec 1536) (pW8 : Kernel4 384 1536 1 1) (pB8 sL8 : Vec 384) (aW9 : DepthwiseKernel 384 7 7) (aB9 nG9 nB9 : Vec 384) (eW9 : Kernel4 1536 384 1 1) (eB9 : Vec 1536) (pW9 : Kernel4 384 1536 1 1) (pB9 sL9 : Vec 384) (aW10 : DepthwiseKernel 384 7 7) (aB10 nG10 nB10 : Vec 384) (eW10 : Kernel4 1536 384 1 1) (eB10 : Vec 1536) (pW10 : Kernel4 384 1536 1 1) (pB10 sL10 : Vec 384) (aW11 : DepthwiseKernel 384 7 7) (aB11 nG11 nB11 : Vec 384) (eW11 : Kernel4 1536 384 1 1) (eB11 : Vec 1536) (pW11 : Kernel4 384 1536 1 1) (pB11 sL11 : Vec 384) (aW12 : DepthwiseKernel 384 7 7) (aB12 nG12 nB12 : Vec 384) (eW12 : Kernel4 1536 384 1 1) (eB12 : Vec 1536) (pW12 : Kernel4 384 1536 1 1) (pB12 sL12 : Vec 384) (aW13 : DepthwiseKernel 384 7 7) (aB13 nG13 nB13 : Vec 384) (eW13 : Kernel4 1536 384 1 1) (eB13 : Vec 1536) (pW13 : Kernel4 384 1536 1 1) (pB13 sL13 : Vec 384) (aW14 : DepthwiseKernel 384 7 7) (aB14 nG14 nB14 : Vec 384) (eW14 : Kernel4 1536 384 1 1) (eB14 : Vec 1536) (pW14 : Kernel4 384 1536 1 1) (pB14 sL14 : Vec 384) (aW15 : DepthwiseKernel 384 7 7) (aB15 nG15 nB15 : Vec 384) (eW15 : Kernel4 1536 384 1 1) (eB15 : Vec 1536) (pW15 : Kernel4 384 1536 1 1) (pB15 sL15 dG2 dT2 : Vec 384) (dW2 : Kernel4 768 384 2 2) (dB2 : Vec 768) (aW16 : DepthwiseKernel 768 7 7) (aB16 nG16 nB16 : Vec 768) (eW16 : Kernel4 3072 768 1 1) (eB16 : Vec 3072) (pW16 : Kernel4 768 3072 1 1) (pB16 sL16 : Vec 768) (aW17 : DepthwiseKernel 768 7 7) (aB17 nG17 nB17 : Vec 768) (eW17 : Kernel4 3072 768 1 1) (eB17 : Vec 3072) (pW17 : Kernel4 768 3072 1 1) (pB17 sL17 : Vec 768) (aW18 : DepthwiseKernel 768 7 7) (aB18 nG18 nB18 : Vec 768) (eW18 : Kernel4 3072 768 1 1) (eB18 : Vec 3072) (pW18 : Kernel4 768 3072 1 1) (pB18 sL18 hG hT : Vec 768) (Wfc : Mat 768 nC) (bfc : Vec nC) (x : Vec (N * (3 * 224 * 224))) (t : Vec (N * nC)) :
                                have ib1 := StableHLO.batchMap N (CnxTiePoC.cnxStemFwdO ε Wst psb psng psnbt) x; have ib2 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW1 aB1 nG1 nB1 eW1 eB1 pW1 pB1 sL1) ib1; have ib3 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW2 aB2 nG2 nB2 eW2 eB2 pW2 pB2 sL2) ib2; have ibD0 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW3 aB3 nG3 nB3 eW3 eB3 pW3 pB3 sL3) ib3; have ib4 := StableHLO.batchMap N (CnxTiePoC.cnxDownFwdChO ε dG0 dT0 dW0 dB0) ibD0; have ib5 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW4 aB4 nG4 nB4 eW4 eB4 pW4 pB4 sL4) ib4; have ib6 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW5 aB5 nG5 nB5 eW5 eB5 pW5 pB5 sL5) ib5; have ibD1 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW6 aB6 nG6 nB6 eW6 eB6 pW6 pB6 sL6) ib6; have ib7 := StableHLO.batchMap N (CnxTiePoC.cnxDownFwdChO ε dG1 dT1 dW1 dB1) ibD1; have ib8 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW7 aB7 nG7 nB7 eW7 eB7 pW7 pB7 sL7) ib7; have ib9 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW8 aB8 nG8 nB8 eW8 eB8 pW8 pB8 sL8) ib8; have ib10 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW9 aB9 nG9 nB9 eW9 eB9 pW9 pB9 sL9) ib9; have ib11 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW10 aB10 nG10 nB10 eW10 eB10 pW10 pB10 sL10) ib10; have ib12 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW11 aB11 nG11 nB11 eW11 eB11 pW11 pB11 sL11) ib11; have ib13 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW12 aB12 nG12 nB12 eW12 eB12 pW12 pB12 sL12) ib12; have ib14 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW13 aB13 nG13 nB13 eW13 eB13 pW13 pB13 sL13) ib13; have ib15 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW14 aB14 nG14 nB14 eW14 eB14 pW14 pB14 sL14) ib14; have ibD2 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW15 aB15 nG15 nB15 eW15 eB15 pW15 pB15 sL15) ib15; have ib16 := StableHLO.batchMap N (CnxTiePoC.cnxDownFwdChO ε dG2 dT2 dW2 dB2) ibD2; have ib17 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW16 aB16 nG16 nB16 eW16 eB16 pW16 pB16 sL16) ib16; have ib18 := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW17 aB17 nG17 nB17 eW17 eB17 pW17 pB17 sL17) ib17; have xhead := StableHLO.batchMap N (CnxTiePoC.cnxBlockFwdChO ε aW18 aB18 nG18 nB18 eW18 eB18 pW18 pB18 sL18) ib18; have gapB := StableHLO.batchMap N (globalAvgPoolFlat 768 7 7) xhead; have hnB := StableHLO.batchMap N (rowLNVecFlat 1 768 ε hG hT) gapB; have logitsB := StableHLO.batchMap N (dense Wfc bfc) hnB; have g := StableHLO.den (smoothedLossCotGraphDiv N nC α B aStr negAK bStr logN ohN logitsB t); have dyO18 := StableHLO.batchMapAux N (cnxHeadDyXheadChN ε hG hT Wfc bfc) xhead g; have dyO17 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW18 aB18 nG18 nB18 eW18 eB18 pW18 pB18 sL18) ib18 dyO18; have dyO16 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW17 aB17 nG17 nB17 eW17 eB17 pW17 pB17 sL17) ib17 dyO17; have dyD2 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW16 aB16 nG16 nB16 eW16 eB16 pW16 pB16 sL16) ib16 dyO16; have dyO15 := StableHLO.batchMapAux N (CnxTiePoC.cnxDownCotInChAt ε dG2 dT2 dW2 dB2) ibD2 dyD2; have dyO14 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW15 aB15 nG15 nB15 eW15 eB15 pW15 pB15 sL15) ib15 dyO15; have dyO13 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW14 aB14 nG14 nB14 eW14 eB14 pW14 pB14 sL14) ib14 dyO14; have dyO12 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW13 aB13 nG13 nB13 eW13 eB13 pW13 pB13 sL13) ib13 dyO13; have dyO11 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW12 aB12 nG12 nB12 eW12 eB12 pW12 pB12 sL12) ib12 dyO12; have dyO10 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW11 aB11 nG11 nB11 eW11 eB11 pW11 pB11 sL11) ib11 dyO11; have dyO9 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW10 aB10 nG10 nB10 eW10 eB10 pW10 pB10 sL10) ib10 dyO10; have dyO8 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW9 aB9 nG9 nB9 eW9 eB9 pW9 pB9 sL9) ib9 dyO9; have dyO7 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW8 aB8 nG8 nB8 eW8 eB8 pW8 pB8 sL8) ib8 dyO8; have dyD1 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW7 aB7 nG7 nB7 eW7 eB7 pW7 pB7 sL7) ib7 dyO7; have dyO6 := StableHLO.batchMapAux N (CnxTiePoC.cnxDownCotInChAt ε dG1 dT1 dW1 dB1) ibD1 dyD1; have dyO5 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW6 aB6 nG6 nB6 eW6 eB6 pW6 pB6 sL6) ib6 dyO6; have dyO4 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW5 aB5 nG5 nB5 eW5 eB5 pW5 pB5 sL5) ib5 dyO5; have dyD0 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW4 aB4 nG4 nB4 eW4 eB4 pW4 pB4 sL4) ib4 dyO4; have dyO3 := StableHLO.batchMapAux N (CnxTiePoC.cnxDownCotInChAt ε dG0 dT0 dW0 dB0) ibD0 dyD0; have dyO2 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW3 aB3 nG3 nB3 eW3 eB3 pW3 pB3 sL3) ib3 dyO3; have dyO1 := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW2 aB2 nG2 nB2 eW2 eB2 pW2 pB2 sL2) ib2 dyO2; have dyStem := StableHLO.batchMapAux N (CnxTiePoC.cnxBlockCotInChAt ε aW1 aB1 nG1 nB1 eW1 eB1 pW1 pB1 sL1) ib1 dyO1; cnxStemChTiedGBAt N xN epsStr cotN ε Wst psb psng psnbt x xstem dyStem cnxBlockChTiedGBAt N xN epsStr cotN ε aW1 aB1 nG1 nB1 eW1 eB1 pW1 pB1 sL1 ib1 dyO1

                                ⭐⭐ The whole [3,3,9,3] ConvNeXt-T train step, tied at the BATCHED index, the GRADIENT nodes and the SMOOTHED loss. Threading the real channel-LN / per-channel layer-scale forward as batchMap N of the per-example prefixes, and the label-smoothed loss cotangent (smoothedLossCotGraphDiv, at a general target t) down through the head and every block's certified cotangent chain as batchMapAux N of the per-example chain — GELU masks, the residual fan-in at every identity skip, the channel-LN-back at every downsample and at the stem — the 18 ConvNeXt blocks, the 3 downsamples, the 4×4/s4 stem with its LN and the GAP → LN → dense head all denote the certified batched Σ_n gradient. All 182 parameters, at the nodes convnext_adam_train_step.mlir and every convnextin_* train step emit.

                                N and nC are binders and there is no smoothness hypothesis: the folds are ∀ cot statements instantiated at explicitly constructed cotangents, and ConvNeXt has no kink. The batch enters only through batchMap/batchMapAux, which is honest because no ConvNeXt op couples examples. ⛔ ONE REPLICA: in convnextin_adamdp* every gradient node feeds allReduceMeanF (an AST node since 4d piece 2; DataParallelNode.lean composes the per-replica statement with the replica mean). ⛔ Stated at the drop-free chain; the *drop* artifacts' parameter nodes are the same *GradB constructors (the folds are ∀ cot) but their cotangent chain carries the dropPathB sites, which this thread does not name.