7 The adaptive synthesis task
(ns meme-constructor.computing.post-i5-adaptive-synthesis
(:require [scicloj.kindly.v4.kind :as kind]
[meme-constructor.population :as pop]
[meme-constructor.synthesis.adaptive :as ad]
[meme-constructor.figures :as fig]))Post I.5 of Part I, “A Constructor Theory of Computing and Design”.
Design needs two things: variation that does not read the task, and selection by the task. Competition is not one of them. If the variation does not read the task, the design must reach the product through the decisions of the eliminator, at about one bit per decision.
This post defines design without any process, then a process that can produce it, the adaptive synthesis task (C5). It proves the bound, runs two experiments, and states the design conjecture: adaptationism is the best theory of design. \(V\) is the variation constructor of post I.4, not the vehicle of post 6.
7.1 1. Design
A watch, an eye and a good theory share something a snowflake lacks. Each could easily have been otherwise, and almost every way it could have been otherwise would work worse. That is the idea. We need three terms to state it.
An information variable is a set of attributes for which permuting and copying are possible tasks (Deutsch & Marletto 2015). Knowledge is information that, once instantiated, tends to cause itself to remain instantiated (Deutsch 2013; Marletto 2015 §3.1). A step relation ⇝ on constructors is the elementary variation of a program: a point mutation for genes, one conjectural step for ideas, one application of the variation constructor for a program search.
Definition I.5.0 (Design). Fix a step relation ⇝. An abstract constructor K for a task T is a design to the degree that
- Knowledge condition (D1). K is knowledge: it is resilient.
- Alternatives condition (D2). Alternatives are possible within one step. There are variants K′ with K ⇝ K′, in the same information medium, constructible from the same resources with the same sub-constructors.
- Fine-tuning condition (D3). The one-step variants K′ perform T to a much lower accuracy. K is the more fine-tuned, the larger the share of its one-step variants, weighted by how likely ⇝ makes them, that do.
The fine-tuning condition (D3) is Marletto’s (2015, §3.1.1) criterion for the appearance of design: “A sub-recipe R′ for the task T′ is fine-tuned to perform T if almost any slight change in T′ would cause T to be performed to a much lower accuracy.” We make “slight change” precise as one step of ⇝, and “almost any” a degree. So design is graded, not a yes or no. In biology the degree has a standard measure, Kimura’s constraint \(1 - k/\mu\): the share of mutations at a site that selection removes (post III.2). A site with constraint 0.56, such as the C-peptide of insulin, is weakly designed. It is not a borderline case that a threshold would have to settle.
The alternatives condition (D2) is read relative to ⇝ on purpose, because almost anything is possible somehow. Relative to one step, crystals fail. The growth laws of a snowflake leave no alternative habit within reach, and the ions of a salt fix its lattice. That is order, not design. The choice of ⇝ matters: under algorithmic variation (C6) every variant is one step away, the alternatives condition always holds, and the fine-tuning condition does all the work.
The knowledge condition (D1) says that the design lasts. That is an achievement only where something could remove it.
Design is information plus fine-tuning. Under mild assumptions K and its one-step variants form an information variable (Proposition 7.2 of post 7, a sketch). A neutral site lies in one too, but is not fine-tuned.
The definition mentions no process and no substrate. Which process produces designs is therefore a substantive question.
7.2 2. The adaptive synthesis task
Definition I.5.1 (Adaptive synthesis task (C5)). An adaptive synthesis task is a tuple \((T, I, V, E, N)\). \(T\) is a task and \(I\) an information medium whose attributes are candidate programs for \(T\). \(V\) is a variation constructor. It takes the current population in \(I\) to a new variant, with a law \(P_V\). \(E\) is an elimination constructor. It removes variants from \(I\) or declines to vary them. \(N\) is a finite resource. The product is a population that carries an abstract constructor \(K\) for \(T\), in the sense of synthesis (C4). Two conditions hold.
- Unspecific-variation condition (A1′). \(P_V\) depends on the current population only, not on \(T\). \(V\) may be structured. It may recombine, duplicate, reuse modules and prefer short programs. It may not consult \(T\).
- Selection condition (A3). Which variants persist or get varied depends on how accurately they perform \(T\), not merely on the fact that they persist. This avoids “what survives is what survives”.
Competition (A2) is a property that some adaptive processes have. The task has competition if the tasks by which the variants persist or get varied cannot all be performed together on \(N\). Two replicators compete if \(N\) cannot make copies of both. Two ideas compete for variation if a step of work given to one is not given to the other. Competition is an impossibility, not an event: variants compete in principle and need never meet.
One might think there is no design without competition. It does not hold: the competition experiment (E14) found and held design in a pool from which nothing was removed, when parents were drawn by the task (Observation 7.12 of post 7). One might then say that competition moved to the finite budget of variation events. That does not hold either: in post III.6 an unlimited store with a budget of one variation step per tick found the points only when attention read the task, and the budget did no work of its own. Where Part III measures competition, it measures a property of a mechanism that implements selection: its strength against drift through \(N_e\) (post III.3) and its unit, the genome without sex and the allele with it (post III.5).
Drift fails the selection condition (A3). It is a process, but not an adaptive one.
The unspecific-variation condition (A1′) names exactly what is excluded: dependence on \(T\). It replaces the variation condition (A1) of post 7, which invited a reading as uniform variation. This is Popper’s sense of “blind”: not derived from the data, but not uniform either. Campbell’s (1960) “blind variation” was criticised because conjectures are built from existing knowledge. That is allowed here, and so is a preference for short programs, which is the same for every task (post I.4, Proposition I.4.6).
With ⇝ given by \(V\), alternatives to \(K\) are possible if \(P_V(K' \mid K) > 0\). A closed \(V\) can have holes, and then no amount of selection reaches them (post I.4, Proposition I.4.7).
The mapping to Popper.
| Popper | adaptive synthesis task |
|---|---|
| problem | \(T\), performed badly by the current population |
| conjecture | a variant drawn from \(V\) |
| no induction | \(V\) does not read \(T\): the unspecific-variation condition (A1′) |
| error elimination | \(E\), under the selection condition (A3) |
| knowledge | what survives keeps itself instantiated: the knowledge condition (D1) |
“No induction” is a condition on the constructor. If \(V\) built \(K\) from the evidence about \(T\), the design would already be in \(V\): moved, not explained.
7.3 3. The information bound
In a run, \(E\) makes decisions: keep or discard. If \(V\) does not read \(T\), these decisions are the only channel from \(T\) to the product, so they should bound its design. We make this precise for a single hill-climber, Chaitin’s regime (post I.4, section 1).
Setting. The run has \(n\) rounds. In round \(t\), \(V\) proposes a variant of the current state, and \(E\) decides \(d_t \in \{0, 1\}\), reject or accept. Let \(R\) be all the randomness of \(V\). The final state is a function \(f(R, d)\) of \(R\) and the decision sequence \(d\). The unspecific-variation condition (A1′) says that the law of \(R\) does not depend on \(T\). The decisions do depend on \(T\), through \(E\).
Definition I.5.2 (Supplied bits, blind reference). Fix a probability distribution \(Q\) on \(\{0,1\}^n\) that does not depend on \(T\), a code for decision sequences. The bits supplied by \(E\) in a run with decisions \(d\) are \(-\log_2 Q(d)\). The blind reference is the same process with \(d\) drawn from \(Q\), independently of \(R\). For a set \(A\) of final states, write \(P_{\mathrm{blind}}(A)\) for its probability under the blind reference. The design content of a run that ends in \(A\) is \(-\log_2 P_{\mathrm{blind}}(A)\): how unlikely \(A\) is for the same variation with decisions that ignore the task.
- randomness R from V
- decisions D(R) made by E, which reads T
- the same law of R
- decisions drawn from Q, independent of R and T
Proposition I.5.3 (Information bound (S1′)). Assume the unspecific-variation condition (A1′). For every set \(A\) of final states and every \(s \ge 0\),
\[\Pr\Big[\, f(R,d) \in A \ \text{ and } \ -\log_2 Q(d) < -\log_2 P_{\mathrm{blind}}(A) - s \,\Big] \le 2^{-s}.\]
In words: except with probability \(2^{-s}\), a run that ends in \(A\) had \(E\) supply at least the design content of \(A\), minus \(s\) bits.
Proof. Write \(D(R)\) for the decisions \(E\) actually makes. Because \(R\) has the same law under both processes,
\[\begin{aligned} P_{\mathrm{blind}}(A) &= \sum_{d} Q(d)\, \Pr_R[f(R,d) \in A] \\ &\ge \sum_{d} Q(d)\, \Pr_R[f(R,d) \in A,\ D(R) = d] \\ &= \mathbb{E}_R\big[\, Q(D(R))\, \mathbf{1}[f(R, D(R)) \in A] \,\big]. \end{aligned}\]
On the event in the proposition, \(Q(D(R)) > 2^{s} P_{\mathrm{blind}}(A)\). Markov’s inequality applied to the last expectation gives the probability bound. \(\square\)
The proof uses the unspecific-variation condition (A1′) once: \(R\) has the same law in the real run and in the blind reference. If \(V\) reads \(T\), the bound can fail, and section 6 shows it failing. A deterministic version, “\(E\) supplies at least \(-\log_2 P_V(K)\) bits”, does not hold.
Corollary I.5.4 (Knowledge grows at most as fast as errors are eliminated). Any code for \(n\) binary decisions can be chosen with \(-\log_2 Q(d) \le n + 2\log_2(n+1)\). So with probability at least \(1 - 2^{-s}\) a run of \(n\) rounds produces at most \(n + 2\log_2(n+1) + s\) bits of design: about one bit per decision to keep or discard. If \(E\) chooses among \(m\) options per round, the rate is \(\log_2 m\) bits per round.
Proof. Our code \(Q\) below has this length. Insert it into Proposition I.5.3. \(\square\)
Design content can be much smaller than the functional content \(-\log_2 \rho\), where \(\rho\) is the fraction of all variants that lie in \(A\). The difference is knowledge already in \(V\) and in the starting population. It was paid for by earlier selection, or it is not specific to any task, like a preference for short programs (C6).
The corollary has known analogues per site and per generation: Kimura (1961) tied the rate at which selection accumulates genetic information to the substitutional load, and Worden (1995) bounded it by the selection pressure. Proposition I.5.3 is a bound for one run, for any \(V\). Of Chaitin’s time bounds it gives only order \(N\); his \(2^N\) and roughly \(N^2\) come from \(P_V\).
7.4 4. Cumulative selection
The bound says what \(E\) must supply, not how long it takes. The time is a known result, which we state for later use.
Proposition I.5.5 (Cumulative-selection proposition (S2)). Take a strict hill-climber: \(E\) accepts a variant if and only if it performs \(T\) strictly better. Partition the variants into fitness levels \(L_0, \dots, L_m\), with \(L_m\) the target.
- If from every variant in \(L_i\), \(i < m\), one step of \(V\) reaches a higher level with probability at least \(q_i\), then the expected number of rounds to reach \(L_m\) is at most
\[\sum_{i<m} \frac{1}{q_i}.\]
- If from a variant \(x\) the total probability of reaching any higher level in one step is \(Q(x)\), then a climber at \(x\) waits \(1/Q(x)\) rounds in expectation before it moves.
Proof. (a) is the fitness-level method (Wegener 2002). (b) The waiting time is geometric with success probability \(Q(x)\). \(\square\)
So cumulative selection is fast exactly when the working variants are connected under the step relation of \(V\) by steps of non-negligible probability. Maynard Smith’s (1970) word chain is the limiting case for point mutations, where every intermediate must be a meaningful word.
Algorithmic steps weaken the condition, but only where improvements are one short program away: on the program-synthesis benchmarks of post I.4 they are not, and \(Q(x)\) is tiny.
7.5 5. Where elimination happens
Popper, in his first Darwin Lecture (1977, published 1978): “Let our conjectures, our theories, die in our stead!” The next definition makes this a statement about where \(E\) acts.
Definition I.5.6 (Locus of elimination (C7)). The locus of \(E\) is the substrate on which a discarded variant is destroyed. In biology it is the vehicle: the organism dies. In culture it is transmission: the idea is not passed on. In a brain, and in science, it is the representation in \(I\) itself: the conjecture is dropped before anything is built.
Proposition I.5.7 (Elimination-locus proposition (S3)). If one round costs time \(c\) and \(E\) decides at most \(b\) bits per round, a design of content \(B\) takes, except with probability \(2^{-s}\), at least time \(c\,(B - s - O(\log n))/b\). Proof. Corollary I.5.4. \(\square\)
That is all it says: a cheaper round raises the ceiling on the growth of knowledge in proportion. Its content lies in two premises. The first is that criticism can act on a representation at all; post I.6 states it as Popper’s conjecture (Conjecture I.6.15). The second is that eliminating a representation costs far less than building and killing a vehicle. That premise is empirical, and nothing in this book tests it.
7.6 6. Experiments
Both experiments use the bit-string model of post 4, not Push3, because the design content is a probability that Push3 only lets us bound. Here \(V\) is post 4’s copy noise: per block a uniform redraw with probability \(p_\text{jump}\), else independent flips. With equal loss and gain probabilities, \(V\) iterated \(k\) times has a closed form, so every quantity below is exact. The landscape has 9 small points of 7 tasks.
(def landscape (ad/point-landscape {:n-points 9 :block-size 7 :seed 1}))(def copy {:p-loss 0.02 :p-gain 0.02 :p-jump 0.05})(def honest (ad/honest-v copy))(defn r1 [x] (if (double? x) (/ (Math/round (* 10.0 x)) 10.0) x))(defn r2 [x] (if (double? x) (/ (Math/round (* 100.0 x)) 100.0) x))Two fitness functions, the needle and the moat.
- 1 per point hit, 0 for every other pattern of a block
- the non-hits form a neutral plateau
- −0.5 for every block within Hamming distance 2 of its pattern
- each peak ringed by worse variants; no neutral path of flips leads to it
(def fitnesses {"needle" (ad/needle landscape)
"moat" (ad/moat landscape 2 0.5)})7.6.1 The population-competition experiment
The population-competition experiment (X3) asks whether a population, which has competition (A2), finds a design faster than Chaitin’s single hill-climber. Prediction: yes, on isolated peaks, because a population can hold worse variants and cross a valley that a strict climber cannot. Refutation: no difference.
We count evaluations, one per variant made, until some variant carries all 9 points.
The populations are Wright–Fisher: each generation \(n\) parents are drawn with weight \(e^{3 F}\) and varied. The fixed size gives competition (A2), the weights are the selection condition (A3).
All start from the empty variant, budget 60,000 evaluations, seeds 1 to 20. A run that fails within the budget is counted at the budget, so its median is a lower bound.
(def x3-seeds (range 1 21))(def x3-budget 60000)(def x3-processes
[["climber, strict" {:kind :hill :accept :strict} "#1f77b4"]
["climber, weak" {:kind :hill :accept :weak} "#17becf"]
["population 30" {:kind :wf :n 30 :beta 3.0} "#d62728"]
["population 100" {:kind :wf :n 100 :beta 3.0} "#ff7f0e"]])(def x3
(into {}
(for [[fname fit] fitnesses
[pname proc _] x3-processes]
[[fname pname]
(ad/x3-cell {:landscape landscape :vary honest :fitness fit
:init 0 :budget x3-budget}
proc x3-seeds)])))(kind/plotly
{:data (vec (for [[pname _ colour] x3-processes]
{:type "box" :name pname :boxpoints "all" :jitter 0.4
:x (vec (mapcat (fn [f] (repeat (count x3-seeds) f)) (keys fitnesses)))
:y (vec (mapcat (fn [f] (map #(or % x3-budget) (:evals (x3 [f pname]))))
(keys fitnesses)))
:marker {:color colour}}))
:layout {:title "Evaluations until one variant carries all 9 points (seeds 1–20)"
:boxmode "group"
:yaxis {:title "evaluations" :rangemode "tozero"}
:height 440}})Beats strict climber is the share of pairs of runs, one from each process, in which the process needs fewer evaluations; 0.5 means no difference.
(defn superiority [xs ys]
(let [xs (map #(or % x3-budget) xs) ys (map #(or % x3-budget) ys)]
(/ (reduce + (for [x xs y ys] (cond (< x y) 1.0 (= x y) 0.5 :else 0.0)))
(* (count xs) (count ys)))))(vec (for [[fname _] fitnesses
[pname _ _] x3-processes
:let [c (x3 [fname pname])]]
{:landscape fname :process pname
:solved (str (:solved c) "/" (count x3-seeds))
:median-evaluations (:median c)
:beats-strict-climber (r2 (superiority (:evals c) (:evals (x3 [fname "climber, strict"]))))}))[{:landscape "needle",
:process "climber, strict",
:solved "19/20",
:median-evaluations 22138.0,
:beats-strict-climber 0.5}
{:landscape "needle",
:process "climber, weak",
:solved "20/20",
:median-evaluations 6169.0,
:beats-strict-climber 0.98}
{:landscape "needle",
:process "population 30",
:solved "20/20",
:median-evaluations 8100.0,
:beats-strict-climber 0.89}
{:landscape "needle",
:process "population 100",
:solved "20/20",
:median-evaluations 10750.0,
:beats-strict-climber 0.91}
{:landscape "moat",
:process "climber, strict",
:solved "20/20",
:median-evaluations 21671.0,
:beats-strict-climber 0.5}
{:landscape "moat",
:process "climber, weak",
:solved "20/20",
:median-evaluations 21210.5,
:beats-strict-climber 0.51}
{:landscape "moat",
:process "population 30",
:solved "19/20",
:median-evaluations 18525.0,
:beats-strict-climber 0.55}
{:landscape "moat",
:process "population 100",
:solved "20/20",
:median-evaluations 20000.0,
:beats-strict-climber 0.49}]Observation I.5.8 (seeds 1–20, table above). On the needle both populations need 35 to 50 % of the evaluations of the strict climber, but the weak climber is faster still, so the gain comes from drift on the neutral plateau, not from competition. On the moat all four medians lie within about 15 % of each other, with overlapping spreads.
- populations need 35–50 % of the strict climber's evaluations
- the weak climber is faster still: the gain is drift, not competition
The prediction failed, but the moat is a weak test. The block redraw puts every peak one jump away from any variant, so no valley ever has to be crossed. The result fits the view that competition does not help to find a design. It does not show it. Post III.4 found the same in an RNA folding model (Observation III.4.12), where a tournament population needed 1.4 to 5 times as many evaluations as a weak climber.
The fitness-level bound of the cumulative-selection proposition (S2) can be checked on the needle. Only jumps are needed for the lower bounds \(q_i\), so the bound holds from any start.
{:bound-expected-rounds (Math/round (ad/fitness-level-bound landscape copy))
:strict-climber-median (:median (x3 ["needle" "climber, strict"]))
:bound-without-jumps (ad/fitness-level-bound landscape (assoc copy :p-jump 0.0))}{:bound-expected-rounds 24290,
:strict-climber-median 22138.0,
:bound-without-jumps 5.299037713608341E12}Observation I.5.9 (exact, and seeds 1–20). The bound is 24,290 expected rounds, and the strict climber’s median lies just below it: its worst case, a redraw of one block, is also the usual route. Without jumps the bound is about \(5 \times 10^{12}\) rounds, since seven simultaneous flips are then the only guaranteed route. Without connected intermediates cumulative selection stalls.
7.6.2 The information-bound experiment
The information-bound experiment (X4) asks whether the design content of a run stays below the bits \(E\) supplied, up to a few bits. Prediction: yes, in every run with honest variation. Refutation: a run falls short by much more than a few bits.
The code \(Q\) first draws the number of accepts \(k\) with probability \(1/((k+1)(k+2))\), the last value \(k = n\) taking the rest, and then one of the \(\binom{n}{k}\) sequences uniformly. We chose this code after seeing results with a first one, uniform on the number of accepts, whose blind reference forgot the start, so that the knowledge in a start always came out as zero. The bound holds for every \(Q\) fixed before the run, but the numbers below depend on this choice.
Under the blind reference the final state is \(V^k(x_0)\) with that law of \(k\), which ad/blind-tail computes exactly. \(A\) is the set of variants with at least as many hits as the run ended with. For example, 5 accepts in 1,000 rounds cost this many bits:
(ad/decision-bits 1000 5)48.29989961142829The honest runs use the needle, both climbers, 100, 1,000 and 10,000 rounds, and two starts: the empty variant, and one that carries 5 of the 9 points already, standing for knowledge paid for by earlier selection. The control violates the unspecific-variation condition (A1′): after the honest step it sets each point block to its hidden pattern with probability \(p_c\).
(def start-5
(reduce bit-or 0 (map :pattern (take 5 (pop/blocks-of-type landscape :point)))))(def x4-honest
(vec (for [[sname x0] [["empty start" 0] ["start with 5 points" start-5]]
accept [:strict :weak]
n [100 1000 10000]
seed (range 1 11)]
(assoc (ad/x4-row landscape copy x0
(ad/hill-climb {:landscape landscape :vary honest
:fitness (fitnesses "needle") :init x0
:rounds n :seed seed :accept accept}))
:start sname :accept accept :seed seed))))(def x4-inductive
(vec (for [pc [0.01 0.1 0.3]
n [10 100 1000]
seed (range 1 6)]
(assoc (ad/x4-row landscape copy 0
(ad/hill-climb {:landscape landscape
:vary (ad/inductive-v copy pc)
:fitness (fitnesses "needle") :init 0
:rounds n :seed seed :accept :strict}))
:pc pc :seed seed))))(defn x4-trace [rows nm colour symbol]
(let [rows (filter #(pos? (:design-bits %)) rows)]
{:type "scatter" :mode "markers" :name nm
:x (mapv :design-bits rows) :y (mapv :supplied-bits rows)
:marker {:color colour :symbol symbol :size 7 :opacity 0.7}}))(kind/plotly
{:data [(x4-trace (filter #(= :strict (:accept %)) x4-honest) "honest V, strict climber" "#1f77b4" "circle")
(x4-trace (filter #(= :weak (:accept %)) x4-honest) "honest V, weak climber" "#17becf" "circle-open")
(x4-trace x4-inductive "V reads T (control)" "#d62728" "x")
{:type "scatter" :mode "lines" :name "supplied = design"
:x [0.5 80] :y [0.5 80] :line {:color "#7f7f7f" :dash "dash"}}]
:layout {:title "Bits supplied by E against design content, one point per run"
:xaxis {:title "design content (bits)" :type "log"}
:yaxis {:title "bits supplied by E" :type "log"}
:height 480}})(defn slack-summary [rows]
(let [sl (map :slack rows)]
{:runs (count rows)
:min-slack (r1 (reduce min sl))
:runs-below-zero (count (filter neg? sl))
:runs-below-minus-3 (count (filter #(< % -3.0) sl))})){:honest-strict (slack-summary (filter #(= :strict (:accept %)) x4-honest))
:honest-weak (slack-summary (filter #(= :weak (:accept %)) x4-honest))
:reads-T-by-pc (into (sorted-map)
(for [[pc rows] (group-by :pc x4-inductive)]
[pc (slack-summary rows)]))}{:honest-strict
{:runs 60,
:min-slack -0.6,
:runs-below-zero 1,
:runs-below-minus-3 0},
:honest-weak
{:runs 60, :min-slack 6.7, :runs-below-zero 0, :runs-below-minus-3 0},
:reads-T-by-pc
{0.01
{:runs 15,
:min-slack -10.5,
:runs-below-zero 6,
:runs-below-minus-3 3},
0.1
{:runs 15,
:min-slack -39.6,
:runs-below-zero 13,
:runs-below-minus-3 13},
0.3
{:runs 15,
:min-slack -61.9,
:runs-below-zero 15,
:runs-below-minus-3 15}}}Slack is the bits supplied minus the design content. Negative slack means the run falls short of the bound.
Observation I.5.10 (seeds 1–10 honest, 1–5 control). Of the 120 honest runs, 119 lie on or above the diagonal. One falls short by 0.6 bits, which Proposition I.5.3 allows, and none by more than 3 bits. Only the strict climbers test the bound, and the one shortfall is theirs. The weak climbers meet it trivially: every neutral acceptance is a decision too, so they supply far more bits than their design needs, at least 6.7 bits more in every run. The control breaks the bound as soon as it does real work. At \(p_c = 0.3\) all 15 runs fall short by more than 3 bits, by up to 62 bits. With seed 1 it reaches 8 points in 10 rounds with 12.6 bits supplied, against 62.1 bits of design content.
The prediction held, on one landscape, the needle, for the strict climbers. The control shows that the unspecific-variation condition (A1′) is what makes the bound hold.
- 119 of 120 honest runs on or above the diagonal
- one short by 0.6 bits, which the bound allows
(vec (for [[k rows] (sort-by key (group-by (juxt :start :accept) x4-honest))
:let [rows (filter #(pos? (:hits %)) rows)]]
{:start (first k) :accept (second k)
:mean-hits (r1 (/ (reduce + 0.0 (map :hits rows)) (count rows)))
:mean-functional-bits (r1 (/ (reduce + (map :functional-bits rows)) (count rows)))
:mean-design-bits (r1 (/ (reduce + (map :design-bits rows)) (count rows)))
:mean-knowledge-in-start (r1 (/ (reduce + (map :knowledge-in-v rows)) (count rows)))}))[{:start "empty start",
:accept :strict,
:mean-hits 4.6,
:mean-functional-bits 27.1,
:mean-design-bits 31.0,
:mean-knowledge-in-start -3.9}
{:start "empty start",
:accept :weak,
:mean-hits 5.5,
:mean-functional-bits 35.0,
:mean-design-bits 39.0,
:mean-knowledge-in-start -4.0}
{:start "start with 5 points",
:accept :strict,
:mean-hits 6.3,
:mean-functional-bits 38.8,
:mean-design-bits 14.8,
:mean-knowledge-in-start 24.1}
{:start "start with 5 points",
:accept :weak,
:mean-hits 6.7,
:mean-functional-bits 42.6,
:mean-design-bits 19.5,
:mean-knowledge-in-start 23.2}]Observation I.5.11 (same runs). From the start with 5 points, the design content is on average 23 to 24 bits below the functional content. Those bits were in the start, not supplied in the run. From the empty start the difference is about \(-4\) bits: the empty variant is a worse start than a uniform draw, and the blind reference with few accepts stays near it.
7.7 7. The design conjecture
Conjecture I.5.12 (Adaptationism is the best theory of design). Every constructor that reliably produces a design \(K\) without containing it implements unspecific variation (A1′) and selection by the task (A3). Competition (A2) is not needed. We call this conjecture adaptationism.
Regress argument (sketch). The rival explanation is a designer, a \(V\) with a large \(P_V(K)\). By the information bound (S1′), what it has beyond a blind \(V\) is knowledge in \(V\). Either that knowledge is itself a design, and the question repeats, or it was paid for by selection. If every history starts with a \(V\) that holds nothing specific to \(T\), selection is the only payer. This is Deutsch’s (2011) claim that knowledge comes only from evolution or from creativity, read as one process. The gaps: “reliably produces” and “contains” are not defined, the empty start is assumed, and the argument shows that selection bits were supplied, not that the payer meets both conditions.
Why “best”. A rival theory of design would have to say how fine-tuning arises without the two conditions. The classical critics of adaptationism do not. Spandrels, developmental constraint and self-organisation explain order where no alternative lies within one step, so they fail the alternatives condition (D2). Exaptation explains a trait that was not fine-tuned for its new task, so it explains no design there. Post III.1 does this sorting for biology.
What fits. The information bound (S1′) routes all design through \(E\)’s decisions, and its control breaks exactly when \(V\) reads \(T\) (X4). The competition experiment (E14) found design without competition. A designer that pays for its evaluations does not beat cumulative evolution (X1); where design wins, a free oracle already contains the design. All this fits the conjecture. None of it tests it against a real rival.
The designers the regress passes through are persons. They run an adaptive synthesis task whose criterion lies in \(I\) (post I.6).
Refutation: a reliable producer of fine-tuned designs for a task it does not read, whose design content exceeds all the selection it and its ancestors received.
7.8 Summary
- Design (Definition I.5.0) is defined without a process, relative to a step relation, and it is graded: the more one-step variants perform much worse, the more fine-tuned.
- The adaptive synthesis task (C5) has two conditions: variation that does not read the task (A1′) and selection by the task (A3). Competition (A2) is a property, not a condition of design.
- The information bound (S1′): about one bit of design per binary decision of the eliminator, in probability. The information-bound experiment (X4) fits it; the population-competition experiment (X3) is a weak test that found no gain from competition.
- Adaptationism is the best theory of design (Conjecture I.5.12), supported by the failure of its rivals, not proved.
7.9 Open problems
- Keeping a design. Finding a design needs no competition. Does keeping one under mutation need it, or only selection that keeps reading the task? This is the central open question of the book. Receivers that check their copies against the evidence kept most of the content with no selection among hosts (post 5, Observation 5.10). Post I.6 meets the same question as the price of fallibilism (C10).
- Crossing valleys. Does a population cross a valley that a single climber cannot? The moat never required it. A landscape without one-jump access to the peaks would test it.
- The information bound for populations, for which the code must also cover which parents are drawn and which offspring kept.
- The cost premise of the elimination-locus proposition (S3).
- An evolved variator. A \(V\) shaped by earlier selection reads past tasks. When does it violate the unspecific-variation condition (A1′) for the present one?
- The design conjecture. Define “reliably produces” and “contains” so that the regress becomes a proof.
7.10 References
- Campbell, D. T. (1960). Blind variation and selective retention in creative thought as in other knowledge processes. Psychological Review 67, 380–400. (verified in post 7)
- Deutsch, D. (2011). The Beginning of Infinity. Allen Lane. (not re-checked)
- Deutsch, D. (2013). Constructor theory. Synthese 190, 4331–4359. §2.15. (not re-checked)
- Deutsch, D. & Marletto, C. (2015). Constructor theory of information. Proc. R. Soc. A 471: 20140540. (verified in post 7)
- Kimura, M. (1961). Natural selection as the process of accumulating genetic information in adaptive evolution. Genetical Research 2(1), 127–140. (verified: the abstract, including the proportionality to the substitutional load)
- Marletto, C. (2015). Constructor theory of life. J. R. Soc. Interface 12: 20141226. arXiv:1407.0681. §3.1, §3.1.1. (verified in post 7, including the quotation)
- Maynard Smith, J. (1970). Natural selection and the concept of a protein space. Nature 225, 563–564. (verified in post 7, including the WORD–GENE example)
- Popper, K. R. (1978). Natural selection and the emergence of mind. Dialectica 32(3–4), 339–355. doi:10.1111/j.1746-8361.1978.tb01321.x. First Darwin Lecture, Darwin College, Cambridge, 8 November 1977. (verified: bibliographic data and the quotation, from a transcript of the lecture)
- Wegener, I. (2002). Methods for the analysis of evolutionary algorithms on pseudo-Boolean functions. In Evolutionary Optimization, Kluwer, 349–369. (verified: bibliographic data and the fitness-level method as attributed in secondary sources)
- Worden, R. P. (1995). A speed limit for evolution. Journal of Theoretical Biology 176(1), 137–152. (verified: the abstract as quoted in Worden 2022, arXiv:2212.00430)
source: book2/notebooks/meme_constructor/computing/post_i5_adaptive_synthesis.clj