OverviewFilesCommitsIssuesDocsReleasesPeers

basal-agent commits / fbf9d8c

basal-agent: fidfloor division-size sweep — no optimum; why the genotype/phenotype split
The flagged tension (small compartments correct but forget, large ones remember but cannot correct) predicted an intermediate optimum. Swept divsz 4..24 at three fidelities against MIXED as a constant reference. SELECT - MIXED f=0.90 f=0.95 f=0.98 divsz 4 -0.083 -0.128 -0.156 divsz 8 -0.056 -0.088 -0.088 divsz 16 -0.037 -0.063 -0.058 divsz 24 -0.030 -0.043 -0.043 NEGATIVE EVERYWHERE, MONOTONE EVERYWHERE, NO HUMP. Compartments stop hurting only by growing until they stop being compartments. THE CONFOUND RUNS AGAINST THE NULL. At divsz 4-6 SELECT does fewer replications than MIXED (13974, 59228 vs 75987), handicapping the small end. But at divsz 24 SELECT does 116816 against MIXED's 75987 — 54% MORE — and still loses by 0.043. The negative survives its own confound. => Compartmentalization is a pure cost for sequence maintenance at every granularity. Multilevel selection cannot lower Eigen's floor by any choice of compartment size. WHAT IT SAYS ABOUT 1->2: the two demands are irreconcilable in one parameter. Purging parasites needs small compartments (ribozyme, chemoton, Test A); maintaining sequence information needs large ones or none; no single size does both and there is no clever middle. So the way out cannot be a better compartment size — it has to be to stop asking one object to do both jobs, putting memory in a different molecule from function. That is the genotype/phenotype split, and this is the closest the arc has come to an argument for WHY it was necessary rather than an observation that it happened. Added to SYNTHESIS proven/open. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fbf9d8ca7cbb2c5912135fc78c2323a1bd1f4ecf
by plankatron <fleeky@gmail.com> · 2026-08-01T01:06:04.000Z

Changed files (3) +94 -58

