Trained-weight whole-network VJP witness — CNN rung #
The TrainedMlpWitness program extended to a CONVOLUTIONAL net (the 2026-07
audit's gap #3): the Chapter-3 mnistCnnNoBn conditional whole-net VJP
(mnistCnnNoBn_has_vjp_at) instantiated at TRAINED, /128-rationalized
weights and a REAL test input, with every smoothness hypothesis discharged
by exact in-kernel rational arithmetic — inherited from training, not
engineered:
- h1/h2 — all 72+72 conv pre-activations are nonzero (
conv1_eq/conv2_eqvalue tables +c1_ne/c2_ne); - h_mp — every 2×2 max-pool window of relu(conv2) has four pairwise-distinct
values (
r2_smooth). ReLU zeros collide, so this needs ≤ 1 negative conv2 pre-activation per window — trained in via a pool-tie margin regularizer (the h_mp analogue of the scorecard's spectral cap: the training method decides whether the hypotheses hold); - h3/h4 — the dense pre-activations are nonzero (
d3_ne/d4_ne).
Net: 24×24-center-cropped MNIST, 4×4-average-pooled to 6×6 (exact pixel sums
/4080), conv 1→2 3×3 SAME → relu → conv 2→2 3×3 SAME → relu → maxpool 2×2 →
dense 18→8 → relu → dense 8→8 → relu → dense 8→10. Float test acc
0.852, /128-quantized 0.850. Witness: test digit #0
(label 7, correctly classified).
Generated by scripts/trained_cnn_witness.py; weights/input are DATA here.
Test image #0, 4×4-pooled 6×6, exact pixel sums /4080.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The flattened witness input.
Equations
Instances For
conv1 kernel (1→2, 3×3), entries k/128.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Proofs.TrainedCnn.b1 = ![9 / 128, 1 / 128]
Instances For
conv2 kernel (2→2, 3×3), entries k/128.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Proofs.TrainedCnn.b2 = ![5 / 16, 19 / 128]
Instances For
dense3 (18→8, input×output).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
relu(conv1) at the witness, exact.
Equations
- One or more equations did not get rendered due to their size.
Instances For
relu(conv2) at the witness (the max-pool input), exact.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Every 2×2 window of relu(conv2) has pairwise-distinct values —
the MaxPool2Smooth hypothesis, discharged from the trained tables.
The pooled feature vector (flattened maxpool output), exact.
Equations
- One or more equations did not get rendered due to their size.
Instances For
dense3 pre-activations at the witness, exact.
Equations
- One or more equations did not get rendered due to their size.
Instances For
dense4 pre-activations at the witness, exact.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Level 1: the trained-weight whole-net CNN VJP witness —
HasVJPAt (mnistCnnNoBnForward …) X with every one of the five
smoothness hypotheses discharged at the trained weights and the real
test input. The convolutional sibling of trainedMlp_has_vjp_at.
Equations
- One or more equations did not get rendered due to their size.