α/β-CROWN step function: case inversion #
Lemmas that read off what stepAlphaBeta computed at a node.
Away from ReLU nodes that carry a β vector, stepAlphaBeta is stepAlpha. On a ReLU node with a
β vector, the step succeeds only when the unary parent has a certificate entry and an IBP box of
the same output dimension, and phaseRelaxVec? accepts the phases against that box. The
inversion lemma stepAlphaBeta_relu_beta_inv exposes exactly those ingredients, together with the
range of the α vector actually used (explicit or default).
Safe lookups #
A successful Cert.getAff? lookup is an in-bounds array read.
getElem!_of_getVal?_eq_some is CertSoundness's lemma, opened at the top of this file. Two files
in this directory carried their own copy of it, proved with by_cases where the original uses
unfold and split; the statements were the same, so the copies are gone.
A successful getAlpha? lookup is an in-bounds array read.
α vector range #
Under AlphaOK, an α vector read by getAlpha? has every entry in [0, 1].
Reduction to α-CROWN #
stepAlphaBeta is stepAlpha at every node that is not a ReLU carrying a β vector.
The hypothesis is phrased as an implication so that a single lemma covers both the non-ReLU kinds and ReLU nodes with no β entry.
Inversion of the β-phase ReLU branch #
What a successful α/β step on a ReLU node with a β vector must have computed.
The parent p1 has a certificate entry xin and an IBP box preB of matching output
dimension, phaseRelaxVec? accepted phases against preB for some α vector αt with entries
in [0, 1] (the explicit one, cast to preB.dim, or the default one), and the produced bounds
are the phase relaxations propagated through the parent's affine bounds.