Four labels are stored by choosing which resident species is present in each of two modules. Each module also contains food, keeping its total at nine molecules during a closed reaction batch. Reversible growth amplifies the residents before a scheduled fair split. Both daughters must retain both parts of the label and return to the allowed molecule-count range after food refill.

The example implements all 24 directed reaction channels, the complementary split, label-blind replenishment and the probabilities of starting the next copying cycle in each state. Editable inputs control molecule capacity, rates, preparation, deadline and repeated-copying horizon. Failed splits remain in every probability calculation.

A literal molecular sample path amplifies the selected residents toward capacity. Numerical empty-daughter expectations decay beneath the proved generator envelope.
The sample path and matrix-exponential curves illustrate the finite-food model. The probability guarantee comes from the separate exact rational generator inequality.
Fair-partition failure falls as peak resident capacity grows; exact guarantees are shown at 18 and 40 residents. Repeated selected-lineage survival decreases between its uniform lower and partition upper bounds.
The sharp 18-resident budget is specific to this fair-split architecture. The lineage calculation inspects both complementary daughters and retains failed cycles in the denominator.

The key observable is the probability that a module leaves one daughter empty: with nn residents, it is exactly g(n)=21ng(n)=2^{1-n}. Amplification lowers this risk. An exact rational check of the finite-state generator gives joint-return probability at least 0.99188782 with nine molecules per module, compared with the numerical value 0.99213251. At twenty molecules per module, the proved guarantee exceeds 0.99998459.

The budget is sharp within the stated architecture. With at most 17 peak residents, even the best balanced fair split succeeds with probability only 0.98831177. Eighteen suffice. This conclusion assumes two pure-species modules, immediate representation in both daughters and no resident repair; it is not a universal minimum for chemical memory.

Repeated copying is stricter than a single successful division. The downloadable restart matrix retains failures, so successful outcomes need not sum to probability one. It gives a numerical selected-lineage survival probability of about 0.2060 after 200 cycles at the nine-molecule setting, with both daughters inspected at every split. A separate family calculation keeps sibling counts complementary and asks whether every descendant cycle succeeds.

The labels occupy disjoint species supports. Reactions cannot remove the last copy of a present resident or create an absent one, so the mechanism preserves pure labels during growth. The same property means it cannot remove contamination. Its normalized-composition decoder tolerates measurement error below 1/91/9 in total absolute composition error (L1L^1 distance), but that readout tolerance is not chemical error correction.

Seven scientific test groups check literal reaction aggregation for every label, exact drift and partition formulas, food accounting, stationary balance, restart probabilities and decoder geometry. The package includes reusable chemistry, cycle, finite-chain and decoding components. Rates and time units are hypothetical source conventions; division, refill and volume reset are external operations. Exact rational certificates, numerical evaluations and sample paths are identified separately, and Lean is not rerun.

Python source

"""Literal finite-food chemistry, complementary division, and restart kernels.

Exact rational certificates and numerical finite-chain evaluations are separate.
"""
# EDITABLE INPUTS: normalized-volume hypothetical source rates, not calibration.
MODULE_CAPACITY = 9
FORWARD_RATE = '1000'
REVERSE_RATE = '1'
CROSS_CATALYSIS = '1/10'
BATCH_DEADLINE = '20'
ENCODED_WORD = (0, 1)
INITIAL_SELECTED_COUNTS = (1, 1)
RANDOM_SEED = 22092026
MAX_SSA_EVENTS = 100000
LINEAGE_CYCLES = 200
FAMILY_DEPTH = 5

import os
os.environ['OPENBLAS_NUM_THREADS']='1'
os.environ['OMP_NUM_THREADS']='1'
from dataclasses import dataclass
from fractions import Fraction as F
from functools import cached_property
from itertools import product
from math import comb
import argparse
import csv
import hashlib
import json
from pathlib import Path
import platform
import numpy as np
from scipy.linalg import expm

MANUSCRIPT_SHA256='03705999826adddef5723e0bdc3c684f4d98a55cfcc85eac11fef4c1e6b4eb00'
SPECIES=('X0','Y0','X1','Y1','F0','F1')


