16 Design for memes
(ns meme-constructor.posts.post-07-design
(:require [scicloj.kindly.v4.kind :as kind]
[meme-constructor.population :as pop]
[meme-constructor.convergence :as cv]
[meme-constructor.design :as d]
[meme-constructor.figures :as fig]))Post 7 of the series Memes as Abstract Constructors.
A good explanation is a design in Part I’s sense, and like every design it is graded: the more of its one-step variants fail, the more designed it is. Rational memes show the pattern of conservation that goes with design, constraint where the content functions and drift elsewhere, while anti-rational memes are conserved everywhere or only where psychology works. And in the toy, design needs variation and selection, not competition: a pool from which nothing was ever removed found and kept the small points when parents were drawn by the task.
- design is graded
- the more one-step variants fail, the more designed
- rational: constraint where the content functions, drift elsewhere
- anti-rational: everywhere, or only where psychology works
- a pool from which nothing was removed
- found and kept the points when parents were drawn by the task
This post is about design and adaptive process (F13) in idea space. Design is Definition I.5.0 of post I.5, by the knowledge, alternatives and fine-tuning conditions (D1–D3). The process is the adaptive synthesis task (C5) of the same post, with two conditions, unspecific variation (A1′) and selection (A3). This post reads both for memes, on the model of post 4. Model and toy results are ours unless a source is named.
16.1 1. What Marletto has, and what is missing
Marletto (2015, §3.1.1) defines the appearance of design through fine-tuned sub-recipes: “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”, and “the number of fine-tuned sub-recipes performable by V is a measure of V’s appearance of design”. Natural selection she models (§3.3) as an approximate construction by an environment that is “passive and blind” and “a crude approximation to a constructor: crude enough that it could have arisen by chance and requires no explanation.”
What is missing is a line between design and what the laws force anyway. A snowflake is intricate, and nothing needs explaining. Post I.5 draws it by reading “slight change” as one step of a step relation, which a snowflake’s growth laws do not offer.
16.2 2. Design in idea space
For the function of a culture meme, on the open level, the step relation ⇝ is one conjectural step of a receiver: a variant that the receiver’s creativity can build from the evidence in the copy task \(C_m\) of post 1. (An ape meme is a meme whose repertoire a string over a fixed alphabet fixes, copied digitally on the closed level; its variants are other strings, and the question of design is not asked of it here.) It is relative to the receiver’s conjecture space (post 1, Conjecture 1.19). In the toy world of post 4 it is one move of the copy noise: a single-task flip or a whole-block jump.
- one conjectural step from the evidence in Cₘ
- relative to the receiver's conjecture space
- one single-task flip
- or one whole-block jump
Read for ideas, the fine-tuning (D3), alternatives (D2) and knowledge (D1) conditions say familiar things. “Hard to vary” is Deutsch’s (2011, ch. 1) phrase.
So a person’s good ideas are designs, and more or less designed as more or fewer of their one-step variants fail.
Proposition 7.2 (Design lies in information; sketch). Assume, besides the knowledge and alternatives conditions (D1, D2), that (i) ⇝ is symmetric on the variants in question, and (ii) the mechanism that keeps K instantiated would copy any variant K′ as well. Then K and its one-step variants form an information variable.
Sketch, with a gap. By (i) every step K ⇝ K′ can be reverted, and composing steps gives permutations; by (ii) every K′ can be copied. The gap: a permutation is one task on all attributes at once, so the step must be performable conditionally on the current value, which is not shown. ∎
The converse fails: a neutral site lies in an information variable but is not fine-tuned. For memes, (ii) holds for the copy task, which can carry any variant, and not for the criterion, which keeps only variants that score at least as well.
In the toy the alternatives condition (D2) holds for every block, since every flip and every jump has positive probability. The fine-tuning condition (D3) separates the block types. For the source variant used below (all points found, clouds inside their plateau, half the levers), the share of one-step variants that lower \(F_\text{real}\):
(def landscape
;; [post 4](meme_constructor.posts.post_04_anchor_stasis_growth.html)'s world (same seed, same blocks and hidden patterns) without
;; the memorability cost of size; section 4 explains why
(pop/make-landscape {:block-size 5 :seed 1 :size-cost 0.0}))(def landscape-post-4 (pop/make-landscape {:block-size 5 :seed 1}))(def copy-noise {:p-loss 0.02 :p-gain 0.01 :p-jump 0.05})(def source
(let [t (pop/tradition landscape {:n-points 4 :n-clouds 2 :psy-bits 5})]
;; add one task to each cloud, so the cloud sits inside its plateau
(reduce (fn [v c] (bit-set v (first (remove #(bit-test v %) (pop/variant->tasks (:mask c))))))
t (pop/blocks-of-type landscape :cloud))))(defn r3 [x] (if (double? x) (/ (Math/round (* 1000 x)) 1000.0) x))(mapv #(update-vals % r3) (d/fine-tuning landscape source))[{:index 0, :type :neutral, :flip 0.0, :jump 0.0}
{:index 1, :type :point, :flip 1.0, :jump 1.0}
{:index 2, :type :cloud, :flip 0.0, :jump 0.516}
{:index 3, :type :point, :flip 1.0, :jump 1.0}
{:index 4, :type :psy, :flip 0.0, :jump 0.0}
{:index 5, :type :neutral, :flip 0.0, :jump 0.0}
{:index 6, :type :cloud, :flip 0.0, :jump 0.516}
{:index 7, :type :point, :flip 1.0, :jump 1.0}
{:index 8, :type :point, :flip 1.0, :jump 1.0}
{:index 9, :type :psy, :flip 0.0, :jump 0.0}]Observation 7.3. Exact, no randomness.
One might conjecture (Conjecture 7.4) that a program can carry design only if its working variants are connected by single steps, as in Maynard Smith’s (1970) word game WORD, WORE, GORE, GONE, GENE. In that form it does not hold. In post III.4’s RNA model, the neutral-network experiment (Y3) found a target whose own neutral network was broken into isolated points as fast as a connected one; what matters is the ridge of partly working variants below the target (Conjecture III.4.10). For ideas the question hardly arises in this toy, since a jump reaches every pattern of a block in one step.
- design needs working variants connected by single steps
- a broken neutral network was found as fast (Y3)
- a ridge of partly working variants below the target
16.3 3. The adaptive process for memes
The adaptive synthesis task (C5) \((T, I, V, E, N)\) of post I.5, for memes in the model of post 4:
| adaptive synthesis task | memes in the model of post 4 |
|---|---|
| task T | the tasks of the meme, scored by \(F_\text{real}\) |
| medium I | the hosts’ variants, one per host |
| variation V | reconstruction with copy noise: flips and whole-block jumps |
| elimination E | the criterion c, which keeps the parent or the candidate |
| resource N | one slot per host and a fixed number of hosts |
| step ⇝ | one flip or one jump |
The copy noise never reads \(F_\text{real}\), so it meets the unspecific-variation condition (A1′). Under \(c_\text{rat}\) what is kept depends on \(F_\text{real}\), which is the selection condition (A3). Under \(c_\text{anti}\) and \(c_\text{psy}\) it depends on the received words or on the hosts’ psychology, so the selection condition fails for T. V here is the variation constructor, not the vehicle of post 6. The locus of elimination (C7) is the representation: a host drops a candidate before it acts on it.
A first formulation, the variation condition (A1), asked for variation with inheritance, non-specific to the end product, which is Marletto’s (§3.3) replacement for “random mutation”. Its wording invites a reading as uniform variation, and for memes that is wrong: a receiver builds its conjectures from the ideas it already holds, which is why Campbell’s (1960) “blind variation” was criticised. The unspecific-variation condition (A1′) replaces it and excludes only dependence on T. The toy’s copy noise meets both.
- variation with inheritance, non-specific to the end product
- invites a reading as uniform variation
- wrong for memes: conjectures are built from held ideas
- excludes only dependence on T
The designer must not contain the design. A constructor that contained the product’s design would move the design, not explain it. For the origin of life Marletto asks that the constructor contain no design at all. To explain one particular design it suffices that it does not contain that one (post III.3, Definition III.3.1). For memes the relative version is the one that matters: creativity is a genetic design, but it contains the design of no particular idea. The information bound (S1′) of post I.5 makes this quantitative. That every such producer implements unspecific variation and selection is the design conjecture, “adaptationism is the best theory of design” (Conjecture I.5.12), and post III.1 shows for biology that its critics explain no design.
- the constructor contains no design at all
- the constructor does not contain that one
- creativity is a genetic design
- it contains the design of no particular idea
16.4 4. Design as a deficit relative to drift
Kimura (1968, 1983): neutral mutations are substituted at the rate at which they arise. With \(f_0\) the neutral fraction of mutations at a site, \(k = \mu f_0\), and pseudogenes, having lost their function, evolve at about the neutral rate (Li, Gojobori & Nei 1981). Read for design, the evidence meets the alternatives (D2), fine-tuning (D3) and knowledge (D1) conditions:
Conjecture 7.6 (Constraint measures design). The constraint \(1 - k/\mu\) of a site measures the degree to which it meets the fine-tuning condition (D3), to the extent the site contributes to T. What changes with \(k \approx \mu\) is not design.
Post III.2 tests this on real proteins. Insulin’s A and B chains change at a third of the C-peptide rate, and against synonymous sites the C-peptide has constraint 0.56: it is weakly designed, as a graded definition allows. While a design is being made the measure can go the other way, \(k > \mu\). A single change of the task did not produce a lasting excess: the signature of design being made is a constraint that switches on at the new sites and off at the old ones (post III.2). A lasting excess needs a task that keeps moving (post III.3, Proposition III.3.12).
What the measure cannot see. \(\mu\) is a rate of point changes per site, so \(1 - k/\mu\) sees design site by site. A duplicated and repurposed module is one algorithmic step, but the per-site measure counts every conserved site of both copies. In post I.4’s runs a constant target of length 64 is credited with about 213 bits, while selection supplied a median of 117 (Observation I.4.13). For ideas, which are reused whole, we expect this to matter more: an explanation carried into a new domain is one conjectural step, and a per-task count would credit each of its tasks. The toy has no such steps.
- about 213 bits
- every conserved site of both copies
- a median of 117 bits
16.4.1 The toy version
Along a line of descent we count per task the changes \(k\) and the expected raw changes \(\mu\) the copy noise would produce from the same parents,
\[\mu = (1-p_\text{jump})\,p + \frac{p_\text{jump}}{2}\]
per copy, with \(p = p_\text{loss}\) for a present task and \(p_\text{gain}\) for an absent one. Unlike in biology, \(\mu\) is known exactly.
Proposition 7.7 (Neutral rate in the toy). If parents are chosen uniformly and the criterion’s decision and score never depend on task i, then along any line of descent traced back from the last generation the expected number of changes at task i equals \(\mu\).
Proof. Reconstruction treats tasks independently. The kept candidate is the first acceptable one (or the best-scoring one), and neither depends on task i, so task i keeps its raw distribution given the parent. Uniform parent choice makes the line of descent independent of the variants. ∎
This is why the landscape here drops post 4’s size cost: \(c_\text{rat}\) breaks ties by \(F_\text{psy}\), and with a size cost every gained neutral task lowers \(F_\text{psy}\).
Every host starts with source; 60 hosts, 500 generations, seeds 1 to 10; one line of descent per seed (host 0 of the last generation), pooled.
(def seeds (range 1 11))(defn profile
"Constraint 1 - k/mu per task and per block type, one lineage per seed."
[land crit]
(d/constraint-profile
land copy-noise
(mapv #(d/lineage (pop/run {:landscape land :copy copy-noise :criterion crit :init source
:n-agents 60 :generations 500 :seed %})
0)
seeds)))(def criteria
[["c_rat" {:kind :rat} "#d62728"]
["c_anti d=0.9" {:kind :anti :detect 0.9} "#1f77b4"]
["c_psy" {:kind :psy} "#9467bd"]
["c_none" {:kind :none} "#7f7f7f"]])(def profiles
(into {} (for [[nm crit _] criteria] [nm (profile landscape crit)])))(def type-colour {:point "#d62728" :cloud "#2ca02c" :psy "#9467bd" :neutral "#7f7f7f"})(let [sites (:sites (profiles "c_rat"))]
(kind/plotly
{:data (vec (for [[t colour] type-colour
:let [xs (filter #(= t (:type %)) sites)]]
{:type "bar" :name (name t)
:x (mapv :site xs) :y (mapv :constraint xs)
:marker {:color colour}}))
:layout {:title "Constraint 1 − k/μ per task under c_rat (seeds 1–10, 500 generations)"
:xaxis {:title "task"} :yaxis {:title "1 − k/μ" :range [-0.6 1.05]}
:height 400}}))(def by-type-rat
{:without-size-cost (update-vals (:by-type (profiles "c_rat")) #(update-vals % r3))
:post-4-landscape (update-vals (:by-type (profile landscape-post-4 {:kind :rat}))
#(update-vals % r3))})by-type-rat{:without-size-cost
{:neutral {:k 1923, :mu 1925.08, :constraint 0.001},
:point {:k 0, :mu 3877.5, :constraint 1.0},
:cloud {:k 1032, :mu 2037.066, :constraint 0.493},
:psy {:k 104, :mu 2179.005, :constraint 0.952}},
:post-4-landscape
{:neutral {:k 42, :mu 1730.975, :constraint 0.976},
:point {:k 0, :mu 3877.5, :constraint 1.0},
:cloud {:k 464, :mu 2012.328, :constraint 0.769},
:psy {:k 102, :mu 2182.976, :constraint 0.953}}}Observation 7.8. Seeds 1 to 10, table above, under \(c_\text{rat}\):
So with the size cost of post 4 the neutral tasks are not neutral. The constraint marks the fine-tuned blocks of Observation 7.3, plus whatever the tie-breaker protects.
16.5 5. The pattern of conservation
For memes the null rate is the reconstruction noise ε. Anti-rational memes conserve content too (post 4), so the amount of conservation does not tell them apart. Its pattern might.
Conjecture 7.9 (Pattern of conservation). Rational memes are conserved where their content functions and change at the rate of \(\varepsilon\) elsewhere, like a protein whose active site is conserved while its surface drifts. Anti-rational memes are conserved uniformly, like a ritual text in which every word counts. Refutation in the toy: under \(c_\text{anti}\) the constraint differs between block types, or under \(c_\text{rat}\) it does not.
- conserved where the content functions
- change at the rate of ε elsewhere
- like a protein: active site kept, surface drifts
- conserved uniformly
- like a ritual text in which every word counts
The protein half holds on real data: the haem contacts of haemoglobin β change at about an eighth of the surface rate (post III.2). The meme half is tested here, in the toy only.
(kind/plotly
{:data (vec (for [[nm _ colour] criteria
:let [bt (:by-type (profiles nm))
ts [:point :cloud :psy :neutral]]]
{:type "bar" :name nm
:x (mapv name ts) :y (mapv #(get-in bt [% :constraint]) ts)
:marker {:color colour}}))
:layout {:title "Constraint 1 − k/μ per block type and criterion (seeds 1–10)"
:barmode "group" :yaxis {:title "1 − k/μ" :range [-0.2 1.05]}
:height 420}})(into {} (for [[nm _ _] criteria]
[nm (update-vals (:by-type (profiles nm)) (comp r3 :constraint))])){"c_rat" {:neutral 0.001, :point 1.0, :cloud 0.493, :psy 0.952},
"c_anti d=0.9"
{:neutral 0.962, :point 0.956, :cloud 0.95, :psy 0.953},
"c_psy" {:neutral 0.038, :point 0.018, :cloud 0.0, :psy 0.959},
"c_none" {:neutral -0.057, :point -0.023, :cloud 0.076, :psy 0.052}}Observation 7.10. Seeds 1 to 10, table above. The refutation condition did not occur.
\(c_\text{psy}\) shows the third pattern, which we did not foresee: the points drift away. A meme anchored in psychology is conserved where psychology functions. Uniform conservation is the signature of \(c_\text{anti}\) alone, fidelity to the words. Since \(c_\text{rat}\) protects levers too, only blocks whose function lies in the world separate \(c_\text{rat}\) from \(c_\text{psy}\). To read the pattern off a real tradition one must therefore know which of its parts carry levers.
16.6 6. The competition experiment (E14)
Design needs variation and selection. Competition, in the sense of post I.5 (A2), is a property some adaptive processes have. The competition experiment (E14) asks whether the toy finds and keeps the small points when it is removed.
In the model a host holds one variant, and the number of hosts is fixed, so variants exclude each other from persistence. We remove that and keep the variation. In the two pool conditions nothing is ever removed: each generation 60 new variants are reconstructed from parents drawn from the whole pool, and all are kept. Two controls have 60 hosts.
(def founder (cv/random-variant (:n-tasks landscape) 1001))(def e14-seeds [1 2 3 4 5])(def e14-common {:landscape landscape :copy copy-noise :init founder :generations 600})(def e14-conditions
[["c_rat, 60 hosts"
#(d/rat-series (pop/run (merge e14-common {:criterion {:kind :rat} :n-agents 60 :seed %})))
"#d62728"]
["weighted parents, 60 hosts"
#(d/run-weighted (merge e14-common {:beta 1.0 :n-agents 60 :seed %}))
"#ff7f0e"]
["pool, weighted parents (nothing removed)"
#(d/run-pool (merge e14-common {:beta 1.0 :seed %}))
"#2ca02c"]
["pool, uniform (nothing removed, no selection)"
#(d/run-pool (merge e14-common {:beta 0.0 :seed %}))
"#7f7f7f"]])(defn mean-rows [runs k]
(apply mapv (fn [& rs] (/ (reduce + (map k rs)) (count rs))) runs))(def e14
(into {} (for [[nm f _] e14-conditions]
(let [runs (mapv f e14-seeds)]
[nm {:hit (mean-rows runs :cohort-hit)
:best (mean-rows runs :best-f)
:final (mapv #(r3 (:cohort-hit (peek %))) runs)}]))))(kind/plotly
{:data (vec (for [[nm _ colour] e14-conditions]
{:type "scatter" :mode "lines" :name nm
:x (vec (range 601)) :y (:hit (e14 nm))
:line {:color colour :width 2}}))
:layout {:title "Hit rate of the variants made in each generation (mean of seeds 1–5)"
:xaxis {:title "generation"} :yaxis {:title "hit rate" :range [-0.02 1.02]}
:height 420}})(mapv (fn [[nm _ _]] {:condition nm
:final-hit-rate-per-seed (:final (e14 nm))
:mean-best-f-real-ever (r3 (peek (:best (e14 nm))))})
e14-conditions)[{:condition "c_rat, 60 hosts",
:final-hit-rate-per-seed [1.0 1.0 1.0 1.0 1.0],
:mean-best-f-real-ever 20.0}
{:condition "weighted parents, 60 hosts",
:final-hit-rate-per-seed [0.863 0.892 0.879 0.863 0.871],
:mean-best-f-real-ever 20.0}
{:condition "pool, weighted parents (nothing removed)",
:final-hit-rate-per-seed [0.867 0.9 0.879 0.863 0.871],
:mean-best-f-real-ever 20.0}
{:condition "pool, uniform (nothing removed, no selection)",
:final-hit-rate-per-seed [0.0 0.021 0.021 0.029 0.017],
:mean-best-f-real-ever 12.933}]Observation 7.12. Seeds 1 to 5, table above.
With 60 hosts and weighted parents the rate is a balance of copy noise and selection. In the uniform pool some variants hit two or three points by chance (best \(F_\text{real}\) ever 12.9 on average), but nothing is built on them.
The two weighted curves nearly coincide for a known reason.
Proposition 7.13 (known). If every individual of type K has on average \(w(K)\) offspring and nothing limits growth, the expected frequency of K in the next generation is \(p_K\,w(K)/\bar w\), the same as when a fixed number of parents is drawn with weights w. This is the standard selection equation of population genetics (Crow & Kimura 1970). Only the noise differs.
So removing exclusion from persistence did not stop the process from finding and keeping the points; removing the dependence on T did. This is the result post I.5 uses to drop competition from the conditions of design. One thing does change in the pool. The knowledge condition (D1) is an achievement only where something could remove the design: a pool variant stays because nothing removes it, not because it causes itself to stay. Whether keeping a design under continuing variation needs competition, or only selection that keeps reading the task, is the open keeping question of post I.5. Post 5 found receivers that check their copies against the world keeping most of the content with no competition at all (Observation 5.10).
- unspecific variation (A1′)
- selection that reads T (A3)
- competition (A2): exclusion from persistence
- under continuing variation: competition, or only selection that keeps reading the task?
16.7 7. The brain
Marletto (2015, §1): “It is a principle of the evolutionary theory that everything with the appearance of design must have come into existence by natural selection directly (e.g. living organisms) or indirectly (objects that have literally been designed, such as cars or robots).” A person’s ideas are designs (section 2), and the genes do not contain the design of any particular idea (section 3). “Indirectly” is a black box. If the design conjecture holds, the designer runs an adaptive process.
Conjecture 7.14 (An adaptive process in the brain). A brain that produces hard-to-vary ideas implements the unspecific-variation and selection conditions (A1′, A3) over ideas: variation that draws on existing ideas, and a criterion c (post 4), externally anchored in rational thought, that decides which ideas are varied and kept. Its locus of elimination (C7) is the representation: a conjecture is dropped before anything is built. Test: hard-to-vary problems should show switching between incompatible candidates, not smooth approach. Refutation: hard-to-vary ideas produced where what is varied and kept does not depend on how the ideas perform.
- hard-to-vary problems show switching between incompatible candidates, not smooth approach
- hard-to-vary ideas produced where what is varied and kept does not depend on how ideas perform
One might add that rival ideas must compete for a finite budget of variation, for which idea is worked on next. It brings nothing. Post III.6 ran this as the competition-for-variation experiment (Y7): with unlimited storage and one variation step per tick, the small points were found and kept when attention read the task and not otherwise, and the budget did no work of its own.
- the budget did no work of its own (Y7)
- the small points were found and kept
- with unlimited storage and one variation step per tick
Prior work. A Darwinian brain is not new: Campbell (1960, blind variation and selective retention), Edelman (1987, neuronal group selection), Calvin (1987, the brain as a “Darwin machine”), Fernando, Goldstein & Szathmáry (2010, neuronal replicators). What we add is that the conjecture follows from a process-free definition of design and the design conjecture, not from analogy, so it is only as good as the design conjecture; and that its unit is the idea, an abstract constructor, not the neuronal group, which is only the idea’s neuronal phase.
- blind variation and selective retention
- neuronal group selection, Darwin machine, neuronal replicators
- unit: the neuronal group
- follows from a process-free definition of design and the design conjecture
- only as good as the design conjecture
- unit: the idea, an abstract constructor
16.8 Summary
- A good explanation meets the fine-tuning condition (D3) relative to a receiver’s conjectural steps. Design is graded, and a cloud or the C-peptide is weakly designed.
- In the toy the constraint \(1 - k/\mu\) is 1 on found points and about 0 on neutral tasks under \(c_\text{rat}\), and uniformly high under \(c_\text{anti}\), as Conjecture 7.9 predicts. \(c_\text{psy}\) conserves only the levers, a third pattern. The measure works per site and cannot see structural design.
- In the competition experiment (E14) a pool from which nothing was removed found and kept the points when parents were drawn by the task, and failed when they were drawn uniformly. Design needs variation and selection, not competition.
- For memes the design conjecture predicts an adaptive process in the brain (Conjecture 7.14), with an externally anchored criterion and no need for competition.
16.9 Open problems
The keeping question is the one of post I.5. The conservation pattern in real traditions is the conservation pattern in culture (AD8), planned.
16.10 References
- Calvin, W. H. (1987). The brain as a Darwin machine. Nature 330, 33–34. doi:10.1038/330033a0 (verified)
- Campbell, D. T. (1960). Blind variation and selective retention in creative thought as in other knowledge processes. Psychological Review 67, 380–400. (verified)
- Crow, J. F. & Kimura, M. (1970). An Introduction to Population Genetics Theory. Harper & Row, New York. (verified: bibliographic data)
- Deutsch, D. (2011). The Beginning of Infinity. Allen Lane. Ch. 1. (not re-checked)
- Edelman, G. M. (1987). Neural Darwinism: The Theory of Neuronal Group Selection. Basic Books. (verified)
- Fernando, C., Goldstein, R. & Szathmáry, E. (2010). The neuronal replicator hypothesis. Neural Computation 22(11), 2809–2857. (verified)
- Kimura, M. (1968). Evolutionary rate at the molecular level. Nature 217, 624–626. (verified)
- Kimura, M. (1983). The Neutral Theory of Molecular Evolution. Cambridge University Press. (verified)
- Li, W.-H., Gojobori, T. & Nei, M. (1981). Pseudogenes as a paradigm of neutral evolution. Nature 292, 237–239. (verified)
- Marletto, C. (2015). Constructor theory of life. J. R. Soc. Interface 12: 20141226. arXiv:1407.0681. §1, §3.1, §3.1.1, §3.3. (verified; all quotations checked against the arXiv version)
- Maynard Smith, J. (1970). Natural selection and the concept of a protein space. Nature 225, 563–564. (verified, including the WORD–GENE example)
source: book2/notebooks/meme_constructor/posts/post_07_design.clj