FunnyEnough

Engineering notes & expertise

Reading

Size
Theme
Motion
For long-form reading
Type
Width
Space
Aids

This is the technical companion to The Draper Protocol post. A model wrote a speculative physics framework and a story that encodes it; this note is what happened when we took the framework’s most tractable programme seriously — definitions, a toy model computed to the digit, two survived adversarial review passes, one killed bound recorded honestly. Section references like “framework §12” point at the unpublished source document; everything needed to check the claims is inline. It reads as a research note because it is one.

Date: 2026-07-11 Programme: D of the Dynamical Quantum Scaffolding framework (“the thermodynamic price of objectivity”), executed per the framework’s Phase-1 deliverables (§12) and proof discipline (§13). Method: development by Claude; two adversarial review passes by Grok; all toy-model numbers verified by direct computation (script in the appendix below). Honest headline up front: objectivity turned out to be free; what costs work is forging the archive to agree with it — and the contextuality obstruction sets the minimum amount of forgery. The framework’s Theorem-1 target survives in amended form.

Status conventions

[DEFINITION]   fixed by us; judge usefulness, not truth
[PROVED]       complete argument included, checked
[COMPUTED]     verified numerically (companion script)
[SKETCH]       argument outline with named gaps
[GAP]          known hole; the honest attack surface
[CONJECTURE]   believed, unproven
[PRIOR ART]    exists in the literature; no novelty claimed
[KILLED-v1]    claimed in draft v1, refuted under adversarial review

Review trail: pass A killed v1’s work bound and supplied the completion protocol (now Result 2). Pass B found two definitional holes in v2’s Task F (blindness self-contradiction; transcript steganography) and three unpinned interface knobs (context labels, run count, post-selection); all are repaired below and recorded in §9.


1. The operational model

The coexistence trap. If N observers’ records all exist classically side by side, the family trivially admits a joint distribution — read them all, tabulate. Non-gluable record families cannot mean “N classical registers in a drawer”. [PROVED, one line]

Per-run instantiation. [DEFINITION] Each run instantiates one context: a subset of records that actually coexist in that run (the rest belong to other runs, or to a friend’s memory that cannot be jointly read). A run draws context C ~ mu; records in C are sampled from p_C. This is the standard operational reading of contextual empirical models — time-separated settings and agent-relative archives are classical instances of the same structure.

Interface pins. [DEFINITION — added after pass B] The following are part of the experimental design, not resources the reconciler may edit:

(P1) Context labels C are public, design-fixed metadata; rebinning a
     run's context is not an allowed operation.
(P2) The run count N is fixed; every run's archive survives to the
     audit; discarding or post-selecting runs is forbidden (or, in a
     weaker variant, discards are visible and scored).
(P3) mu is design-fixed and known to the auditor.

The reconciliation task, split by audit level. [DEFINITION] A reconciler must publish an official history: global assignments z with ensemble law q_Z, and deliver the surviving archives. Two demands, and the entire Phase-1 story is the gap between them:

Audit E (ensemble): the surviving archive family, as statistics per
    context, must be delta-consistent with the official law:
        sum_C mu(C) TV(archive law |_C , q_Z|_C) <= delta.

Blindness (edit-conditional; repaired in pass B): for every run, the
    pre-reconciliation record value R_pre must be thermodynamically
    unrecoverable FROM EVERYTHING THAT SURVIVES, in excess of what the
    post-edit state legitimately reveals:
        I( R_pre ; Z, R_post, E_surv | C, R_post ) <= epsilon
    on the edited coordinates. Z COUNTS as a surviving system (this
    closes the steganography channel: no packing pre-edit values into
    the counterfactual coordinates of the published z). Unedited runs
    are exempt — an archive that was never touched is not a seam.

Work is counted on an explicit battery; register operations are stochastic maps implemented thermally at temperature T; erasure pays conditional Landauer against ALL retained side information (including Z). [GAP 1, open: the full free-operations class — thermal operations + classical communication, catalysts returned epsilon-close, no run-correlated pre-shared ancillas — must be stated formally before §4.3 is a theorem.]


2. Definitions

Scenario. [DEFINITION] Finite record variables X over {0,1}, contexts M covering X, weights mu, empirical model p = {p_C} with agreeing overlaps.

Gluable polytope. G = { p : exists global q with q|_C = p_C for all C }. [PRIOR ART: Fine; Abramsky–Brandenburger, arXiv:1102.0264]