@dataclass(frozen=True)
class Parameters:
    capacity:int=MODULE_CAPACITY
    forward:F=F(FORWARD_RATE)
    reverse:F=F(REVERSE_RATE)
    coupling:F=F(CROSS_CATALYSIS)

    def __post_init__(self):
        if not isinstance(self.capacity,int) or not 2<=self.capacity<=40:raise ValueError('This dense reference implementation supports 2 <= K <= 40.')
        for key in ('forward','reverse','coupling'):object.__setattr__(self,key,F(getattr(self,key)))
        if self.forward<=0 or self.reverse<=0 or self.coupling<0:raise ValueError('Positive forward/reverse rates and nonnegative coupling required.')


@dataclass(frozen=True)
class MolecularState:
    counts:tuple[int,...]

    def __post_init__(self):
        if len(self.counts)!=6 or any(not isinstance(v,(int,np.integer)) or v<0 for v in self.counts):raise ValueError('Six nonnegative integer counts required.')
    @property
    def totals(self):return tuple(sum(self.counts[2*i:2*i+2])+self.counts[4+i] for i in range(2))
    @property
    def word(self):
        bits=[]
        for i in range(2):
            x,y=self.counts[2*i:2*i+2]
            if (x>0)==(y>0):return None  # empty or contaminated module
            bits.append(int(y>0))
        return tuple(bits)
    @property
    def composition(self):
        total=sum(self.counts[:4])
        if total==0:return None
        return tuple(F(v,total) for v in self.counts[:4])
    def admitted(self,K,word=None):
        actual=self.word
        return actual is not None and (word is None or actual==tuple(word)) and self.totals==(K,K) and all(1<=sum(self.counts[2*i:2*i+2])<K for i in range(2))
    @classmethod
    def pure(cls,K,word,selected):
        if len(word)!=2 or any(v not in (0,1) for v in word) or len(selected)!=2 or any(not isinstance(n,(int,np.integer)) or not 1<=n<=K for n in selected):raise ValueError('Invalid word or pure counts.')
        values=[0]*6
        for i,(bit,n) in enumerate(zip(word,selected)):values[2*i+bit]=int(n);values[4+i]=K-int(n)
        return cls(tuple(values))


def falling(n,power):
    value=1
    for i in range(power):value*=max(n-i,0)
    return value


@dataclass(frozen=True)
class Reaction:
    name:str
    inputs:tuple[int,...]
    outputs:tuple[int,...]
    rate:F

    def propensity(self,state):
        value=self.rate
        for n,p in zip(state.counts,self.inputs):value*=falling(n,p)
        return value
    def fire(self,state):
        if any(n<p for n,p in zip(state.counts,self.inputs)):raise ValueError('Insufficient reactants.')
        return MolecularState(tuple(n+b-a for n,a,b in zip(state.counts,self.inputs,self.outputs)))


class FiniteFoodChemistry:
    """All 24 directional channels; catalysts keep their input multiplicities."""
    def __init__(self,parameters=Parameters()):
        self.parameters=parameters;self.reactions=self._build()
    def _build(self):
        reactions=[];p=self.parameters
        for module in range(2):
            for bit in (0,1):
                target=2*module+bit
                for catalyst in (None,2*(1-module),2*(1-module)+1):
                    left=[0]*6;right=[0]*6;left[target]=1;left[4+module]=1;right[target]=2
                    factor=1 if catalyst is None else p.coupling
                    if catalyst is not None:left[catalyst]+=1;right[catalyst]+=1
                    name=f'{SPECIES[target]}_cat_{"none" if catalyst is None else SPECIES[catalyst]}'
                    reactions += [Reaction(name+'_birth',tuple(left),tuple(right),p.forward*factor),Reaction(name+'_reverse',tuple(right),tuple(left),p.reverse*factor)]
        return tuple(reactions)

    def simulate(self,state,deadline,rng,max_events=MAX_SSA_EVENTS):
        if state.totals!=(self.parameters.capacity,)*2 or deadline<0 or max_events<0:raise ValueError('Invalid batch totals, deadline or event budget.')
        t=0.;history=[(t,*state.counts)];events=0
        # An event cap is computational only. An unfinished run has no cycle outcome.
        while t<deadline:
            rates=np.array([float(r.propensity(state)) for r in self.reactions]);total=rates.sum()
            if total==0:
                t=float(deadline);break
            if events>=max_events:return {'completed':False,'time':t,'state':state,'events':events,'history':history}
            next_time=t+rng.exponential(1/total)
            if next_time>deadline:t=float(deadline);break
            r=self.reactions[int(rng.choice(len(rates),p=rates/total))];state=r.fire(state);t=next_time;events+=1;history.append((t,*state.counts))
        history.append((t,*state.counts));return {'completed':True,'time':t,'state':state,'events':events,'history':history}


