InformationTheory

InformationTheory.Shannon.AWGN.AchievabilityExpurgation

source

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 #

Expurgation #

theorem

InformationTheory.Shannon.AWGN.awgn_exists_codebook_le_avg

source
{M n : } (σsq : NNReal) (Pe : (Fin MFin n)ENNReal) (hPe_aemeas : AEMeasurable Pe (gaussianCodebook M n σsq)) {B : ENNReal} (h_avg : ∫⁻ (c : Fin MFin n), Pe c gaussianCodebook M n σsq B) :
∃ (c_specific : Fin MFin n), Pe c_specific B

If the codebook-average of Pe is at most B, then some specific codebook achieves Pe ≤ B.

Used by
    theorem

    InformationTheory.Shannon.AWGN.awgn_expurgate_worst_half

    source
    {M : } (hM : 2 M) (Pe : Fin M) (hPe_nn : ∀ (m : Fin M), 0 Pe m) {ε : } ( : 0 < ε) (h_avg : m : Fin M, Pe m M * (2 * ε)) :
    ∃ (S : Finset (Fin M)), M / 2 S.card mS, Pe m 4 * ε

    Worst-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).

      theorem

      InformationTheory.Shannon.AWGN.awgnPowerWitness_exists

      source
      (P : ) (hP : 0 < P) (N : NNReal) (hN : N 0) {R : } (hR_pos : 0 < R) (hR : R < 1 / 2 * Real.log (1 + P / N)) :
      ∃ (P' : ), 0 < P' P' < P R < 1 / 2 * Real.log (1 + P' / N)

      The 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
        theorem

        InformationTheory.Shannon.AWGN.awgn_extract_AwgnCode

        source
        {P : } {N : NNReal} (h_meas : IsAwgnChannelMeasurable N) {n M : } [NeZero M] {ε : } ( : 0 < ε) {A : Set ((Fin n) × (Fin n))} (hA_meas : MeasurableSet A) (codebook : Fin MFin n) (h_max_Pe : ∀ (m : Fin M), (MeasureTheory.Measure.pi fun (i : Fin n) => (awgnChannel N h_meas) (codebook m i)) ({ encoder := codebook, decoder := jointTypicalDecoder A codebook }.errorEvent m) ENNReal.ofReal (4 * ε)) (h_power : ∀ (m : Fin M), i : Fin n, codebook m i ^ 2 n * P) :
        ∃ (c : AwgnCode M n P), ∀ (m : Fin M), (c.toCode.errorProbAt (awgnChannel N h_meas) m).toReal < 5 * ε

        Bridge 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.

        Used by
          theorem

          InformationTheory.Shannon.AWGN.exists_two_mul_ceil_exp_le_ceil_exp_of_lt

          source
          {R R'' : } (hR_nonneg : 0 R) (hR_lt_R'' : R < R'') :
          ∃ (N₀ : ), ∀ (n : ), N₀ n2 * Real.exp (n * R)⌉₊ Real.exp (n * R'')⌉₊
          Used by