{
  "declaration_count": 718,
  "declarations": [
    {
      "doc": "Public project name used by documentation and the website.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 23,
      "module": "LeanInfoTheory.Basic",
      "name": "LeanInfoTheory.projectName",
      "path": "LeanInfoTheory/Basic.lean",
      "short_name": "projectName"
    },
    {
      "doc": "A small status vocabulary for roadmap items and generated documentation.",
      "kind": "inductive",
      "kind_label": "Inductive",
      "line": 26,
      "module": "LeanInfoTheory.Basic",
      "name": "LeanInfoTheory.Status",
      "path": "LeanInfoTheory/Basic.lean",
      "short_name": "Status"
    },
    {
      "doc": "A fair binary common cause.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 32,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.causeLaw",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "causeLaw"
    },
    {
      "doc": "A binary channel that copies its input correctly with probability `3 / 4`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 35,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.noisyCopy",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "noisyCopy"
    },
    {
      "doc": "Both channel rows are genuinely random and depend on the input.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 62,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.noisyCopy_masses",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "noisyCopy_masses"
    },
    {
      "doc": "Two noisy observations sampled independently from the same binary cause.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 68,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.law",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "law"
    },
    {
      "doc": "The observation-cause-observation law is a Markov triple.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 73,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.law_isMarkov",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "law_isMarkov"
    },
    {
      "doc": "The two observations are conditionally independent given their common cause.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 77,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.endpoints_condIndependent",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "endpoints_condIndependent"
    },
    {
      "doc": "Every positive-mass cause fiber has an independent endpoint law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 83,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.positiveFiber_isIndependent",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "positiveFiber_isIndependent"
    },
    {
      "doc": "The endpoint conditional mutual information given the cause vanishes.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 92,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.endpoint_condMutualInfo_eq_zero",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "endpoint_condMutualInfo_eq_zero"
    },
    {
      "doc": "The canonical total conditional channel reconstructs the common-cause law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 100,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.law_eq_canonical_channelExtension",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "law_eq_canonical_channelExtension"
    },
    {
      "doc": "Some channel from the cause reconstructs the common-cause law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 106,
      "module": "LeanInfoTheory.Examples.CommonCause",
      "name": "LeanInfoTheory.Examples.CommonCause.law_eq_some_channelExtension",
      "path": "LeanInfoTheory/Examples/CommonCause.lean",
      "short_name": "law_eq_some_channelExtension"
    },
    {
      "doc": "A diagonal Boolean joint law has zero conditional entropy under the identity decoder. This specializes the expanded PMF form of Fano's inequality.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 36,
      "module": "LeanInfoTheory.Examples.Fano",
      "name": "LeanInfoTheory.Examples.Fano.PerfectDecoder.condEntropy_diagonal_eq_zero",
      "path": "LeanInfoTheory/Examples/Fano.lean",
      "short_name": "condEntropy_diagonal_eq_zero"
    },
    {
      "doc": "Fano's q-ary form includes a singleton source alphabet without a public cardinality lower bound. Every decoder is necessarily correct on that source.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 64,
      "module": "LeanInfoTheory.Examples.Fano",
      "name": "LeanInfoTheory.Examples.Fano.SingletonSource.condEntropy_eq_zero",
      "path": "LeanInfoTheory/Examples/Fano.lean",
      "short_name": "condEntropy_eq_zero"
    },
    {
      "doc": "For a fair Boolean source, a constant-false observation decoded by the identity function has error probability `1/2`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 85,
      "module": "LeanInfoTheory.Examples.Fano",
      "name": "LeanInfoTheory.Examples.Fano.BinaryConstantObservation.decodingErrorProbabilityOf_eq_half",
      "path": "LeanInfoTheory/Examples/Fano.lean",
      "short_name": "decodingErrorProbabilityOf_eq_half"
    },
    {
      "doc": "The random-variable expanded Fano theorem bounds the conditional entropy in the constant-observation example by binary entropy at error probability `1/2`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 108,
      "module": "LeanInfoTheory.Examples.Fano",
      "name": "LeanInfoTheory.Examples.Fano.BinaryConstantObservation.condEntropyOf_le_binEntropy_half",
      "path": "LeanInfoTheory/Examples/Fano.lean",
      "short_name": "condEntropyOf_le_binEntropy_half"
    },
    {
      "doc": "The uniform-source mutual-information corollary specializes directly to the binary constant-observation example.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 122,
      "module": "LeanInfoTheory.Examples.Fano",
      "name": "LeanInfoTheory.Examples.Fano.BinaryConstantObservation.mutualInfoOf_fano_lower_bound",
      "path": "LeanInfoTheory/Examples/Fano.lean",
      "short_name": "mutualInfoOf_fano_lower_bound"
    },
    {
      "doc": "The normalized uniform-source converse gives a concrete lower bound on the same binary decoding-error probability.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 140,
      "module": "LeanInfoTheory.Examples.Fano",
      "name": "LeanInfoTheory.Examples.Fano.BinaryConstantObservation.decodingErrorProbabilityOf_fano_lower_bound",
      "path": "LeanInfoTheory/Examples/Fano.lean",
      "short_name": "decodingErrorProbabilityOf_fano_lower_bound"
    },
    {
      "doc": "Names for two source bits and their parity bit.",
      "kind": "inductive",
      "kind_label": "Inductive",
      "line": 38,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.BooleanModel.Var",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "Var"
    },
    {
      "doc": "A uniform two-bit source.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 45,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.BooleanModel.source",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "source"
    },
    {
      "doc": "The two source coordinates together with their parity.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 49,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.BooleanModel.coordinates",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "coordinates"
    },
    {
      "doc": "The full law of the Boolean family.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 55,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.BooleanModel.law",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "law"
    },
    {
      "doc": "The order used by the mutual-information chain-rule example.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 59,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.BooleanModel.order",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "order"
    },
    {
      "doc": "The family mutual-information chain rule on the Boolean model.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 63,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.BooleanModel.mutualInfo_chain_rule",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "mutualInfo_chain_rule"
    },
    {
      "doc": "Names for a Boolean coordinate and a ternary coordinate.",
      "kind": "inductive",
      "kind_label": "Inductive",
      "line": 311,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.HeterogeneousModel.Var",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "Var"
    },
    {
      "doc": "The coordinate alphabet, which depends on the variable name.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 317,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.HeterogeneousModel.Alphabet",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "Alphabet"
    },
    {
      "doc": "A uniform source carrying one Boolean and one ternary coordinate.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 331,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.HeterogeneousModel.source",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "source"
    },
    {
      "doc": "The dependent family of source coordinates.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 335,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.HeterogeneousModel.coordinates",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "coordinates"
    },
    {
      "doc": "The full law of the heterogeneous family.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 340,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.HeterogeneousModel.law",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "law"
    },
    {
      "doc": "The textbook order of the two heterogeneous coordinates.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 344,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.HeterogeneousModel.order",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "order"
    },
    {
      "doc": "The source-family entropy chain rule for dependent coordinate alphabets.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 348,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.HeterogeneousModel.entropy_chain_rule",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "entropy_chain_rule"
    },
    {
      "doc": "The empty heterogeneous subfamily has zero entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 357,
      "module": "LeanInfoTheory.Examples.FiniteFamily",
      "name": "LeanInfoTheory.Examples.FiniteFamily.HeterogeneousModel.empty_entropy",
      "path": "LeanInfoTheory/Examples/FiniteFamily.lean",
      "short_name": "empty_entropy"
    },
    {
      "doc": "The pure law at `false`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 37,
      "module": "LeanInfoTheory.Examples.KLTop",
      "name": "LeanInfoTheory.Examples.KLTop.leftLaw",
      "path": "LeanInfoTheory/Examples/KLTop.lean",
      "short_name": "leftLaw"
    },
    {
      "doc": "The pure law at `true`, whose support is disjoint from `leftLaw`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 40,
      "module": "LeanInfoTheory.Examples.KLTop",
      "name": "LeanInfoTheory.Examples.KLTop.rightLaw",
      "path": "LeanInfoTheory/Examples/KLTop.lean",
      "short_name": "rightLaw"
    },
    {
      "doc": "The two pure laws are unequal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 43,
      "module": "LeanInfoTheory.Examples.KLTop",
      "name": "LeanInfoTheory.Examples.KLTop.laws_ne",
      "path": "LeanInfoTheory/Examples/KLTop.lean",
      "short_name": "laws_ne"
    },
    {
      "doc": "`leftLaw` is not absolutely continuous with respect to `rightLaw`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 49,
      "module": "LeanInfoTheory.Examples.KLTop",
      "name": "LeanInfoTheory.Examples.KLTop.not_absolutelyContinuous",
      "path": "LeanInfoTheory/Examples/KLTop.lean",
      "short_name": "not_absolutelyContinuous"
    },
    {
      "doc": "Failed support inclusion makes the KL divergence infinite.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 56,
      "module": "LeanInfoTheory.Examples.KLTop",
      "name": "LeanInfoTheory.Examples.KLTop.klDiv_eq_top",
      "path": "LeanInfoTheory/Examples/KLTop.lean",
      "short_name": "klDiv_eq_top"
    },
    {
      "doc": "Taking `ENNReal.toReal` sends the infinite KL value to zero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 62,
      "module": "LeanInfoTheory.Examples.KLTop",
      "name": "LeanInfoTheory.Examples.KLTop.toReal_klDiv_eq_zero",
      "path": "LeanInfoTheory/Examples/KLTop.lean",
      "short_name": "toReal_klDiv_eq_zero"
    },
    {
      "doc": "Without absolute continuity, real-valued KL can be zero for two unequal laws; this is the branch excluded by `toReal_klDiv_pmf_eq_zero_iff`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 71,
      "module": "LeanInfoTheory.Examples.KLTop",
      "name": "LeanInfoTheory.Examples.KLTop.toReal_zero_trap",
      "path": "LeanInfoTheory/Examples/KLTop.lean",
      "short_name": "toReal_zero_trap"
    },
    {
      "doc": "A non-permutation channel that replaces every input by a fair bit.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 37,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.averagingChannel",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "averagingChannel"
    },
    {
      "doc": "Uniform invariance proves entropy growth for the averaging channel.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 55,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.entropy_le_after_averaging_via_invariant",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "entropy_le_after_averaging_via_invariant"
    },
    {
      "doc": "The direct column-sum criterion proves the same entropy comparison.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 61,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.entropy_le_after_averaging_via_columns",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "entropy_le_after_averaging_via_columns"
    },
    {
      "doc": "Averaging strictly raises the entropy of a pure binary input.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 67,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.entropy_strictly_increases_from_pure",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "entropy_strictly_increases_from_pure"
    },
    {
      "doc": "A full-support nonuniform reference law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 74,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.biasedLaw",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "biasedLaw"
    },
    {
      "doc": "A channel that resets every input to the nonuniform reference law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 88,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.biasedReset",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "biasedReset"
    },
    {
      "doc": "The invariant reference in this example is not the uniform law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 91,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.biasedLaw_ne_uniform",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "biasedLaw_ne_uniform"
    },
    {
      "doc": "The nonuniform reference law is invariant under the reset channel.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 100,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.biasedLaw_invariant",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "biasedLaw_invariant"
    },
    {
      "doc": "One reset step contracts KL divergence toward the nonuniform invariant law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 105,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.klDiv_contracts_toward_biased",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "klDiv_contracts_toward_biased"
    },
    {
      "doc": "The first of two source laws with disjoint support.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 112,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.leftLaw",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "leftLaw"
    },
    {
      "doc": "The second of two source laws with disjoint support.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 115,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.rightLaw",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "rightLaw"
    },
    {
      "doc": "The source support condition for real-valued cascade contraction fails.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 118,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.source_support_not_subset",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "source_support_not_subset"
    },
    {
      "doc": "The averaging stage merges the two source laws.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 123,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.intermediate_laws_eq",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "intermediate_laws_eq"
    },
    {
      "doc": "Support inclusion is restored after the averaging stage.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 128,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.intermediate_support_subset",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "intermediate_support_subset"
    },
    {
      "doc": "`ENNReal`-valued KL contracts along the two stochastic stages.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 134,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.klDiv_cascade_contracts",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "klDiv_cascade_contracts"
    },
    {
      "doc": "The one-stage theorem gives the weaker intermediate-support real cascade contract directly, without requiring another public cascade declaration.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 147,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.toReal_klDiv_cascade_contracts_from_intermediate",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "toReal_klDiv_cascade_contracts_from_intermediate"
    },
    {
      "doc": "Mutual information contracts along the same two stochastic stages.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 160,
      "module": "LeanInfoTheory.Examples.StochasticChannels",
      "name": "LeanInfoTheory.Examples.StochasticChannels.mutualInfo_cascade_contracts",
      "path": "LeanInfoTheory/Examples/StochasticChannels.lean",
      "short_name": "mutualInfo_cascade_contracts"
    },
    {
      "doc": "A fair nuisance bit.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 41,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.fairBit",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "fairBit"
    },
    {
      "doc": "A channel producing an independent fair nuisance bit.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 44,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.noiseChannel",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "noiseChannel"
    },
    {
      "doc": "Attach an independent fair nuisance bit to a binary signal law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 47,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.observationLaw",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "observationLaw"
    },
    {
      "doc": "Keep the signal coordinate and discard the nuisance coordinate.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 51,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.statistic",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "statistic"
    },
    {
      "doc": "Restore a discarded nuisance bit independently of the model parameter.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 54,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.recovery",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "recovery"
    },
    {
      "doc": "The midpoint model fixes the signal bit to the parameter.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 93,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.model",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "model"
    },
    {
      "doc": "The first-coordinate statistic is not globally injective.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 97,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.statistic_not_injective",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "statistic_not_injective"
    },
    {
      "doc": "For each parameter, two supported observations collide under the statistic.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 104,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.statistic_collides_on_support",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "statistic_collides_on_support"
    },
    {
      "doc": "Discarding the nuisance bit is sufficient for the whole model family.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 113,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.statistic_isSufficient",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "statistic_isSufficient"
    },
    {
      "doc": "A full-support prior used for the fixed-prior view.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 119,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.fairPrior",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "fairPrior"
    },
    {
      "doc": "The fair prior reaches both parameter values.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 122,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.fairPrior_support",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "fairPrior_support"
    },
    {
      "doc": "The generated parameter-observation law under the fair prior.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 127,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.experimentLaw",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "experimentLaw"
    },
    {
      "doc": "Family sufficiency gives fixed-prior sufficiency under the fair prior.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 131,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.statistic_isSufficient_fixedPrior",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "statistic_isSufficient_fixedPrior"
    },
    {
      "doc": "The fixed-prior statistic preserves parameter-observation mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 139,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.mutualInfo_preserved_fixedPrior",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "mutualInfo_preserved_fixedPrior"
    },
    {
      "doc": "Fixed-prior sufficiency supplies an exact complete-law recovery channel.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 149,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.exists_exactRecovery_fixedPrior",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "exists_exactRecovery_fixedPrior"
    },
    {
      "doc": "The same statistic is sufficient under every parameter prior.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 161,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.statistic_isSufficient_forall_prior",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "statistic_isSufficient_forall_prior"
    },
    {
      "doc": "The sufficient statistic satisfies the finite Fisher-Neyman factorization.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 170,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.exists_fisherNeymanFactorization",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "exists_fisherNeymanFactorization"
    },
    {
      "doc": "The statistic preserves KL divergence between every pair of model laws.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 180,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.klDiv_preserved",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "klDiv_preserved"
    },
    {
      "doc": "A full-support nonuniform signal law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 190,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.biasedSignal",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "biasedSignal"
    },
    {
      "doc": "Two overlapping signal laws for the guarded binary KL characterization.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 204,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.overlapSignalModel",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "overlapSignalModel"
    },
    {
      "doc": "Attach the same nuisance bit to each overlapping signal law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 209,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.overlapModel",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "overlapModel"
    },
    {
      "doc": "The overlapping model has the support inclusion required by the KL converse.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 213,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.overlap_support_subset",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "overlap_support_subset"
    },
    {
      "doc": "The first-coordinate statistic is sufficient for the overlapping model.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 227,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.overlap_statistic_isSufficient",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "overlap_statistic_isSufficient"
    },
    {
      "doc": "The channel-facing binary KL equality characterizes this sufficient model.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 234,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.overlap_channel_iff_klDiv_eq",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "overlap_channel_iff_klDiv_eq"
    },
    {
      "doc": "The statistic-facing binary KL equality gives the same characterization.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 245,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Ancillary.overlap_statistic_iff_klDiv_eq",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "overlap_statistic_iff_klDiv_eq"
    },
    {
      "doc": "Two point-mass model laws that must remain distinguishable.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 260,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Constant.model",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "model"
    },
    {
      "doc": "A statistic that discards the observation completely.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 263,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Constant.statistic",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "statistic"
    },
    {
      "doc": "The constant statistic is not sufficient for the separated model.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 266,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.Constant.statistic_not_sufficient",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "statistic_not_sufficient"
    },
    {
      "doc": "A fair law for the marginal-only recovery counterexample.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 285,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.MarginalOnly.law",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "law"
    },
    {
      "doc": "A recovery channel that forgets its input and resamples the fair law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 288,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.MarginalOnly.resetRecovery",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "resetRecovery"
    },
    {
      "doc": "The reset channel recovers the input marginal after the identity statistic.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 291,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.MarginalOnly.recovers_marginal",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "recovers_marginal"
    },
    {
      "doc": "Marginal recovery does not reconstruct the identity input-output coupling.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 297,
      "module": "LeanInfoTheory.Examples.SufficientStatistics",
      "name": "LeanInfoTheory.Examples.SufficientStatistics.MarginalOnly.does_not_recover_fullJoint",
      "path": "LeanInfoTheory/Examples/SufficientStatistics.lean",
      "short_name": "does_not_recover_fullJoint"
    },
    {
      "doc": "A three-point ambient alphabet with one point omitted from the example law.",
      "kind": "inductive",
      "kind_label": "Inductive",
      "line": 34,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.ThreePoint",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "ThreePoint"
    },
    {
      "doc": "",
      "kind": "instance",
      "kind_label": "Instance",
      "line": 40,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.ThreePoint.instFintype",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "ThreePoint.instFintype"
    },
    {
      "doc": "The two atoms carrying mass in `twoPointLaw`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 48,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.twoPointSupport",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "twoPointSupport"
    },
    {
      "doc": "The support used by `twoPointLaw` is nonempty.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 51,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.twoPointSupport_nonempty",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "twoPointSupport_nonempty"
    },
    {
      "doc": "The uniform law on two points of a three-point ambient alphabet.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 55,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.twoPointLaw",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "twoPointLaw"
    },
    {
      "doc": "The third ambient point is genuinely outside the support of `twoPointLaw`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 60,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.twoPointLaw_support",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "twoPointLaw_support"
    },
    {
      "doc": "For `twoPointLaw`, the support-cardinality entropy bound is strictly sharper than the alphabet-cardinality bound.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 68,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.supportBound_is_strictly_sharper",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "supportBound_is_strictly_sharper"
    },
    {
      "doc": "A map that separates the support but collides at an unsupported point.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 80,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.supportEncoding",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "supportEncoding"
    },
    {
      "doc": "A second map agreeing with `supportEncoding` only on `twoPointLaw.support`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 86,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.supportWitness",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "supportWitness"
    },
    {
      "doc": "`supportEncoding` is not globally injective.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 92,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.supportEncoding_not_injective",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "supportEncoding_not_injective"
    },
    {
      "doc": "`supportEncoding` is injective where `twoPointLaw` carries mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 100,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.supportEncoding_injOn_support",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "supportEncoding_injOn_support"
    },
    {
      "doc": "Support-restricted injectivity is enough to preserve entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 107,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.supportEncoding_preserves_entropy",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "supportEncoding_preserves_entropy"
    },
    {
      "doc": "The first variable is a function of the second on the source support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 115,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.functionalDependence_on_support",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "functionalDependence_on_support"
    },
    {
      "doc": "The same functional relation fails at the unsupported ambient point.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 126,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.functionalDependence_not_global",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "functionalDependence_not_global"
    },
    {
      "doc": "A pure joint law with one positive and one null conditioning fiber.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 131,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.fiberLaw",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "fiberLaw"
    },
    {
      "doc": "A null conditioning fiber contributes numeric zero by convention.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 134,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.nullFiber_zero",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "nullFiber_zero"
    },
    {
      "doc": "The other conditioning fiber has positive mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 144,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.positiveFiber_ne_zero",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "positiveFiber_ne_zero"
    },
    {
      "doc": "On the positive fiber, zero entropy is equivalent to a pure conditional PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 148,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.positiveFiber_zero_iff_pure",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "positiveFiber_zero_iff_pure"
    },
    {
      "doc": "The positive conditional fiber in `fiberLaw` is pure at `false`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 155,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.positiveFiber_is_pure",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "positiveFiber_is_pure"
    },
    {
      "doc": "The positive fiber therefore has zero entropy for the substantive pure-law reason.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 166,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.positiveFiber_zero",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "positiveFiber_zero"
    },
    {
      "doc": "A full-support binary source for the side-information recovery example.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 170,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.recoveryLaw",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "recoveryLaw"
    },
    {
      "doc": "The source variable whose second coordinate carries the random bit.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 173,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.recoveryX",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "recoveryX"
    },
    {
      "doc": "Side information revealing the random bit.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 176,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.recoverySideInfo",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "recoverySideInfo"
    },
    {
      "doc": "Processing that discards the random second coordinate.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 179,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.forgetSecond",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "forgetSecond"
    },
    {
      "doc": "A decoder that reconstructs `recoveryX` using the side information.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 182,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.recoverWithSideInfo",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "recoverWithSideInfo"
    },
    {
      "doc": "Without side information, `forgetSecond` does not preserve entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 186,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.forgetSecond_loses_entropy",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "forgetSecond_loses_entropy"
    },
    {
      "doc": "Side information restores the exact conditional-entropy equality contract.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 205,
      "module": "LeanInfoTheory.Examples.SupportSensitive",
      "name": "LeanInfoTheory.Examples.SupportSensitive.sideInfo_preserves_condEntropy",
      "path": "LeanInfoTheory/Examples/SupportSensitive.lean",
      "short_name": "sideInfo_preserves_condEntropy"
    },
    {
      "doc": "Each atom of a `PMF` has nonnegative real mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 34,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.toReal_nonneg",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "toReal_nonneg"
    },
    {
      "doc": "Each atom of a `PMF` has real mass at most one.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 38,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.toReal_le_one",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "toReal_le_one"
    },
    {
      "doc": "On a finite type, the real masses of a `PMF` sum to one.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 42,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.sum_toReal",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "sum_toReal"
    },
    {
      "doc": "On a finite selector type, the real mass of a bind is the corresponding finite weighted sum of real masses.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 64,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.bind_toReal_apply",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "bind_toReal_apply"
    },
    {
      "doc": "The finite set of atoms to which a finite PMF assigns nonzero mass. Its coercion to a set is `p.support`; this finset view is intended for finite sums and support-cardinality arguments.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 81,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.supportFinset",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "supportFinset"
    },
    {
      "doc": "Membership in `p.supportFinset` is membership in the set-valued PMF support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 86,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.mem_supportFinset",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "mem_supportFinset"
    },
    {
      "doc": "The finite support finset coerces to the set-valued PMF support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 92,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.coe_supportFinset",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "coe_supportFinset"
    },
    {
      "doc": "The finite support finset has the set-theoretic support cardinality.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 98,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.supportFinset_card",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "supportFinset_card"
    },
    {
      "doc": "The finite support finset of a PMF is nonempty.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 103,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.supportFinset_nonempty",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "supportFinset_nonempty"
    },
    {
      "doc": "A PMF is pure at `a` exactly when its support is the singleton `{a}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 109,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.eq_pure_iff_support_eq_singleton",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "eq_pure_iff_support_eq_singleton"
    },
    {
      "doc": "If `f` is injective, pushing a PMF forward along `f` preserves the mass of each source atom at its image.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 129,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.map_apply_of_injective",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "map_apply_of_injective"
    },
    {
      "doc": "If a target atom is outside the range of a map, then the pushed-forward PMF assigns zero mass to that atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 155,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.map_apply_eq_zero_of_notMem_range",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "map_apply_eq_zero_of_notMem_range"
    },
    {
      "doc": "Pushing a PMF forward along an equivalence preserves the mass of each atom at the renamed atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 181,
      "module": "LeanInfoTheory.Probability.Finite",
      "name": "PMF.map_apply_equiv",
      "path": "LeanInfoTheory/Probability/Finite.lean",
      "short_name": "map_apply_equiv"
    },
    {
      "doc": "The deterministic channel induced by a function.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 48,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.deterministicChannel",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "deterministicChannel"
    },
    {
      "doc": "Composition of two PMF-valued channels in sampling order: first sample through `W`, then sample through `V`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 56,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelComp",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelComp"
    },
    {
      "doc": "The joint law of an input distributed as `p` and an output sampled from `W`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 63,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelJoint",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelJoint"
    },
    {
      "doc": "Extend a joint law of `(A,B)` by sampling `C` from a channel depending only on `B`. The result uses Lean's right-associated triple type `(A, B, C)`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 71,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelExtension",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelExtension"
    },
    {
      "doc": "A deterministic channel returns the pure law at the function value.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 80,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.deterministicChannel_apply",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "deterministicChannel_apply"
    },
    {
      "doc": "Pointwise mass formula for channel composition.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 86,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelComp_apply",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelComp_apply"
    },
    {
      "doc": "The induced joint mass factors as input mass times channel mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 93,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelJoint_apply",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelJoint_apply"
    },
    {
      "doc": "The extended triple mass factors as pair mass times channel mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 109,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelExtension_apply",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelExtension_apply"
    },
    {
      "doc": "The first projection of an induced joint law is its input law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 129,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelJoint_map_fst",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelJoint_map_fst"
    },
    {
      "doc": "The second projection of an induced joint law is the channel output law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 150,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelJoint_map_snd",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelJoint_map_snd"
    },
    {
      "doc": "Projecting an extension to its original input pair recovers that pair law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 170,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelExtension_map_input",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelExtension_map_input"
    },
    {
      "doc": "Projecting an extension to the channel input-output pair gives the induced joint law of the original second marginal and the extending channel.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 201,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelExtension_map_outputPair",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelExtension_map_outputPair"
    },
    {
      "doc": "Projecting an extension to its new output gives the corresponding output law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 227,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelExtension_map_output",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelExtension_map_output"
    },
    {
      "doc": "For a two-stage channel, projecting the generated triple to its endpoints gives the joint law induced by the composite channel.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 254,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelExtension_map_endpoints",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelExtension_map_endpoints"
    },
    {
      "doc": "Sending an input law through a composite channel is iterated `PMF.bind`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 283,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.bind_channelComp",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "bind_channelComp"
    },
    {
      "doc": "The pure channel is a left identity for channel composition.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 291,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelComp_pure_left",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelComp_pure_left"
    },
    {
      "doc": "The pure channel is a right identity for channel composition.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 299,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelComp_pure_right",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelComp_pure_right"
    },
    {
      "doc": "Channel composition is associative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 306,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelComp_assoc",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelComp_assoc"
    },
    {
      "doc": "Sending a law through a deterministic channel is `PMF.map`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 317,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.bind_deterministicChannel",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "bind_deterministicChannel"
    },
    {
      "doc": "A deterministic first stage evaluates the following channel at its image.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 324,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelComp_deterministic_left",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelComp_deterministic_left"
    },
    {
      "doc": "A deterministic second stage maps each output law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 333,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelComp_deterministic_right",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelComp_deterministic_right"
    },
    {
      "doc": "The joint law of a deterministic channel is the graph pushforward.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 341,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelJoint_deterministicChannel",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelJoint_deterministicChannel"
    },
    {
      "doc": "Extending a pair law through a deterministic channel is its graph pushforward.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 349,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelExtension_deterministicChannel",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelExtension_deterministicChannel"
    },
    {
      "doc": "An output lies in a composite channel's support through a supported intermediate atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 362,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.mem_support_channelComp_iff",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "mem_support_channelComp_iff"
    },
    {
      "doc": "A pair is supported by the induced joint law exactly when both stages support it.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 371,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.mem_support_channelJoint_iff",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "mem_support_channelJoint_iff"
    },
    {
      "doc": "Two channels induce the same joint law from an input PMF exactly when they agree on every supported input atom. Their values away from the input support are irrelevant.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 382,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.channelJoint_eq_iff_eq_on_support",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "channelJoint_eq_iff_eq_on_support"
    },
    {
      "doc": "A triple is supported by an extension exactly when its pair and new output are supported.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 411,
      "module": "LeanInfoTheory.Probability.FiniteChannel",
      "name": "PMF.mem_support_channelExtension_iff",
      "path": "LeanInfoTheory/Probability/FiniteChannel.lean",
      "short_name": "mem_support_channelExtension_iff"
    },
    {
      "doc": "The binary mixture with weight `t` on `p` and weight `1 - t` on `q`. Equivalently, a Bernoulli selector chooses `p` on `true` and `q` on `false`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 35,
      "module": "LeanInfoTheory.Probability.FiniteMixture",
      "name": "PMF.binaryMixture",
      "path": "LeanInfoTheory/Probability/FiniteMixture.lean",
      "short_name": "binaryMixture"
    },
    {
      "doc": "Pointwise mass formula for a binary PMF mixture.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 43,
      "module": "LeanInfoTheory.Probability.FiniteMixture",
      "name": "PMF.binaryMixture_apply",
      "path": "LeanInfoTheory/Probability/FiniteMixture.lean",
      "short_name": "binaryMixture_apply"
    },
    {
      "doc": "A binary mixture of weight zero is its second component.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 52,
      "module": "LeanInfoTheory.Probability.FiniteMixture",
      "name": "PMF.binaryMixture_zero",
      "path": "LeanInfoTheory/Probability/FiniteMixture.lean",
      "short_name": "binaryMixture_zero"
    },
    {
      "doc": "A binary mixture of weight one is its first component.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 62,
      "module": "LeanInfoTheory.Probability.FiniteMixture",
      "name": "PMF.binaryMixture_one",
      "path": "LeanInfoTheory/Probability/FiniteMixture.lean",
      "short_name": "binaryMixture_one"
    },
    {
      "doc": "The entropy of a Boolean PMF is the binary entropy of its `true` mass. The identity includes the endpoint laws without separate positivity assumptions.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 36,
      "module": "LeanInfoTheory.Shannon.BinaryEntropy",
      "name": "LeanInfoTheory.Shannon.entropy_bool",
      "path": "LeanInfoTheory/Shannon/BinaryEntropy.lean",
      "short_name": "entropy_bool"
    },
    {
      "doc": "Shannon entropy, in nats, of a finite probability mass function.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 36,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy"
    },
    {
      "doc": "The defining finite-sum formula for Shannon entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 40,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_eq_sum",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy_eq_sum"
    },
    {
      "doc": "Shannon entropy is nonnegative for finite PMFs.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 45,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_nonneg",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy_nonneg"
    },
    {
      "doc": "Entropy is invariant under relabeling the alphabet by an equivalence. This is one of the basic sanity checks for finite entropy: only the masses matter, not the names of the atoms.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 61,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_map_equiv",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy_map_equiv"
    },
    {
      "doc": "Entropy is invariant under injective relabeling into a larger finite alphabet. Atoms outside the image of the relabeling have zero pushed-forward mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 76,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_map_injective",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy_map_injective"
    },
    {
      "doc": "A deterministic finite PMF has entropy zero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 109,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_pure",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy_pure"
    },
    {
      "doc": "A finite PMF has entropy zero exactly when it is a pure law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 137,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_eq_zero_iff",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy_eq_zero_iff"
    },
    {
      "doc": "Entropy of a finite-valued random variable under a discrete law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 169,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropyOf",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropyOf"
    },
    {
      "doc": "The entropy of a finite-valued random variable is zero exactly when the variable is constant on the support of the source PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 200,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropyOf_eq_zero_iff",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropyOf_eq_zero_iff"
    },
    {
      "doc": "Entropy of the identity random variable is the entropy of the original law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 210,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropyOf_id",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropyOf_id"
    },
    {
      "doc": "Relabeling a finite-valued random variable by an equivalence preserves its entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 215,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropyOf_comp_equiv",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropyOf_comp_equiv"
    },
    {
      "doc": "Applying an injective relabeling to a finite-valued random variable preserves its entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 223,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropyOf_comp_injective",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropyOf_comp_injective"
    },
    {
      "doc": "Joint entropy is entropy of a joint finite distribution.",
      "kind": "abbrev",
      "kind_label": "Definition",
      "line": 233,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.jointEntropy",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "jointEntropy"
    },
    {
      "doc": "Swapping the two coordinates of a joint law preserves entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 238,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_map_swap",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy_map_swap"
    },
    {
      "doc": "Reassociating a left-associated triple alphabet preserves entropy. This records that `H((A, B), C)` and `H(A, B, C)` are the same entropy after the canonical product reassociation equivalence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 249,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_map_prodAssoc",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy_map_prodAssoc"
    },
    {
      "doc": "Reassociating a right-associated triple alphabet back to the left preserves entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 256,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_map_prodAssoc_symm",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropy_map_prodAssoc_symm"
    },
    {
      "doc": "Swapping the two coordinates of a joint law preserves joint entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 264,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.jointEntropy_map_swap",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "jointEntropy_map_swap"
    },
    {
      "doc": "Joint entropy of two finite-valued random variables under a discrete law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 270,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "jointEntropyOf"
    },
    {
      "doc": "Joint entropy of two random variables is invariant under swapping their order.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 276,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_swap",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "jointEntropyOf_swap"
    },
    {
      "doc": "Entropy of three finite-valued random variables is invariant under reassociating the product alphabet.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 290,
      "module": "LeanInfoTheory.Shannon.Entropy",
      "name": "LeanInfoTheory.Shannon.entropyOf_prodAssoc",
      "path": "LeanInfoTheory/Shannon/Entropy.lean",
      "short_name": "entropyOf_prodAssoc"
    },
    {
      "doc": "Finite Shannon entropy is bounded above by the logarithm of the alphabet size. The proof is Jensen's inequality for the concave function `Real.negMulLog`, applied with uniform weights over the finite alphabet.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 39,
      "module": "LeanInfoTheory.Shannon.EntropyBounds",
      "name": "LeanInfoTheory.Shannon.entropy_le_log_card",
      "path": "LeanInfoTheory/Shannon/EntropyBounds.lean",
      "short_name": "entropy_le_log_card"
    },
    {
      "doc": "Finite Shannon entropy is bounded by the logarithm of the number of atoms with nonzero mass. Unlike `entropy_le_log_card`, this theorem counts only the PMF support and does not require a separate nonempty-alphabet instance.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 198,
      "module": "LeanInfoTheory.Shannon.EntropyBounds",
      "name": "LeanInfoTheory.Shannon.entropy_le_log_support_ncard",
      "path": "LeanInfoTheory/Shannon/EntropyBounds.lean",
      "short_name": "entropy_le_log_support_ncard"
    },
    {
      "doc": "The entropy of a finite-valued random variable is bounded by the logarithm of the support size of its pushforward law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 213,
      "module": "LeanInfoTheory.Shannon.EntropyBounds",
      "name": "LeanInfoTheory.Shannon.entropyOf_le_log_support_ncard",
      "path": "LeanInfoTheory/Shannon/EntropyBounds.lean",
      "short_name": "entropyOf_le_log_support_ncard"
    },
    {
      "doc": "The uniform distribution reaches the finite entropy upper bound. Mathematically, this is the equality case `H(U_alpha) = log |alpha|` for the uniform law on a nonempty finite alphabet.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 225,
      "module": "LeanInfoTheory.Shannon.EntropyBounds",
      "name": "LeanInfoTheory.Shannon.entropy_uniformOfFintype",
      "path": "LeanInfoTheory/Shannon/EntropyBounds.lean",
      "short_name": "entropy_uniformOfFintype"
    },
    {
      "doc": "Finite Shannon entropy reaches the alphabet-cardinality bound exactly at the uniform distribution.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 265,
      "module": "LeanInfoTheory.Shannon.EntropyBounds",
      "name": "LeanInfoTheory.Shannon.entropy_eq_log_card_iff_eq_uniformOfFintype",
      "path": "LeanInfoTheory/Shannon/EntropyBounds.lean",
      "short_name": "entropy_eq_log_card_iff_eq_uniformOfFintype"
    },
    {
      "doc": "Finite Shannon entropy reaches its support-cardinality bound exactly when the distribution is uniform on its support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 391,
      "module": "LeanInfoTheory.Shannon.EntropyBounds",
      "name": "LeanInfoTheory.Shannon.entropy_eq_log_support_ncard_iff_eq_uniformOnSupport",
      "path": "LeanInfoTheory/Shannon/EntropyBounds.lean",
      "short_name": "entropy_eq_log_support_ncard_iff_eq_uniformOnSupport"
    },
    {
      "doc": "A finite-valued random variable reaches the alphabet-cardinality entropy bound exactly when its law is uniform on the alphabet.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 437,
      "module": "LeanInfoTheory.Shannon.EntropyBounds",
      "name": "LeanInfoTheory.Shannon.entropyOf_eq_log_card_iff_map_eq_uniformOfFintype",
      "path": "LeanInfoTheory/Shannon/EntropyBounds.lean",
      "short_name": "entropyOf_eq_log_card_iff_map_eq_uniformOfFintype"
    },
    {
      "doc": "A finite-valued random variable reaches its law-support entropy bound exactly when that law is uniform on its support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 449,
      "module": "LeanInfoTheory.Shannon.EntropyBounds",
      "name": "LeanInfoTheory.Shannon.entropyOf_eq_log_support_ncard_iff_map_eq_uniformOnSupport",
      "path": "LeanInfoTheory/Shannon/EntropyBounds.lean",
      "short_name": "entropyOf_eq_log_support_ncard_iff_map_eq_uniformOnSupport"
    },
    {
      "doc": "Entropy is concave under a finite PMF-valued selector. This is the general finite-selector form of the textbook binary entropy concavity inequality.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 39,
      "module": "LeanInfoTheory.Shannon.EntropyConcavity",
      "name": "LeanInfoTheory.Shannon.sum_mul_entropy_le_entropy_bind",
      "path": "LeanInfoTheory/Shannon/EntropyConcavity.lean",
      "short_name": "sum_mul_entropy_le_entropy_bind"
    },
    {
      "doc": "Entropy is concave under a binary PMF mixture.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 70,
      "module": "LeanInfoTheory.Shannon.EntropyConcavity",
      "name": "LeanInfoTheory.Shannon.binaryMixture_entropy_concave",
      "path": "LeanInfoTheory/Shannon/EntropyConcavity.lean",
      "short_name": "binaryMixture_entropy_concave"
    },
    {
      "doc": "For an interior binary weight, equality in entropy concavity holds exactly when the two component PMFs are equal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 98,
      "module": "LeanInfoTheory.Shannon.EntropyConcavity",
      "name": "LeanInfoTheory.Shannon.binaryMixture_entropy_eq_iff",
      "path": "LeanInfoTheory/Shannon/EntropyConcavity.lean",
      "short_name": "binaryMixture_entropy_eq_iff"
    },
    {
      "doc": "The Boolean error indicator for a deterministic decoder. It is `true` exactly when decoding the observation `y` does not recover the source symbol `x`. Decidable equality is chosen internally.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 54,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorIndicator",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorIndicator"
    },
    {
      "doc": "The decoding-error indicator is `true` exactly on decoder failure.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 62,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorIndicator_eq_true_iff",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorIndicator_eq_true_iff"
    },
    {
      "doc": "The decoding-error indicator is `false` exactly on decoder success.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 71,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorIndicator_eq_false_iff",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorIndicator_eq_false_iff"
    },
    {
      "doc": "The probability that a deterministic decoder fails under a joint law. The PMF is a joint law of a source symbol and an observation, in that order.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 83,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbability",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbability"
    },
    {
      "doc": "The probability that a deterministic decoder fails for random variables. Here `X` is the source variable, `Y` is the observation, and `decoder` tries to recover `X` from `Y`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 94,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbabilityOf",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbabilityOf"
    },
    {
      "doc": "The decoding-error probability is the total mass of the joint atoms on which the decoder fails. This is the main finite-sum elimination theorem for decoding error.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 107,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbability_eq_sum",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbability_eq_sum"
    },
    {
      "doc": "A decoding-error probability is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 126,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbability_nonneg",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbability_nonneg"
    },
    {
      "doc": "A decoding-error probability is at most one.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 134,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbability_le_one",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbability_le_one"
    },
    {
      "doc": "The decoding-error probability of random variables is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 142,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbabilityOf_nonneg",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbabilityOf_nonneg"
    },
    {
      "doc": "The decoding-error probability of random variables is at most one.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 151,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbabilityOf_le_one",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbabilityOf_le_one"
    },
    {
      "doc": "The entropy, in nats, of the Boolean decoding-error indicator is the binary entropy of the decoding-error probability. The indicator is `true` exactly on decoder failure.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 165,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.entropy_decodingErrorIndicator",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "entropy_decodingErrorIndicator"
    },
    {
      "doc": "The entropy, in nats, of a random variable's Boolean decoding-error indicator is the binary entropy of its decoding-error probability. Here `X` is the source variable, `Y` is the observation, and `decoder` attempts to recover `X` from `Y`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 180,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.entropyOf_decodingErrorIndicator",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "entropyOf_decodingErrorIndicator"
    },
    {
      "doc": "Fano's inequality for a finite joint law and a deterministic decoder, in nats. Here the first coordinate is the source, the second coordinate is the observation, and `decoder` attempts to recover the source from the observation. The decoding-error indicator is `true` exactly when decoding fails. No lower bound on the source-alphabet cardinality is required; in particular, the singleton case is included.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 552,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.condEntropy_fano",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "condEntropy_fano"
    },
    {
      "doc": "Fano's inequality for a finite joint law, expressed with mathlib's `Real.qaryEntropy`, in nats. The error convention and decoder direction are the same as in `condEntropy_fano`. This form is valid without a lower bound on the source alphabet cardinality.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 609,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.condEntropy_fano_qary",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "condEntropy_fano_qary"
    },
    {
      "doc": "The random-variable form of `condEntropy_fano`, in nats. Here `X` is the finite source variable, `Y` is the finite observation, and `decoder` attempts to recover `X` from `Y`. The error indicator is `true` exactly when decoding fails. The source sample space itself need not be finite.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 636,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_fano",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "condEntropyOf_fano"
    },
    {
      "doc": "The random-variable form of `condEntropy_fano_qary`, in nats. The decoder direction and error convention are those of `condEntropyOf_fano`. Only the value alphabets of `X` and `Y` must be finite.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 655,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_fano_qary",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "condEntropyOf_fano_qary"
    },
    {
      "doc": "The conventional weaker form of Fano's inequality for a finite joint law: `H(X | Y) <= log 2 + Pe * log |alpha|`. All logarithms are natural, so `log 2` is the one-bit textbook constant expressed in nats. No lower bound on the source-alphabet cardinality is required.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 677,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.condEntropy_fano_weak",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "condEntropy_fano_weak"
    },
    {
      "doc": "The random-variable form of `condEntropy_fano_weak`, in nats. Only the finite value alphabets of `X` and `Y` are required; the source sample space may be arbitrary.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 723,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_fano_weak",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "condEntropyOf_fano_weak"
    },
    {
      "doc": "Fano's lower bound on the decoding-error probability for a finite joint law: `(H(X | Y) - log 2) / log |alpha| <= Pe`. The hypothesis `2 <= |alpha|` is needed here, unlike in the entropy forms of Fano's inequality, because it makes the logarithmic denominator strictly positive.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 745,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbability_fano_lower_bound",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbability_fano_lower_bound"
    },
    {
      "doc": "The random-variable form of `decodingErrorProbability_fano_lower_bound`. Only the finite value alphabets of `X` and `Y` are required. The source sample space may be arbitrary.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 769,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbabilityOf_fano_lower_bound",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbabilityOf_fano_lower_bound"
    },
    {
      "doc": "Fano's mutual-information lower bound for a uniform finite source, in nats: `log |alpha| - log 2 - Pe * log |alpha| <= I(X;Y)`. The first marginal of the supplied joint law is the source law. No cardinality lower bound is needed because this theorem does not divide by `log |alpha|`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 806,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.mutualInfo_fano_lower_bound_of_uniform_source",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "mutualInfo_fano_lower_bound_of_uniform_source"
    },
    {
      "doc": "The random-variable form of `mutualInfo_fano_lower_bound_of_uniform_source`. Uniformity is stated through the existing pushforward-law equality `p.map X = PMF.uniformOfFintype alpha`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 827,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_fano_lower_bound_of_uniform_source",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "mutualInfoOf_fano_lower_bound_of_uniform_source"
    },
    {
      "doc": "The standard uniform-source Fano lower bound on decoding error, in nats: `1 - (I(X;Y) + log 2) / log |alpha| <= Pe`. The hypothesis `2 <= |alpha|` makes the logarithmic denominator strictly positive. Uniformity is expressed by equality of the first marginal with the existing finite uniform PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 856,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbability_fano_lower_bound_of_uniform_source",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbability_fano_lower_bound_of_uniform_source"
    },
    {
      "doc": "The random-variable form of `decodingErrorProbability_fano_lower_bound_of_uniform_source`. The sample space may be arbitrary; only the source and observation value alphabets are finite.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 893,
      "module": "LeanInfoTheory.Shannon.Fano",
      "name": "LeanInfoTheory.Shannon.decodingErrorProbabilityOf_fano_lower_bound_of_uniform_source",
      "path": "LeanInfoTheory/Shannon/Fano.lean",
      "short_name": "decodingErrorProbabilityOf_fano_lower_bound_of_uniform_source"
    },
    {
      "doc": "The outcome type of the variables selected by the finite atom `s`. No finiteness assumption is needed to form this type. Pointwise finiteness of the selected alphabets is required only when taking entropy.",
      "kind": "abbrev",
      "kind_label": "Definition",
      "line": 42,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.FamilyOutcome",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "FamilyOutcome"
    },
    {
      "doc": "The joint law of an indexed family of random variables under a source PMF. The source type, variable-name type, and full dependent outcome type may all be infinite.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 51,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyLawOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyLawOf"
    },
    {
      "doc": "The joint marginal law of the variables selected by the finite atom `s`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 57,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMarginal",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMarginal"
    },
    {
      "doc": "Shannon entropy, in nats, of the variables selected by the finite atom `s`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 65,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy"
    },
    {
      "doc": "Shannon entropy, in nats, of a finite subfamily of random variables under a source PMF.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 74,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf"
    },
    {
      "doc": "Conditional entropy `H(A | B)` of two finite subfamilies. The atoms may overlap.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 87,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropy",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondEntropy"
    },
    {
      "doc": "Mutual information `I(A; B)` of two finite subfamilies. The atoms may overlap.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 97,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo"
    },
    {
      "doc": "Conditional mutual information `I(A; B | C)` of three finite subfamilies. The three-way union is normalized as `(A \u222a B) \u222a C`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 107,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo"
    },
    {
      "doc": "Conditional entropy of two finite subfamilies under a source PMF.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 114,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropyOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondEntropyOf"
    },
    {
      "doc": "Mutual information of two finite subfamilies under a source PMF.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 122,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf"
    },
    {
      "doc": "Conditional mutual information of three finite subfamilies under a source PMF.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 130,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfoOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfoOf"
    },
    {
      "doc": "Restricting a finite family marginal to a smaller atom gives the marginal on that smaller atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 143,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMarginal_restrict",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMarginal_restrict"
    },
    {
      "doc": "The finite marginal of a source-indexed family is the joint law of its selected coordinates.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 154,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMarginal_familyLawOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMarginal_familyLawOf"
    },
    {
      "doc": "Family entropy is ordinary random-variable entropy of finite restriction.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 167,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_eq_entropyOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_eq_entropyOf"
    },
    {
      "doc": "Source-family entropy is ordinary entropy of the selected coordinates under the source law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 178,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_eq_entropyOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_eq_entropyOf"
    },
    {
      "doc": "Family entropy on `s` depends only on the source variables selected by `s`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 190,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_congr",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_congr"
    },
    {
      "doc": "The entropy of the empty family is zero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 205,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_empty",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_empty"
    },
    {
      "doc": "The entropy of the empty source-indexed family is zero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 223,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_empty",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_empty"
    },
    {
      "doc": "The entropy of a singleton family is the entropy of that coordinate.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 249,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_singleton",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_singleton"
    },
    {
      "doc": "The entropy of a singleton source-indexed family is the entropy of that source variable.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 264,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_singleton",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_singleton"
    },
    {
      "doc": "Entropy of every finite subfamily is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 273,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_nonneg",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_nonneg"
    },
    {
      "doc": "Entropy of every finite source-indexed subfamily is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 281,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_nonneg",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_nonneg"
    },
    {
      "doc": "Entropy on a union is the joint entropy of the two restricted subfamilies. The atoms may overlap; no disjointness or support assumption is required.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 353,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_union",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_union"
    },
    {
      "doc": "Source-family entropy on a union is the joint entropy of the two selected subfamilies.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 379,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_union",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_union"
    },
    {
      "doc": "Entropy on a three-way union is entropy of the right-associated triple of restricted subfamilies. All three atoms may overlap.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 412,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_tripleUnion",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_tripleUnion"
    },
    {
      "doc": "Source-family entropy on a three-way union is entropy of the right-associated triple of selected subfamilies.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 442,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_tripleUnion",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_tripleUnion"
    },
    {
      "doc": "Family conditional entropy is ordinary conditional entropy of the two restriction-valued random variables.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 480,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropy_eq_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondEntropy_eq_condEntropyOf"
    },
    {
      "doc": "Source-family conditional entropy is ordinary conditional entropy of the two selected subfamilies.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 493,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropyOf_eq_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondEntropyOf_eq_condEntropyOf"
    },
    {
      "doc": "Family mutual information is ordinary mutual information of the two restriction-valued random variables.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 522,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_eq_mutualInfoOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo_eq_mutualInfoOf"
    },
    {
      "doc": "Source-family mutual information is ordinary mutual information of the two selected subfamilies.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 536,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_eq_mutualInfoOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_eq_mutualInfoOf"
    },
    {
      "doc": "Family conditional mutual information is ordinary conditional mutual information of the three restriction-valued random variables.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 565,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo_eq_condMutualInfoOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo_eq_condMutualInfoOf"
    },
    {
      "doc": "Source-family conditional mutual information is ordinary conditional mutual information of the three selected subfamilies.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 580,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfoOf_eq_condMutualInfoOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfoOf_eq_condMutualInfoOf"
    },
    {
      "doc": "Singleton atoms recover conditional entropy of ordinary coordinates.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 677,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropy_singletons",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondEntropy_singletons"
    },
    {
      "doc": "Singleton source-family atoms recover conditional entropy of the corresponding ordinary random variables.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 706,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropyOf_singletons",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondEntropyOf_singletons"
    },
    {
      "doc": "Singleton atoms recover mutual information of ordinary coordinates.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 717,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_singletons",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo_singletons"
    },
    {
      "doc": "Singleton source-family atoms recover mutual information of the corresponding ordinary random variables.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 751,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_singletons",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_singletons"
    },
    {
      "doc": "Singleton atoms recover conditional mutual information of ordinary coordinates.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 765,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo_singletons",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo_singletons"
    },
    {
      "doc": "Singleton source-family atoms recover conditional mutual information of the corresponding ordinary random variables.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 808,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfoOf_singletons",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfoOf_singletons"
    },
    {
      "doc": "Family mutual information is symmetric: `I(B;A) = I(A;B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 821,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_swap",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo_swap"
    },
    {
      "doc": "Source-family mutual information is symmetric.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 831,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_swap",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_swap"
    },
    {
      "doc": "Family conditional mutual information is symmetric in its first two atoms: `I(B;A|C) = I(A;B|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 844,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo_swap",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo_swap"
    },
    {
      "doc": "Source-family conditional mutual information is symmetric in its first two atoms.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 854,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfoOf_swap",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfoOf_swap"
    },
    {
      "doc": "Conditioning on the empty atom leaves family entropy unchanged.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 866,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropy_empty_right",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondEntropy_empty_right"
    },
    {
      "doc": "The empty atom has zero conditional entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 875,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropy_empty_left",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondEntropy_empty_left"
    },
    {
      "doc": "Mutual information with the empty right atom is zero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 884,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_empty_right",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo_empty_right"
    },
    {
      "doc": "Conditional mutual information with the empty second atom is zero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 893,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo_empty_right",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo_empty_right"
    },
    {
      "doc": "Empty conditioning reduces conditional mutual information to mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 904,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo_empty_conditioning",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo_empty_conditioning"
    },
    {
      "doc": "The mutual information of an atom with itself is its entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 916,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_self",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo_self"
    },
    {
      "doc": "Family mutual information as `I(A;B) = H(A) - H(A|B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 926,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_eq_entropy_sub_condEntropy",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo_eq_entropy_sub_condEntropy"
    },
    {
      "doc": "Source-family mutual information as `I(A;B) = H(A) - H(A|B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 936,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_eq_entropyOf_sub_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_eq_entropyOf_sub_condEntropyOf"
    },
    {
      "doc": "Family conditional mutual information as `I(A;B|C) = H(A|C) - H(A|B \u222a C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 951,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo_eq_condEntropy_sub_condEntropy",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo_eq_condEntropy_sub_condEntropy"
    },
    {
      "doc": "Source-family conditional mutual information as `I(A;B|C) = H(A|C) - H(A|B \u222a C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 965,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfoOf_eq_condEntropyOf_sub_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfoOf_eq_condEntropyOf_sub_condEntropyOf"
    },
    {
      "doc": "Right-oriented entropy chain rule: `H(A \u222a B) = H(B) + H(A | B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 980,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_union_chain_rule_right",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_union_chain_rule_right"
    },
    {
      "doc": "Left-oriented entropy chain rule: `H(A \u222a B) = H(A) + H(B | A)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 990,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_union_chain_rule_left",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_union_chain_rule_left"
    },
    {
      "doc": "Right-oriented source-family entropy chain rule.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1001,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_union_chain_rule_right",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_union_chain_rule_right"
    },
    {
      "doc": "Left-oriented source-family entropy chain rule.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1012,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_union_chain_rule_left",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_union_chain_rule_left"
    },
    {
      "doc": "Mutual-information union chain rule: `I(A \u222a B; C) = I(A; C) + I(B; C | A)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1026,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_union_chain_rule",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo_union_chain_rule"
    },
    {
      "doc": "Source-family mutual-information union chain rule.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1041,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_union_chain_rule",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_union_chain_rule"
    },
    {
      "doc": "Conditional-mutual-information union chain rule: `I(A \u222a B; C | D) = I(A; C | D) + I(B; C | A \u222a D)`. The four atoms may overlap; no disjointness hypothesis is required.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1058,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo_union_chain_rule",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo_union_chain_rule"
    },
    {
      "doc": "Source-family conditional-mutual-information union chain rule.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1071,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfoOf_union_chain_rule",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfoOf_union_chain_rule"
    },
    {
      "doc": "The ordered conditional-entropy sum `\u2211 k, H({l[k]} | {l[0], ..., l[k-1]})`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 1095,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyChain",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyChain"
    },
    {
      "doc": "The ordered conditional-mutual-information sum `\u2211 k, I({l[k]}; B | {l[0], ..., l[k-1]})`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 1106,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoChain",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfoChain"
    },
    {
      "doc": "Entropy chain rule for an arbitrary ordered list of variable names. Repeated names are allowed: once a name has appeared, its later conditional entropy contribution is zero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1183,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_eq_entropyChain",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_eq_entropyChain"
    },
    {
      "doc": "Source-family entropy chain rule for an arbitrary ordered list.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1198,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_eq_entropyChain",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_eq_entropyChain"
    },
    {
      "doc": "Textbook entropy chain rule for a list of distinct variable names. The `Nodup` assumption records the textbook indexing convention; the primary chain rule above is stronger and also handles repeated names.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1213,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_chain_rule_of_nodup",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropy_chain_rule_of_nodup"
    },
    {
      "doc": "Source-family textbook entropy chain rule for distinct variable names.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1224,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_chain_rule_of_nodup",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyEntropyOf_chain_rule_of_nodup"
    },
    {
      "doc": "Mutual-information chain rule for an arbitrary ordered list of variable names. Repeated names are allowed, and the atom `b` may overlap the list.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1297,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_eq_mutualInfoChain",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo_eq_mutualInfoChain"
    },
    {
      "doc": "Source-family mutual-information chain rule for an arbitrary ordered list.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1320,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_eq_mutualInfoChain",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_eq_mutualInfoChain"
    },
    {
      "doc": "Textbook mutual-information chain rule for distinct variable names. The primary chain rule above is stronger and also handles repeated names.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1335,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_chain_rule_of_nodup",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfo_chain_rule_of_nodup"
    },
    {
      "doc": "Source-family textbook mutual-information chain rule for distinct variable names.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1351,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_chain_rule_of_nodup",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_chain_rule_of_nodup"
    },
    {
      "doc": "Conditional-mutual-information chain rule for an arbitrary ordered list of variable names: `I(l; B | C) = \u2211 k, I({l[k]}; B | C \u222a {l[0], ..., l[k-1]})`. Repeated names are allowed, including names already present in the conditioning atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1373,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo_chain_rule",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo_chain_rule"
    },
    {
      "doc": "Source-family ordered conditional-mutual-information chain rule. As in the law-facing theorem, repeated names and names already in the conditioning atom are allowed.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1420,
      "module": "LeanInfoTheory.Shannon.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfoOf_chain_rule",
      "path": "LeanInfoTheory/Shannon/FiniteFamily.lean",
      "short_name": "familyCondMutualInfoOf_chain_rule"
    },
    {
      "doc": "The first marginal of a finite joint PMF.",
      "kind": "abbrev",
      "kind_label": "Definition",
      "line": 35,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstMarginal"
    },
    {
      "doc": "The second marginal of a finite joint PMF.",
      "kind": "abbrev",
      "kind_label": "Definition",
      "line": 39,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndMarginal"
    },
    {
      "doc": "Taking the first marginal after pushing a PMF forward to a pair is the same as pushing forward by the first coordinate of that pair-valued map.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 47,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstMarginal_map",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstMarginal_map"
    },
    {
      "doc": "Taking the second marginal after pushing a PMF forward to a pair is the same as pushing forward by the second coordinate of that pair-valued map.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 58,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndMarginal_map",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndMarginal_map"
    },
    {
      "doc": "For a joint law built from random variables `(X, Y)`, the first marginal is the law of `X`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 66,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstMarginal_map_pair",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstMarginal_map_pair"
    },
    {
      "doc": "For a joint law built from random variables `(X, Y)`, the second marginal is the law of `Y`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 73,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndMarginal_map_pair",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndMarginal_map_pair"
    },
    {
      "doc": "Swapping the two coordinates turns the first marginal into the original second marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 80,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstMarginal_map_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstMarginal_map_swap"
    },
    {
      "doc": "Swapping the two coordinates turns the second marginal into the original first marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 87,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndMarginal_map_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndMarginal_map_swap"
    },
    {
      "doc": "The mass of the first marginal is the sum of the joint masses over the second coordinate.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 93,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstMarginal_apply",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstMarginal_apply"
    },
    {
      "doc": "The mass of the second marginal is the sum of the joint masses over the first coordinate.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 120,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndMarginal_apply",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndMarginal_apply"
    },
    {
      "doc": "The marginal on the first and second coordinates of a finite triple PMF.",
      "kind": "abbrev",
      "kind_label": "Definition",
      "line": 147,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstSndMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstSndMarginal"
    },
    {
      "doc": "Projection formula for the first-second marginal of a pushed-forward triple law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 156,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstSndMarginal_map",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstSndMarginal_map"
    },
    {
      "doc": "For a joint law built from `(X, Y, Z)`, the first-second marginal is the joint law of `(X, Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 169,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstSndMarginal_map_triple",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstSndMarginal_map_triple"
    },
    {
      "doc": "The marginal on the first and third coordinates of a finite triple PMF.",
      "kind": "abbrev",
      "kind_label": "Definition",
      "line": 177,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstThirdMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstThirdMarginal"
    },
    {
      "doc": "The marginal on the second and third coordinates of a finite triple PMF.",
      "kind": "abbrev",
      "kind_label": "Definition",
      "line": 182,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndThirdMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndThirdMarginal"
    },
    {
      "doc": "The marginal on the third coordinate of a finite triple PMF.",
      "kind": "abbrev",
      "kind_label": "Definition",
      "line": 187,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.thirdMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "thirdMarginal"
    },
    {
      "doc": "Projection formula for the first-third marginal of a pushed-forward triple law. This is the triple analogue of `fstMarginal_map`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 196,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstThirdMarginal_map",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstThirdMarginal_map"
    },
    {
      "doc": "Projection formula for the second-third marginal of a pushed-forward triple law. The product `alpha \u00d7 beta \u00d7 gamma` is right-associated in Lean.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 209,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndThirdMarginal_map",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndThirdMarginal_map"
    },
    {
      "doc": "Projection formula for the third-coordinate marginal of a pushed-forward triple law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 218,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.thirdMarginal_map",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "thirdMarginal_map"
    },
    {
      "doc": "For a joint law built from `(X, Y, Z)`, the first-third marginal is the joint law of `(X, Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 230,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstThirdMarginal_map_triple",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstThirdMarginal_map_triple"
    },
    {
      "doc": "For a joint law built from `(X, Y, Z)`, the second-third marginal is the joint law of `(Y, Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 242,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndThirdMarginal_map_triple",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndThirdMarginal_map_triple"
    },
    {
      "doc": "For a joint law built from `(X, Y, Z)`, the third marginal is the law of `Z`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 251,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.thirdMarginal_map_triple",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "thirdMarginal_map_triple"
    },
    {
      "doc": "After swapping the first two coordinates of `(A, B, C)`, the first-third marginal is the original second-third marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 262,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstThirdMarginal_map_swap12",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstThirdMarginal_map_swap12"
    },
    {
      "doc": "After swapping the first two coordinates of `(A, B, C)`, the second-third marginal is the original first-third marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 273,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndThirdMarginal_map_swap12",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndThirdMarginal_map_swap12"
    },
    {
      "doc": "Swapping the first two coordinates leaves the third marginal unchanged.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 281,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.thirdMarginal_map_swap12",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "thirdMarginal_map_swap12"
    },
    {
      "doc": "The mass of the first-third marginal is the sum of the triple joint masses over the second coordinate.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 291,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstThirdMarginal_apply",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstThirdMarginal_apply"
    },
    {
      "doc": "The mass of the second-third marginal is the sum of the triple joint masses over the first coordinate.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 329,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndThirdMarginal_apply",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndThirdMarginal_apply"
    },
    {
      "doc": "The mass of the third marginal is the sum of the triple joint masses over the first two coordinates.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 367,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.thirdMarginal_apply",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "thirdMarginal_apply"
    },
    {
      "doc": "A joint atom mass is bounded by the mass of its first marginal atom. This is the basic support/domination fact behind conditioning on the first coordinate.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 418,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_le_fstMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_le_fstMarginal"
    },
    {
      "doc": "A joint atom mass is bounded by the mass of its second marginal atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 429,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_le_sndMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_le_sndMarginal"
    },
    {
      "doc": "In a triple law, a full atom is bounded by the corresponding `(first, third)` marginal atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 441,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_le_fstThirdMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_le_fstThirdMarginal"
    },
    {
      "doc": "In a triple law, a full atom is bounded by the corresponding `(second, third)` marginal atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 454,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_le_sndThirdMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_le_sndThirdMarginal"
    },
    {
      "doc": "In a triple law, a full atom is bounded by the mass of its third-coordinate marginal atom. This is the support fact needed for conditioning on `gamma`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 467,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_le_thirdMarginal",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_le_thirdMarginal"
    },
    {
      "doc": "If a first marginal atom has zero mass, then every joint atom over that first coordinate has zero mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 488,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_eq_zero_of_fstMarginal_eq_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_eq_zero_of_fstMarginal_eq_zero"
    },
    {
      "doc": "If a second marginal atom has zero mass, then every joint atom over that second coordinate has zero mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 498,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_eq_zero_of_sndMarginal_eq_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_eq_zero_of_sndMarginal_eq_zero"
    },
    {
      "doc": "Nonzero joint mass forces the corresponding first marginal mass to be nonzero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 507,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstMarginal_ne_zero_of_apply_ne_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstMarginal_ne_zero_of_apply_ne_zero"
    },
    {
      "doc": "Nonzero joint mass forces the corresponding second marginal mass to be nonzero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 517,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndMarginal_ne_zero_of_apply_ne_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndMarginal_ne_zero_of_apply_ne_zero"
    },
    {
      "doc": "If a `(first, third)` marginal atom has zero mass, then every triple atom over that pair has zero mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 528,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_eq_zero_of_fstThirdMarginal_eq_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_eq_zero_of_fstThirdMarginal_eq_zero"
    },
    {
      "doc": "If a `(second, third)` marginal atom has zero mass, then every triple atom over that pair has zero mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 539,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_eq_zero_of_sndThirdMarginal_eq_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_eq_zero_of_sndThirdMarginal_eq_zero"
    },
    {
      "doc": "If a third marginal atom has zero mass, then every triple atom over that third coordinate has zero mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 550,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.apply_eq_zero_of_thirdMarginal_eq_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "apply_eq_zero_of_thirdMarginal_eq_zero"
    },
    {
      "doc": "Nonzero triple mass forces the corresponding `(first, third)` marginal mass to be nonzero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 561,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.fstThirdMarginal_ne_zero_of_apply_ne_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "fstThirdMarginal_ne_zero_of_apply_ne_zero"
    },
    {
      "doc": "Nonzero triple mass forces the corresponding `(second, third)` marginal mass to be nonzero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 573,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.sndThirdMarginal_ne_zero_of_apply_ne_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "sndThirdMarginal_ne_zero_of_apply_ne_zero"
    },
    {
      "doc": "Nonzero triple mass forces the corresponding third-coordinate marginal mass to be nonzero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 585,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.thirdMarginal_ne_zero_of_apply_ne_zero",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "thirdMarginal_ne_zero_of_apply_ne_zero"
    },
    {
      "doc": "Conditional entropy `H(alpha | beta)` of a finite joint PMF on `alpha \u00d7 beta`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 596,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condEntropy",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condEntropy"
    },
    {
      "doc": "Mutual information `I(alpha; beta)` of a finite joint PMF on `alpha \u00d7 beta`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 601,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfo",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfo"
    },
    {
      "doc": "Conditional mutual information `I(alpha; beta | gamma)` of a finite joint PMF on `alpha \u00d7 beta \u00d7 gamma`, where the product is Lean's right-associated product.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 609,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfo",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfo"
    },
    {
      "doc": "Conditional entropy `H(X | Y)` for finite-valued random variables.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 616,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condEntropyOf",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condEntropyOf"
    },
    {
      "doc": "Mutual information `I(X; Y)` for finite-valued random variables.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 622,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfoOf"
    },
    {
      "doc": "Conditional mutual information `I(X; Y | Z)` for finite-valued random variables.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 628,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfoOf"
    },
    {
      "doc": "Mutual information is symmetric under swapping the two coordinates of a joint law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 637,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfo_map_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfo_map_swap"
    },
    {
      "doc": "Mutual information of finite-valued random variables is symmetric: `I(Y;X) = I(X;Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 645,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfoOf_swap"
    },
    {
      "doc": "Conditional mutual information is symmetric in its first two coordinates: `I(B;A | C) = I(A;B | C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 659,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_map_swap12",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfo_map_swap12"
    },
    {
      "doc": "Conditional mutual information of finite-valued random variables is symmetric in the first two variables: `I(Y;X | Z) = I(X;Y | Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 685,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfoOf_swap"
    },
    {
      "doc": "Entropy of the first coordinate projection is entropy of the first marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 698,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.entropyOf_fst",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "entropyOf_fst"
    },
    {
      "doc": "Entropy of the second coordinate projection is entropy of the second marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 705,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.entropyOf_snd",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "entropyOf_snd"
    },
    {
      "doc": "The joint entropy of the two coordinate projections of an existing pair law is the entropy of that pair law itself.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 715,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_fst_snd",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "jointEntropyOf_fst_snd"
    },
    {
      "doc": "Conditional entropy of the coordinate projections of a pair law recovers the PMF-level conditional entropy of that pair law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 730,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_fst_snd",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condEntropyOf_fst_snd"
    },
    {
      "doc": "Mutual information of the coordinate projections of a pair law recovers the PMF-level mutual information of that pair law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 745,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_fst_snd",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfoOf_fst_snd"
    },
    {
      "doc": "Entropy of the third coordinate projection is entropy of the third marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 757,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.entropyOf_third",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "entropyOf_third"
    },
    {
      "doc": "Joint entropy of the first and third coordinate projections is the entropy of the first-third marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 768,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_fst_third",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "jointEntropyOf_fst_third"
    },
    {
      "doc": "Joint entropy of the second and third coordinate projections is the entropy of the second-third marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 780,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_snd_third",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "jointEntropyOf_snd_third"
    },
    {
      "doc": "Conditional mutual information of the coordinate projections of a triple law recovers the PMF-level `I(first; second | third)` quantity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 792,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_fst_snd_third",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfoOf_fst_snd_third"
    },
    {
      "doc": "Unfolding lemma for the entropy-identity definition of conditional entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 809,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condEntropy_eq",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condEntropy_eq"
    },
    {
      "doc": "Unfolding lemma for the entropy-identity definition of mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 815,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfo_eq",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfo_eq"
    },
    {
      "doc": "Unfolding lemma for the entropy-identity definition of conditional mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 824,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_eq",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfo_eq"
    },
    {
      "doc": "Conditional entropy chain rule for a joint PMF: `H(A,B) = H(B) + H(A | B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 838,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.entropy_eq_entropy_sndMarginal_add_condEntropy",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "entropy_eq_entropy_sndMarginal_add_condEntropy"
    },
    {
      "doc": "Swapped conditional entropy chain rule for a joint PMF: `H(A,B) = H(A) + H(B | A)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 849,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.entropy_eq_entropy_fstMarginal_add_condEntropy_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "entropy_eq_entropy_fstMarginal_add_condEntropy_swap"
    },
    {
      "doc": "Conditional entropy chain rule for finite-valued random variables: `H(X,Y) = H(Y) + H(X | Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 864,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_eq_entropyOf_add_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "jointEntropyOf_eq_entropyOf_add_condEntropyOf"
    },
    {
      "doc": "Swapped conditional entropy chain rule for finite-valued random variables: `H(X,Y) = H(X) + H(Y | X)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 877,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_eq_entropyOf_add_condEntropyOf_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "jointEntropyOf_eq_entropyOf_add_condEntropyOf_swap"
    },
    {
      "doc": "Right-oriented PMF entropy chain rule: `H(A,B) = H(B) + H(A|B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 888,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.entropy_chain_rule_right",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "entropy_chain_rule_right"
    },
    {
      "doc": "Left-oriented PMF entropy chain rule: `H(A,B) = H(A) + H(B|A)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 895,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.entropy_chain_rule_left",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "entropy_chain_rule_left"
    },
    {
      "doc": "Right-oriented random-variable entropy chain rule.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 902,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_chain_rule_right",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "jointEntropyOf_chain_rule_right"
    },
    {
      "doc": "Left-oriented random-variable entropy chain rule.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 910,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_chain_rule_left",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "jointEntropyOf_chain_rule_left"
    },
    {
      "doc": "Random-variable conditional entropy rewrites to joint entropy minus entropy of the conditioning variable.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 923,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_eq",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condEntropyOf_eq"
    },
    {
      "doc": "Conditional joint entropy is invariant under swapping the two variables being conditioned: `H(Y,X|Z) = H(X,Y|Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 935,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_pair_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condEntropyOf_pair_swap"
    },
    {
      "doc": "Triple conditional-entropy chain rule: `H(X,Y|Z) = H(Y|Z) + H(X|Y,Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 973,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_pair_chain_rule",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condEntropyOf_pair_chain_rule"
    },
    {
      "doc": "Swapped triple conditional-entropy chain rule: `H(X,Y|Z) = H(X|Z) + H(Y|X,Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 989,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_pair_chain_rule_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condEntropyOf_pair_chain_rule_swap"
    },
    {
      "doc": "Random-variable mutual information rewrites to the standard entropy identity `H(X) + H(Y) - H(X,Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1008,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_eq",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfoOf_eq"
    },
    {
      "doc": "Random-variable conditional mutual information rewrites to the entropy identity `H(X,Z) + H(Y,Z) - H(Z) - H(X,Y,Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1019,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_eq",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfoOf_eq"
    },
    {
      "doc": "Conditional mutual information as a difference of conditional entropies: `I(X;Y|Z) = H(X|Z) - H(X|Y,Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1034,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_eq_condEntropyOf_sub_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfoOf_eq_condEntropyOf_sub_condEntropyOf"
    },
    {
      "doc": "Symmetric conditional-entropy difference form: `I(X;Y|Z) = H(Y|Z) - H(Y|X,Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1049,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_eq_condEntropyOf_sub_condEntropyOf_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfoOf_eq_condEntropyOf_sub_condEntropyOf_swap"
    },
    {
      "doc": "Conditional mutual information as conditional marginal entropies minus conditional joint entropy: `I(X;Y|Z) = H(X|Z) + H(Y|Z) - H(X,Y|Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1068,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_eq_condEntropyOf_add_condEntropyOf_sub_condEntropyOf_pair",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "condMutualInfoOf_eq_condEntropyOf_add_condEntropyOf_sub_condEntropyOf_pair"
    },
    {
      "doc": "Mutual information as `I(A;B) = H(A) - H(A|B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1083,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfo_eq_entropy_fstMarginal_sub_condEntropy",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfo_eq_entropy_fstMarginal_sub_condEntropy"
    },
    {
      "doc": "Mutual information as `I(A;B) = H(B) - H(B|A)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1091,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfo_eq_entropy_sndMarginal_sub_condEntropy_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfo_eq_entropy_sndMarginal_sub_condEntropy_swap"
    },
    {
      "doc": "Random-variable form `I(X;Y) = H(X) - H(X|Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1100,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_eq_entropyOf_sub_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfoOf_eq_entropyOf_sub_condEntropyOf"
    },
    {
      "doc": "Symmetric random-variable form `I(X;Y) = H(Y) - H(Y|X)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1109,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_eq_entropyOf_sub_condEntropyOf_swap",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfoOf_eq_entropyOf_sub_condEntropyOf_swap"
    },
    {
      "doc": "Decompose `I(Y;Z)` through an auxiliary variable `X`. In canonical nats, `I(Y;Z) = H(Y|X) - I(X;Z|Y) - H(Y|(X,Z)) + I(X;Z)`, where `(X,Z)` is the ordered conditioning pair. The source type is arbitrary; only the three observed alphabets are finite.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1128,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_condEntropyOf_decomposition",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfoOf_condEntropyOf_decomposition"
    },
    {
      "doc": "A diagonal joint law has mutual information equal to its source entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1145,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfo_map_diag",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfo_map_diag"
    },
    {
      "doc": "The mutual information of a finite-valued variable with itself is its entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1164,
      "module": "LeanInfoTheory.Shannon.InfoMeasures",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_self",
      "path": "LeanInfoTheory/Shannon/InfoMeasures.lean",
      "short_name": "mutualInfoOf_self"
    },
    {
      "doc": "The zero-safe extended-real scalar term in the finite log-sum inequality. The conventions are `0 * log (0 / b) = 0` for every `b`, including `b = 0`, and `a * log (a / 0) = top` when `a` is positive.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 386,
      "module": "LeanInfoTheory.Shannon.LogSum",
      "name": "LeanInfoTheory.Shannon.logSumTerm",
      "path": "LeanInfoTheory/Shannon/LogSum.lean",
      "short_name": "logSumTerm"
    },
    {
      "doc": "A zero numerator contributes zero to the extended log-sum.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 391,
      "module": "LeanInfoTheory.Shannon.LogSum",
      "name": "LeanInfoTheory.Shannon.logSumTerm_zero_left",
      "path": "LeanInfoTheory/Shannon/LogSum.lean",
      "short_name": "logSumTerm_zero_left"
    },
    {
      "doc": "A positive numerator over a zero denominator contributes `top`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 396,
      "module": "LeanInfoTheory.Shannon.LogSum",
      "name": "LeanInfoTheory.Shannon.logSumTerm_pos_zero",
      "path": "LeanInfoTheory/Shannon/LogSum.lean",
      "short_name": "logSumTerm_pos_zero"
    },
    {
      "doc": "An extended log-sum term is never `bottom`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 407,
      "module": "LeanInfoTheory.Shannon.LogSum",
      "name": "LeanInfoTheory.Shannon.logSumTerm_ne_bot",
      "path": "LeanInfoTheory/Shannon/LogSum.lean",
      "short_name": "logSumTerm_ne_bot"
    },
    {
      "doc": "Every finite selected sum of extended log-sum terms is never `bottom`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 423,
      "module": "LeanInfoTheory.Shannon.LogSum",
      "name": "LeanInfoTheory.Shannon.sum_logSumTerm_ne_bot",
      "path": "LeanInfoTheory/Shannon/LogSum.lean",
      "short_name": "sum_logSumTerm_ne_bot"
    },
    {
      "doc": "Finite log-sum inequality with the zero-safe conventions of `logSumTerm`. In particular, a selected positive numerator over a zero denominator makes the right-hand side `top`; no support or positivity guard is required.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 495,
      "module": "LeanInfoTheory.Shannon.LogSum",
      "name": "LeanInfoTheory.Shannon.logSum_inequality",
      "path": "LeanInfoTheory/Shannon/LogSum.lean",
      "short_name": "logSum_inequality"
    },
    {
      "doc": "Equality in the zero-safe finite log-sum inequality. Equality holds exactly when all active selected pairs have one common `ENNReal` numerator-to-denominator ratio. Selected `(0, 0)` pairs are inactive; the common ratio may be finite or `top`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 547,
      "module": "LeanInfoTheory.Shannon.LogSum",
      "name": "LeanInfoTheory.Shannon.logSum_eq_iff_exists_constant_ratio",
      "path": "LeanInfoTheory/Shannon/LogSum.lean",
      "short_name": "logSum_eq_iff_exists_constant_ratio"
    },
    {
      "doc": "Guarded Real finite log-sum inequality. The support guard excludes positive-over-zero selected pairs while permitting selected `(0, 0)` pairs.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 694,
      "module": "LeanInfoTheory.Shannon.LogSum",
      "name": "LeanInfoTheory.Shannon.real_logSum_inequality_of_support",
      "path": "LeanInfoTheory/Shannon/LogSum.lean",
      "short_name": "real_logSum_inequality_of_support"
    },
    {
      "doc": "Equality in the guarded Real finite log-sum inequality holds exactly when all active selected pairs have one common finite ratio.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 709,
      "module": "LeanInfoTheory.Shannon.LogSum",
      "name": "LeanInfoTheory.Shannon.real_logSum_eq_iff_exists_constant_ratio_of_support",
      "path": "LeanInfoTheory/Shannon/LogSum.lean",
      "short_name": "real_logSum_eq_iff_exists_constant_ratio_of_support"
    },
    {
      "doc": "Conditional law of the first coordinate given a nonzero second-coordinate atom. Mathematically, this is the finite PMF `P_{A | B=b}(a) = P_{A,B}(a,b) / P_B(b)`. The proof argument `hb : sndMarginal p b \u2260 0` is part of the API so that zero-probability conditioning atoms do not receive a fake default distribution.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 52,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condFstGivenSnd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condFstGivenSnd"
    },
    {
      "doc": "Atom formula for the conditional law: `P_{A | B=b}(a) = P_{A,B}(a,b) / P_B(b)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 72,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condFstGivenSnd_apply",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condFstGivenSnd_apply"
    },
    {
      "doc": "The conditional PMF does not depend on which proof of nonzero marginal mass was used to construct it.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 81,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condFstGivenSnd_proof_irrel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condFstGivenSnd_proof_irrel"
    },
    {
      "doc": "An atom has zero conditional mass exactly when the corresponding joint atom has zero mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 93,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condFstGivenSnd_apply_eq_zero_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condFstGivenSnd_apply_eq_zero_iff"
    },
    {
      "doc": "An atom has nonzero conditional mass exactly when the corresponding joint atom has nonzero mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 112,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condFstGivenSnd_apply_ne_zero_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condFstGivenSnd_apply_ne_zero_iff"
    },
    {
      "doc": "The support of `P_{A | B=b}` is the fiber of the joint support over `b`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 122,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.support_condFstGivenSnd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "support_condFstGivenSnd"
    },
    {
      "doc": "Joint mass factors as conditional mass times the conditioning marginal: `P_{A | B=b}(a) * P_B(b) = P_{A,B}(a,b)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 133,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condFstGivenSnd_mul_sndMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condFstGivenSnd_mul_sndMarginal"
    },
    {
      "doc": "Joint mass factors as the conditioning marginal times conditional mass: `P_B(b) * P_{A | B=b}(a) = P_{A,B}(a,b)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 144,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.sndMarginal_mul_condFstGivenSnd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "sndMarginal_mul_condFstGivenSnd"
    },
    {
      "doc": "Real-valued version of the joint factorization: `P_B(b) * P_{A | B=b}(a) = P_{A,B}(a,b)` after converting masses to `Real`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 155,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.sndMarginal_toReal_mul_condFstGivenSnd_toReal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "sndMarginal_toReal_mul_condFstGivenSnd_toReal"
    },
    {
      "doc": "Entropy of the conditional fiber, with explicit zero-mass branch. This helper is intended for expected conditional entropy formulas. If `P_B(b)=0`, the branch is the number `0`, not the entropy of an arbitrary default conditional PMF.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 171,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condEntropyFstGivenSnd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condEntropyFstGivenSnd"
    },
    {
      "doc": "Zero-marginal conditioning atoms contribute zero to conditional-fiber entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 180,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condEntropyFstGivenSnd_of_sndMarginal_eq_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condEntropyFstGivenSnd_of_sndMarginal_eq_zero"
    },
    {
      "doc": "On nonzero conditioning atoms, `condEntropyFstGivenSnd` is the entropy of the canonical conditional PMF `P_{A | B=b}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 190,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condEntropyFstGivenSnd_of_sndMarginal_ne_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condEntropyFstGivenSnd_of_sndMarginal_ne_zero"
    },
    {
      "doc": "Per-fiber conditional entropy identity. For each conditioning atom `b`, `p_B(b) * H(P_{A | B=b}) = sum_a h(p(a,b)) - h(p_B(b))`, where `h(x) = -x log x`. If `p_B(b)=0`, the left side uses the explicit zero branch of `condEntropyFstGivenSnd`, and the right side is zero because every joint atom over `b` has zero mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 205,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.sndMarginal_toReal_mul_condEntropyFstGivenSnd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "sndMarginal_toReal_mul_condEntropyFstGivenSnd"
    },
    {
      "doc": "Expected conditional entropy formula for the finite conditional-law API: `H(A | B) = sum_b p_B(b) * H(P_{A | B=b})`. The right-hand side is written using `condEntropyFstGivenSnd`, whose value is `0` on zero-marginal conditioning atoms and the entropy of the canonical conditional PMF on nonzero atoms.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 273,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condEntropy_eq_sum_sndMarginal_mul_condEntropyFstGivenSnd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condEntropy_eq_sum_sndMarginal_mul_condEntropyFstGivenSnd"
    },
    {
      "doc": "The right-associated law `P_{A,B,C}` viewed as a law on `((A, B), C)`. This is the law whose conditional fibers over `C=c` are joint laws on `A \u00d7 B`.",
      "kind": "abbrev",
      "kind_label": "Definition",
      "line": 311,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.pairThirdLaw",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "pairThirdLaw"
    },
    {
      "doc": "Atom formula for the reassociated law `((A,B),C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 317,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.pairThirdLaw_apply",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "pairThirdLaw_apply"
    },
    {
      "doc": "The second marginal of the reassociated law `((A,B),C)` is the law of `C`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 335,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.sndMarginal_pairThirdLaw",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "sndMarginal_pairThirdLaw"
    },
    {
      "doc": "Reassociating `(A,B,C)` as `((A,B),C)` preserves entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 343,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.entropy_pairThirdLaw",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "entropy_pairThirdLaw"
    },
    {
      "doc": "PMF form of the triple conditional-entropy chain rule: `H(A,B|C) = H(B|C) + H(A|B,C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 353,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condEntropy_pairThirdLaw_chain_rule",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condEntropy_pairThirdLaw_chain_rule"
    },
    {
      "doc": "Swapped PMF form of the triple conditional-entropy chain rule: `H(A,B|C) = H(A|C) + H(B|A,C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 377,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condEntropy_pairThirdLaw_chain_rule_swap",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condEntropy_pairThirdLaw_chain_rule_swap"
    },
    {
      "doc": "Conditional joint law of the first two coordinates given a nonzero third coordinate atom. Mathematically, this is `P_{A,B | C=c}(a,b) = P_{A,B,C}(a,b,c) / P_C(c)`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 402,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condFstSndGivenThird"
    },
    {
      "doc": "Atom formula for `P_{A,B | C=c}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 423,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condFstSndGivenThird_apply",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condFstSndGivenThird_apply"
    },
    {
      "doc": "Joint mass factors through the conditional joint law: `P_C(c) * P_{A,B|C=c}(a,b) = P_{A,B,C}(a,b,c)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 435,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.thirdMarginal_mul_condFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "thirdMarginal_mul_condFstSndGivenThird"
    },
    {
      "doc": "Real-valued joint factorization for the conditional joint law: `P_C(c) * P_{A,B|C=c}(a,b) = P_{A,B,C}(a,b,c)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 448,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.thirdMarginal_toReal_mul_condFstSndGivenThird_toReal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "thirdMarginal_toReal_mul_condFstSndGivenThird_toReal"
    },
    {
      "doc": "The second marginal of the `(A,C)` law is the law of `C`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 462,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.sndMarginal_fstThirdMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "sndMarginal_fstThirdMarginal"
    },
    {
      "doc": "The second marginal of the `(B,C)` law is the law of `C`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 478,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.sndMarginal_sndThirdMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "sndMarginal_sndThirdMarginal"
    },
    {
      "doc": "The first marginal of `P_{A,B|C=c}` is the conditional law `P_{A|C=c}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 500,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.fstMarginal_condFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "fstMarginal_condFstSndGivenThird"
    },
    {
      "doc": "The second marginal of `P_{A,B|C=c}` is the conditional law `P_{B|C=c}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 530,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.sndMarginal_condFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "sndMarginal_condFstSndGivenThird"
    },
    {
      "doc": "The conditional law of `(A,B)` given `C=c`, obtained by conditioning the reassociated law `((A,B),C)`, is the same as `condFstSndGivenThird`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 561,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condFstGivenSnd_pairThirdLaw_eq_condFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condFstGivenSnd_pairThirdLaw_eq_condFstSndGivenThird"
    },
    {
      "doc": "Conditional mutual information of the fiber over `C=c`. The value is zero when `P_C(c)=0`; otherwise it is the mutual information of the conditional joint law `P_{A,B|C=c}`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 581,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condMutualInfoFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condMutualInfoFstSndGivenThird"
    },
    {
      "doc": "Zero-marginal conditioning atoms contribute zero fiber mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 592,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condMutualInfoFstSndGivenThird_of_thirdMarginal_eq_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condMutualInfoFstSndGivenThird_of_thirdMarginal_eq_zero"
    },
    {
      "doc": "On nonzero third-coordinate atoms, the fiber CMI is the mutual information of `P_{A,B|C=c}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 604,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condMutualInfoFstSndGivenThird_of_thirdMarginal_ne_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condMutualInfoFstSndGivenThird_of_thirdMarginal_ne_zero"
    },
    {
      "doc": "Conditional mutual information can be rewritten as `H(A|C) + H(B|C) - H(A,B|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 617,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_eq_condEntropy_marginals",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condMutualInfo_eq_condEntropy_marginals"
    },
    {
      "doc": "On a nonzero third-coordinate atom, fiber CMI is the entropy identity for the three conditional fibers: `I(A;B | C=c) = H(A|C=c) + H(B|C=c) - H(A,B|C=c)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 634,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condMutualInfoFstSndGivenThird_eq_entropy_fibers_of_ne_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condMutualInfoFstSndGivenThird_eq_entropy_fibers_of_ne_zero"
    },
    {
      "doc": "Weighted pointwise bridge between fiber CMI and the three conditional entropy fibers. The zero-marginal case is killed by the factor `P_C(c)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 663,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.thirdMarginal_toReal_mul_condMutualInfoFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "thirdMarginal_toReal_mul_condMutualInfoFstSndGivenThird"
    },
    {
      "doc": "Expected conditional mutual information formula: `I(A;B | C) = sum_c P_C(c) I(A;B | C=c)`. The fiber term is zero on zero-marginal `c` and otherwise the mutual information of `P_{A,B|C=c}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 685,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_eq_sum_thirdMarginal_mul_condMutualInfoFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Conditional.lean",
      "short_name": "condMutualInfo_eq_sum_thirdMarginal_mul_condMutualInfoFstSndGivenThird"
    },
    {
      "doc": "Conditional relative entropy between two channels under a common input law. This is the KL divergence between the two induced joint laws. Consequently, channel values outside the support of `r` do not affect the result: their entire joint-law fiber has zero mass. No per-fiber KL convention is imposed at those null base atoms.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 51,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.ConditionalKL",
      "name": "LeanInfoTheory.Shannon.conditionalKlDiv",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/ConditionalKL.lean",
      "short_name": "conditionalKlDiv"
    },
    {
      "doc": "Conditional relative entropy from a channel to itself is zero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 62,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.ConditionalKL",
      "name": "LeanInfoTheory.Shannon.conditionalKlDiv_self",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/ConditionalKL.lean",
      "short_name": "conditionalKlDiv_self"
    },
    {
      "doc": "Conditional relative entropy is the base-law-weighted sum of the fiberwise KL divergences. This identity is unconditional in `ENNReal`. An infinite KL value on a null base fiber contributes `0 * \u22a4 = 0`, while an infinite KL value on an active fiber makes both sides `\u22a4`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 117,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.ConditionalKL",
      "name": "LeanInfoTheory.Shannon.conditionalKlDiv_eq_sum",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/ConditionalKL.lean",
      "short_name": "conditionalKlDiv_eq_sum"
    },
    {
      "doc": "Real-valued weighted-fiber formula for conditional relative entropy under support inclusion on the active base atoms: `D(W || V | r) = \u2211 x, r(x) D(W_x || V_x)`. No support condition is imposed when `r x = 0`. In particular, an infinite fiber KL divergence on a null base atom contributes zero to the canonical `ENNReal` weighted sum before conversion to `Real`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 232,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.ConditionalKL",
      "name": "LeanInfoTheory.Shannon.toReal_conditionalKlDiv_eq_sum",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/ConditionalKL.lean",
      "short_name": "toReal_conditionalKlDiv_eq_sum"
    },
    {
      "doc": "KL chain rule for two finite channel-joint laws: `D(P_X P_{Y|X} || Q_X Q_{Y|X}) = D(P_X || Q_X) + D(P_{Y|X} || Q_{Y|X} | P_X)`. The conditional term is weighted by the numerator base law `p`. The identity is unconditional in `ENNReal`, including when either summand is `\u22a4`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 271,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.ConditionalKL",
      "name": "LeanInfoTheory.Shannon.klDiv_channelJoint_eq_add_conditionalKlDiv",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/ConditionalKL.lean",
      "short_name": "klDiv_channelJoint_eq_add_conditionalKlDiv"
    },
    {
      "doc": "Real-valued finite joint KL chain rule under support inclusion for the base laws and for every active numerator fiber: `D(P_X P_{Y|X} || Q_X Q_{Y|X}) = D(P_X || Q_X) + D(P_{Y|X} || Q_{Y|X} | P_X)`. The fiber condition is required only on `p.support`; an infinite fiber KL divergence at a null numerator atom does not affect the identity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 300,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.ConditionalKL",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_channelJoint_eq_add_conditionalKlDiv",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/ConditionalKL.lean",
      "short_name": "toReal_klDiv_channelJoint_eq_add_conditionalKlDiv"
    },
    {
      "doc": "KL divergence is jointly convex under a common finite PMF-valued selector. The result is canonical in `ENNReal`. An inactive selector component may have infinite KL because its weighted contribution is `0 * top = 0`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 262,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.klDiv_bind_le_sum",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "klDiv_bind_le_sum"
    },
    {
      "doc": "Real-valued KL joint convexity under support inclusion for every active selector component. No support condition is required when the selector mass is zero, even if that inactive component has infinite KL.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 291,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_bind_le_sum",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "toReal_klDiv_bind_le_sum"
    },
    {
      "doc": "Binary joint convexity of KL divergence. The weight is `t` on the first component and `1 - t` on the second.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 338,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.klDiv_binaryMixture_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "klDiv_binaryMixture_le"
    },
    {
      "doc": "Real-valued binary KL joint convexity with support assumptions only for components whose weights can be nonzero. At `t = 0`, only the second support implication is used; at `t = 1`, only the first is used.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 379,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_binaryMixture_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "toReal_klDiv_binaryMixture_le"
    },
    {
      "doc": "Equality in binary KL joint convexity for an interior weight. The component support assumptions exclude infinite component divergences. Under those guards, equality holds exactly when the two component likelihood ratios agree pointwise, expressed without division by the cross-product law. When both reference masses at an atom are positive, the cross-product law is the usual equality of likelihood ratios. If one reference mass vanishes, support inclusion forces its corresponding numerator mass to vanish, so the division-free statement handles the absent component without assigning a meaning to `0 / 0`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 858,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.klDiv_binaryMixture_eq_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "klDiv_binaryMixture_eq_iff"
    },
    {
      "doc": "Real-valued equality in binary KL joint convexity for an interior weight. The same component support assumptions make every KL divergence finite, so the exact cross-product characterization is preserved by `ENNReal.toReal`. The division-free condition has the same null-mass interpretation as the canonical `ENNReal` theorem: a component absent at an atom contributes matching zero numerator and reference masses rather than an artificial likelihood ratio.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 888,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_binaryMixture_eq_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "toReal_klDiv_binaryMixture_eq_iff"
    },
    {
      "doc": "Mutual information across a finite PMF-valued channel is output entropy minus the input-weighted entropy of the channel laws.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 949,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.mutualInfo_channelJoint_eq_entropy_bind_sub_sum",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "mutualInfo_channelJoint_eq_entropy_bind_sub_sum"
    },
    {
      "doc": "For a fixed finite channel, mutual information is concave in the input law under a common finite PMF-valued selector.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 992,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.sum_mul_mutualInfo_channelJoint_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "sum_mul_mutualInfo_channelJoint_le"
    },
    {
      "doc": "For a fixed finite channel, mutual information is concave along a binary mixture of input laws.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1039,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.mutualInfo_binaryMixture_input_concave",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "mutualInfo_binaryMixture_input_concave"
    },
    {
      "doc": "For a fixed finite input law, mutual information is convex under a common finite PMF-valued selector of channels.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1116,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.mutualInfo_channelMixture_le_sum",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "mutualInfo_channelMixture_le_sum"
    },
    {
      "doc": "For a fixed finite input law, mutual information is convex along a binary mixture of channels.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1182,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
      "name": "LeanInfoTheory.Shannon.mutualInfo_binaryChannelMixture_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Convexity.lean",
      "short_name": "mutualInfo_binaryChannelMixture_le"
    },
    {
      "doc": "The mathlib kernel associated to a countable PMF-valued channel. This is a semantic view of the existing raw channel function, not a second public channel representation.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 58,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.pmfChannelKernel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "pmfChannelKernel"
    },
    {
      "doc": "A PMF-valued channel induces a Markov kernel through `pmfChannelKernel`.",
      "kind": "instance",
      "kind_label": "Instance",
      "line": 66,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.pmfChannelKernel.instIsMarkovKernel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "pmfChannelKernel.instIsMarkovKernel"
    },
    {
      "doc": "Evaluating the kernel associated to a PMF channel recovers its PMF measure.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 77,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.pmfChannelKernel_apply",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "pmfChannelKernel_apply"
    },
    {
      "doc": "The measure of an induced PMF joint law is the composition-product of the input measure and the associated Markov kernel.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 89,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.channelJoint_toMeasure",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "channelJoint_toMeasure"
    },
    {
      "doc": "The total posterior channel associated to an input law and a finite stochastic channel. On an output atom of positive probability this is the usual posterior input law. On a null output fiber it uses the fallback already documented by `condFstGivenSndChannel`; reconstruction makes that arbitrary branch semantically irrelevant.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 114,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.channelPosterior",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "channelPosterior"
    },
    {
      "doc": "Sampling the posterior from the channel output law reconstructs the induced joint law in output-input order.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 123,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.channelPosterior_reconstructs_joint",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "channelPosterior_reconstructs_joint"
    },
    {
      "doc": "A finite-input channel is sufficient for a model family exactly when one parameter-independent posterior channel agrees with every model posterior on each supported output fiber. Writing `Q_t = (model t).bind W`, the witness `R` satisfies `channelPosterior (model t) W b = R b` whenever `Q_t b != 0`. Consequently, two models supporting the same output have the same posterior there. A model for which `b` is null imposes no condition, although another supporting model may determine `R b`; if `b` is null for the entire family, that row is wholly unconstrained. The support guard prevents the arbitrary fallback used by the total posterior on a null fiber from acquiring conditional-probability meaning.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 144,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.isSufficientChannel_iff_exists_common_posterior",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "isSufficientChannel_iff_exists_common_posterior"
    },
    {
      "doc": "Exact KL decomposition for two input laws passed through the same finite stochastic channel. The first term is the divergence between the output laws. The remainder is the divergence between the two posterior kernels over the first output law, stated with mathlib composition-product measures. No support-inclusion assumption is needed because the identity is `ENNReal`-valued.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 243,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.klDiv_channel_eq_add_posterior",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "klDiv_channel_eq_add_posterior"
    },
    {
      "doc": "Finite relative entropy contracts when two input laws pass through the same stochastic channel. This is the primary channel data-processing inequality. It is unconditional because KL divergence is valued in `ENNReal`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 299,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.klDiv_channel_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "klDiv_channel_le"
    },
    {
      "doc": "Equality in finite KL data processing holds exactly when the two posterior kernels agree almost everywhere under the first output law. Input support inclusion excludes the uninformative infinite-divergence case. This is the measure-level equality bridge; finite pointwise posterior forms can be derived by replacing almost-everywhere equality with equality on supported output atoms.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 353,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.klDiv_channel_eq_iff_posterior_ae_eq",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "klDiv_channel_eq_iff_posterior_ae_eq"
    },
    {
      "doc": "Equality in finite KL data processing holds exactly when the two posterior PMFs agree on every output atom reached by the first input law. This is the primary finite-facing equality theorem. The input support condition excludes infinite KL divergence, while the output support condition in the conclusion leaves the total posterior's arbitrary null-fiber values irrelevant.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 376,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.klDiv_channel_eq_iff_posterior_eq_on_support",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "klDiv_channel_eq_iff_posterior_eq_on_support"
    },
    {
      "doc": "Real-valued finite relative entropy contracts through a common stochastic channel when the first input law is supported by the second. Only the input support condition is needed; no separate support hypothesis on the output laws is required.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 400,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_channel_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "toReal_klDiv_channel_le"
    },
    {
      "doc": "Equality in real-valued finite KL data processing holds exactly when the two posterior PMFs agree on every output atom reached by the first input law. Input support inclusion makes both KL divergences finite, so this theorem has no `ENNReal.toReal` top-branch ambiguity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 420,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_channel_eq_iff_posterior_eq_on_support",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "toReal_klDiv_channel_eq_iff_posterior_eq_on_support"
    },
    {
      "doc": "KL data processing for a deterministic map of a finite alphabet.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 442,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.klDiv_map_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "klDiv_map_le"
    },
    {
      "doc": "Real-valued KL data processing for a deterministic map, under input support inclusion.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 457,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_map_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "toReal_klDiv_map_le"
    },
    {
      "doc": "Appending a common channel stage cannot increase the KL divergence between the two intermediate output laws.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 485,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.klDiv_channelComp_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "klDiv_channelComp_le"
    },
    {
      "doc": "Textbook-facing alias for `ENNReal`-valued KL contraction along a cascade.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 499,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.klDiv_channel_cascade_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "klDiv_channel_cascade_le"
    },
    {
      "doc": "Real-valued KL contraction for a channel cascade. The original input support condition suffices for the intermediate laws as well.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 515,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_channelComp_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "toReal_klDiv_channelComp_le"
    },
    {
      "doc": "Textbook-facing alias for real-valued KL contraction along a cascade.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 532,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_channel_cascade_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "toReal_klDiv_channel_cascade_le"
    },
    {
      "doc": "KL divergence to an invariant reference law cannot increase after one step of a finite stochastic channel.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 552,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.klDiv_channel_invariant_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "klDiv_channel_invariant_le"
    },
    {
      "doc": "Real-valued KL divergence to an invariant reference law contracts when the input law is supported by that reference.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 566,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_channel_invariant_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "toReal_klDiv_channel_invariant_le"
    },
    {
      "doc": "A finite channel that preserves the uniform law cannot decrease Shannon entropy. The discrete measurable structure used by the KL proof remains local, so the statement has only the natural finite nonempty alphabet assumptions.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 583,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.entropy_le_entropy_bind_of_uniform_invariant",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "entropy_le_entropy_bind_of_uniform_invariant"
    },
    {
      "doc": "A finite doubly stochastic channel cannot decrease Shannon entropy. Each `W a` is already a probability law, hence supplies the row-stochastic condition. The displayed hypothesis is the remaining column-sum condition. No transition-matrix representation is introduced.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 604,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
      "name": "LeanInfoTheory.Shannon.entropy_le_entropy_bind_of_doublyStochastic",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/DataProcessing.lean",
      "short_name": "entropy_le_entropy_bind_of_doublyStochastic"
    },
    {
      "doc": "Self-information of an atom under a finite PMF, in nats. It is `-log p(a)` when the real mass of `a` is nonzero, and `0` on zero-mass atoms. The zero branch is the usual entropy convention that zero-probability outcomes contribute no expected information.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 41,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Entropy",
      "name": "LeanInfoTheory.Shannon.selfInfo",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Entropy.lean",
      "short_name": "selfInfo"
    },
    {
      "doc": "A zero-mass atom has zero self-information by convention.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 46,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Entropy",
      "name": "LeanInfoTheory.Shannon.selfInfo_of_toReal_eq_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Entropy.lean",
      "short_name": "selfInfo_of_toReal_eq_zero"
    },
    {
      "doc": "A nonzero-mass atom has self-information `-log p(a)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 52,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Entropy",
      "name": "LeanInfoTheory.Shannon.selfInfo_of_toReal_ne_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Entropy.lean",
      "short_name": "selfInfo_of_toReal_ne_zero"
    },
    {
      "doc": "Multiplying self-information by the atom mass recovers the `Real.negMulLog` entropy summand.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 61,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Entropy",
      "name": "LeanInfoTheory.Shannon.toReal_mul_selfInfo",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Entropy.lean",
      "short_name": "toReal_mul_selfInfo"
    },
    {
      "doc": "Semantic bridge for finite entropy: the finite-sum definition of `Shannon.entropy` is the expected self-information with respect to `PMF.toMeasure`. Informally, this is the textbook identity `H(P) = E[-log P(X)]`, with the zero-mass convention handled by `selfInfo`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 75,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Entropy",
      "name": "LeanInfoTheory.Shannon.entropy_eq_integral_selfInfo",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Entropy.lean",
      "short_name": "entropy_eq_integral_selfInfo"
    },
    {
      "doc": "Entropy is monotone under inclusion of finite family atoms.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 58,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_mono",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropy_mono"
    },
    {
      "doc": "Source-family entropy is monotone under inclusion of finite atoms.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 70,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_mono",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropyOf_mono"
    },
    {
      "doc": "Conditional entropy of two finite subfamilies is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 79,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropy_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyCondEntropy_nonneg"
    },
    {
      "doc": "Conditional entropy of two finite source-indexed subfamilies is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 88,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropyOf_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyCondEntropyOf_nonneg"
    },
    {
      "doc": "Conditional mutual information of finite subfamilies is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 100,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfo_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyCondMutualInfo_nonneg"
    },
    {
      "doc": "Conditional mutual information of finite source-indexed subfamilies is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 112,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondMutualInfoOf_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyCondMutualInfoOf_nonneg"
    },
    {
      "doc": "Entropy of finite family atoms is submodular: `H(A) + H(B) - H(A \u222a B) - H(A \u2229 B) \u2265 0`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 124,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_submodular",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropy_submodular"
    },
    {
      "doc": "Entropy of finite source-indexed family atoms is submodular.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 148,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_submodular",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropyOf_submodular"
    },
    {
      "doc": "Mutual information of two finite subfamilies is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 160,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyMutualInfo_nonneg"
    },
    {
      "doc": "Mutual information of two finite source-indexed subfamilies is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 170,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_nonneg"
    },
    {
      "doc": "Family mutual information is at most the entropy of its left atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 179,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_le_entropy_left",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyMutualInfo_le_entropy_left"
    },
    {
      "doc": "Family mutual information is at most the entropy of its right atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 188,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfo_le_entropy_right",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyMutualInfo_le_entropy_right"
    },
    {
      "doc": "Source-family mutual information is at most the entropy of its left atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 199,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_le_entropyOf_left",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_le_entropyOf_left"
    },
    {
      "doc": "Source-family mutual information is at most the entropy of its right atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 208,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyMutualInfoOf_le_entropyOf_right",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyMutualInfoOf_le_entropyOf_right"
    },
    {
      "doc": "Conditioning on a finite family atom cannot increase family entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 217,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropy_le_entropy",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyCondEntropy_le_entropy"
    },
    {
      "doc": "Conditioning cannot increase entropy for finite source-indexed subfamilies.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 227,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropyOf_le_entropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyCondEntropyOf_le_entropyOf"
    },
    {
      "doc": "Adding a finite conditioning atom cannot increase family conditional entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 238,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropy_union_le_condEntropy",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyCondEntropy_union_le_condEntropy"
    },
    {
      "doc": "Adding a finite conditioning atom cannot increase source-family conditional entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 251,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyCondEntropyOf_union_le_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyCondEntropyOf_union_le_condEntropyOf"
    },
    {
      "doc": "Entropy of a union of two finite family atoms is subadditive.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 261,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_union_le_add",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropy_union_le_add"
    },
    {
      "doc": "Source-family entropy of a union of two finite atoms is subadditive.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 275,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_union_le_add",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropyOf_union_le_add"
    },
    {
      "doc": "Family entropy is at most the sum of the selected singleton entropies.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 287,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_le_sum_singletons",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropy_le_sum_singletons"
    },
    {
      "doc": "Source-family entropy is at most the sum of the selected singleton entropies.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 311,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_le_sum_singletons",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropyOf_le_sum_singletons"
    },
    {
      "doc": "Textbook n-way entropy subadditivity for a list of distinct variable names.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 323,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropy_subadditivity_of_nodup",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropy_subadditivity_of_nodup"
    },
    {
      "doc": "Source-family textbook n-way entropy subadditivity for distinct variable names.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 337,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_subadditivity_of_nodup",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamily.lean",
      "short_name": "familyEntropyOf_subadditivity_of_nodup"
    },
    {
      "doc": "A finite atom of a dependent PMF family is mutually independent when its joint marginal factors pointwise into its one-coordinate marginals. The product is indexed by the subtype of variables selected by `s`. This statement therefore supports dependent component alphabets, arbitrary ambient variable types, empty and singleton atoms, and zero coordinate masses without additional typeclass assumptions.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 54,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamilyIndependence",
      "name": "LeanInfoTheory.Shannon.IsMutuallyIndependentFamily",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamilyIndependence.lean",
      "short_name": "IsMutuallyIndependentFamily"
    },
    {
      "doc": "Mutual independence of a finite source-indexed family. This is a thin specialization of `IsMutuallyIndependentFamily` to the joint pushforward law `familyLawOf p X`; it introduces no separate source semantics.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 67,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamilyIndependence",
      "name": "LeanInfoTheory.Shannon.IsMutuallyIndependentFamilyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamilyIndependence.lean",
      "short_name": "IsMutuallyIndependentFamilyOf"
    },
    {
      "doc": "Every dependent PMF family is mutually independent on the empty atom.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 427,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamilyIndependence",
      "name": "LeanInfoTheory.Shannon.isMutuallyIndependentFamily_empty",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamilyIndependence.lean",
      "short_name": "isMutuallyIndependentFamily_empty"
    },
    {
      "doc": "Every one-coordinate marginal is mutually independent.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 463,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamilyIndependence",
      "name": "LeanInfoTheory.Shannon.isMutuallyIndependentFamily_singleton",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamilyIndependence.lean",
      "short_name": "isMutuallyIndependentFamily_singleton"
    },
    {
      "doc": "For distinct indices, mutual independence of a two-variable source family is exactly independence of the corresponding pair of random variables. Distinctness is essential: when the indices coincide, the selected atom collapses to a singleton and is automatically mutually independent, whereas a random variable need not be independent of itself.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 644,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamilyIndependence",
      "name": "LeanInfoTheory.Shannon.isMutuallyIndependentFamilyOf_pair_iff_isIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamilyIndependence.lean",
      "short_name": "isMutuallyIndependentFamilyOf_pair_iff_isIndependentOf"
    },
    {
      "doc": "Mutual independence of a finite atom is inherited by each of its subatoms. Here the atom is finite because it is a `Finset`; the additional typeclass assumption says that the ambient family has pointwise-finite coordinate alphabets.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 667,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamilyIndependence",
      "name": "LeanInfoTheory.Shannon.isMutuallyIndependentFamily_mono",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamilyIndependence.lean",
      "short_name": "isMutuallyIndependentFamily_mono"
    },
    {
      "doc": "The entropy of a finite dependent-family marginal is the sum of its one-coordinate entropies exactly when the selected family is mutually independent.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 705,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamilyIndependence",
      "name": "LeanInfoTheory.Shannon.familyEntropy_eq_sum_singletons_iff_isMutuallyIndependentFamily",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamilyIndependence.lean",
      "short_name": "familyEntropy_eq_sum_singletons_iff_isMutuallyIndependentFamily"
    },
    {
      "doc": "The source-family form of the finite entropy-additivity characterization of mutual independence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 803,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamilyIndependence",
      "name": "LeanInfoTheory.Shannon.familyEntropyOf_eq_sum_singletons_iff_isMutuallyIndependentFamilyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteFamilyIndependence.lean",
      "short_name": "familyEntropyOf_eq_sum_singletons_iff_isMutuallyIndependentFamilyOf"
    },
    {
      "doc": "Real-valued first-marginal mass formula. Mathematically, for a finite joint PMF `p` on `alpha \u00d7 beta`, `p_A(a) = sum_b p(a,b)`, now stated after converting all finite masses to real numbers.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 50,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.fstMarginal_toReal_apply",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "fstMarginal_toReal_apply"
    },
    {
      "doc": "Real-valued second-marginal mass formula. Mathematically, for a finite joint PMF `p` on `alpha \u00d7 beta`, `p_B(b) = sum_a p(a,b)`, now stated after converting all finite masses to real numbers.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 66,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.sndMarginal_toReal_apply",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "sndMarginal_toReal_apply"
    },
    {
      "doc": "Rewrite an expectation of a first-coordinate observable under the joint law as an expectation under the first marginal: `sum_{a,b} p(a,b) f(a) = sum_a p_A(a) f(a)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 80,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.sum_toReal_mul_fstMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "sum_toReal_mul_fstMarginal"
    },
    {
      "doc": "Rewrite an expectation of a second-coordinate observable under the joint law as an expectation under the second marginal: `sum_{a,b} p(a,b) f(b) = sum_b p_B(b) f(b)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 103,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.sum_toReal_mul_sndMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "sum_toReal_mul_sndMarginal"
    },
    {
      "doc": "Entropy as the elementary finite sum `sum_a p(a) * (-log p(a))`. This is definitionally the same as the `Real.negMulLog` formula, but this shape is better for comparing entropy identities with KL-divergence sums.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 131,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.entropy_eq_sum_toReal_mul_neg_log",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "entropy_eq_sum_toReal_mul_neg_log"
    },
    {
      "doc": "First-marginal entropy as a joint-law expectation: `H(A) = sum_{a,b} p(a,b) * (-log p_A(a))`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 145,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.entropy_fstMarginal_eq_sum_joint",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "entropy_fstMarginal_eq_sum_joint"
    },
    {
      "doc": "Second-marginal entropy as a joint-law expectation: `H(B) = sum_{a,b} p(a,b) * (-log p_B(b))`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 164,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.entropy_sndMarginal_eq_sum_joint",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "entropy_sndMarginal_eq_sum_joint"
    },
    {
      "doc": "Mutual information written as the joint expectation of the three entropy summands: `I(A;B) = sum_{a,b} p(a,b) * (-log p_A(a) + -log p_B(b) - -log p(a,b))`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 186,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.mutualInfo_eq_sum_neg_log",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "mutualInfo_eq_sum_neg_log"
    },
    {
      "doc": "Pointwise algebra behind the KL formula for mutual information. For every atom `(a,b)`, the weighted entropy summand equals `p(a,b) * log (p(a,b) / (p_A(a) * p_B(b)))`. If `p(a,b)=0`, both sides are zero; otherwise nonzero joint mass forces both marginal masses to be nonzero.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 207,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.mutualInfo_summand_eq_log_ratio",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "mutualInfo_summand_eq_log_ratio"
    },
    {
      "doc": "Finite log-ratio formula for mutual information: `I(A;B) = sum_{a,b} p(a,b) log (p(a,b) / (p_A(a) p_B(b)))`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 239,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
      "name": "LeanInfoTheory.Shannon.mutualInfo_eq_sum_log_ratio",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/FiniteSums.lean",
      "short_name": "mutualInfo_eq_sum_log_ratio"
    },
    {
      "doc": "A joint PMF is independent when it is the product of its marginals.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 44,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.IsIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "IsIndependent"
    },
    {
      "doc": "Two random variables are independent when their joint law is independent.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 49,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.IsIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "IsIndependentOf"
    },
    {
      "doc": "The first two coordinates of a triple PMF are conditionally independent given the third when every atom satisfies the cross-product factorization `p(a,b,c) * p_C(c) = p_AC(a,c) * p_BC(b,c)`. This definition is meaningful on null fibers and does not require choosing a conditional PMF from a proof that `p_C(c) \u2260 0`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 62,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.IsCondIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "IsCondIndependent"
    },
    {
      "doc": "Two random variables are conditionally independent given a third when their mapped triple law is conditionally independent.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 72,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.IsCondIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "IsCondIndependentOf"
    },
    {
      "doc": "Swapping the first two coordinates of a triple law preserves conditional independence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 80,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isCondIndependent_map_swap12",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isCondIndependent_map_swap12"
    },
    {
      "doc": "Conditional independence of random variables is symmetric in its first two variables.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 126,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isCondIndependentOf_swap",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isCondIndependentOf_swap"
    },
    {
      "doc": "Independence is equivalent to pointwise factorization into marginal masses.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 141,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isIndependent_iff_apply_eq_mul_marginals",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isIndependent_iff_apply_eq_mul_marginals"
    },
    {
      "doc": "The independent product of two PMFs is independent.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 160,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isIndependent_indepProd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isIndependent_indepProd"
    },
    {
      "doc": "Swapping the coordinates of a joint law preserves independence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 167,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isIndependent_map_swap",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isIndependent_map_swap"
    },
    {
      "doc": "Random-variable independence is equality of the joint law with the independent product of the two individual laws.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 205,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isIndependentOf_iff_map_eq_indepProd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isIndependentOf_iff_map_eq_indepProd"
    },
    {
      "doc": "Deterministic processing of the right variable preserves independence. The source and observed types are arbitrary: the PMF mapped-law proof needs no finiteness, measurable-space, or injectivity assumptions on the processing map.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 219,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isIndependentOf_comp_right",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isIndependentOf_comp_right"
    },
    {
      "doc": "The PMF mapped-law definition of random-variable independence agrees with mathlib's measure-theoretic `ProbabilityTheory.IndepFun` predicate. Measurability and measurable-singleton assumptions are explicit here because they belong to the semantic bridge, not to the PMF-first definition `IsIndependentOf`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 238,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isIndependentOf_iff_indepFun",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isIndependentOf_iff_indepFun"
    },
    {
      "doc": "Independence of random variables is symmetric.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 255,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isIndependentOf_swap",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isIndependentOf_swap"
    },
    {
      "doc": "Finite mutual information is zero exactly when the joint PMF is independent. The proof chooses the discrete measurable structure only locally, uses the KL representation of mutual information, and discharges the necessary real-KL finiteness guard through support inclusion.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 276,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.mutualInfo_eq_zero_iff_isIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "mutualInfo_eq_zero_iff_isIndependent"
    },
    {
      "doc": "Finite-valued random variables have zero mutual information exactly when their mapped joint law is independent.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 297,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_eq_zero_iff_isIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "mutualInfoOf_eq_zero_iff_isIndependentOf"
    },
    {
      "doc": "Conditioning preserves the entropy of the left coordinate exactly when the two coordinates are independent.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 312,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condEntropy_eq_entropy_left_iff_isIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condEntropy_eq_entropy_left_iff_isIndependent"
    },
    {
      "doc": "Conditioning preserves `H(X)` exactly when the finite-valued random variables `X` and `Y` are independent.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 328,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_eq_entropyOf_iff_isIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condEntropyOf_eq_entropyOf_iff_isIndependentOf"
    },
    {
      "doc": "Joint entropy is additive exactly when the two coordinates are independent.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 338,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.jointEntropy_eq_add_marginalEntropy_iff_isIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "jointEntropy_eq_add_marginalEntropy_iff_isIndependent"
    },
    {
      "doc": "Joint entropy is additive exactly when the finite-valued random variables are independent.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 355,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_eq_add_entropyOf_iff_isIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "jointEntropyOf_eq_add_entropyOf_iff_isIndependentOf"
    },
    {
      "doc": "Short PMF alias for additivity of joint entropy under independence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 368,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.jointEntropy_additive_iff_isIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "jointEntropy_additive_iff_isIndependent"
    },
    {
      "doc": "Short random-variable alias for additivity of joint entropy under independence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 376,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_additive_iff_isIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "jointEntropyOf_additive_iff_isIndependentOf"
    },
    {
      "doc": "Finite conditional mutual information is zero exactly when every positive-mass conditional fiber has zero mutual information. The forward direction uses nonnegativity to extract zero from each term in the averaged conditional-mutual-information formula. The marginal guard lets us cancel the positive real fiber weight. In the reverse direction, null fibers have zero weight and every positive-mass fiber is zero by hypothesis.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 395,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_eq_zero_iff_condMutualInfoFstSndGivenThird_eq_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condMutualInfo_eq_zero_iff_condMutualInfoFstSndGivenThird_eq_zero"
    },
    {
      "doc": "The cross-product definition of conditional independence is equivalent to ordinary independence of the conditional joint law on every positive-mass fiber. No condition is needed on null fibers: the cross-product identity holds there because the corresponding first-third marginal has zero mass. The right-hand side is independent of the particular proof of nonzero marginal mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 438,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.isCondIndependent_iff_isIndependent_condFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "isCondIndependent_iff_isIndependent_condFstSndGivenThird"
    },
    {
      "doc": "Finite conditional mutual information is zero exactly when the first two coordinates are conditionally independent given the third. No conditional law needs to be chosen on null fibers. `IsCondIndependent` uses the cross-product identity on the original PMF, where those fibers satisfy the identity directly; conditional PMFs appear only for positive-mass fibers inside the proof.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 538,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_eq_zero_iff_isCondIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condMutualInfo_eq_zero_iff_isCondIndependent"
    },
    {
      "doc": "Finite-valued random variables have zero conditional mutual information exactly when they are conditionally independent under their mapped triple law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 560,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_eq_zero_iff_isCondIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condMutualInfoOf_eq_zero_iff_isCondIndependentOf"
    },
    {
      "doc": "Conditioning the first coordinate on the second preserves its entropy given the third coordinate exactly under conditional independence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 576,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condEntropy_eq_condEntropy_fstThirdMarginal_iff_isCondIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condEntropy_eq_condEntropy_fstThirdMarginal_iff_isCondIndependent"
    },
    {
      "doc": "Conditioning `X` on `Y` preserves its entropy given `Z` exactly when `X` and `Y` are conditionally independent given `Z`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 595,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_eq_condEntropyOf_iff_isCondIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condEntropyOf_eq_condEntropyOf_iff_isCondIndependentOf"
    },
    {
      "doc": "Conditional joint entropy is additive exactly when the first two coordinates are conditionally independent given the third.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 615,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condEntropy_pair_eq_add_condEntropy_iff_isCondIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condEntropy_pair_eq_add_condEntropy_iff_isCondIndependent"
    },
    {
      "doc": "Conditional joint entropy of finite-valued random variables is additive exactly under conditional independence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 634,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_pair_eq_add_condEntropyOf_iff_isCondIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condEntropyOf_pair_eq_add_condEntropyOf_iff_isCondIndependentOf"
    },
    {
      "doc": "Short PMF alias for conditional joint-entropy additivity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 654,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condEntropy_pair_additive_iff_isCondIndependent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condEntropy_pair_additive_iff_isCondIndependent"
    },
    {
      "doc": "Short random-variable alias for conditional joint-entropy additivity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 664,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Independence",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_pair_additive_iff_isCondIndependentOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Independence.lean",
      "short_name": "condEntropyOf_pair_additive_iff_isCondIndependentOf"
    },
    {
      "doc": "Absolute continuity between PMF measures is exactly inclusion of their set-valued supports. This statement does not require a finite alphabet: measurable singletons let the forward direction test individual atoms, while the reverse direction uses the PMF measure's zero-set characterization.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 63,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.toMeasure_absolutelyContinuous_iff_support_subset",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "toMeasure_absolutelyContinuous_iff_support_subset"
    },
    {
      "doc": "On a finite alphabet, PMF KL divergence is finite exactly when the first PMF's support is contained in the second PMF's support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 89,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.klDiv_pmf_ne_top_iff_support_subset",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "klDiv_pmf_ne_top_iff_support_subset"
    },
    {
      "doc": "On a finite alphabet, PMF KL divergence is infinite exactly when support inclusion fails.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 108,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.klDiv_pmf_eq_top_iff_not_support_subset",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "klDiv_pmf_eq_top_iff_not_support_subset"
    },
    {
      "doc": "KL divergence between two PMFs is zero exactly when the PMFs are equal. The alphabet need not be finite: PMF measures are finite measures, and measurable singletons make `PMF.toMeasure` injective.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 127,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.klDiv_pmf_eq_zero_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "klDiv_pmf_eq_zero_iff"
    },
    {
      "doc": "On a finite alphabet and under support inclusion, real-valued PMF KL divergence is zero exactly when the PMFs are equal. The support hypothesis is essential: without KL finiteness, `ENNReal.toReal \u22a4 = 0` would make the reverse characterization false.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 140,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_pmf_eq_zero_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "toReal_klDiv_pmf_eq_zero_iff"
    },
    {
      "doc": "Countable PMF density formula. If `p.toMeasure \u226a q.toMeasure`, then `p.toMeasure` is obtained from `q.toMeasure` by the density `a \u21a6 p(a) / q(a)`. On atoms with `q(a)=0`, absolute continuity forces `p(a)=0`, so the formula is still valid.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 163,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.toMeasure_withDensity_pmf_div",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "toMeasure_withDensity_pmf_div"
    },
    {
      "doc": "Finite KL expansion for absolutely continuous PMFs: `D(P || Q) = sum_a p(a) log (p(a) / q(a))`. The left-hand side is mathlib's measure-theoretic KL divergence applied to `PMF.toMeasure`; the right-hand side is the usual finite sum over atoms.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 194,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_pmf_eq_sum",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "toReal_klDiv_pmf_eq_sum"
    },
    {
      "doc": "KL divergence from a finite PMF to the uniform law on a nonempty finset is the uniform log-cardinality minus entropy, provided the PMF is supported on that finset: `D(P || U_s) = log |s| - H(P)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 233,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_pmf_uniformOfFinset",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "toReal_klDiv_pmf_uniformOfFinset"
    },
    {
      "doc": "Full-alphabet form of `toReal_klDiv_pmf_uniformOfFinset`: `D(P || U_alpha) = log |alpha| - H(P)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 277,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_pmf_uniformOfFintype",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "toReal_klDiv_pmf_uniformOfFintype"
    },
    {
      "doc": "Semantic bridge for finite mutual information: `I(A;B) = D(P_AB || P_A \u00d7 P_B)`. Here `P_A \u00d7 P_B` is represented by the finite independent-product PMF `indepProd (fstMarginal p) (sndMarginal p)`. This theorem is the finite textbook identity connecting the entropy definition of mutual information to mathlib's measure-theoretic KL divergence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 298,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.mutualInfo_eq_toReal_klDiv_joint_indepProd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "mutualInfo_eq_toReal_klDiv_joint_indepProd"
    },
    {
      "doc": "Product-measure form of the finite mutual-information KL bridge: `I(A;B) = D(P_AB || P_A.toMeasure.prod P_B.toMeasure)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 322,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.mutualInfo_eq_toReal_klDiv_joint_prod_marginals",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "mutualInfo_eq_toReal_klDiv_joint_prod_marginals"
    },
    {
      "doc": "Fiberwise KL form of conditional mutual information. This is zero on zero-marginal third-coordinate atoms. On nonzero atoms it is `D(P_{A,B|C=c} || P_{A|C=c} \u00d7 P_{B|C=c})`, using the marginals of the conditional joint law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 343,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.condMutualInfoFstSndGivenThirdKL",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "condMutualInfoFstSndGivenThirdKL"
    },
    {
      "doc": "The fiber mutual-information helper agrees with the fiberwise KL expression `D(P_{A,B|C=c} || P_{A|C=c} \u00d7 P_{B|C=c})`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 360,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.condMutualInfoFstSndGivenThird_eq_KL",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "condMutualInfoFstSndGivenThird_eq_KL"
    },
    {
      "doc": "Averaged conditional-KL bridge for finite conditional mutual information: `I(A;B | C) = sum_c P_C(c) D(P_{A,B|C=c} || P_{A|C=c} \u00d7 P_{B|C=c})`. Zero-marginal `c` contribute zero by definition of `condMutualInfoFstSndGivenThirdKL`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 384,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.KL",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_eq_sum_thirdMarginal_mul_condMutualInfoFstSndGivenThirdKL",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/KL.lean",
      "short_name": "condMutualInfo_eq_sum_thirdMarginal_mul_condMutualInfoFstSndGivenThirdKL"
    },
    {
      "doc": "Random variables `X`, `Y`, and `Z` form the Markov chain `X \u2192 Y \u2192 Z` when `X` and `Z` are conditionally independent given `Y`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 49,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.IsMarkovChainOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "IsMarkovChainOf"
    },
    {
      "doc": "A triple PMF is a Markov chain in its first-to-second-to-third coordinate order.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 56,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.IsMarkovChain",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "IsMarkovChain"
    },
    {
      "doc": "A triple law is Markov in coordinate order exactly when every atom satisfies the cross-product factorization `p(a,b,c) * p_B(b) = p_AB(a,b) * p_BC(b,c)`. The identity also covers null middle-coordinate fibers, so it requires no finite-alphabet or measurable-space assumptions.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 72,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChain_iff_crossProduct",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChain_iff_crossProduct"
    },
    {
      "doc": "A triple law is Markov exactly when its two endpoint coordinates are independent in every positive-mass conditional fiber of the middle coordinate. The displayed mapped law orders the coordinates as endpoint, endpoint, middle so that it can reuse `condFstSndGivenThird` directly.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 137,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChain_iff_isIndependent_condFstSndGivenThird",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChain_iff_isIndependent_condFstSndGivenThird"
    },
    {
      "doc": "Textbook-facing alias for the positive-fiber Markov characterization.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 152,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChain_iff_fiberwise_endpoints_independent",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChain_iff_fiberwise_endpoints_independent"
    },
    {
      "doc": "The Markov condition `X \u2192 Y \u2192 Z` is equivalent to the textbook zero-CMI identity `I(X;Z | Y) = 0`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 168,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_eq_zero_iff_isMarkovChainOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "condMutualInfoOf_eq_zero_iff_isMarkovChainOf"
    },
    {
      "doc": "Reversing a Markov chain preserves the random-variable Markov condition.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 178,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChainOf_reverse",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChainOf_reverse"
    },
    {
      "doc": "Reversing the coordinates of a triple law preserves its Markov condition.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 188,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChain_map_reverse",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChain_map_reverse"
    },
    {
      "doc": "The total channel from the second coordinate to the first associated with a joint PMF. For `P_B(b) != 0`, this is the canonical conditional law `P_{A | B=b}`. For a null fiber, it is the first marginal `P_A`. The fallback supplies a PMF without requiring an additional `Nonempty alpha` assumption; it has no intended conditional semantics and disappears from the weighted reconstruction laws.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 210,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.condFstGivenSndChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "condFstGivenSndChannel"
    },
    {
      "doc": "On a null conditioning fiber, the total channel uses the documented fallback.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 222,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.condFstGivenSndChannel_of_sndMarginal_eq_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "condFstGivenSndChannel_of_sndMarginal_eq_zero"
    },
    {
      "doc": "On a positive conditioning fiber, the total channel is the canonical conditional PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 229,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.condFstGivenSndChannel_of_sndMarginal_ne_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "condFstGivenSndChannel_of_sndMarginal_ne_zero"
    },
    {
      "doc": "The value chosen for a null conditional fiber is irrelevant after weighting by the conditioning marginal. The PMF `q` represents any alternative fallback.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 239,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.condFstGivenSndChannel_null_fiber_irrelevant",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "condFstGivenSndChannel_null_fiber_irrelevant"
    },
    {
      "doc": "The conditioning marginal times the total conditional-channel mass reconstructs the original joint mass on every fiber, including null fibers.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 251,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.sndMarginal_mul_condFstGivenSndChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "sndMarginal_mul_condFstGivenSndChannel"
    },
    {
      "doc": "Sampling the total conditional channel from the second marginal reconstructs the original pair law with its coordinates in channel input-output order.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 265,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.channelJoint_condFstGivenSndChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "channelJoint_condFstGivenSndChannel"
    },
    {
      "doc": "Extending any pair law of `(A,B)` by sampling `C` from a channel depending only on `B` produces the Markov chain `A \u2192 B \u2192 C`. The result is type-generic and includes null middle-coordinate fibers through the cross-product characterization, without requiring a conditional PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 285,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChain_channelExtension",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChain_channelExtension"
    },
    {
      "doc": "Deterministic post-processing of the middle variable always gives the forward Markov chain `X \u2192 Y \u2192 f(Y)`. Equivalently, `X` and `f(Y)` are conditionally independent given `Y`: `X \u27c2 f(Y) | Y`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 308,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChainOf_comp",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChainOf_comp"
    },
    {
      "doc": "A finite triple law is Markov exactly when its first-two marginal, extended by the total conditional channel `P_{C | B}` extracted from its second-third marginal, reconstructs the original law. The second-third marginal is swapped into `(C,B)` order because `condFstGivenSndChannel` constructs a channel from the second coordinate to the first. Its documented null-fiber fallback is irrelevant: both the original and reconstructed atom masses vanish whenever the middle marginal does.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 338,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChain_iff_eq_channelExtension_condFstGivenSndChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChain_iff_eq_channelExtension_condFstGivenSndChannel"
    },
    {
      "doc": "Compatibility alias for reconstruction by the canonical total conditional channel.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 411,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChain_iff_canonical_channelExtension",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChain_iff_canonical_channelExtension"
    },
    {
      "doc": "Textbook channel-factorization characterization of a finite Markov triple: a law is Markov exactly when some channel from the middle alphabet extends its first-two marginal to the original triple law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 425,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.isMarkovChain_iff_exists_channelExtension",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "isMarkovChain_iff_exists_channelExtension"
    },
    {
      "doc": "Exact mutual-information loss along a finite Markov triple: `I(A;B) = I(A;C) + I(A;B | C)`. This is the PMF form of the Markov chain rule. The Markov hypothesis removes the opposite conditional term `I(A;C | B)` from the ordinary chain rule.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 452,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfo_markov_chain_rule",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfo_markov_chain_rule"
    },
    {
      "doc": "Exact mutual-information loss along the finite Markov chain `X \u2192 Y \u2192 Z`: `I(X;Y) = I(X;Z) + I(X;Y | Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 475,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_markov_chain_rule",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfoOf_markov_chain_rule"
    },
    {
      "doc": "Mutual-information data processing for a finite Markov triple: `I(A;C) <= I(A;B)` when `A -> B -> C`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 498,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfo_dataProcessing",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfo_dataProcessing"
    },
    {
      "doc": "Random-variable mutual-information data processing: `I(X;Z) <= I(X;Y)` when `X -> Y -> Z`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 511,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_dataProcessing",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfoOf_dataProcessing"
    },
    {
      "doc": "Conditional-entropy form of data processing: `H(X|Y) <= H(X|Z)` when `X -> Y -> Z`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 525,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_dataProcessing",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "condEntropyOf_dataProcessing"
    },
    {
      "doc": "PMF form of the conditional-entropy data-processing consequence: `H(A|B) <= H(A|C)` when `A -> B -> C`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 544,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.condEntropy_dataProcessing",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "condEntropy_dataProcessing"
    },
    {
      "doc": "Equality in mutual-information data processing holds exactly when the reverse chain `X -> Z -> Y` is also Markov.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 557,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_dataProcessing_eq_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfoOf_dataProcessing_eq_iff"
    },
    {
      "doc": "For a Markov triple law, equality in mutual-information data processing holds exactly when its first, third, and second coordinate variables form the reverse Markov chain.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 581,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfo_dataProcessing_eq_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfo_dataProcessing_eq_iff"
    },
    {
      "doc": "Under the forward chain `X -> Y -> Z`, equality in conditional-entropy data processing holds exactly when the reverse chain `X -> Z -> Y` is also Markov. Equivalently, `X` and `Y` are conditionally independent given `Z`, `X \u27c2 Y | Z`; in this sense, `Z` retains all information about `X` carried by `Y`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 599,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_dataProcessing_eq_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "condEntropyOf_dataProcessing_eq_iff"
    },
    {
      "doc": "For a Markov triple law, equality in conditional-entropy data processing holds exactly when its first, third, and second coordinate variables form the reverse Markov chain.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 617,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.condEntropy_dataProcessing_eq_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "condEntropy_dataProcessing_eq_iff"
    },
    {
      "doc": "Applying a channel to the right coordinate of a finite joint law cannot increase mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 634,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfo_channel_right_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfo_channel_right_le"
    },
    {
      "doc": "Applying a channel to the left coordinate of a finite joint law cannot increase mutual information. The displayed bind is the law of the processed left output paired with the unchanged right coordinate.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 664,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfo_channel_left_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfo_channel_left_le"
    },
    {
      "doc": "Applying independent channels to both coordinates of a finite joint law cannot increase mutual information. Conditional on an input pair `(a,b)`, the two channel outputs have law `indepProd (W a) (V b)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 706,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfo_independent_channels_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfo_independent_channels_le"
    },
    {
      "doc": "Mutual information contracts along a two-stage finite channel cascade.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 725,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfo_channelComp_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfo_channelComp_le"
    },
    {
      "doc": "Textbook-facing alias for mutual-information contraction along a channel cascade.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 735,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfo_channel_cascade_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfo_channel_cascade_le"
    },
    {
      "doc": "Deterministically mapping every output law of a finite channel cannot increase its input-output mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 747,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Markov",
      "name": "LeanInfoTheory.Shannon.mutualInfo_channel_map_output_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Markov.lean",
      "short_name": "mutualInfo_channel_map_output_le"
    },
    {
      "doc": "Independent product of two probability mass functions. Mathematically, this is the law of `(X, Y)` when `X` has law `p`, `Y` has law `q`, and the two variables are independent.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 44,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.indepProd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "indepProd"
    },
    {
      "doc": "The atom mass of an independent product is the product of the two atom masses.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 68,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.indepProd_apply",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "indepProd_apply"
    },
    {
      "doc": "An atom of the independent product has zero mass exactly when one of the two coordinate atoms has zero mass.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 83,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.indepProd_apply_eq_zero_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "indepProd_apply_eq_zero_iff"
    },
    {
      "doc": "An atom belongs to the independent product support exactly when both coordinate atoms belong to the corresponding supports.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 93,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.indepProd_apply_ne_zero_iff",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "indepProd_apply_ne_zero_iff"
    },
    {
      "doc": "The support of an independent product is the product of the two supports.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 100,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.support_indepProd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "support_indepProd"
    },
    {
      "doc": "The first marginal of an independent product is the first factor law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 109,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.fstMarginal_indepProd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "fstMarginal_indepProd"
    },
    {
      "doc": "The second marginal of an independent product is the second factor law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 126,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.sndMarginal_indepProd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "sndMarginal_indepProd"
    },
    {
      "doc": "Swapping the coordinates of an independent product swaps the two factor laws.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 144,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.indepProd_map_swap",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "indepProd_map_swap"
    },
    {
      "doc": "The independent product law assigns product rectangles the product of the factor probabilities.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 164,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.indepProd_toMeasure_prod",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "indepProd_toMeasure_prod"
    },
    {
      "doc": "The measure associated to the independent product PMF is the product of the two associated measures.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 213,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.indepProd_toMeasure",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "indepProd_toMeasure"
    },
    {
      "doc": "A finite joint PMF is absolutely continuous with respect to the independent product of its two marginals. Mathematically, if the product of the marginal masses of `(a, b)` is zero, then one marginal atom is zero, hence the joint atom `p (a, b)` is zero. This is the support fact needed before comparing finite mutual information with KL divergence from the joint law to the product of its marginals.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 234,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.joint_toMeasure_absolutelyContinuous_indepProd_marginals",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "joint_toMeasure_absolutelyContinuous_indepProd_marginals"
    },
    {
      "doc": "Product-measure version of `joint_toMeasure_absolutelyContinuous_indepProd_marginals`. This is the form expected by KL-divergence statements that use `Measure.prod` directly.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 269,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Product",
      "name": "LeanInfoTheory.Shannon.joint_toMeasure_absolutelyContinuous_prod_marginals",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Product.lean",
      "short_name": "joint_toMeasure_absolutelyContinuous_prod_marginals"
    },
    {
      "doc": "The induced law of `(Theta, T(X), X)`. The `(parameter, statistic, observation)` coordinate order is intentional: it puts the statistic beside the parameter before the observation is reconstructed by a channel from statistic values, matching the recovery and channel factorization statements below.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 48,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.statisticTripleLawOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "statisticTripleLawOf"
    },
    {
      "doc": "Under the fixed source law `p`, `T` is sufficient for `Theta` based on `X` when the reverse chain `Theta -> T(X) -> X` is Markov; equivalently, `Theta` and `X` are conditionally independent given `T(X)`. This is a fixed-law (or fixed-prior) predicate. The family-level `IsSufficientStatistic` below instead asks for one recovery channel that works for every model parameter, independently of a chosen prior.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 62,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.IsSufficientStatisticOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "IsSufficientStatisticOf"
    },
    {
      "doc": "Fixed-prior sufficiency is exactly the reverse Markov condition.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 81,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientStatisticOf_iff_isMarkovChainOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientStatisticOf_iff_isMarkovChainOf"
    },
    {
      "doc": "A finite-valued statistic is sufficient exactly when the parameter and the observation have zero conditional mutual information given the statistic.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 93,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientStatisticOf_iff_condMutualInfoOf_eq_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientStatisticOf_iff_condMutualInfoOf_eq_zero"
    },
    {
      "doc": "A finite-valued statistic is sufficient exactly when it preserves the mutual information between the parameter and the observation under the fixed law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 108,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientStatisticOf_iff_mutualInfoOf_eq",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientStatisticOf_iff_mutualInfoOf_eq"
    },
    {
      "doc": "A finite-valued statistic is sufficient exactly when conditioning on it leaves the same parameter uncertainty as conditioning on the full observation.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 127,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientStatisticOf_iff_condEntropyOf_eq",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientStatisticOf_iff_condEntropyOf_eq"
    },
    {
      "doc": "A fixed-prior statistic is sufficient exactly when one channel from statistic values back to observations reconstructs the complete `(parameter, statistic, observation)` law. The same channel is used for every parameter value, and its behavior on a null statistic fiber is irrelevant.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 184,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientStatisticOf_iff_exists_recovery",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientStatisticOf_iff_exists_recovery"
    },
    {
      "doc": "Sufficiency implies that the observation marginal can be recovered from the statistic marginal. This is only a one-way consequence: marginal recovery by itself does not characterize sufficiency.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 216,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.exists_marginal_recovery_of_isSufficientStatisticOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "exists_marginal_recovery_of_isSufficientStatisticOf"
    },
    {
      "doc": "A channel is sufficient for a model family when one recovery channel, shared by every parameter value, reconstructs each complete output-input joint law.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 267,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.IsSufficientChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "IsSufficientChannel"
    },
    {
      "doc": "A deterministic statistic is sufficient for a model family when its induced deterministic channel is sufficient for that family.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 278,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.IsSufficientStatistic",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "IsSufficientStatistic"
    },
    {
      "doc": "The identity statistic is sufficient for every model family.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 284,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientStatistic_id",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientStatistic_id"
    },
    {
      "doc": "For every parameter prior, a sufficient family channel gives the reverse Markov chain `parameter -> output -> input` in the generated experiment law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 367,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isMarkovChainOf_of_isSufficientChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isMarkovChainOf_of_isSufficientChannel"
    },
    {
      "doc": "For every finite parameter prior, sufficiency makes the parameter and input conditionally independent given the channel output.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 392,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_eq_zero_of_isSufficientChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "condMutualInfo_eq_zero_of_isSufficientChannel"
    },
    {
      "doc": "For every finite parameter prior, a sufficient family channel preserves the mutual information between the parameter and the model observation.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 420,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.mutualInfo_eq_of_isSufficientChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "mutualInfo_eq_of_isSufficientChannel"
    },
    {
      "doc": "For every finite parameter prior, conditioning the parameter on a sufficient channel output leaves the same uncertainty as conditioning on the model input.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 443,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.condEntropy_eq_of_isSufficientChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "condEntropy_eq_of_isSufficientChannel"
    },
    {
      "doc": "For a prior supported on every parameter value, family sufficiency is equivalent to the reverse Markov condition in the generated experiment law. Only the model-input alphabet must be finite.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 481,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientChannel_iff_isMarkovChainOf_of_support_eq_univ",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientChannel_iff_isMarkovChainOf_of_support_eq_univ"
    },
    {
      "doc": "On a finite nonempty parameter alphabet, a family channel is sufficient exactly when it gives the reverse Markov chain for every parameter prior.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 565,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientChannel_iff_forall_isMarkovChainOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientChannel_iff_forall_isMarkovChainOf"
    },
    {
      "doc": "For a prior supported on every parameter value, family sufficiency of a deterministic statistic is equivalent to its fixed-prior sufficiency.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 604,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientStatistic_iff_isSufficientStatisticOf_of_support_eq_univ",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientStatistic_iff_isSufficientStatisticOf_of_support_eq_univ"
    },
    {
      "doc": "On a finite nonempty parameter alphabet, a deterministic statistic is sufficient for a model family exactly when it is sufficient under every prior.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 620,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientStatistic_iff_forall_isSufficientStatisticOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientStatistic_iff_forall_isSufficientStatisticOf"
    },
    {
      "doc": "Finite Fisher-Neyman factorization theorem for deterministic statistics. A statistic is sufficient for a model family exactly when every model mass factors through the statistic into a parameter-dependent factor `g` and one parameter-independent factor `h`. Pointwise finiteness of `h` makes each finite fiber mass `sum_{a : T a = b} h a` finite and permits normalization on a positive fiber. Pointwise finiteness of `g` separately excludes pathological top-valued witnesses and matches the canonical forward witness `g t b = (model t).map T b`; it is not the hypothesis used to normalize the recovery row.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 720,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
      "name": "LeanInfoTheory.Shannon.isSufficientStatistic_iff_exists_fisherNeymanFactorization",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency.lean",
      "short_name": "isSufficientStatistic_iff_exists_fisherNeymanFactorization"
    },
    {
      "doc": "If one channel exactly recovers the complete output-input joint law for each of two input laws, then the forward channel preserves their `ENNReal` KL divergence. No support inclusion is needed: data processing through the forward and recovery channels gives the two inequalities even when either divergence is infinite.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 62,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
      "name": "LeanInfoTheory.Shannon.klDiv_channel_eq_of_common_recovery",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency/KL.lean",
      "short_name": "klDiv_channel_eq_of_common_recovery"
    },
    {
      "doc": "Under input support inclusion, equality in finite `ENNReal` KL data processing holds exactly when one channel recovers both complete output-input joint laws. The support hypothesis is needed only for the converse: it excludes the uninformative case where both KL divergences are `\u22a4`. The recovery-to-equality direction is the unconditional theorem above.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 93,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
      "name": "LeanInfoTheory.Shannon.klDiv_channel_eq_iff_exists_common_recovery",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency/KL.lean",
      "short_name": "klDiv_channel_eq_iff_exists_common_recovery"
    },
    {
      "doc": "The real-valued finite KL equality case has the same common exact-recovery characterization under input support inclusion.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 129,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_channel_eq_iff_exists_common_recovery",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency/KL.lean",
      "short_name": "toReal_klDiv_channel_eq_iff_exists_common_recovery"
    },
    {
      "doc": "Under input support inclusion, a deterministic statistic preserves `ENNReal` KL divergence exactly when one channel recovers both input-statistic graph laws from their statistic marginals.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 166,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
      "name": "LeanInfoTheory.Shannon.klDiv_map_eq_iff_exists_common_recovery",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency/KL.lean",
      "short_name": "klDiv_map_eq_iff_exists_common_recovery"
    },
    {
      "doc": "The real-valued deterministic-statistic equality case has the same common exact-recovery characterization under input support inclusion.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 189,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
      "name": "LeanInfoTheory.Shannon.toReal_klDiv_map_eq_iff_exists_common_recovery",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency/KL.lean",
      "short_name": "toReal_klDiv_map_eq_iff_exists_common_recovery"
    },
    {
      "doc": "A sufficient channel preserves `ENNReal` KL divergence between every pair of laws in the model family. The family sufficiency hypothesis already supplies one recovery channel shared by all parameter values, so no support inclusion is needed, even when the divergence is infinite.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 218,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
      "name": "LeanInfoTheory.Shannon.klDiv_eq_of_isSufficientChannel",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency/KL.lean",
      "short_name": "klDiv_eq_of_isSufficientChannel"
    },
    {
      "doc": "A sufficient deterministic statistic preserves `ENNReal` KL divergence between every pair of laws in the model family.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 236,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
      "name": "LeanInfoTheory.Shannon.klDiv_eq_of_isSufficientStatistic",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency/KL.lean",
      "short_name": "klDiv_eq_of_isSufficientStatistic"
    },
    {
      "doc": "For a Boolean-indexed model whose `false` law is supported within its `true` law, channel sufficiency is equivalent to preservation of their directed `ENNReal` KL divergence. The binary index is substantive: the guarded equality produces one recovery channel for these two laws, which therefore recovers every law in this family. No analogous converse for unrelated pairwise witnesses in a larger family is claimed.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 262,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
      "name": "LeanInfoTheory.Shannon.isSufficientChannel_iff_klDiv_eq_bool",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency/KL.lean",
      "short_name": "isSufficientChannel_iff_klDiv_eq_bool"
    },
    {
      "doc": "For a guarded Boolean-indexed model, a deterministic statistic is sufficient exactly when it preserves the directed `ENNReal` KL divergence from the `false` law to the `true` law.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 293,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
      "name": "LeanInfoTheory.Shannon.isSufficientStatistic_iff_klDiv_eq_bool",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Sufficiency/KL.lean",
      "short_name": "isSufficientStatistic_iff_klDiv_eq_bool"
    },
    {
      "doc": "Mutual information is nonnegative: `0 <= I(A;B)`. The proof passes through the semantic bridge `I(A;B) = D(P_AB || P_A x P_B)` and then uses nonnegativity of the real coercion of an `ENNReal` KL divergence.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 61,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_nonneg"
    },
    {
      "doc": "Fiber conditional entropy is nonnegative: `0 <= H(A | B=b)`. On zero-mass fibers this is `0 <= 0`; on nonzero fibers it reduces to entropy nonnegativity for the conditional law `P_{A|B=b}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 77,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyFstGivenSnd_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyFstGivenSnd_nonneg"
    },
    {
      "doc": "On a nonzero conditioning fiber, conditional entropy is zero exactly when the canonical conditional PMF is pure.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 90,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyFstGivenSnd_eq_zero_iff_of_sndMarginal_ne_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyFstGivenSnd_eq_zero_iff_of_sndMarginal_ne_zero"
    },
    {
      "doc": "Conditional entropy is nonnegative: `0 <= H(A | B)`. The proof uses the finite semantic bridge `H(A | B) = sum_b P_B(b) * H(P_{A|B=b})`, then every summand is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 110,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_nonneg"
    },
    {
      "doc": "Conditional entropy of finite-valued random variables is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 119,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_nonneg"
    },
    {
      "doc": "Conditional entropy is zero exactly when the first coordinate is a function of the second coordinate on the support of the joint PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 132,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_eq_zero_iff_exists_function",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_eq_zero_iff_exists_function"
    },
    {
      "doc": "Conditional entropy of finite-valued random variables is zero exactly when the first variable is a function of the second on the source PMF support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 222,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_eq_zero_iff_exists_function",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_eq_zero_iff_exists_function"
    },
    {
      "doc": "A deterministic function of `Y` has zero conditional entropy given `Y`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 251,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_comp_eq_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_comp_eq_zero"
    },
    {
      "doc": "A finite-valued random variable has zero conditional entropy given itself.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 261,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_self_eq_zero",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_self_eq_zero"
    },
    {
      "doc": "Joint entropy equals the entropy of the second marginal exactly when the first coordinate is a function of the second on the joint support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 273,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropy_eq_entropy_sndMarginal_iff_exists_function",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropy_eq_entropy_sndMarginal_iff_exists_function"
    },
    {
      "doc": "`H(X,Y) = H(Y)` exactly when `X` is a function of `Y` on the source PMF support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 299,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_eq_entropyOf_iff_exists_function",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "jointEntropyOf_eq_entropyOf_iff_exists_function"
    },
    {
      "doc": "Applying a deterministic map to a finite PMF cannot increase entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 341,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropy_map_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropy_map_le"
    },
    {
      "doc": "Applying a deterministic map preserves entropy exactly when it is injective on the support of the source PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 354,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropy_map_eq_iff_injOn_support",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropy_map_eq_iff_injOn_support"
    },
    {
      "doc": "Deterministic post-processing of a finite-valued variable cannot increase entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 381,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropyOf_comp_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropyOf_comp_le"
    },
    {
      "doc": "Deterministic post-processing preserves random-variable entropy exactly when the map is injective on the support of the law of the original variable.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 393,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropyOf_comp_eq_iff_injOn_support",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropyOf_comp_eq_iff_injOn_support"
    },
    {
      "doc": "Conditional deterministic chain rule: `H(X|Z) = H(f(X)|Z) + H(X|f(X),Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 406,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_deterministic_chain_rule",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_deterministic_chain_rule"
    },
    {
      "doc": "Deterministic post-processing cannot increase conditional entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 438,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_comp_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_comp_le"
    },
    {
      "doc": "Deterministic post-processing preserves conditional entropy exactly when `X` is recoverable from `(f(X), Z)` on the source PMF support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 453,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_comp_eq_iff_exists_recovery",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_comp_eq_iff_exists_recovery"
    },
    {
      "doc": "Applying a deterministic map to the first coordinate cannot increase `H(A|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 478,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_map_fst_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_map_fst_le"
    },
    {
      "doc": "The first-coordinate map preserves `H(A|C)` exactly when `A` is recoverable from `(f(A), C)` on the joint support.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 497,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_map_fst_eq_iff_exists_recovery",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_map_fst_eq_iff_exists_recovery"
    },
    {
      "doc": "Conditioning reduces entropy: `H(A|B) <= H(A)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 517,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_le_entropy_fstMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_le_entropy_fstMarginal"
    },
    {
      "doc": "Mutual information is at most the entropy of the first marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 526,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_le_entropy_fstMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_le_entropy_fstMarginal"
    },
    {
      "doc": "Mutual information is at most the entropy of the second marginal.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 537,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_le_entropy_sndMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_le_entropy_sndMarginal"
    },
    {
      "doc": "The entropy of the first marginal is at most the joint entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 549,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropy_fstMarginal_le_entropy",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropy_fstMarginal_le_entropy"
    },
    {
      "doc": "The entropy of the second marginal is at most the joint entropy.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 561,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropy_sndMarginal_le_entropy",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropy_sndMarginal_le_entropy"
    },
    {
      "doc": "Joint entropy is subadditive: `H(A,B) <= H(A) + H(B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 572,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropy_le_entropy_fstMarginal_add_entropy_sndMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropy_le_entropy_fstMarginal_add_entropy_sndMarginal"
    },
    {
      "doc": "Random-variable conditioning reduces entropy: `H(X|Y) <= H(X)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 581,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_le_entropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_le_entropyOf"
    },
    {
      "doc": "Random-variable mutual information is at most `H(X)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 591,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_le_entropyOf_left",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfoOf_le_entropyOf_left"
    },
    {
      "doc": "Random-variable mutual information is at most `H(Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 601,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_le_entropyOf_right",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfoOf_le_entropyOf_right"
    },
    {
      "doc": "The entropy of `X` is at most the joint entropy `H(X,Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 611,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropyOf_le_jointEntropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropyOf_le_jointEntropyOf"
    },
    {
      "doc": "The entropy of `Y` is at most the joint entropy `H(X,Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 621,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropyOf_le_jointEntropyOf_swap",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropyOf_le_jointEntropyOf_swap"
    },
    {
      "doc": "Random-variable joint entropy is subadditive: `H(X,Y) <= H(X) + H(Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 631,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_le_entropyOf_add_entropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "jointEntropyOf_le_entropyOf_add_entropyOf"
    },
    {
      "doc": "Textbook-facing PMF alias for `H(A|B) <= H(A)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 643,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_le_entropy_left",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_le_entropy_left"
    },
    {
      "doc": "Textbook-facing PMF alias for `I(A;B) <= H(A)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 650,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_le_entropy_left",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_le_entropy_left"
    },
    {
      "doc": "Textbook-facing PMF alias for `I(A;B) <= H(B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 657,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_le_entropy_right",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_le_entropy_right"
    },
    {
      "doc": "Textbook-facing PMF alias for `H(A) <= H(A,B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 664,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropy_left_le_jointEntropy",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropy_left_le_jointEntropy"
    },
    {
      "doc": "Textbook-facing PMF alias for `H(B) <= H(A,B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 671,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropy_right_le_jointEntropy",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropy_right_le_jointEntropy"
    },
    {
      "doc": "Textbook-facing PMF alias for joint-entropy subadditivity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 678,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.jointEntropy_le_add_marginalEntropy",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "jointEntropy_le_add_marginalEntropy"
    },
    {
      "doc": "Left-oriented alias for `H(X) <= H(X,Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 685,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropyOf_left_le_jointEntropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropyOf_left_le_jointEntropyOf"
    },
    {
      "doc": "Right-oriented alias for `H(Y) <= H(X,Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 693,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.entropyOf_right_le_jointEntropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "entropyOf_right_le_jointEntropyOf"
    },
    {
      "doc": "Short random-variable alias for joint-entropy subadditivity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 701,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.jointEntropyOf_le_add_entropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "jointEntropyOf_le_add_entropyOf"
    },
    {
      "doc": "Fiber conditional mutual information is nonnegative: `0 <= I(A;B | C=c)`. On zero-mass fibers this is `0 <= 0`; on nonzero fibers it reduces to `mutualInfo_nonneg` applied to the conditional joint law `P_{A,B|C=c}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 718,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfoFstSndGivenThird_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfoFstSndGivenThird_nonneg"
    },
    {
      "doc": "Conditional mutual information is nonnegative: `0 <= I(A;B | C)`. We use the finite semantic bridge `I(A;B | C) = sum_c P_C(c) * I(A;B | C=c)`, then each summand is nonnegative because both `P_C(c)` and the fiber mutual information are nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 740,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfo_nonneg"
    },
    {
      "doc": "Conditional mutual information of finite-valued random variables is nonnegative.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 751,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_nonneg",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfoOf_nonneg"
    },
    {
      "doc": "Taking the first marginal after projecting `(A,B,C)` to `(A,C)` recovers the first marginal of the original law: `(P_AC)_A = P_A`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 767,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.fstMarginal_fstThirdMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "fstMarginal_fstThirdMarginal"
    },
    {
      "doc": "Viewing a triple law as a joint law of `A` and `(B,C)`, the second marginal is the same law as the explicit `(B,C)` marginal: `P_{B,C} = sndMarginal P_{A,(B,C)}`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 780,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.sndMarginal_eq_sndThirdMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "sndMarginal_eq_sndThirdMarginal"
    },
    {
      "doc": "First mutual-information chain rule: `I(A;B,C) = I(A;C) + I(A;B | C)`. In Lean's right-associated product convention, a PMF `p : PMF (alpha \u00d7 beta \u00d7 gamma)` is also a joint law of `A` and `(B,C)`, so `mutualInfo p` denotes `I(A;B,C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 797,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_chain_rule_fst",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_chain_rule_fst"
    },
    {
      "doc": "Second mutual-information chain-rule variant: `I(A;B,C) = I(A;B) + I(A;C | B)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 812,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_chain_rule_snd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_chain_rule_snd"
    },
    {
      "doc": "Random-variable form of `mutualInfo_chain_rule_fst`: `I(X;Y,Z) = I(X;Z) + I(X;Y | Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 853,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_chain_rule_fst",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfoOf_chain_rule_fst"
    },
    {
      "doc": "Random-variable form of `mutualInfo_chain_rule_snd`: `I(X;Y,Z) = I(X;Y) + I(X;Z | Y)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 867,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_chain_rule_snd",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfoOf_chain_rule_snd"
    },
    {
      "doc": "Deterministic mutual-information chain rule: `I(X;Y) = I(f(X);Y) + I(X;Y | f(X))`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 928,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_deterministic_chain_rule_left",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfoOf_deterministic_chain_rule_left"
    },
    {
      "doc": "Deterministic post-processing of the left variable cannot increase mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 949,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_comp_left_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfoOf_comp_left_le"
    },
    {
      "doc": "Deterministic post-processing of the right variable cannot increase mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 960,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_comp_right_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfoOf_comp_right_le"
    },
    {
      "doc": "Deterministic post-processing of both variables cannot increase mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 974,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_comp_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfoOf_comp_le"
    },
    {
      "doc": "Mapping the first coordinate of a joint PMF cannot increase mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 989,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_map_fst_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_map_fst_le"
    },
    {
      "doc": "Mapping the second coordinate of a joint PMF cannot increase mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1005,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_map_snd_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_map_snd_le"
    },
    {
      "doc": "Mapping both coordinates of a joint PMF cannot increase mutual information.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1021,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_map_prod_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_map_prod_le"
    },
    {
      "doc": "Explicitly two-sided alias for deterministic mutual-information processing.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1039,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfoOf_comp_both_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfoOf_comp_both_le"
    },
    {
      "doc": "Left-coordinate alias for deterministic processing of a joint PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1050,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_map_left_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_map_left_le"
    },
    {
      "doc": "Right-coordinate alias for deterministic processing of a joint PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1058,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_map_right_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_map_right_le"
    },
    {
      "doc": "Both-coordinate alias for deterministic processing of a joint PMF.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1066,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.mutualInfo_map_both_le",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "mutualInfo_map_both_le"
    },
    {
      "doc": "Conditional mutual information as a difference of conditional entropies: `I(A;B | C) = H(A | C) - H(A | B,C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1080,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_eq_condEntropy_fstThirdMarginal_sub_condEntropy",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfo_eq_condEntropy_fstThirdMarginal_sub_condEntropy"
    },
    {
      "doc": "Symmetric conditional-entropy difference form: `I(A;B | C) = H(B | C) - H(B | A,C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1093,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_eq_condEntropy_sndThirdMarginal_sub_condEntropy_swap12",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfo_eq_condEntropy_sndThirdMarginal_sub_condEntropy_swap12"
    },
    {
      "doc": "Conditioning reduces entropy: `H(A | B,C) <= H(A | C)`. The proof rewrites the difference as `I(A;B | C)` and uses conditional mutual information nonnegativity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1112,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_le_condEntropy_fstThirdMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_le_condEntropy_fstThirdMarginal"
    },
    {
      "doc": "Random-variable conditioning-reduces-entropy theorem: `H(X | Y,Z) <= H(X | Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1126,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_pair_le_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_pair_le_condEntropyOf"
    },
    {
      "doc": "Conditional mutual information is at most `H(A|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1138,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_le_condEntropy_fstThirdMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfo_le_condEntropy_fstThirdMarginal"
    },
    {
      "doc": "Conditional mutual information is at most `H(B|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1150,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_le_condEntropy_sndThirdMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfo_le_condEntropy_sndThirdMarginal"
    },
    {
      "doc": "`H(A|C)` is at most the conditional joint entropy `H(A,B|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1166,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_fstThirdMarginal_le_condEntropy_pairThirdLaw",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_fstThirdMarginal_le_condEntropy_pairThirdLaw"
    },
    {
      "doc": "`H(B|C)` is at most the conditional joint entropy `H(A,B|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1182,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_sndThirdMarginal_le_condEntropy_pairThirdLaw",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_sndThirdMarginal_le_condEntropy_pairThirdLaw"
    },
    {
      "doc": "Conditional joint entropy is subadditive: `H(A,B|C) <= H(A|C) + H(B|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1195,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_pairThirdLaw_le_condEntropy_fstThirdMarginal_add_condEntropy_sndThirdMarginal",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_pairThirdLaw_le_condEntropy_fstThirdMarginal_add_condEntropy_sndThirdMarginal"
    },
    {
      "doc": "Random-variable conditional mutual information is at most `H(X|Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1206,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_le_condEntropyOf_left",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfoOf_le_condEntropyOf_left"
    },
    {
      "doc": "Random-variable conditional mutual information is at most `H(Y|Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1221,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfoOf_le_condEntropyOf_right",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfoOf_le_condEntropyOf_right"
    },
    {
      "doc": "`H(X|Z)` is at most the conditional joint entropy `H(X,Y|Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1236,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_le_condEntropyOf_pair",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_le_condEntropyOf_pair"
    },
    {
      "doc": "`H(Y|Z)` is at most the conditional joint entropy `H(X,Y|Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1252,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_le_condEntropyOf_pair_swap",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_le_condEntropyOf_pair_swap"
    },
    {
      "doc": "Random-variable conditional joint entropy is subadditive.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1268,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_pair_le_condEntropyOf_add_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_pair_le_condEntropyOf_add_condEntropyOf"
    },
    {
      "doc": "Textbook-facing PMF alias for `I(A;B|C) <= H(A|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1282,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_le_condEntropy_left",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfo_le_condEntropy_left"
    },
    {
      "doc": "Textbook-facing PMF alias for `I(A;B|C) <= H(B|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1290,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condMutualInfo_le_condEntropy_right",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condMutualInfo_le_condEntropy_right"
    },
    {
      "doc": "Left-oriented PMF alias for `H(A|C) <= H(A,B|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1298,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_left_le_condEntropy_pair",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_left_le_condEntropy_pair"
    },
    {
      "doc": "Right-oriented PMF alias for `H(B|C) <= H(A,B|C)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1306,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_right_le_condEntropy_pair",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_right_le_condEntropy_pair"
    },
    {
      "doc": "Short PMF alias for conditional joint-entropy subadditivity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1314,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropy_pair_le_add_condEntropy",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropy_pair_le_add_condEntropy"
    },
    {
      "doc": "Left-oriented random-variable alias for `H(X|Z) <= H(X,Y|Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1324,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_left_le_condEntropyOf_pair",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_left_le_condEntropyOf_pair"
    },
    {
      "doc": "Right-oriented random-variable alias for `H(Y|Z) <= H(X,Y|Z)`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1333,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_right_le_condEntropyOf_pair",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_right_le_condEntropyOf_pair"
    },
    {
      "doc": "Short random-variable alias for conditional joint-entropy subadditivity.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 1342,
      "module": "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
      "name": "LeanInfoTheory.Shannon.condEntropyOf_pair_le_add_condEntropyOf",
      "path": "LeanInfoTheory/Shannon/SemanticBridge/Theorems.lean",
      "short_name": "condEntropyOf_pair_le_add_condEntropyOf"
    },
    {
      "doc": "Convert a real-valued quantity measured in nats to base-`b` information units. For the usual information-theoretic interpretation the base must satisfy `1 < b`. The definition itself is total because `Real.log` and real division are total in Lean.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 46,
      "module": "LeanInfoTheory.Shannon.Units",
      "name": "LeanInfoTheory.Shannon.natsToBase",
      "path": "LeanInfoTheory/Shannon/Units.lean",
      "short_name": "natsToBase"
    },
    {
      "doc": "Convert a real-valued quantity measured in nats to bits, namely `x / Real.log 2`.",
      "kind": "def",
      "kind_label": "Definition",
      "line": 50,
      "module": "LeanInfoTheory.Shannon.Units",
      "name": "LeanInfoTheory.Shannon.natsToBits",
      "path": "LeanInfoTheory/Shannon/Units.lean",
      "short_name": "natsToBits"
    },
    {
      "doc": "Change a real quantity from logarithm base `b` to logarithm base `c`. If `x` is measured in nats, then `x / Real.log b` is its value in base-`b` units. Thus the theorem is the usual change-of-base identity `x_c = log_c(b) * x_b`.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 60,
      "module": "LeanInfoTheory.Shannon.Units",
      "name": "LeanInfoTheory.Shannon.div_log_change_base",
      "path": "LeanInfoTheory/Shannon/Units.lean",
      "short_name": "div_log_change_base"
    },
    {
      "doc": "A `Real.negMulLog` summand in base-`b` units.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 66,
      "module": "LeanInfoTheory.Shannon.Units",
      "name": "LeanInfoTheory.Shannon.negMulLog_div_log",
      "path": "LeanInfoTheory/Shannon/Units.lean",
      "short_name": "negMulLog_div_log"
    },
    {
      "doc": "Finite PMF entropy converted from nats to base-`b` units is the usual `-sum_x p(x) log_b p(x)` formula.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 75,
      "module": "LeanInfoTheory.Shannon.Units",
      "name": "LeanInfoTheory.Shannon.entropy_div_log",
      "path": "LeanInfoTheory/Shannon/Units.lean",
      "short_name": "entropy_div_log"
    },
    {
      "doc": "Finite-valued random-variable entropy converted from nats to base-`b` units.",
      "kind": "theorem",
      "kind_label": "Theorem",
      "line": 87,
      "module": "LeanInfoTheory.Shannon.Units",
      "name": "LeanInfoTheory.Shannon.entropyOf_div_log",
      "path": "LeanInfoTheory/Shannon/Units.lean",
      "short_name": "entropyOf_div_log"
    }
  ],
  "documented_count": 717,
  "kind_counts": {
    "Definition": 110,
    "Inductive": 4,
    "Instance": 2,
    "Theorem": 602
  },
  "modules": [
    "LeanInfoTheory.Basic",
    "LeanInfoTheory.Examples.CommonCause",
    "LeanInfoTheory.Examples.Fano",
    "LeanInfoTheory.Examples.FiniteFamily",
    "LeanInfoTheory.Examples.KLTop",
    "LeanInfoTheory.Examples.StochasticChannels",
    "LeanInfoTheory.Examples.SufficientStatistics",
    "LeanInfoTheory.Examples.SupportSensitive",
    "LeanInfoTheory.Probability.Finite",
    "LeanInfoTheory.Probability.FiniteChannel",
    "LeanInfoTheory.Probability.FiniteMixture",
    "LeanInfoTheory.Shannon.BinaryEntropy",
    "LeanInfoTheory.Shannon.Entropy",
    "LeanInfoTheory.Shannon.EntropyBounds",
    "LeanInfoTheory.Shannon.EntropyConcavity",
    "LeanInfoTheory.Shannon.Fano",
    "LeanInfoTheory.Shannon.FiniteFamily",
    "LeanInfoTheory.Shannon.InfoMeasures",
    "LeanInfoTheory.Shannon.LogSum",
    "LeanInfoTheory.Shannon.SemanticBridge.Conditional",
    "LeanInfoTheory.Shannon.SemanticBridge.ConditionalKL",
    "LeanInfoTheory.Shannon.SemanticBridge.Convexity",
    "LeanInfoTheory.Shannon.SemanticBridge.DataProcessing",
    "LeanInfoTheory.Shannon.SemanticBridge.Entropy",
    "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamily",
    "LeanInfoTheory.Shannon.SemanticBridge.FiniteFamilyIndependence",
    "LeanInfoTheory.Shannon.SemanticBridge.FiniteSums",
    "LeanInfoTheory.Shannon.SemanticBridge.Independence",
    "LeanInfoTheory.Shannon.SemanticBridge.KL",
    "LeanInfoTheory.Shannon.SemanticBridge.Markov",
    "LeanInfoTheory.Shannon.SemanticBridge.Product",
    "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency",
    "LeanInfoTheory.Shannon.SemanticBridge.Sufficiency.KL",
    "LeanInfoTheory.Shannon.SemanticBridge.Theorems",
    "LeanInfoTheory.Shannon.Units"
  ],
  "schema": "lean-info-theory.declaration-index.v1",
  "undocumented_count": 1
}