class FairDivision:
    """Every resident AND food molecule goes to exactly one daughter."""
    def __init__(self,capacity):self.capacity=capacity
    @staticmethod
    def empty_probability(n):
        if n<1:raise ValueError('Observable defined on nonempty modules.')
        return F(1,2**(n-1))
    @classmethod
    def joint_success(cls,n):return (1-cls.empty_probability(n[0]))*(1-cls.empty_probability(n[1]))
    def refill(self,state):
        if any(t>self.capacity for t in state.totals):raise ValueError('Cannot refill an overfull module.')
        additions=tuple(self.capacity-t for t in state.totals);c=list(state.counts)
        for i,value in enumerate(additions):c[4+i]+=value
        return MolecularState(tuple(c)),additions
    def allocate(self,parent,left_counts):
        if parent.totals!=(self.capacity,)*2:raise ValueError('Parent must have conserved batch totals.')
        left=MolecularState(tuple(left_counts))
        if any(a>b for a,b in zip(left.counts,parent.counts)):raise ValueError('Allocation exceeds parent.')
        right=MolecularState(tuple(b-a for a,b in zip(left.counts,parent.counts)));a,fa=self.refill(left);b,fb=self.refill(right)
        success=parent.word is not None and a.admitted(self.capacity,parent.word) and b.admitted(self.capacity,parent.word)
        return {'success':success,'left_before':left,'right_before':right,'left':a,'right':b,'food_added_left':fa,'food_added_right':fb,'total_food_added':sum(fa)+sum(fb)}
    def sample(self,parent,rng):return self.allocate(parent,[int(rng.binomial(n,.5)) for n in parent.counts])


class ScheduledCycle:
    def __init__(self,chemistry,deadline=F(BATCH_DEADLINE)):
        if deadline<0:raise ValueError('Nonnegative deadline required.')
        self.chemistry=chemistry;self.deadline=float(deadline);self.division=FairDivision(chemistry.parameters.capacity)
    def run(self,initial,rng,max_events=MAX_SSA_EVENTS):
        if not initial.admitted(self.chemistry.parameters.capacity):raise ValueError('Cycle must start in an admitted region.')
        batch=self.chemistry.simulate(initial,self.deadline,rng,max_events)
        if not batch['completed']:return {'batch':batch,'division':None,'success':None}
        return self._finish(batch,rng)
    def _finish(self,batch,rng):
        division=self.division.sample(batch['state'],rng)
        return {'batch':batch,'division':division,'success':division['success']}


