← back to lean navigator

Hoare/Divergence.lean

ghView source on GitHub

Shows that NonExpanding (information measure does not increase) is equivalent to preserving every information-threshold contract — bridging the metric view to the program logic view.

nonExpanding_iff_threshold_triple

A kernel is non-expanding if and only if it preserves every threshold triple: for all n, {measure ≤ n} f {measure ≤ n}. A kernel that does not increase information preserves every upper bound on information — and conversely.

theorem nonExpanding_iff_threshold_triple [Monad M] [Support M]
    {f : Kernel M α β} {mα : InfoMeasure α} {mβ : InfoMeasure β} :
    NonExpanding f mα mβ ↔
      ∀ n : Nat, Triple
        (fun a => mα.measure a ≤ n)
        f
        (fun b => mβ.measure b ≤ n)

Forward direction: if the kernel is non-expanding, then for any input with measure ≤ n, every output has measure ≤ measure(input) ≤ n. Backward direction: pick n = measure(a), and the threshold triple gives measure(b) ≤ measure(a).

This connects to Sato-Katsumata (2023): divergences on a monad give a metric on morphism spaces. NonExpanding is the zero-divergence case. Stating it as a family of Hoare triples connects the metric view to the program logic view. The file notes this is an analogy in spirit, not a formal instance of their relational framework.

Connections

Neighbors