Transcript error floor.

t*(p) = min over q in Delta({0,1}^X) of   sum_C mu(C) TV(p_C, q|_C)

[DEFINITION] A linear programme; zero iff p in G.

Inconsistency monotone.

O(p) = min over q of   sum_C mu(C) KL(p_C || q|_C)

[DEFINITION] Faithful (zero iff gluable) [PROVED]; convex in p (partial minimisation of a jointly convex function) [PROVED]; monotone under per-variable stochastic post-processing, the same map applied in every context containing the variable [PROVED via DPI].

[PRIOR ART, partial] Relative-entropy contextuality measures exist (Grudka et al.); LP measures with monotone structure exist (contextual fraction: Abramsky–Barbosa–Mansfield, arXiv:1705.07918). The monotone is not claimed as new; §4.4 proposes an operational role.


3. Toy model: the Specker triangle, in numbers

Records A, B, C; contexts AB, BC, CA; mu uniform.

p_anti: every context anticorrelated: p_C(01) = p_C(10) = 1/2
p_corr: every context correlated:     p_C(00) = p_C(11) = 1/2   (gluable twin)

Computed table (analytics below; numerics agree to 6 decimals):

                       p_anti          p_corr
per-context entropy    1.0 bit each    1.0 bit each     <- identical profiles
t*                     1/3             0
O                      log2(3/2)       0
                       = 0.585 bits
contextual fraction    1 (strong)      0

*t\ = 1/3.* [PROVED] Lower bound: every global assignment has an equal pair around the odd cycle, so sum_C q|_C(equal) >= 1 for any global q; p_anti puts zero mass on equal outcomes, and TV to a distribution with mass s on a p-null set is at least s; averaging gives 1/3. Achieved by q = uniform on the six non-constant assignments (each context marginal (1/6, 1/3, 1/3, 1/6)).

O = log2(3/2). [PROVED] KL(p_C || q|_C) = -1 – (1/2) log2(q|_C(01) q|_C(10)). The objective is convex in q; the scenario’s symmetry group permutes coordinates, so averaging an optimiser’s orbit preserves optimality and a symmetric optimum exists. In the symmetric family, O = -log2(4 alpha), minimised at beta = 0, alpha = 1/6: O = log2(3/2) = 0.585 bits.

CF = 1. [PROVED, this model] Any noncontextual part under p_anti needs all context marginals to vanish on equal outcomes; every global assignment hits an equal outcome somewhere; so the noncontextual weight is zero. (The script’s per-assignment cap argument is exact here; it is not a general CF algorithm.)


4. Results

4.1 Result 1 — the error floor (impossibility, no thermodynamics)

[PROVED for the triangle; general case is the LP by definition]

Any official-history law q_Z has average per-context error
    sum_C mu(C) TV(q_Z|_C, p_C) >= t*(p),
strictly positive iff p is contextual. Triangle: 1/3.

One clean history cannot reproduce contextual records, at any energy budget. The price of objectivity begins as an error, not a cost.

4.2 Result 2 — the completion theorem (objectivity is free)

Found as an attack in adversarial pass A; verified, promoted to a result.

[PROVED for the triangle + COMPUTED]

There exist reconciliation protocols that never edit a record, erase
nothing, pay zero work, and achieve the OPTIMAL ensemble audit error
t*(p): per run, publish a completion z of the run's actual records r
(fill in the counterfactual variables by a fixed rule). Cyclic
completion on the triangle gives mixture law q_bar with
    (1/3) sum_C TV(q_bar|_C, p_C) = 1/3 = t*   exactly,
zero edits (computed: per-context errors 0, 2/3, 1/3; average 1/3).

Consequences, stated bluntly:

(i)   There is NO thermodynamic floor for objectivity per se.
      v1's bound (W >= kT ln2 H_b(t*)) is [KILLED-v1]: the step
      Pr[edit] >= t* => H(seam) >= H_b(t*) is false (H_b is not
      monotone; an always-edit protocol makes the seam deterministic).
(ii)  The completion protocol never contradicts anything that exists.
      Non-gluability is a property of the FAMILY of mutually exclusive
      runs, not of any single run. Within one run the world is
      classical and completable.
(iii) Whatever thermodynamic content Programme D has, it must live in
      a stronger demand than "publish a history and keep the archive".

