15  Recipe and vehicle, and the Price equation

(ns meme-constructor.posts.post-06-recipe-vehicle-price
  (:require [scicloj.kindly.v4.kind :as kind]
            [meme-constructor.architecture :as arch]
            [meme-constructor.population :as pop]
            [meme-constructor.price :as price]
            [meme-constructor.figures :as fig]))

Post 6 of the series Memes as Abstract Constructors.

Among memes, recipe and vehicle can exist only on the closed level of copying: a tradition that passes on a string over a fixed alphabet, such as an ape’s sequence of steps, a recitation, a checklist or a fork of source code, or the words and writing that carry a culture meme. They are separate only where a text is copied from the text. Elsewhere the string is read back from the practice, and its fidelity comes from the fixed alphabet and redundancy. The function of a culture meme, which the receiver rebuilds from reasons, is not a recipe, and the architecture of this post does not apply to it. On the closed level, keeping a tradition’s recipe apart from its practice protects it against noise in the practice. It does not protect it against a reinterpretation that every copy shares, and once the mind learns from the practice, errors in the practice are inherited and fade only geometrically. On the dynamics side, the copy task is what fixes the bookkeeping of the Price equation: only when each child is booked to the host it copied is the transmission term the copy error. Under that bookkeeping, transport by psychology is a negative covariance term.

The answer of this post
holds
Separate recipe
  • protects the tradition against noise in the practice
not protected
Shared reinterpretation
  • an error every copy shares gets through
weakened
A mind that learns from practice
  • practice errors are inherited
  • they fade only geometrically
fixed by the copy task
Price bookkeeping
  • book each child to the host it copied
  • then transmission term = copy error
  • and transport is a negative covariance term

The recipe–vehicle split is Marletto’s (2015). The models are ours.

15.1 1. Recipe and vehicle in a closed tradition

The recipe–vehicle architecture (F11) is the model for traditions on the closed level (Definition 1.5 in post 1); which of its architectures a tradition has is the question of this post. The recipe R is the string over the fixed alphabet. The vehicle V is the living practice. The copier C is the transmission technique (scribes, the press, git clone), and the programmable constructor P is the human mind with its institutions, which executes R and so builds V.

The recipe–vehicle architecture of a tradition
copier C
scribes, the press, git clone
copies→
recipe R
the meme
executed by→
constructor P
the mind with its institutions
builds→
vehicle V
the living practice

Three architectures of a closed tradition:

R apart from V
Writing
  • the text is copied from the text
  • the Masoretes' letter counts check the copy
  • the practice is rebuilt from it
V carries R redundantly
Oral tradition
  • metre, formulas
  • Vedic recitations in several interleaved orders
  • error-detecting codes
R read back from V
Imitation
  • the recipe is inferred from the practice

On the closed level writing lets a tradition throw away a corrupted practice and rebuild it from R. The model shows when that holds. Sola scriptura and the Renaissance did something else. They rebuilt the function of culture memes from evidence that lasts, by reading the reasons in the text, not by executing a string.

Definition 6.1 (Recipe-vehicle model). A recipe is a string of n = 60 bits, that is, 60 symbols of a digital alphabet. Errors below symbol distance are already absorbed by parsing, so a flip is a whole symbol error. A vehicle is k renditions of it (k = 1 unless stated), and its effective content is their bitwise majority. Building a vehicle executes R and flips each bit of each rendition with probability \(p_e\). Copying flips each bit with probability \(p_c\). Separate: \(R_{t+1}\) is a copy of \(R_t\) and \(V_{t+1}\) is built from \(R_{t+1}\). Imitation: \(R_{t+1}\) is the majority of copies of the renditions of \(V_t\), and \(V_{t+1}\) is built from it. A shock at generation \(t_s\) flips a random set of bits, each with probability s, in every rendition of \(V_{t_s}\). Because it hits all renditions alike, it stands for a systematic reinterpretation of the practice, not for noise. The code is in meme-constructor.architecture.

