{
  "prefix": {
    "pe": "https://proofengine.info/proofs/infonce-lower-bounds-mutual-information/",
    "prov": "http://www.w3.org/ns/prov#",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "schema": "http://schema.org/"
  },
  "entity": {
    "pe:claim": {
      "prov:type": "pe:Claim",
      "prov:label": "Let (X,Y) ~ p(x,y). For each contrastive training instance, sample one positive Y_1 ~ p(y|X) and N-1 negatives Y_2,...,Y_N iid ~ p(y), conditionally independent given X. Let i* be the index of the positive, uniformly distributed over {1,...,N}. For any measurable scoring function s(x,y), define L_N(s) = - E[ log( exp(s(X,Y_{i*})) / sum_j exp(s(X,Y_j)) ) ]. Then log N - L_N(s) is a lower bound on I(X;Y). The Bayes-optimal score is s*(x,y) = log(p(y|x)/p(y)) + c(x), where c(x) is arbitrary. Under the standard multi-sample setup, the resulting InfoNCE lower bound tightens as N increases.",
      "prov:value": "Let (X,Y) ~ p(x,y). For each contrastive training instance, sample one positive Y_1 ~ p(y|X) and N-1 negatives Y_2,...,Y_N iid ~ p(y), conditionally independent given X. Let i* be the index of the positive, uniformly distributed over {1,...,N}. For any measurable scoring function s(x,y), define L_N(s) = - E[ log( exp(s(X,Y_{i*})) / sum_j exp(s(X,Y_j)) ) ]. Then log N - L_N(s) is a lower bound on I(X;Y). The Bayes-optimal score is s*(x,y) = log(p(y|x)/p(y)) + c(x), where c(x) is arbitrary. Under the standard multi-sample setup, the resulting InfoNCE lower bound tightens as N increases."
    },
    "pe:evidence-A1": {
      "prov:type": "pe:ComputedEvidence",
      "prov:label": "SC1: Lower bound holds for Gaussian (multiple rho, N)",
      "pe:factId": "A1",
      "pe:evidenceType": "computed",
      "pe:method": "Monte Carlo (100k samples) over rho in {0.3, 0.6, 0.8, 0.95} and N in {2,4,8,16,32,64,128,256}",
      "pe:result": "All 32 tests passed"
    },
    "pe:evidence-A2": {
      "prov:type": "pe:ComputedEvidence",
      "prov:label": "SC2: Optimal score outperforms suboptimal on Gaussian",
      "pe:factId": "A2",
      "pe:evidenceType": "computed",
      "pe:method": "Monte Carlo comparison of optimal PMI score vs linear score x*y",
      "pe:result": "Optimal score beats suboptimal in all 6 tests"
    },
    "pe:evidence-A3": {
      "prov:type": "pe:ComputedEvidence",
      "prov:label": "SC3: Bound tightens with increasing N on Gaussian",
      "pe:factId": "A3",
      "pe:evidenceType": "computed",
      "pe:method": "Monte Carlo: verify bound increases monotonically with N for rho in {0.5, 0.8, 0.95}",
      "pe:result": "Bound tightens in all tested cases"
    },
    "pe:evidence-A4": {
      "prov:type": "pe:ComputedEvidence",
      "prov:label": "Cross-check: SC1 holds on discrete distribution",
      "pe:factId": "A4",
      "pe:evidenceType": "computed",
      "pe:method": "Monte Carlo on 3x3 discrete joint",
      "pe:result": "SC1 holds on discrete"
    },
    "pe:evidence-A5": {
      "prov:type": "pe:ComputedEvidence",
      "prov:label": "Cross-check: SC2 holds on discrete distribution",
      "pe:factId": "A5",
      "pe:evidenceType": "computed",
      "pe:method": "Optimal vs linear score on discrete, N=32",
      "pe:result": "Optimal wins by 0.3129"
    },
    "pe:evidence-A6": {
      "prov:type": "pe:ComputedEvidence",
      "prov:label": "Cross-check: SC3 holds on discrete distribution",
      "pe:factId": "A6",
      "pe:evidenceType": "computed",
      "pe:method": "Monotonicity check on discrete distribution",
      "pe:result": "Tightens on discrete"
    },
    "pe:verdict": {
      "prov:type": "pe:Verdict",
      "prov:label": "Verdict: PROVED",
      "prov:value": "PROVED",
      "pe:doi": "10.5281/zenodo.19645782"
    }
  },
  "activity": {
    "pe:determine-verdict": {
      "prov:type": "pe:VerdictDetermination",
      "prov:label": "Determine verdict from evidence",
      "prov:endTime": "2026-04-18"
    }
  },
  "agent": {
    "pe:proof-engine": {
      "prov:type": "prov:SoftwareAgent",
      "prov:label": "Proof Engine",
      "schema:version": "1.23.0",
      "schema:url": "https://github.com/yaniv-golan/proof-engine"
    }
  },
  "wasGeneratedBy": {
    "pe:gen-verdict": {
      "prov:entity": "pe:verdict",
      "prov:activity": "pe:determine-verdict"
    }
  },
  "wasDerivedFrom": {},
  "wasAttributedTo": {
    "pe:attr-verdict": {
      "prov:entity": "pe:verdict",
      "prov:agent": "pe:proof-engine"
    }
  },
  "used": {
    "pe:used-A1": {
      "prov:activity": "pe:determine-verdict",
      "prov:entity": "pe:evidence-A1"
    },
    "pe:used-A2": {
      "prov:activity": "pe:determine-verdict",
      "prov:entity": "pe:evidence-A2"
    },
    "pe:used-A3": {
      "prov:activity": "pe:determine-verdict",
      "prov:entity": "pe:evidence-A3"
    },
    "pe:used-A4": {
      "prov:activity": "pe:determine-verdict",
      "prov:entity": "pe:evidence-A4"
    },
    "pe:used-A5": {
      "prov:activity": "pe:determine-verdict",
      "prov:entity": "pe:evidence-A5"
    },
    "pe:used-A6": {
      "prov:activity": "pe:determine-verdict",
      "prov:entity": "pe:evidence-A6"
    }
  }
}