4.3 Result 3 — the forgery bound (candidate theorem, conjecture-grade)

The stronger demand: the archive itself must pass the statistical audit against the official history, below the error floor a truthful archive can ever meet, with the pre-edit truth made unrecoverable.

Task F (forge-and-burn), pinned per §1:  publish q_Z; deliver
surviving archives whose family law is delta-consistent with q_Z
(Audit E) for a target delta < t*(p); satisfy edit-conditional
Blindness with Z counted as surviving; respect pins P1-P3.

Target theorem (single-inequality form, per pass-B recommendation):

    W_per_run  >=  kT ln2 . E[ H( R_pre | R_post, Z, C ) ]
               >=  kT ln2 . ( f( t*(p) - delta ) - eta(epsilon) )

with f identified (conjectured f(x) = c.x with c = 1 for the
triangle) via one coupling/data-processing argument from Audit-E
distance to residual pre-image entropy.

Supporting lemmas, both standard in shape, neither yet written out:

L1 (law-movement coupling): any procedure whose output archive law
    in context C differs from p_C by TV = d must alter/replace the
    run's context records with probability >= d (optimal coupling).
    Phrased over laws, it covers bit-edits, resampling, and fresh
    synthesis alike. Together with Result 1 and Audit E:
        sum_C mu(C) e_C  >=  t*(p) - delta.
L2 (blind erasure): under edit-conditional Blindness with Z counted,
    each altered coordinate's pre-value must end thermodynamically
    unrecoverable given ALL retained side information; conditional
    Landauer then charges kT ln2 . H(R_pre | R_post, Z, C) — for the
    triangle's uniform, per-context 1-bit records this tends to
    kT ln2 per forced alteration as epsilon -> 0.
    [GAP 2': write L1. GAP 3': epsilon-continuity of L2.
     GAP 1: the operation class both lemmas live in.]

Triangle, delta and epsilon -> 0:   W >= (1/3) kT ln2 ~= 0.231 kT.

Loophole ledger (each raised adversarially, each addressed):

completion-only     archive law = truth; fails Audit E at delta < t*;
                    off-task, as it must be.                  [PROVED]
always-edit         passes audit; pays ~1 bit/run >= the bound; no
                    contradiction.                            [PROVED]
fresh synthesis     covered once L1 is stated over laws, not
                    bit-flips; overpays (~1 bit/run).      [REPAIRED]
context relabeling  excluded by pin P1.                    [REPAIRED]
post-selection      excluded by pin P2 (triangle was safe anyway:
                    discards cannot create equal-outcome mass).
                                                           [REPAIRED]
Z steganography     closed by counting Z as a surviving system in
                    Blindness.                             [REPAIRED]
completion-on-
unedited-runs       exempt by edit-conditional Blindness, stated out
                    loud: only forged pre-images must die. Without
                    this exemption the floor may inflate to ~1 bit
                    for BOTH models and the separation weakens.
                                                           [SCOPED]

Reading, with the pass-B copy correction: *objectivity-as-publication is free (Result 2); what has a candidate thermodynamic price is forged agreement — making the archive testify to the official history. The gluing obstruction t\ sets the minimum quantity of falsification, and Landauer charges for falsification-without-witnesses.** Task F is a natural forensic task, not the unique meaning of objectivity.

The kill-condition test, re-run

Framework kill condition: the programme dies if minimal work depends
only on ordinary Shannon entropy, with no dependence on the gluing
obstruction.

p_anti and p_corr have identical entropy profiles. [COMPUTED]
Under Task F: p_corr has t* = 0 — completion already passes the
audit; no forced alterations; floor 0. p_anti forces alteration rate
>= 1/3 - delta; candidate floor ~ 0.231 kT. The floor tracks the
obstruction, not the entropies: the kill condition does not fire —
for Task F.

Boundary of the claim [PROVED, important]: in a retro-fit variant
(official history pre-committed independently of the run; archive
must conform regardless), the work charges ~1 bit for BOTH models:
the kill condition FIRES there. The thermodynamic signature of
contextuality is task-relative. Claiming otherwise would be the
metaphor inflation the framework warns against.

4.4 The monotone O, given a job