class CountChain:
    """Exact rates on one invariant pure face; shared by all four words."""
    def __init__(self,parameters=Parameters()):
        self.parameters=parameters;K=parameters.capacity
        self.states=tuple(product(range(1,K+1),repeat=2));self.index={n:i for i,n in enumerate(self.states)}
        self.admitted=tuple(n for n in self.states if max(n)<K);self.admitted_indices=np.array([self.index[n] for n in self.admitted])
    def transitions(self,state):
        K=self.parameters.capacity;p=self.parameters
        if state not in self.index:raise ValueError('Outside pure-face state space.')
        for i in (0,1):
            n,m=state[i],state[1-i];factor=1+p.coupling*m
            for change,rate in ((1,p.forward*n*(K-n)*factor),(-1,p.reverse*n*(n-1)*factor)):
                if rate:
                    target=list(state);target[i]+=change;yield tuple(target),rate
    def generator_on(self,function,state):return sum(rate*(function(target)-function(state)) for target,rate in self.transitions(state))
    @cached_property
    def matrix(self):
        L=np.zeros((len(self.states),)*2)
        for i,state in enumerate(self.states):
            for target,rate in self.transitions(state):j=self.index[target];L[i,j]+=float(rate);L[i,i]-=float(rate)
        return L
    def transition_matrix(self,time):
        if time<0:raise ValueError('Nonnegative time required.')
        P=expm(float(time)*self.matrix)
        error=float(np.max(abs(P.sum(axis=1)-1)))
        if P.min()<-1e-11 or error>2e-8:raise ArithmeticError(f'Numerical transition matrix failed diagnostic: {error:g}')
        return P # No clipping or renormalization; preserve evaluation error visibly.
    def stationary(self):
        p=self.parameters;K=p.capacity;R=p.forward/p.reverse
        one={n:F(comb(K,n))*R**n/((1+R)**K-1) for n in range(1,K+1)}
        return {state:one[state[0]]*one[state[1]] for state in self.states}
    def verify_detailed_balance(self):
        pi=self.stationary()
        if sum(pi.values())!=1:raise ArithmeticError('Stationary normalization failed.')
        for state in self.states:
            for target,rate in self.transitions(state):
                reverse=dict(self.transitions(target))[state]
                if pi[state]*rate!=pi[target]*reverse:raise ArithmeticError('Detailed balance failed.')
        return True


@dataclass(frozen=True)
class DriftCertificate:
    decay:F
    residual:F
    maximum_violation:F

    @classmethod
    def compute(cls,chain,decay):
        decay=F(decay)
        if decay<=0:raise ValueError('Positive decay rate required.')
        g=lambda n:FairDivision.empty_probability(n[0])
        residual=max(F(0),max(chain.generator_on(g,n)+decay*g(n) for n in chain.states))
        violation=max(chain.generator_on(g,n)+decay*g(n)-residual for n in chain.states)
        return cls(decay,residual,violation)
    def lower(self,time):
        if time<0 or self.maximum_violation>0:raise ValueError('Invalid time or certificate.')
        raw=1-2/(1+self.decay*F(time))-2*self.residual/self.decay
        return max(F(0),raw)
    def record(self,time):return {'decay':str(self.decay),'residual':str(self.residual),'maximum_violation':str(self.maximum_violation),'joint_return_lower':str(self.lower(time)),
        'scope':'Exact finite-state generator inequality and rational exp bound; no simulation used, Lean not rerun.'}
    @classmethod
    def operating_box(cls):
        # Lg is affine in each of a,b,gamma separately: its maximum on a box
        # occurs at a vertex, even though a*gamma and b*gamma appear.
        corners=list(product((F(500),F(1500)),(F(1,2),F(2)),(F(1,20),F(2,9))))
        certificates=[cls.compute(CountChain(Parameters(9,*p)),1800) for p in corners]
        return cls(F(1800),max(c.residual for c in certificates),F(0))