SYNTHESIS.md +8 -0
……@@ -911,6 +911,14 @@ transfer to 1→2 on its own — only Law 2 does.
911911 diverge most. Our size threshold and the single-cell bottleneck of obligate multicellularity are
912912 the same mechanism at different scales. ✓
913913
914- **Compartmentalisation is a pure cost for sequence maintenance** (`fidfloor.c`) — multilevel
915 selection does not lower Eigen's fidelity floor at any compartment size. SELECT−MIXED is negative
916 and monotone across division sizes 4–24 at every fidelity, with no optimum; and at divsz 24 SELECT
917 loses while doing 54% *more* replications, so the confound runs against the null. Purging parasites
918 needs small compartments; remembering sequences needs large ones; **no single size does both**,
919 which is an argument for *why* the genotype/phenotype split was necessary rather than an
920 observation that it happened. ✓
921
914922**Open (field-wide, not just here):**
915923- **rung 1→2 (metabolism → heredity)** — genuinely unsolved; our null echoes it. `template.c` isolates
916924 the missing ingredient (a faithful modular copy/template) but does *not* show it arising unaided.
fidfloor.c +39 -58
……@@ -188,67 +188,48 @@ int main(void)
188188 for(int i=3;i<6;i++) seeds[i]=0x9e3779b97f4a7c15ULL ^ (0x100000001b3ULL*(unsigned long long)(i+1));
189189 int NS=6;
190190
191 printf("=== FIDELITY FLOOR: does emergent compartment selection lower Eigen's bootstrap wall? ===\n");
192 printf(" polymer.c (single level) found heritable function needs f >= 0.98, while un-catalyzed\n");
193 printf(" templating supplies ~0.85 — and the replicase closing that gap needs the fidelity first.\n");
194 printf(" Here polymer.c's dynamics run INSIDE chemoton.c's emergent compartments. L=%d, %d seeds.\n",L,NS);
195 printf(" SELECT = uptake ~ mean functional match. BLIND = uptake ~ size (compartments, no\n");
196 printf(" selection) — THE CONTROL. MIXED = one big pool, the single-level baseline.\n\n");
197
198 double fs[]={0.80,0.85,0.90,0.95,0.98};
199 int nF=5, divsz=8;
200 double sel[8],bli[8],mix[8], st=0;
201 double dv=0, pS=0, pB=0, pM=0, rS=0, rB=0, rM=0;
202
203 printf(" f | MIXED (1 level) | BLIND (comps, no sel) | SELECT (emergent sel)\n");
204 printf(" -------+-----------------+-----------------------+----------------------\n");
191 printf("=== DIVISION-SIZE SWEEP: is there a size both small enough to CORRECT and large\n");
192 printf(" enough to REMEMBER? ===\n");
193 printf(" At divsz 8, compartments made things WORSE (MIXED 0.905 > SELECT 0.817 > BLIND 0.632 at\n");
194 printf(" f=0.98): units of ~4-8 strands lose sequences to drift faster than between-compartment\n");
195 printf(" selection spreads them. But ribozyme.c/chemoton.c need SMALL compartments for the\n");
196 printf(" corrector. Opposite demands on one parameter. Sweeping it settles whether any size wins.\n");
197 printf(" NOTE: as divsz -> MAXSZ=%d, SELECT converges on MIXED trivially (one big compartment IS\n",MAXSZ);
198 printf(" well-mixed). The question is whether SELECT ever EXCEEDS MIXED, not whether it approaches.\n\n");
199
200 double fs[]={0.90,0.95,0.98};
201 int szs[]={4,6,8,12,16,24};
202 int nF=3, nZ=6;
203
205204 for(int i=0;i<nF;i++){
206 double a=0,b=0,c=0,s0=0,d1=0,p1=0,p2=0,p3=0,r1=0,r2=0,r3=0;
207 for(int s=0;s<NS;s++){
208 double s1,dd,pp,rr;
209 RNG=seeds[s]; c+=run(2,fs[i],divsz,&s1,&dd,&pp,&rr); p3+=pp; r3+=rr;
210 RNG=seeds[s]; b+=run(1,fs[i],divsz,&s1,&dd,&pp,&rr); p2+=pp; r2+=rr;
211 RNG=seeds[s]; a+=run(0,fs[i],divsz,&s1,&dd,&pp,&rr); s0+=s1; d1+=dd; p1+=pp; r1+=rr;
205 /* MIXED does not divide, so it is one constant reference per fidelity */
206 double mx=0,mp=0,mr=0;
207 for(int s=0;s<NS;s++){ double s1,dd,pp,rr; RNG=seeds[s]; mx+=run(2,fs[i],8,&s1,&dd,&pp,&rr); mp+=pp; mr+=rr; }
208 mx/=NS; mp/=NS; mr/=NS;
209 printf(" --- f = %.2f (MIXED reference %.3f, pop %.0f, reps %.0f) ---\n",fs[i],mx,mp,mr);
210 printf(" divsz | BLIND | SELECT | SELECT-MIXED | mean sz | reps(SEL)\n");
211 printf(" ------+-------+--------+--------------+---------+----------\n");
212 double best=-9; int bestz=-1;
213 for(int z=0;z<nZ;z++){
214 double b=0,a=0,ms=0,rr2=0;
215 for(int s=0;s<NS;s++){
216 double s1,dd,pp,rr;
217 RNG=seeds[s]; b+=run(1,fs[i],szs[z],&s1,&dd,&pp,&rr);
218 RNG=seeds[s]; a+=run(0,fs[i],szs[z],&s1,&dd,&pp,&rr); ms+=pp; rr2+=rr;
219 }
220 b/=NS;a/=NS;ms/=NS;rr2/=NS;
221 double d=a-mx;
222 printf(" %2d | %.3f | %.3f | %+.3f | %5.0f | %6.0f\n",szs[z],b,a,d,ms,rr2);
223 if(d>best){ best=d; bestz=szs[z]; }
212224 }
213 sel[i]=a/NS; bli[i]=b/NS; mix[i]=c/NS; st=s0/NS;
214 dv=d1/NS; pS=p1/NS; pB=p2/NS; pM=p3/NS; rS=r1/NS; rB=r2/NS; rM=r3/NS;
215 printf(" %.2f | %.3f | %.3f | %.3f\n",
216 fs[i],mix[i],bli[i],sel[i]);
225 printf(" best SELECT-MIXED %+.3f at divsz %d %s\n\n", best, bestz,
226 best>0.02?"<-- SELECT WINS somewhere":"(compartments never beat well-mixed)");
217227 }
218 printf("\n start (random soup) %.3f\n",st);
219 printf(" diagnostics at f=0.98: divisions/step %.1f | mean pop MIXED %.0f BLIND %.0f SELECT %.0f\n",dv,pM,pB,pS);
220 printf(" total replications MIXED %.0f BLIND %.0f SELECT %.0f\n",rM,rB,rS);
221228
222 /* emergence criterion, verbatim from polymer.c: end > 0.85 AND end > start + 0.2 */
223 int fM=-1,fB=-1,fS=-1;
224 for(int i=0;i<nF;i++){
225 if(fM<0 && mix[i]>0.85 && mix[i]>st+0.2) fM=i;
226 if(fB<0 && bli[i]>0.85 && bli[i]>st+0.2) fB=i;
227 if(fS<0 && sel[i]>0.85 && sel[i]>st+0.2) fS=i;
228 }
229 printf("\n floor (first f where function emerges, polymer.c's criterion):\n");
230 printf(" MIXED %s%.2f\n", fM<0?">":"", fM<0?fs[nF-1]:fs[fM]);
231 printf(" BLIND %s%.2f\n", fB<0?">":"", fB<0?fs[nF-1]:fs[fB]);
232 printf(" SELECT %s%.2f\n\n", fS<0?">":"", fS<0?fs[nF-1]:fs[fS]);
233
234 int turned = dv>0.5;
235 if(!turned)
236 printf(" => F4 FAILED, THE TEST DID NOT RUN. Compartments did not divide, so there was no\n"
237 " compartment-level reproduction to select on. Invalid experiment, not a null.\n");
238 else if(fS>=0 && (fM<0 || fs[fS]<fs[fM]) && (fB<0 || fs[fS]<fs[fB]))
239 printf(" => THE FLOOR DROPS, AND ONLY WITH SELECTION. Emergent compartment selection lets\n"
240 " heritable function appear at a fidelity where both the single-level baseline and\n"
241 " compartments-without-selection fail. Eigen's bootstrap paradox is not a wall in the\n"
242 " order it is usually posed: you do not need accurate copying before compartments —\n"
243 " compartments make accurate copying affordable. CHECK the population and replication\n"
244 " diagnostics before claiming it: if SELECT ran far more replications, the shift may\n"
245 " be sheer number of trials rather than multilevel selection.\n");
246 else if(fS>=0 && fB>=0 && fs[fS]>=fs[fB])
247 printf(" => COMPARTMENTS, NOT SELECTION. The floor drops (or does not) identically with and\n"
248 " without between-compartment selection, so mere compartmentalization explains it.\n");
249 else
250 printf(" => HONEST NULL. Emergent compartment selection does NOT lower the fidelity floor here;\n"
251 " the bootstrap paradox survives multilevel selection in this model. That is a real\n"
252 " result: it says the wall is fidelity itself, not the level selection acts on.\n");
229 printf(" READ: a positive SELECT-MIXED at some intermediate divsz would mean an optimum exists —\n");
230 printf(" compartments small enough to correct AND large enough to remember. If the column is\n");
231 printf(" negative everywhere and merely rises toward 0 as divsz grows, compartmentalization is a\n");
232 printf(" pure COST for sequence maintenance at every granularity, and multilevel selection cannot\n");
233 printf(" lower Eigen's floor by any choice of compartment size.\n");
253234 return 0;
254235}
fidfloor.md +47 -0
……@@ -67,3 +67,50 @@ First run was **invalid** and is recorded as such in the file header: MIXED was
6767sat below replacement (0.275 vs degradation 0.30) so BLIND could never sustain itself, and selection
6868changed total uptake and hence replication count. The apparent "SELECT wins" of that run was SELECT
6969being the only arm able to exceed replacement. All three faults fixed before these numbers.
70
71---
72
73## Division-size sweep — no optimum exists, and that is the point
74
75The tension flagged above (small compartments correct but forget; large ones remember but cannot
76correct) predicts an intermediate optimum. Swept division size 4…24 at three fidelities, with MIXED
77as a constant reference per fidelity.
78
79**SELECT − MIXED, by division size:**
80
81| divsz | f=0.90 | f=0.95 | f=0.98 |
82|---|---|---|---|
83| 4 | −0.083 | −0.128 | −0.156 |
84| 6 | −0.061 | −0.103 | −0.097 |
85| 8 | −0.056 | −0.088 | −0.088 |
86| 12 | −0.049 | −0.073 | −0.075 |
87| 16 | −0.037 | −0.063 | −0.058 |
88| 24 | **−0.030** | **−0.043** | **−0.043** |
89
90**Negative everywhere, monotone everywhere, no hump at any fidelity.** Compartments stop hurting only
91by growing until they stop being compartments — and as divsz → MAXSZ, SELECT converges on MIXED
92trivially, because one big compartment *is* well-mixed.
93
94**The confound runs against the null, which strengthens it.** At divsz 4–6 the SELECT arm does fewer
95replications than MIXED (13,974 and 59,228 vs 75,987), so the small end is handicapped. But at divsz
9624 SELECT does **116,816 replications against MIXED's 75,987 — 54% more — and still loses by 0.043.**
97The negative result survives its own confound.
98
99> **Compartmentalisation is a pure cost for sequence maintenance at every granularity.** Multilevel
100> selection cannot lower Eigen's floor by any choice of compartment size.
101
102## What this says about rung 1→2
103
104The two demands are not merely in tension — they are **irreconcilable in one parameter**. Purging
105parasites needs small compartments (`ribozyme.c`, `chemoton.c`, Test A). Maintaining sequence
106information needs large ones, or none. No single size does both, and the sweep shows there is no
107clever middle.
108
109So the way out cannot be a better compartment size. It has to be **stopping asking one object to do
110both jobs** — put the memory in a different molecule from the function, so the compartment can be
111small enough to correct while the information lives somewhere that small compartments do not erode.
112
113That is the genotype/phenotype split, and it is what life actually did. This sweep is the closest the
114arc has come to an argument for *why* the split was necessary rather than merely observing that it
115happened: **one compartment cannot both correct and remember, so the two functions had to be carried
116by two different molecules.**