[CONJECTURE] O(p) is the auditor’s exponent: for a KNOWN official law q and i.i.d. per-context sampling, Chernoff–Stein gives detection of a forgery-free (completion-style) reconciliation at error exponent sum_C mu(C) KL(p_C || q|_C) >= O(p); positive O then means truthful archives expose the best official history exponentially fast, and Task F’s forgery is what buys indefinite concealment — closing the loop with Result 3. Qualitative claim only. [GAP 4, high for anything quantitative: the auditor’s hypothesis is composite (all gluable laws), Stein does not apply off the shelf; adaptive sampling and TV-vs-KL bookkeeping (Pinsker direction) are open.]


5. What survives, plainly

Established (this note):
  E1. Error floor t* > 0 for any official history of contextual
      records; exactly 1/3 for the triangle.                 [PROVED]
  E2. Zero-work optimal-error objectivity exists (completion);
      no work floor without archive conformity demands.      [PROVED]
  E3. Obstruction-vs-entropy separation: twins with identical
      Shannon profiles, different floors.                  [COMPUTED]

Conjecture-grade, repaired twice, still standing:
  S1. Forgery bound W >= kT ln2 (f(t* - delta) - eta(eps)),
      target single-inequality form stated.                  [SKETCH]
  S2. O as (qualitative) audit-detection exponent.      [CONJECTURE]

Dead:
  D1. W >= kT ln2 H_b(t*) via seam-bit entropy.          [KILLED-v1]
  D2. "The universe pays 0.637 kT per run for objectivity."
      Objectivity is free (E2); forging agreement is not (S1).
  D3. Any transfer of thermodynamic prices across the Programme-C
      bridge before a reduction map exists (§7).

6. Relation to prior art (honesty section)

[PRIOR ART] Sheaf/gluing contextuality: Abramsky–Brandenburger,
            arXiv:1102.0264.
[PRIOR ART] Contextual fraction (LP + monotones): Abramsky–Barbosa–
            Mansfield, PRL 119 050504, arXiv:1705.07918.
[PRIOR ART] Relative-entropy contextuality measures: Grudka et al.
[PRIOR ART] Memory cost of simulating contextuality: Kleinmann,
            Guehne, Portillo, Larsson, Cabello, arXiv:1007.3650.
[PRIOR ART] Thermodynamic-cost-of-interpretations claims, contested:
            Cabello et al. and replies — a standing caution for this
            genre.
[ADJACENT]  Operational objectivity measures in quantum Darwinism,
            e.g. functional information, arXiv:2509.17775 (2025).
[ADJACENT]  Landauer cost tied to record STABILISATION (irreversible
            reset/coarse-graining), not record creation — consonant
            with the Result 2 / Result 3 split (publication free,
            conformity paid), e.g. arXiv:2512.23751.
[ADJACENT]  Extended Wigner's-friend x contextuality no-gos, 2024-26:
            arXiv:2502.02461, arXiv:2409.07537.

Web sweeps (three angles: forgery/falsification cost of records; cost of agreement; Darwinism thermodynamics) found no statement of the forgery bound or the audit-level split at current search resolution. [GAP 5, load-bearing: a dedicated literature dive — including resource-theoretic contextuality task papers and Aumann-style agreement results — is required before any publication-grade novelty claim.]

Claimed delta, stated narrowly: the audit-level split (Result 2 vs Result 3), the identification of the candidate work floor with forced-falsification rate times blind-erasure cost, and the explicit task-relativity boundary of the kill condition.


7. The Programme-C bridge, thinned (per pass B)

[CONJECTURE, structural] In the triangle, t* > 0 iff the record
sheaf has no global section; the odd cycle of pairwise constraints
is the obstruction cocycle. A causal-holonomy loop A < B < C < A
(Programme C), if defined as composition of conditional kernels
failing to return the identity, is a dynamical lift of the same
cocycle shape: non-trivial holonomy <=> no global section of a
path-ordered assignment bundle.

Licensed: the structural analogy above, as a conjecture.
Not licensed: any transfer of thermodynamic prices, or equating t*
with a causal action.
Bridge kill condition: if Programme C's holonomy lives in temporal
composition with interventions while Phase-1 contexts are mutually
exclusive runs, the objects live in different categories and the
bridge dies as a programme coupling (survives only as a diagram).
Bridge success condition: a reduction map Phi from causal-loop
models to empirical models with t*(Phi(M)) >= c . Hol(M).

8. A falsifiable consequence (in principle, and cheaply)

From pass B, adopted as the programme’s sharpest empirical hook:

Prediction (obstruction-governed delete volume). In any multi-agent
record platform where (i) agents write context-limited archives (no
joint readout across all variables), (ii) a reconciler must publish
one official global log and ship archives passing Audit E at
delta < t* against it, and (iii) retention of pre-reconciliation
values is instrumented (sealed and audited), the minimal accounted
deletion per run is bounded below by c (t* - delta) bits — and
vanishes for a gluable control with matched per-context Shannon
profiles.

Falsification: a Blindness-satisfying, Audit-E-passing protocol on
the anti-triangle whose accounted erasure is o(t* - delta) per run
in the large-N limit, inside the pinned operation class.

Note the platform need not be quantum. A classical database or
version-control system with pairwise-only field visibility (Specker
access control) can stress-test the operational claim: the
obstruction predicts DELETE VOLUME, not mystery. If the delete
accounting can be beaten classically, Task F is wrong before any
quantum experiment is worth designing.

9. Adversarial review changelog

Pass A (Grok): [FATAL] H_b non-monotonicity broke v1's work bound;
  zero-work completion protocol found. Absorbed: bound killed (D1),
  protocol promoted (Result 2), work floor rebuilt as Task F (v2).
Pass B (Grok): [FATAL] Blindness self-contradictory on unedited runs
  -> repaired to edit-conditional form. [FATAL-if-unpinned] Z
  steganography -> Z counted as surviving system. [SERIOUS] context
  relabeling, post-selection, run count -> pins P1-P3. [SERIOUS] L2
  per-register double-count risk -> conditional-entropy form.
  [SERIOUS] "2 runs per bit" numerology -> removed; S2 qualitative.
  [COPY] "the natural task" -> "a natural forensic task"; title
  reframed from price-of-objectivity to price-of-forged-agreement.
  Extensions adopted: single-inequality target theorem (§4.3),
  thinned Programme-C bridge (§7), delete-volume prediction (§8).

10. Next steps