class RestartKernel:
    """Substochastic selected-daughter kernel; missing mass is joint failure.

    Family recursion retains complementary daughter counts, never samples them
    independently. Independent compartments are used only after their split.
    """
    def __init__(self,chain,deadline):
        self.chain=chain;self.P=chain.transition_matrix(deadline);self.admitted_P=self.P[chain.admitted_indices]
        B=np.zeros((len(chain.states),len(chain.admitted)));self.allocations=[]
        for i,n in enumerate(chain.states):
            choices=[]
            for y in product(range(1,n[0]),range(1,n[1])):
                weight=F(comb(n[0],y[0])*comb(n[1],y[1]),2**sum(n));j=(y[0]-1)*(chain.parameters.capacity-1)+y[1]-1
                other=(n[0]-y[0],n[1]-y[1]);k=(other[0]-1)*(chain.parameters.capacity-1)+other[1]-1
                B[i,j]=float(weight);choices.append((j,k,float(weight)))
            self.allocations.append(choices)
        self.matrix=self.admitted_P@B
        [email protected]([float(FairDivision.joint_success(n)) for n in chain.states])
        self.row_error=float(np.max(abs(self.matrix.sum(axis=1)-expected)))
    def lineage(self,cycles):
        if not isinstance(cycles,int) or not 0<=cycles<=10000:raise ValueError('Cycles must be an integer in 0..10000.')
        values=np.ones(len(self.chain.admitted));records=[values.copy()]
        for _ in range(cycles):values=self.matrix@values;records.append(values.copy())
        return np.array(records)
    def family(self,depth):
        if not isinstance(depth,int) or not 0<=depth<=20:raise ValueError('Depth must be an integer in 0..20.')
        values=np.ones(len(self.chain.admitted));records=[values.copy()]
        for _ in range(depth):
            terminal=np.array([sum(w*values[a]*values[b] for a,b,w in choices) for choices in self.allocations])
            values=self.admitted_P@terminal;records.append(values.copy())
        return np.array(records)


class CompositionRegions:
    def __init__(self,K):
        if not isinstance(K,int) or not 2<=K<=20:raise ValueError('Explicit composition regions support 2 <= K <= 20.')
        self.K=K
        self.regions={word:tuple(MolecularState.pure(K,word,n).composition for n in product(range(1,K),repeat=2)) for word in product((0,1),repeat=2)}
    def nearest(self,measurement):
        if len(measurement)!=4 or any(not np.isfinite(float(v)) for v in measurement):raise ValueError('Four finite measurements required.')
        # Do not normalize/clamp a noisy reading: that would change its L1 error.
        p=tuple(F(str(v)) for v in measurement)
        distance={w:min(sum(abs(a-b) for a,b in zip(p,q)) for q in region) for w,region in self.regions.items()}
        minimum=min(distance.values());best=[w for w in distance if distance[w]==minimum]
        return {'word':best[0] if len(best)==1 else None,'distance':minimum,'tie':len(best)>1}
    def margin(self):return F(2,self.K),F(1,self.K)