Separate: the recipe is copied from the recipe
Rₜ
copy, p_c→
Rₜ₊₁
execute, p_e→
Vₜ₊₁
No step takes Vₜ as input.
Imitation: the recipe is read back from the practice
Vₜ
k renditions
copy p_c, vote→
Rₜ₊₁
execute, p_e→
Vₜ₊₁
Every generation adds one execution and one copy channel to the recipe's history.

In the separate architecture no step takes \(V_t\) as input, so errors in the vehicle never reach the recipe, and a shocked vehicle is rebuilt clean in one generation. That holds by construction; it is Marletto’s point restated for bit strings.

Proposition 6.3 (Imitation inherits every vehicle error). For k = 1, write \(\delta(q) = (1-q)/2\). The probability that a given bit differs from \(R_0\) is

\[\begin{aligned} &\text{separate: } && R_t: \delta\big((1-2p_c)^t\big), \qquad V_t: \delta\big((1-2p_c)^t(1-2p_e)\big), \\ &\text{imitation: } && R_t: \delta\big((1-2p_c)^t(1-2p_e)^t\big), \end{aligned}\]

with an extra factor \((1-2s)\) at \(t = t_s\) only (separate, \(V\)) or for every \(t > t_s\) (imitation, \(R\)).

Proof. Each bit passes through a chain of binary symmetric channels, and a chain with flip probabilities \(p_i\) flips a bit with probability \(\big(1-\prod_i(1-2p_i)\big)/2\). Under imitation every generation adds one execution and one copy channel to the recipe’s history, and the shock stays in it for good. ∎

Where the errors go (Proposition 6.3)
architecture
execution error enters R
a shock stays
separate
never
one generation, in V only
imitation
every generation
for good, in R

Practice is noisier than copying a text, so under imitation the execution error sets the recipe’s error rate. Redundant renditions lower it, as an observer who watches several performers and takes the majority gets a more accurate string. The run uses \(p_c = 0.001\), \(p_e = 0.02\), a shock of s = 0.3 at generation 50, and averages 200 lineages (seeds 1 to 200). The fourth architecture is explained after the plot.

(def arch-base {:n 60 :p-copy 0.001 :p-exec 0.02 :generations 100
                :shock {:at 50 :frac 0.3}})
(def architectures
  [["separate R" {:arch :separate} "#2a78d6"]
   ["imitation" {:arch :imitation} "#eb6834"]
   ["imitation, 5 redundant renditions" {:arch :imitation :k 5} "#1baf7a"]
   ["separate R, apprenticeship a = 0.8" {:arch :separate :apprentice 0.8} "#eda100"]])
(def arch-runs
  (into {} (for [[nm p _] architectures]
             [nm (arch/mean-deviation (merge arch-base p) (range 1 201))])))
(kind/plotly
 {:data (vec (concat
              (for [[nm _ colour] architectures]
                {:type "scatter" :mode "lines" :name (str nm ": vehicle")
                 :x (mapv :t (arch-runs nm)) :y (mapv :v-dev (arch-runs nm))
                 :line {:color colour :width 2}})
              [{:type "scatter" :mode "lines" :name "separate R: recipe"
                :x (mapv :t (arch-runs "separate R"))
                :y (mapv :r-dev (arch-runs "separate R"))
                :line {:color "#2a78d6" :width 2 :dash "dot"}}]
              (for [[nm a] [["separate R" :separate] ["imitation" :imitation]]]
                (let [ts (range 0 101 5)]
                  {:type "scatter" :mode "markers" :name (str nm ": exact (Prop. 6.3)")
                   :x (vec ts)
                   :y (mapv #(:v-dev (arch/predicted (assoc arch-base :arch a) %)) ts)
                   :marker {:color "#6b6b6b" :size 8 :symbol "circle-open"}}))))
  :layout {:title "Fraction of bits differing from the original recipe (mean of 200 lineages)"
           :xaxis {:title "generation"}
           :yaxis {:title "deviation from R₀" :range [0 0.55]}
           :legend {:orientation "h" :y -0.2}
           :height 520}})
(into {} (for [[nm _ _] architectures]
           [nm (mapv #(let [r (nth (arch-runs nm) %)]
                        [% (/ (Math/round (* 1000 (:v-dev r))) 1000.0)])
                     [49 50 51 55 60 100])]))
{"separate R"
 [[49 0.066] [50 0.335] [51 0.07] [55 0.072] [60 0.079] [100 0.108]],
 "imitation"
 [[49 0.434] [50 0.473] [51 0.475] [55 0.483] [60 0.489] [100 0.494]],
 "imitation, 5 redundant renditions"
 [[49 0.005] [50 0.308] [51 0.308] [55 0.309] [60 0.309] [100 0.309]],
 "separate R, apprenticeship a = 0.8"
 [[49 0.063] [50 0.333] [51 0.281] [55 0.158] [60 0.105] [100 0.107]]}

