Documentation

GaudisCrypt.CounterExamples.IndistinguishableVsGlob

Observational indistinguishability does not determine the touched getter #

The converse of Footprint.indistinguishable_of_touched_getter_eq is false: two states can be indistinguishable through a footprint (no test of the footprint separates them by acceptance probability) while their touched_getter values differ.

The counterexample lives on Bool. Take the asymmetric lazy flip

qKer false = ½·δ_false + ½·δ_true, qKer true = ¼·δ_false + ¾·δ_true

and the footprint qCentralizer := (Footprint.from {qKer})ᶜ — everything commuting with qKer. Viewing kernels on Bool as substochastic 2×2 matrices, qKer is stochastic with distinct eigenvalues, so its commutant is the abelian algebra {α·I + β·qKer}:

This is the same self-commutant abelian pathology behind LeastLens and the HasReset side-conditions — indeed qCentralizer has no reset anywhere (qCentralizer_not_hasReset), i.e. it is not a genuine memory region. For lens footprints the two notions agree.

Biased coin: false ↦ ¼, true ↦ ¾.

Equations
Instances For

    The asymmetric lazy flip: fair from false, biased from true. A stochastic kernel with distinct "rows", whose commutant is abelian.

    Equations
    Instances For

      Point evaluations of qKer #

      Generic evaluation helpers #

      Theorem A: no test separates false from true #

      Any kernel commuting with qKer has state-independent total weight — evaluating the commutation equation at false gives m_f = ½·m_f + ½·m_t, hence m_f = m_t. So the two states of Bool are indistinguishable through qCentralizer.

      Theorem B: the touched getter separates false from true #

      A deterministic kernel commuting with qKer is the identity: evaluating qKer (f false) = map f (qKer false) at the point false rules out the swap (¼ ≠ ½) and both constants (½ ∉ {0, 1} resp. ¼ ∉ {0, ½}).

      The qCentralizerᶜ-orbits are trivial (its only deterministic member is id), so the touched getter separates false from true.

      The separation, and the tie-in with HasReset #

      The two notions genuinely differ: indistinguishability through a footprint does not imply equal touched_getter — the converse of Footprint.indistinguishable_of_touched_getter_eq is false.

      The pathological footprint is not a genuine memory region: it has no reset at any state (its only deterministic update is id, which cannot overwrite the — injective — touched content). The same abelian-bicommutant family that breaks HasReset breaks the tests-determine-glob converse.