def budget_ceiling(total):
    if total<2:return F(0)
    return FairDivision.joint_success((total//2,total-total//2))


def main():
    parser=argparse.ArgumentParser(description=__doc__);parser.add_argument('--output',type=Path,default=Path('outputs'));args=parser.parse_args();out=args.output;out.mkdir(parents=True,exist_ok=True)
    parameters=Parameters();chain=CountChain(parameters);chemistry=FiniteFoodChemistry(parameters);rng=np.random.default_rng(RANDOM_SEED)
    initial=MolecularState.pure(parameters.capacity,ENCODED_WORD,INITIAL_SELECTED_COUNTS)
    cycle=ScheduledCycle(chemistry,F(BATCH_DEADLINE)).run(initial,rng);batch=cycle['batch']
    np.savetxt(out/'literal_batch.csv',np.array(batch['history']),delimiter=',',header=','.join(('time',*SPECIES)),comments='')
    def serialize(value):
        if isinstance(value,MolecularState):return dict(zip(SPECIES,map(int,value.counts)))
        if isinstance(value,F):return str(value)
        raise TypeError(type(value).__name__)
    cycle_record={'completed':batch['completed'],'events':batch['events'],'terminal_time':batch['time'],'parent':batch['state'],'division':cycle['division'],'success':cycle['success']}
    (out/'sample_cycle.json').write_text(json.dumps(cycle_record,default=serialize,indent=2)+'\n')
    # Fixed manuscript reproductions stay separate from editable study parameters.
    reference=[]
    for K,s in ((9,3900),(20,9000)):
        c=CountChain(Parameters(K,F(1000),F(1),F(1,10)));cert=DriftCertificate.compute(c,s);c.verify_detailed_balance()
        P=c.transition_matrix(20);[email protected]([float(FairDivision.joint_success(n)) for n in c.states]);admitted=return_values[c.admitted_indices]
        stationary=sum(prob*FairDivision.joint_success(n) for n,prob in c.stationary().items())
        reference.append({'K':K,**cert.record(F(20)),'numerical_return_min':float(min(admitted)),'numerical_return_max':float(max(admitted)),
            'stationary_return_exact':str(stationary),'stationary_return_float':float(stationary),'partition_ceiling':str(FairDivision.joint_success((K,K))),
            'transition_row_sum_error':float(np.max(abs(P.sum(axis=1)-1)))})
    decay=3900 if parameters.capacity==9 else 9000 if parameters.capacity==20 else max(1,int(parameters.forward*(parameters.capacity-1)/3))
    cert=DriftCertificate.compute(chain,decay);kernel=RestartKernel(chain,F(BATCH_DEADLINE));lineage=kernel.lineage(LINEAGE_CYCLES);family=kernel.family(FAMILY_DEPTH)
    q=cert.lower(F(BATCH_DEADLINE));u=FairDivision.joint_success((parameters.capacity,)*2)
    def write_csv(name,header,rows):
        with (out/name).open('w',newline='') as f:w=csv.writer(f);w.writerow(header);w.writerows(rows)
    write_csv('lineage.csv',['cycles','rational_bound_float','numerical_min','numerical_max','partition_upper_float'],[[n,float(q**n),float(min(v)),float(max(v)),float(u**n)] for n,v in enumerate(lineage)])
    write_csv('family.csv',['depth','internal_cycles','union_lower_float','numerical_min','numerical_max','partition_upper_float'],[[n,2**n-1,float(max(F(0),1-(2**n-1)*(1-q))),float(min(v)),float(max(v)),float(u**(2**n-1))] for n,v in enumerate(family)])
    np.savetxt(out/'restart_kernel.csv',kernel.matrix,delimiter=',',header=','.join(f'A_{a}_{b}' for a,b in chain.admitted),comments='')
    times=np.r_[0,np.geomspace(1e-6,.02,70),.1,1.,20.];H=np.array([float(FairDivision.empty_probability(n[0])+FairDivision.empty_probability(n[1])) for n in chain.states]);observable=[]
    for time in times:
        value=chain.transition_matrix(time)@H
        envelope=2*np.exp(-float(cert.decay)*time)+float(2*cert.residual/cert.decay)*(1-np.exp(-float(cert.decay)*time))
        observable.append([time,value[chain.index[(1,1)]],value[chain.index[(parameters.capacity,)*2]],envelope])
    write_csv('empty_daughter.csv',['time','E_H_from_1_1','E_H_from_K_K','certified_envelope_numerically_evaluated'],observable)
    result={'reference_reproductions':reference,'operating_box':DriftCertificate.operating_box().record(F(20)),
        'configured_model':{'capacity':parameters.capacity,'forward':str(parameters.forward),'reverse':str(parameters.reverse),'coupling':str(parameters.coupling),**cert.record(F(BATCH_DEADLINE))},
        'best_17_resident_partition':str(budget_ceiling(17)),'sharp_composition_gap':str(F(2,parameters.capacity)),'measurement_tolerance_strict':str(F(1,parameters.capacity)),
        'kernel_row_identity_error':kernel.row_error,'sample_cycle_completed':batch['completed'],'sample_cycle_success':cycle['success'],
        'lineage_final_range':[float(min(lineage[-1])),float(max(lineage[-1]))],'family_final_range':[float(min(family[-1])),float(max(family[-1]))],
        'scope':'Finite-chain matrix exponentials and restart recursions are numerical evaluations, not certified probabilities. Exact rational generator checks are separate. The four labels use disjoint supports, not bistability or contamination correction.'}
    (out/'results.json').write_text(json.dumps(result,indent=2)+'\n')
    lines=[f'K=9 exact lower bound: {reference[0]["joint_return_lower"]}; numerical one-cycle minimum: {reference[0]["numerical_return_min"]:.10g}.',
        f'K=20 exact lower bound: {reference[1]["joint_return_lower"]}; numerical one-cycle minimum: {reference[1]["numerical_return_min"]:.10g}.',
        f'17-resident partition ceiling: {budget_ceiling(17)} = {float(budget_ceiling(17)):.10g}, below 99%.',
        f'Configured literal cycle: completed={batch["completed"]}, success={cycle["success"]}, events={batch["events"]}.',
        f'Selected lineage after {LINEAGE_CYCLES} cycles: numerical min {min(lineage[-1]):.8g}; both daughters inspected at every split.',
        'Failed splits remain missing kernel mass. Siblings are complementary; no independent daughter sampling.']
    (out/'console.txt').write_text('\n'.join(lines)+'\n');print('\n'.join(lines))
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    fig,axs=plt.subplots(1,2,figsize=(10,4.2),layout='constrained')
    short=chemistry.simulate(initial,.003,np.random.default_rng(RANDOM_SEED+1));ar=np.array(short['history'])
    for i in (0,1):axs[0].step(ar[:,0]*1000,ar[:,1+2*i]+ar[:,2+2*i],where='post',label=f'Module {i}')
    axs[0].set(xlabel='Time (thousandths of source unit)',ylabel='Selected resident molecules',title='A literal 24-channel sample path');axs[0].legend(fontsize=8)
    ar=np.array(observable)
    for column,label in [(1,'Numerical E H, start (1,1)'),(2,'Numerical E H, start (K,K)'),(3,'Proved envelope (evaluated)')]:axs[1].loglog(ar[1:,0],ar[1:,column],label=label)
    axs[1].set(xlabel='Time (source units)',ylabel='Sum of module empty-daughter probabilities',title='Amplification reduces partition risk');axs[1].legend(fontsize=8)
    for ax in axs:ax.grid(alpha=.2)
    fig.savefig(out/'amplification.png',dpi=180);fig.savefig(out/'amplification.svg');plt.close(fig)
    fig,axs=plt.subplots(1,2,figsize=(10,4.2),layout='constrained');budgets=range(4,53)
    axs[0].semilogy(budgets,[float(1-budget_ceiling(k)) for k in budgets],label='Fair-partition failure floor')
    for row in reference:
        K=row['K'];axs[0].scatter([2*K],[float(1-F(row['joint_return_lower']))],label=f'Proved failure bound, K={K}')
    axs[0].axhline(.01,color='gray',ls=':');axs[0].set(xlabel='Peak resident capacity',ylabel='One-cycle failure probability',title='18 residents suffice in this architecture');axs[0].legend(fontsize=8)
    ns=np.arange(len(lineage));axs[1].plot(ns,[float(q**int(n)) for n in ns],label='Uniform lower bound');axs[1].plot(ns,lineage.min(axis=1),label='Numerical restart-kernel minimum');axs[1].plot(ns,[float(u**int(n)) for n in ns],ls='--',label='Partition upper bound')
    axs[1].set(xlabel='Selected-lineage cycles',ylabel='All-cycle success probability',title='Probability of success through repeated\ncopying cycles');axs[1].legend(fontsize=8)
    for ax in axs:ax.grid(alpha=.2)
    fig.savefig(out/'budget_lineage.png',dpi=180);fig.savefig(out/'budget_lineage.svg');plt.close(fig)
    digest=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
    (out/'run_metadata.json').write_text(json.dumps({'manuscript_sha256':MANUSCRIPT_SHA256,'source_sha256':digest(Path(__file__)),'python':platform.python_version(),
        'output_sha256':{p.name:digest(p) for p in sorted(out.iterdir()) if p.is_file() and p.name!='run_metadata.json'}},indent=2)+'\n')


if __name__=='__main__':main()
Run output
K=9 exact lower bound: 8046297159/8112104000; numerical one-cycle minimum: 0.9921325119.
K=20 exact lower bound: 7077818258231/7077927321600; numerical one-cycle minimum: 0.9999961088.
17-resident partition ceiling: 32385/32768 = 0.9883117676, below 99%.
Configured literal cycle: completed=True, success=True, events=10872.
Selected lineage after 200 cycles: numerical min 0.20603278; both daughters inspected at every split.
Failed splits remain missing kernel mass. Siblings are complementary; no independent daughter sampling.