Observation 6.4. Seeds 1 to 200, 100 generations. Deviation of the vehicle from \(R_0\), where 0.5 means nothing is left:

architecture
before the shock
at the shock (50)
after
separate R
about 0.07
about 0.33
back at 0.07 in generation 51
imitation
about 0.43 by generation 50
almost all content lost
imitation, 5 renditions
about 0.005
about 0.31
stays at 0.31
Majority voting cannot see an error that all renditions share.

The exact values of Proposition 6.3 (open circles) lie on the simulated curves.

So the codes of oral traditions do the work of a separate recipe against noise, not against a systematic reinterpretation. An error that all renditions share is a problem of the anchor, not of fidelity (post 4).

15.1.1 A mind that learns from the practice

The separate architecture assumes that P builds V from R alone. A human P that executes a string is not a ribosome: it also learns how to execute R from practitioners. In the fourth architecture each bit of the new vehicle is copied from the old vehicle with probability a, the apprenticeship rate, and executed from R otherwise.

Each bit of the new vehicle
probability a
Apprenticed
  • copied from the old vehicle
  • deviates with probability eₜ
probability 1 − a
Fresh
  • executed from R
  • deviates with probability p_e
So eₜ₊₁ = a·eₜ + (1 − a)·p_e (Proposition 6.5).

Proposition 6.5 (Repair with apprenticeship). In the separate architecture with \(p_c = 0\) and apprenticeship rate a, the deviation \(e_t\) of a vehicle bit from R obeys

\[e_{t+1} = a\,e_t + (1-a)\,p_e.\]

After a shock the excess deviation \(e_t - p_e\) decays as \(a^{t-t_s}\).

Proof. A fresh bit deviates with probability \(p_e\) and an apprenticed bit with probability \(e_t\), and the choice between them is independent of both. Subtracting the fixed point gives the geometric decay. ∎

With a = 0.8 the vehicle needs about ten generations to recover. So the repair thesis holds only in a weakened form.

Can a tradition rebuild its practice from the text?
holds
Noise in the practice
  • separate R, P builds V from R alone
  • a corrupted vehicle is rebuilt in one generation
weakened
P learns from V
  • vehicle errors are inherited
  • they die out as aᵗ⁻ᵗˢ
  • “not inherited” is the limit a = 0
does not hold
P reads R differently
  • the error enters every rendition built from the text
  • no architecture here protects against it

15.2 2. The Price equation

The Price bridge (F12) connects the copy error ε of post 1 to the Price equation (Price 1970), on the population model of post 4. That model is of the function of culture memes, the open level: a child rebuilds its parent’s variant from evidence, and ε is the error of that reconstruction. The recipe–vehicle architecture of section 1 plays no part in it.

Definition 6.6 (Price terms). Take one step of the model, from the N parents of generation t to the N children of generation t+1. Let \(z = F_\text{real}\), let \(w_i\) be the number of children of parent i, and let \(\Delta z_i\) be the mean of \(z_c - z_i\) over i’s children c. Then (Price 1970)

\[\bar w\,\Delta\bar z \;=\; \underbrace{\operatorname{Cov}(w,z)}_{\text{selection}} \;+\; \underbrace{\operatorname{E}(w\,\Delta z)}_{\text{transmission}},\]

with population moments over the parents. Here \(\bar w = 1\), and the transmission term is the mean change from parent to child. The identity is exact for any finite population. It is algebra, not a law of evolution.

