MobileNetV2's non-degeneracy seal, on the full-width batched net (levels 2 and 3) #
MobileNetV2FullBVJP.lean proves
mobilenetv2ForwardBFullHasVJPAt: the whole-net VJP at any (w, x) satisfying 19 clause
bundles — the stem's relu6, one per bottleneck, and the head's — covering 35 relu6 sites, each a
two-sided window ≠ 0 ∧ ≠ 6. A conditional theorem of that shape says nothing unless its
hypotheses are jointly satisfiable at a point with a nonzero Jacobian. This file exhibits such a
point on mobilenetv2ForwardBFull itself: the seventeen bottlenecks of the
[t,c,n,s] table, 32→1280 channels, XLA-SAME stride-2 padding, batch BatchNorm, at 224×224.
The witness #
Weights are structural, not trained:
ε = 1andγ = 1/64at all 52 BatchNorms;β = 3wherever a relu6 follows,β = 0at the seventeen linear-bottleneck projections, which no activation follows;- the ten residual bottlenecks have all three kernels zeroed. A zero kernel gives a constant
channel, batch BN of a constant channel is
β, and the block's lastβis0— so a residual block is the exact identity (sealResB_eq), simpler than ResNet'sa ↦ a + 1; - the seven channel-changing blocks (
b1,b2,b4,b7,b11,b14,b17), the stem and the head carry the signal: every 1×1 expand and project is a centre-tap broadcast (BatchSeal.ctK), every 3×3 depthwise a centre-tap identity (BatchSeal.ctDW); - the head reads channel 0 into class 0, so
0 < nClsis the only constraint on the class count.
N = 2, and the input is the shared ray sealX t = rayX … t.
Every one of the 35 clauses is weight-only #
Better than ResNet-34, whose post-residual relu still needed 0 ≤ activation. Two facts compose:
every relu6 in this net sits directly on a BatchNorm output, and BatchSeal.bnBatchLA_window
bounds a BN output inside (0, 6) at every input once |γ|·√(N·h·w) < β = 3; and the linear
bottleneck has no relu after the residual add, so there is no post-residual clause at all. The
margin holds at every site because the widest is 2·112² = 25 088 and √25 088 / 64 < 2.48
(BatchSeal.margin192). Consequence: no nonnegativity layer, no positional injectivity, and — with
no max-pool anywhere in this net — no no-tie argument.
The carrier threads twenty-two BatchNorms #
MobileNetV2's channel-changing blocks have no skip — the body is the block — so unlike
ResNet's carrier, which saw only the projection of each downsample, this one crosses every BN
inside them: 1 (stem) + 2 (b1) + 3 × 6 + 1 (head). The ten residual blocks pass it through
untouched. BatchSeal.EDiff is the invariant, BatchSeal.bnBatchLA_exdiff the step that survives
per-channel batch BN, and BatchSeal.eDiff_dw is the one new shape: a depthwise
cannot broadcast, so where a centre-tap conv collapses the carrier to fun _ => s · δ 0 at every
output channel, a centre-tap depthwise scales the whole function δ channel by channel. The
class-0 output difference between the two examples is t · Rr t with Rr a 22-fold product of
1/64 · istd, continuous and positive, so g'(0) = Rr 0 ≠ 0.
Note: every collapse below is stated at variable N, h, w, ic, mid, oc and instantiated at the
witness's numerals afterwards, never proved at them.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The witness input: the shared ray at 224×224, N = 2. Both examples carry the same ramp in
channel 0, and sealV adds t to all of example 0's channel 0. Every clause of this net is
weight-only, so the ramp is doing no work beyond keeping one witness shape across the four
sealed nets.
Equations
- Proofs.Mnv2FullBSeal.sealX t = Proofs.BatchSeal.rayX (2 * 112) (2 * 112) t
Instances For
Its direction — all of example 0's channel 0.
Equations
- Proofs.Mnv2FullBSeal.sealV = Proofs.BatchSeal.rayV (2 * 112) (2 * 112)
Instances For
Equations
- Proofs.Mnv2FullBSeal.rf n z = 1 / 64 * Proofs.bnIstd n z 1
Instances For
Every ε of the witness is 1.
The nineteen bundles above, as the apex's one smoothness hypothesis.
The whole-net VJP at the witness — all 19 bundles discharged, on
mobilenetv2ForwardBFull itself (through mobilenetv2ForwardBFull_eq_chain).
Equations
Instances For
Equations
- Proofs.Mnv2FullBSeal.Zs t = Proofs.StableHLO.batchMap 2 (Proofs.flatConvStride2Xla (Proofs.BatchSeal.ctK 32 3 3 3 1) (Proofs.BatchSeal.kv 32 0)) (Proofs.Mnv2FullBSeal.sealX t)
Instances For
Equations
- Proofs.Mnv2FullBSeal.Z1p nCls t = Proofs.StableHLO.batchMap 2 (Proofs.flatConv (Proofs.BatchSeal.ctK 16 32 1 1 1) (Proofs.BatchSeal.kv 16 0)) (Proofs.Mnv2FullBSeal.A1d✝ nCls t)
Instances For
Equations
- Proofs.Mnv2FullBSeal.Z2p nCls t = Proofs.StableHLO.batchMap 2 (Proofs.flatConv (Proofs.BatchSeal.ctK 24 96 1 1 1) (Proofs.BatchSeal.kv 24 0)) (Proofs.Mnv2FullBSeal.A2d✝ nCls t)
Instances For
Equations
- Proofs.Mnv2FullBSeal.Z4p nCls t = Proofs.StableHLO.batchMap 2 (Proofs.flatConv (Proofs.BatchSeal.ctK 32 144 1 1 1) (Proofs.BatchSeal.kv 32 0)) (Proofs.Mnv2FullBSeal.A4d✝ nCls t)
Instances For
Equations
- Proofs.Mnv2FullBSeal.Z7p nCls t = Proofs.StableHLO.batchMap 2 (Proofs.flatConv (Proofs.BatchSeal.ctK 64 192 1 1 1) (Proofs.BatchSeal.kv 64 0)) (Proofs.Mnv2FullBSeal.A7d✝ nCls t)
Instances For
Equations
- Proofs.Mnv2FullBSeal.Z11p nCls t = Proofs.StableHLO.batchMap 2 (Proofs.flatConv (Proofs.BatchSeal.ctK 96 384 1 1 1) (Proofs.BatchSeal.kv 96 0)) (Proofs.Mnv2FullBSeal.A11d✝ nCls t)
Instances For
Equations
- Proofs.Mnv2FullBSeal.Z14p nCls t = Proofs.StableHLO.batchMap 2 (Proofs.flatConv (Proofs.BatchSeal.ctK 160 576 1 1 1) (Proofs.BatchSeal.kv 160 0)) (Proofs.Mnv2FullBSeal.A14d✝ nCls t)
Instances For
Equations
- Proofs.Mnv2FullBSeal.Ah nCls t = Proofs.StableHLO.bnBatchLA 2 1280 7 7 1 (Proofs.BatchSeal.kv 1280 (1 / 64)) (Proofs.BatchSeal.kv 1280 3) (Proofs.Mnv2FullBSeal.Zh✝ nCls t)
Instances For
Equations
- Proofs.Mnv2FullBSeal.dS t ci = t * Proofs.Mnv2FullBSeal.rf (2 * (112 * 112)) (Proofs.BatchSeal.bnRowLA 2 32 112 112 (Proofs.Mnv2FullBSeal.Zs t) ci)
Instances For
Equations
- Proofs.Mnv2FullBSeal.d1d nCls t ci = Proofs.Mnv2FullBSeal.dS t ci * Proofs.Mnv2FullBSeal.rf (2 * (112 * 112)) (Proofs.BatchSeal.bnRowLA 2 32 112 112 (Proofs.Mnv2FullBSeal.Z1d✝ nCls t) ci)
Instances For
Equations
- Proofs.Mnv2FullBSeal.d2d nCls t ci = Proofs.Mnv2FullBSeal.d2e✝ nCls t ci * Proofs.Mnv2FullBSeal.rf (2 * (56 * 56)) (Proofs.BatchSeal.bnRowLA 2 96 56 56 (Proofs.Mnv2FullBSeal.Z2d✝ nCls t) ci)
Instances For
Equations
- Proofs.Mnv2FullBSeal.d2p nCls t ci = Proofs.Mnv2FullBSeal.d2d nCls t 0 * Proofs.Mnv2FullBSeal.rf (2 * (56 * 56)) (Proofs.BatchSeal.bnRowLA 2 24 56 56 (Proofs.Mnv2FullBSeal.Z2p nCls t) ci)
Instances For
Equations
- Proofs.Mnv2FullBSeal.d4p nCls t ci = Proofs.Mnv2FullBSeal.d4d✝ nCls t 0 * Proofs.Mnv2FullBSeal.rf (2 * (28 * 28)) (Proofs.BatchSeal.bnRowLA 2 32 28 28 (Proofs.Mnv2FullBSeal.Z4p nCls t) ci)
Instances For
Equations
- Proofs.Mnv2FullBSeal.d7p nCls t ci = Proofs.Mnv2FullBSeal.d7d✝ nCls t 0 * Proofs.Mnv2FullBSeal.rf (2 * (14 * 14)) (Proofs.BatchSeal.bnRowLA 2 64 14 14 (Proofs.Mnv2FullBSeal.Z7p nCls t) ci)
Instances For
Equations
- Proofs.Mnv2FullBSeal.d11p nCls t ci = Proofs.Mnv2FullBSeal.d11d✝ nCls t 0 * Proofs.Mnv2FullBSeal.rf (2 * (14 * 14)) (Proofs.BatchSeal.bnRowLA 2 96 14 14 (Proofs.Mnv2FullBSeal.Z11p nCls t) ci)
Instances For
Equations
- Proofs.Mnv2FullBSeal.d14p nCls t ci = Proofs.Mnv2FullBSeal.d14d✝ nCls t 0 * Proofs.Mnv2FullBSeal.rf (2 * (7 * 7)) (Proofs.BatchSeal.bnRowLA 2 160 7 7 (Proofs.Mnv2FullBSeal.Z14p nCls t) ci)
Instances For
Equations
- Proofs.Mnv2FullBSeal.dH nCls t ci = Proofs.Mnv2FullBSeal.d17p✝ nCls t 0 * Proofs.Mnv2FullBSeal.rf (2 * (7 * 7)) (Proofs.BatchSeal.bnRowLA 2 1280 7 7 (Proofs.Mnv2FullBSeal.Zh✝ nCls t) ci)
Instances For
The positive, continuous nonlinear factor. MobileNetV2's channel-changing blocks have
no skip, so the carrier threads every BatchNorm inside them: the stem, both of b1's, three
each in b2, b4, b7, b11, b14, b17, and the head's. No BatchNorm variance
derivative is ever taken — Rr enters only through t * Rr t, whose derivative at 0 is
Rr 0 for any Rr continuous there.
Equations
- One or more equations did not get rendered due to their size.
Instances For
R is continuous: every block is, and fun_prop composes the whole seventeen-block trunk
once the carrier activations (Z*, A*) and the prefix chain are unfolded to their atoms.
Every BN on the witness has ε = 1.
The class-0 difference between the two examples, along the ray, is t · Rr t.
Level 2 — the witness is non-degenerate: the full-width batch-BN MobileNetV2 at the structural weights is NOT constant in its input.
Level 3 — the whole-net Jacobian is nonzero at the witness.
The seal: the proven whole-network backward of the full-width, batch-BatchNorm,
seventeen-bottleneck, 224×224 MobileNetV2 — mobilenetv2ForwardBFull, the training-BatchNorm
forward the MobileNetV2 train steps run, here at N = 2 — is not the zero map at the
witness.