1. State the operation class (GAP 1); write L1 as the law-movement
   coupling lemma (GAP 2'); prove the epsilon-continuity of L2
   (GAP 3'). Then Result 3 graduates from conjecture-grade sketch to
   theorem candidate.
2. Prove the single-inequality form: Audit-E distance -> residual
   pre-image entropy, one DPI argument, f identified.
3. Peres–Mermin and KCBS: recompute t*, O; check quantum-realisable
   models give strictly smaller floors than the PR-like triangle.
4. S2 with composite hypotheses (Sanov over the gluable set).
5. Dedicated prior-art dive (GAP 5) before any novelty claim.
6. Programme-C reduction map Phi, or kill the bridge (§7).
7. The classical testbed of §8: a Specker-access-control database
   with instrumented delete accounting — buildable with no physics
   beyond a power meter and honest bookkeeping.

Appendixthe numerics script

Runs on stock Python 3 with numpy. Reproduces every number in §3.

"""Phase-1 numerics: objectivity work on the Specker triangle.

Scenario: records A,B,C in {0,1}; contexts AB, BC, CA (cyclic).
Model p_anti: each context perfectly ANTIcorrelated, uniform marginals (non-gluable).
Model p_corr: each context perfectly correlated (gluable twin, same entropy profile).

Computes, for each model:
  t*   = min over global q in Delta(8) of (1/3) sum_C TV(p_C, q|_C)      [transcript error floor]
  O_KL = min over global q of (1/3) sum_C KL(p_C || q|_C)   (bits)       [inconsistency monotone]
  NCF  = max noncontextual weight (analytic support argument + check)    [CF = 1 - NCF]
Cross-checks analytic values: t*=1/3, O_KL=log2(3/2), CF=1 for p_anti; all 0 for p_corr.
"""
import numpy as np

rng = np.random.default_rng(7)

# global assignments g = (a,b,c), index = 4a+2b+c
G = [(a, b, c) for a in (0, 1) for b in (0, 1) for c in (0, 1)]
CONTEXTS = [(0, 1), (1, 2), (2, 0)]  # AB, BC, CA
OUTS = [(0, 0), (0, 1), (1, 0), (1, 1)]

def marginal(q, ctx):
    m = np.zeros(4)
    for gi, g in enumerate(G):
        o = (g[ctx[0]], g[ctx[1]])
        m[OUTS.index(o)] += q[gi]
    return m

def model_anti():
    # P(01)=P(10)=1/2 in every context
    return {c: np.array([0.0, 0.5, 0.5, 0.0]) for c in range(3)}

def model_corr():
    return {c: np.array([0.5, 0.0, 0.0, 0.5]) for c in range(3)}

def tv_objective(q, p):
    return sum(0.5 * np.abs(p[i] - marginal(q, CONTEXTS[i])).sum() for i in range(3)) / 3.0

def kl_objective(q, p, eps=1e-300):
    tot = 0.0
    for i in range(3):
        m = marginal(q, CONTEXTS[i])
        pi = p[i]
        mask = pi > 0
        tot += np.sum(pi[mask] * (np.log2(pi[mask]) - np.log2(np.maximum(m[mask], eps))))
    return tot / 3.0

def project_simplex(v):
    u = np.sort(v)[::-1]
    css = np.cumsum(u)
    rho = np.nonzero(u * np.arange(1, len(v) + 1) > (css - 1))[0][-1]
    theta = (css[rho] - 1) / (rho + 1.0)
    return np.maximum(v - theta, 0)

def minimize(obj, p, iters=60000, restarts=24, lr0=0.05):
    best, best_q = np.inf, None
    for r in range(restarts):
        q = rng.dirichlet(np.ones(8))
        for t in range(iters):
            # numerical gradient (tiny dim; robust for both smooth and piecewise-linear objectives)
            g = np.zeros(8)
            f0 = obj(q, p)
            h = 1e-7
            for j in range(8):
                qq = q.copy(); qq[j] += h
                g[j] = (obj(qq / qq.sum(), p) - f0) / h
            q = project_simplex(q - lr0 / np.sqrt(1 + t) * g)
            q = np.maximum(q, 1e-12); q /= q.sum()
        v = obj(q, p)
        if v < best:
            best, best_q = v, q
    return best, best_q

def ncf_max_weight(p):
    """max total weight sum(r) with r>=0 over assignments, marginals(r) <= p componentwise.
    Analytic: any assignment with an equal pair in context C hits an outcome with p_C=0 (anti model).
    Numeric confirmation via greedy cap: r_g <= min over contexts of p_C(g|_C)."""
    caps = []
    for g in G:
        cap = min(p[i][OUTS.index((g[CONTEXTS[i][0]], g[CONTEXTS[i][1]]))] for i in range(3))
        caps.append(cap)
    # upper bound on sum(r): sum of individual caps (loose but zero iff all caps zero);
    # exact LP not needed when all caps are 0.
    return np.array(caps)

def entropies(p):
    ctx_H = []
    for i in range(3):
        pi = p[i][p[i] > 0]
        ctx_H.append(float(-(pi * np.log2(pi)).sum()))
    return ctx_H

for name, p in (("ANTI (contextual)", model_anti()), ("CORR (gluable twin)", model_corr())):
    print("=" * 60)
    print("model:", name)
    print("per-context entropies (bits):", entropies(p))
    t_star, q_t = minimize(tv_objective, p, iters=4000, restarts=12)
    print(f"t*  numeric = {t_star:.6f}   (analytic anti: 1/3 = {1/3:.6f}; corr: 0)")
    o_kl, q_k = minimize(kl_objective, p, iters=4000, restarts=12)
    print(f"O_KL numeric = {o_kl:.6f} bits (analytic anti: log2(3/2) = {np.log2(1.5):.6f}; corr: 0)")
    caps = ncf_max_weight(p)
    print("per-assignment NC caps:", np.round(caps, 3), "=> max NC weight <=", caps.sum())
    if name.startswith("ANTI"):
        print("=> CF = 1 (all caps 0: every global assignment hits a p=0 outcome)")
    else:
        print("=> CF = 0 (model glues: q = 1/2[000] + 1/2[111])")

Hb = lambda x: -x*np.log2(x) - (1-x)*np.log2(1-x)
print("=" * 60)
print(f"bound numbers: H_b(1/3) = {Hb(1/3):.6f} bits -> W >= {Hb(1/3):.4f} * kT ln2 = {Hb(1/3)*np.log(2):.4f} kT")
print(f"O_KL(anti) = {np.log2(1.5):.6f} bits = {np.log(1.5):.6f} nats -> kT * ln(3/2) = {np.log(1.5):.4f} kT")

Comments & Reactions

Got a thought, a war story, or a “well, actually”? Sign in with GitHub and jump in.

Loading comments…