The Price equation for one step: w̄Δz̄ = Cov(w, z) + E(wΔz)
selection
Cov(w, z)
  • who has how many children
  • set by the parent choice
transmission
E(wΔz)
  • the mean change from parent to child
  • set by copying and the criterion
z = F_real, w̄ = 1. An identity, exact for any finite population.

Definition 6.7 (ε split of the transmission term). For a copy with parent variant pv and child variant v, post 1’s loss and gain are \(\varepsilon^- = pv \setminus v\) and \(\varepsilon^+ = v \setminus pv\). Split \(z_c - z_p\) along two paths:

\[\begin{aligned} &\text{loss first:} && \big[F(pv \cap v) - F(pv)\big] + \big[F(v) - F(pv \cap v)\big], \\ &\text{gain first:} && \big[F(v) - F(pv \cup v)\big] + \big[F(pv \cup v) - F(pv)\big]. \end{aligned}\]

In both lines the first bracket is the \(\varepsilon^-\) part and the second the \(\varepsilon^+\) part. Averaged over children, each path splits \(\operatorname{E}(w\Delta z)\) into \(E^-\) and \(E^+\). The Shapley split is the mean of the two paths.

Loss first
pv
parent
ε⁻ part→
pv ∩ v
ε⁺ part→
v
child
Gain first
pv
parent
ε⁺ part→
pv ∪ v
ε⁻ part→
v
child
Both paths sum to z_c − z_p. They agree for additive F (Proposition 6.8).

Proposition 6.8 (When the split is unique). If F is additive on the tasks involved, \(F(x) = c + \sum_{i \in x} f_i\) for all x between \(pv \cap v\) and \(pv \cup v\), both paths give \(E^- = -\sum_{i \in \varepsilon^-} f_i\) and \(E^+ = \sum_{i \in \varepsilon^+} f_i\).

Proof. Substitute the additive form into each bracket. ∎

Post 4’s landscape is far from additive: a small point scores only when its whole pattern is exact.

Proposition 6.9 (Uniform choice has no selection part). Given the parents, parent choice with weights \(\pi_i \propto e^{\beta F_\text{psy}(i)}\) gives

\[\operatorname{E}[\operatorname{Cov}(w,z)] = \sum_i \pi_i z_i - \bar z .\]

For β = 0 this is zero. The realised covariance is this selection part plus zero-mean sampling drift.

Proof. \(\operatorname{E}[w_i] = N\pi_i\), and Cov is linear in w. With β = 0 every \(\pi_i = 1/N\). ∎

15.2.1 The runs

Same landscape, tradition and copy noise as post 4, 60 hosts, 200 generations, seeds 1 to 5. Three criteria: \(c_\text{anti}\) with lever strength d = 0.9, \(c_\text{rat}\) without test noise, and \(c_\text{psy}\), each with psy-bias β = 0 and β = 3.

(def landscape (pop/make-landscape {:block-size 5 :seed 1}))
(def pop-base
  {:landscape landscape
   :init (pop/tradition landscape {:n-points 1 :n-clouds 2 :psy-bits 5})
   :copy {:p-loss 0.02 :p-gain 0.01 :p-jump 0.05}
   :n-agents 60 :generations 200 :max-attempts 50})
(def conditions
  (for [[cn crit] [["c_anti d=0.9" {:kind :anti :detect 0.9}]
                   ["c_rat" {:kind :rat}]
                   ["c_psy" {:kind :psy}]]
        beta [0.0 3.0]]
    {:name (str cn ", β=" beta) :criterion crit :beta beta}))
(defn with-shapley [row]
  (assoc row
         :loss (/ (+ (:trans-loss row) (:trans-loss-gf row)) 2.0)
         :gain (/ (+ (:trans-gain row) (:trans-gain-gf row)) 2.0)))
