InformationTheory.Shannon.AWGN.AchievabilityExpurgation
Expurgation, power-constraint witness, and code extraction #
The expurgation and feasibility apparatus for AWGN achievability (Cover–Thomas):
worst-half expurgation, the power-constraint slack witness producing a
strictly smaller variance, and the bridge from a deterministic codebook to the
AwgnCode type.
Main statements #
awgn_exists_codebook_le_avg— a codebook attaining the average error bound.awgn_expurgate_worst_half— worst-half expurgation keepsM/2good indices.awgnPowerWitness_exists— a strictly smaller varianceP' < PwithRstill belowcapacity(P').awgn_extract_AwgnCode— packages a deterministic codebook into anAwgnCode.
Expurgation #
InformationTheory.Shannon.AWGN.awgn_exists_codebook_le_avg
sourceIf the codebook-average of Pe is at most B, then some specific codebook
achieves Pe ≤ B.
Used by
InformationTheory.Shannon.AWGN.awgn_expurgate_worst_half
sourceWorst-half expurgation: if the sum of Pe m is bounded by M · (2ε), then
at least M/2 indices m satisfy Pe m ≤ 4ε.
Used by
Power constraint and feasibility witness #
The per-codeword power-constraint bound awgnPowerConstraintPerCodeword_holds
lives in InformationTheory/Shannon/AWGN/PerCodewordPowerConstraint.lean. The
achievability assembly
also needs a shared slack witness ∃ P' ∈ (0, P) with R < capacity(P'),
supplied by awgnPowerWitness_exists below, which returns a strict P' < P (the
variance-level slack (P'.toNNReal : ℝ) < P required by the per-codeword
bound).
InformationTheory.Shannon.AWGN.awgnPowerWitness_exists
sourceThe power-constraint slack witness.
Given R < capacity(P) = (1/2) log(1 + P/N), produce a strictly smaller variance
P' ∈ (0, P) for which the rate R is still below capacity(P'). The strict
P' < P is genuinely required by awgnPowerConstraintPerCodeword_holds (its
(P_cb.toNNReal : ℝ) < P_target slack argument); the witness must therefore
deliver a true strict inequality, never a non-strict one fabricated from ≤.
Construction: capacity is continuous and strictly increasing in the variance;
R < capacity(P) lies strictly below the value at P, so by continuity there is
a left neighbourhood of P on which the capacity still exceeds R. Picking any
P' in that neighbourhood with 0 < P' < P works.
@audit:ok
Used by
InformationTheory.Shannon.AWGN.awgn_extract_AwgnCode
sourceBridge to the AwgnCode type from a deterministic codebook satisfying both
the per-message error bound and the per-message power constraint, using
jointTypicalDecoder as the decoder and converting the ℝ≥0∞-valued error
bound to the < 5ε real-valued slack.