(def price-runs
  (into {} (for [{:keys [name criterion beta]} conditions]
             [name (vec (for [seed [1 2 3 4 5]]
                          (let [h (pop/run (assoc pop-base :criterion criterion
                                                  :psy-bias beta :seed seed))]
                            {:seed seed
                             :rows (mapv with-shapley (price/series h))
                             :nominal (mapv #(price/terms-nominal h % 1000) (range 200))})))])))

The largest residual of the identity over all 6 conditions, 5 seeds and 200 steps, and the largest gap between the transmission term and the sum of its two ε parts, for both paths:

{:identity-residual (reduce max (for [[_ runs] price-runs r runs row (:rows r)]
                                  (Math/abs (double (:residual row)))))
 :split-residual (reduce max (for [[_ runs] price-runs r runs row (:rows r)
                                   k [[:trans-loss :trans-gain] [:trans-loss-gf :trans-gain-gf]]]
                               (Math/abs (- (:trans row) ((first k) row) ((second k) row)))))}
{:identity-residual 6.869504964868156E-15,
 :split-residual 3.191891195797325E-16}

Both are at the level of float rounding. Now the terms summed over the 200 generations, averaged over the five seeds.

(def term-keys [:lhs :cov :cov-selection :trans :loss :gain
                :trans-loss :trans-gain :trans-loss-gf :trans-gain-gf])
(defn round2 [x] (/ (Math/round (* 100.0 (double x))) 100.0))
(def totals-table
  (vec (for [{:keys [name]} conditions
             :let [ts (map #(price/totals (:rows %) term-keys) (price-runs name))]]
         (into {:condition name}
               (for [k term-keys]
                 [k (round2 (/ (reduce + (map k ts)) 5.0))])))))
totals-table
[{:trans-loss-gf -4.18,
  :lhs -4.03,
  :cov 0.44,
  :cov-selection 0.0,
  :condition "c_anti d=0.9, β=0.0",
  :trans -4.47,
  :gain -0.19,
  :trans-gain-gf -0.29,
  :loss -4.28,
  :trans-gain -0.09,
  :trans-loss -4.39}
 {:trans-loss-gf -3.8,
  :lhs -4.74,
  :cov -0.46,
  :cov-selection -1.5,
  :condition "c_anti d=0.9, β=3.0",
  :trans -4.28,
  :gain -0.46,
  :trans-gain-gf -0.48,
  :loss -3.83,
  :trans-gain -0.44,
  :trans-loss -3.85}
 {:trans-loss-gf -0.03,
  :lhs 6.31,
  :cov -1.32,
  :cov-selection 0.0,
  :condition "c_rat, β=0.0",
  :trans 7.63,
  :gain 10.82,
  :trans-gain-gf 7.66,
  :loss -3.19,
  :trans-gain 13.98,
  :trans-loss -6.35}
 {:trans-loss-gf -0.2,
  :lhs 1.79,
  :cov -8.26,
  :cov-selection -7.91,
  :condition "c_rat, β=3.0",
  :trans 10.05,
  :gain 13.54,
  :trans-gain-gf 10.25,
  :loss -3.49,
  :trans-gain 16.83,
  :trans-loss -6.78}
 {:trans-loss-gf -9.9,
  :lhs -7.9,
  :cov 0.55,
  :cov-selection 0.0,
  :condition "c_psy, β=0.0",
  :trans -8.45,
  :gain 2.33,
  :trans-gain-gf 1.45,
  :loss -10.78,
  :trans-gain 3.21,
  :trans-loss -11.66}
 {:trans-loss-gf -6.38,
  :lhs -8.0,
  :cov -1.98,
  :cov-selection -0.76,
  :condition "c_psy, β=3.0",
  :trans -6.02,
  :gain 0.87,
  :trans-gain-gf 0.35,
  :loss -6.89,
  :trans-gain 1.38,
  :trans-loss -7.41}]

lhs is the total change, cov-selection the expected part of cov, loss/gain the Shapley split of trans, and the -gf columns the gain-first path. The plot shows the running sums for seed 1.

(defn panel-traces [name idx]
  (let [rows (:rows (first (price-runs name)))
        cum (price/cumulative rows [:lhs :cov :loss :gain])
        ax (if (= 1 idx) "" (str idx))
        tr (fn [k label colour dash]
             {:type "scatter" :mode "lines" :name label :legendgroup label
              :showlegend (= 1 idx)
              :x (mapv :gen cum) :y (mapv k cum)
              :xaxis (str "x" ax) :yaxis (str "y" ax)
              :line {:color colour :width 2 :dash dash}})]
    [(tr :cov "Cov(w,z)" "#2a78d6" "solid")
     (tr :loss "E⁻ (loss part)" "#eb6834" "solid")
     (tr :gain "E⁺ (gain part)" "#1baf7a" "solid")
     (tr :lhs "total change w̄Δz̄" "#6b6b6b" "dash")]))
(def panel-order
  ["c_anti d=0.9, β=0.0" "c_rat, β=0.0" "c_psy, β=0.0"
   "c_anti d=0.9, β=3.0" "c_rat, β=3.0" "c_psy, β=3.0"])
(kind/plotly
 {:data (vec (mapcat panel-traces panel-order (range 1 7)))
  :layout (merge
           {:title "Cumulative Price terms for F_real, seed 1"
            :grid {:rows 2 :columns 3 :pattern "independent"}
            :height 620
            :legend {:orientation "h" :y -0.12}
            :annotations (vec (for [[i nm] (map-indexed vector panel-order)]
                                {:text nm :showarrow false
                                 :xref "paper" :yref "paper"
                                 :x (+ 0.14 (* 0.36 (mod i 3)))
                                 :y (if (< i 3) 1.04 0.47)
                                 :xanchor "center"}))}
           (into {} (for [i (range 1 7)
                          :let [s (if (= 1 i) "" (str i))]]
                      [(keyword (str "yaxis" s)) {:range [-16 20]}])))})

Observation 6.10. Seeds 1 to 5, 200 generations. The identity holds with residual below \(10^{-14}\) in every step.

Price terms summed over 200 generations
condition
transmission E(wΔz)
expected selection part
net change
c_rat, β = 0
about +7.6
0
about 6.3
c_anti d = 0.9, β = 0
about −4.5
0
c_psy, β = 0
about −8.5
0
c_rat, β = 3
about +10
about −7.9
about 1.8
The criterion sets the sign of the transmission term; transport adds a negative selection term.
  1. The sign of the transmission term follows the criterion. It is about +7.6 under \(c_\text{rat}\) (β = 0), about −4.5 under \(c_\text{anti}\) and about −8.5 under \(c_\text{psy}\). With β = 0 the selection part is zero (Proposition 6.9), and the realised covariance is small drift.
  2. Transport is a negative selection term. With β = 3, under \(c_\text{rat}\), the expected selection part is about −7.9 and nearly cancels a larger transmission term (about +10). The net gain drops from about 6.3 to about 1.8. This is Observation 4.9 of post 4 in Price form: the criterion pushes \(F_\text{real}\) up within lineages, transport pushes it down between them.
  3. The ε split is not robust. Under \(c_\text{rat}\) (β = 0) the loss-first path books about −6.4 to \(\varepsilon^-\) and +14.0 to \(\varepsilon^+\); the gain-first path books almost nothing to \(\varepsilon^-\) and about +7.7 to \(\varepsilon^+\). The paths agree only under \(c_\text{anti}\), where changes are small and scattered. Under \(c_\text{psy}\) the loss part dominates in both paths: the mind virus grows by deletion.

Point 3, under \(c_\text{rat}\) with β = 0:

path
E⁻ (loss part)
E⁺ (gain part)
loss first
about −6.4
about +14.0
gain first
almost 0
about +7.7
Same transmission term, different split. The paths agree only under c_anti.

Point 3 is a real limit. “How much of the change is due to loss, how much to gain” has a unique answer only for additive value (Proposition 6.8), and hard-to-vary content is not additive. The Shapley split is a convention. \(E^+\) is also a net sum: under \(c_\text{anti}\) it is slightly negative, because the gains that slip through are mostly harmful, as post 1 found for \(\varepsilon^+\).

15.3 3. Which parent? The bookkeeping question

The Price equation needs an assignment of each child to a parent. In the model it is causal: the parent is the host whose evidence the child reconstructed. Nothing in the algebra requires that.

Proposition 6.11 (Assignment moves change between terms). For any assignment of children to parents the identity holds and the left side is the same. The split between \(\operatorname{Cov}\) and \(\operatorname{E}(w\Delta z)\) depends on the assignment.

Proof. With \(\bar w = 1\) and any map \(p\) from children to parents,

\[\frac1N\sum_c z_c - \bar z = \Big(\frac1N\sum_i w_i z_i - \bar w\bar z\Big) + \frac1N\sum_c (z_c - z_{p(c)}),\]

and the left side depends only on the two generations as sets. Observation 6.12 shows the split changing. ∎

The runs above also stored the terms under a nominal assignment: each child is booked to a parent drawn uniformly at random (seed 1000), not to its source.

(vec (for [nm ["c_rat, β=0.0" "c_rat, β=3.0" "c_psy, β=3.0"]
           :let [runs (price-runs nm)
                 avg (fn [f k] (round2 (/ (reduce + (map #(k (price/totals (f %) [k])) runs)) 5.0)))]]
       {:condition nm
        :causal-cov (avg :rows :cov) :causal-trans (avg :rows :trans)
        :nominal-cov (avg :nominal :cov) :nominal-trans (avg :nominal :trans)}))
[{:condition "c_rat, β=0.0",
  :causal-cov -1.32,
  :causal-trans 7.63,
  :nominal-cov 1.25,
  :nominal-trans 5.06}
 {:condition "c_rat, β=3.0",
  :causal-cov -8.26,
  :causal-trans 10.05,
  :nominal-cov 0.52,
  :nominal-trans 1.27}
 {:condition "c_psy, β=3.0",
  :causal-cov -1.98,
  :causal-trans -6.02,
  :nominal-cov -0.17,
  :nominal-trans -7.83}]

Observation 6.12. Seeds 1 to 5, \(c_\text{rat}\) with β = 3:

Which parent? Same total, different split
the source
Causal assignment
  • Cov ≈ −8.3, E(wΔz) ≈ +10
  • the transmission term is copy error
a random parent
Nominal assignment
  • Cov ≈ +0.5, E(wΔz) ≈ +1.3
  • selection and copy effect cancel inside one term
  • the “parent” is not the source

This is something constructor theory supplies and the Price algebra does not. The copy task \(C_m\) of post 1 takes evidence from a source to a receiver. That fixes the assignment, and only under it does the transmission term consist of \(\varepsilon\).

What constructor theory adds to the Price algebra
copy task Cₘ
evidence from a source to a receiver
fixes→
the parent assignment
child → the host it copied
makes→
E(wΔz) = copy error
the ε parts

15.4 4. Guided variation and biased transmission

Boyd and Richerson (1985) treat guided variation in chapter 4 and biased transmission in chapters 5, 7 and 8. We checked the table of contents, not the models, and rely on Richerson’s own summary (Richerson, n.d.) and on Mesoudi (2021) for the meaning of the terms. Richerson lists both as decision-making forces, separate from natural selection of cultural variants:

“Guided variation. Experienced individuals often discover new and better variants of traditional ideas and skills. The new variation introduced into cultures is not entirely random.”

“Biased transmission. Individuals do not always passively accept traditional culture but can reach their own conclusions about new variants based on direct experience or on various decision-making rules of thumb such as adopting new variants if prestigious people adopt them.”

Mesoudi (2021) reads the Price equation’s first term as “(cultural) selection” and its second as “(biased) transformation”, and El Mouden et al. (2014) derived a cultural Price equation with several parents per child. So mapping these forces onto Price terms is not new. Our question is narrower: are they special cases of the ε split? One is, weakly.

Guided variation changes a variant after it is acquired. Under the causal assignment that change is \(z_c - z_{p(c)}\), so it lives in the transmission term. The model’s criterion is such a mechanism: \(c_\text{rat}\) guides by tests against reality, \(c_\text{psy}\) towards psychological attractors in Sperber’s (1996) sense, as opposed to the rational attractors of the open level in post 1. That is a special case only in the weak sense that any within-lineage change is. For the two-variant traits of the standard models a switch is one loss plus one gain, and the ε split adds nothing; it adds structure only for traits made of many tasks. In the terms of post I.5 the guidance is not variation that reads the task, which the unspecific-variation condition (A1′) forbids. The reconstruction is blind copy noise, and the guidance is a test that keeps or discards candidates, the eliminator of an adaptive synthesis task (C5).

Biased transmission (direct, indirect, conformist) decides who gets copied. Under the causal assignment the adopted model is the parent, so it changes \(w\) and lives in \(\operatorname{Cov}(w,z)\), next to natural selection of cultural variants. The model’s β is of this kind: a direct bias on \(F_\text{psy}\) that acts on \(F_\text{real}\) like an indirect bias, through a correlated trait. Nominal bookkeeping can move it into the transmission term (Proposition 6.11), but then that term no longer consists of copy errors. Biased transmission is a selection term, not a case of the ε split. It is only analogous to a criterion: both are decisions of the learner, but one filters conjectures and the other filters models.

Two forces of Boyd and Richerson in Price terms
transmission term
Guided variation
  • changes a variant after it is acquired
  • lives in z_c − z_p(c)
  • in the model: the criterion
  • filters conjectures
selection term
Biased transmission
  • decides who gets copied
  • changes w, lives in Cov(w, z)
  • in the model: β
  • filters models
Under the causal assignment.

15.5 Summary

  • Among memes recipe and vehicle can exist only on the closed level, on strings over a fixed alphabet, and they are separate only where a text is copied from the text; the function of a culture meme is not a recipe. With a separate recipe a corrupted practice is rebuilt in one generation, by construction. Under imitation execution error enters the recipe every generation (Proposition 6.3).
  • Redundant codes protect imitation against noise, not against a reinterpretation shared by all renditions. If the mind learns from the practice, vehicle errors are inherited and decay geometrically (Proposition 6.5).
  • The Price identity holds exactly on all runs. The criterion sets the sign of the transmission term; transport by psychology adds a negative selection term that can almost cancel growth.
  • The copy task fixes the causal parent assignment, and only under it is the transmission term copy error.
  • The ε⁻/ε⁺ split depends on attribution order unless value is additive. Guided variation lives in the transmission term, biased transmission in the selection term.

15.6 Open problems

open
A mind that reads the recipe differently
A P whose interpretation of R varies systematically is not modelled, and no architecture here guards against it.
open
Several cultural parents per child
Does the causal assignment still fix the bookkeeping then?
open
Reading an anchor off data
The model's criteria are chosen; Boyd and Richerson's bias parameters are not derived from them.
open
Real traditions
Which real traditions run on the closed level, and do they have separable R and V in the model's sense?

15.7 References

  • Boyd, R. & Richerson, P. J. (1985). Culture and the Evolutionary Process. University of Chicago Press. Ch. 4, 5, 7, 8. (verified: publisher’s page and table of contents; the book’s models were not checked)
  • El Mouden, C., André, J.-B., Morin, O. & Nettle, D. (2014). Cultural transmission and the evolution of human behaviour: a general approach based on the Price equation. Journal of Evolutionary Biology 27(2), 231–241. doi:10.1111/jeb.12296. (verified: bibliographic data and abstract only)
  • Marletto, C. (2015). Constructor theory of life. J. R. Soc. Interface 12(104): 20141226. doi:10.1098/rsif.2014.1226. arXiv:1407.0681. (verified)
  • Mesoudi, A. (2021). Cultural selection and biased transformation: two dynamics of cultural evolution. Phil. Trans. R. Soc. B 376: 20200053. doi:10.1098/rstb.2020.0053. (verified; quotations checked against the PMC text)
  • Price, G. R. (1970). Selection and covariance. Nature 227, 520–521. doi:10.1038/227520a0. (verified)
  • Richerson, P. J. (n.d.). Cultural evolution. Manuscript submitted for X. T. Wang & Y. Su (eds.), Thus Spake Evolutionary Psychologists. http://www.des.ucdavis.edu/faculty/richerson/Richerson%20Cultural%20Evolution.pdf (verified; quotations checked against the PDF)
  • Sperber, D. (1996). Explaining Culture: A Naturalistic Approach. Blackwell. (not re-checked)
source: book2/notebooks/meme_constructor/posts/post_06_recipe_vehicle_price.clj