8  From a fixed criterion to Popper

(ns meme-constructor.computing.post-i6-adaptationism-to-popper
  (:require [scicloj.kindly.v4.kind :as kind]
            [meme-constructor.synthesis.reflexive :as rx]
            [meme-constructor.figures :as fig]))

Post I.6 of Part I, “A Constructor Theory of Computing and Design”.

When the criterion of criticism is itself an idea that gets varied, nothing is ever fixed as final. That is fallibilism, and it creates knowledge only if criticism is tied to an anchor outside the process. Without the anchor, a self-varying criterion does not collapse into “keep everything”. It drifts, stops guarding anything, and the content is lost.

This post defines reflexivity (C8), a criterion that is itself varied, proves what it does to keeping, tests it in the reflexive-criterion experiment (X5), defines fallibilism (C10), and splits a criterion into the part that labels and the part that decides (C11). Criticism needs a representation, and it can refute but never certify.

8.1 1. Reflexivity (C8)

Popper (1972, ch. 7) reads the growth of knowledge and the evolution of organisms as one process of conjecture and error elimination. Bartley (1962) built his pancritical rationalism on the difference in the criterion: every position is held open to criticism, including the standards of criticism.

Definition I.6.1 (Reflexivity). An adaptive synthesis task \((T, I, V, E, N)\) (C5) is reflexive if the criterion by which E eliminates is carried in I, and so is copied by V and eliminated like other patterns. Otherwise it is a fixed-criterion process.

Popper’s epistemology is the reflexive case. Natural selection is a fixed-criterion process, and so is Chaitin’s metabiology, whose busy-beaver criterion is fixed before the run (post I.4). Reflexivity is the second order of criterion and anchor (F8): the criterion in use is itself selected.

Where the criterion lives
criterion outside I
Fixed-criterion process
  • fixed before the run
  • natural selection; Chaitin's metabiology
criterion in I
Reflexive process (C8)
  • copied by V, eliminated like other patterns
  • Popper's epistemology; Bartley's pancritical rationalism

Prior work. Reflexive variation exists: in Pushpop (Spector & Robinson 2002) programs build their own children, and mutation/dual.clj in the Push3 repository evolves mutation operators. Neither makes E reflexive.

8.1.1 The reflexivity proposition (S4)

What can be proved concerns keeping, not reaching. Take a single lineage. Each round V proposes a candidate, and E decides whether it replaces the current pattern. V has full support if every pattern has positive probability as a candidate from every pattern, as under the non-degeneracy assumption (G4). A pattern is kept forever if, with positive probability, it is never replaced.

For parts (b) and (c) we need a family of criteria. Content is a row of point blocks, the small points of post 4. Block k is a hit if it equals a hidden pattern. A criterion is a test set \(\mathcal T\) of blocks and keeps a candidate \(x'\) of parent \(x\) iff no tested hit is lost:

\[\mathrm{keep}_{\mathcal T}(x, x') \iff \forall k \in \mathcal T : \; \mathrm{hit}_k(x) \Rightarrow \mathrm{hit}_k(x') .\]

The test asks reality, so each criterion is externally anchored at first order. The empty test set is the trivial criterion. In the reflexive case the test set is written into the pattern. It is self-judged if the candidate’s own test set decides, and parent-judged if the parent’s does.

Who judges a candidate x′ of parent x?
Fixed
a test set given from outside
Self-judged
the test set written in x′
Parent-judged
the test set written in x
Trivial
the empty test set: keeps every candidate
Each keeps x′ iff no tested hit is lost.

Proposition I.6.2 (Reflexivity proposition). Let V have full support.

    1. A fixed criterion keeps only its own maxima. Let E keep a candidate iff it ranks strictly higher under a fixed total preorder \(\succeq\). Then a pattern is kept forever iff it is \(\succeq\)-maximal, and then with probability 1.
    1. A reflexive criterion keeps nothing forever. With a fixed test set containing k, a hit on block k is never lost. With the test set in the pattern, self-judged or parent-judged, every hit is lost in finite time with probability 1.
    1. Self-judgment favours laxness. If \(\mathcal T' \subseteq \mathcal T\), then \(\mathrm{keep}_{\mathcal T}\) implies \(\mathrm{keep}_{\mathcal T'}\). So the trivial criterion approves every candidate, including those that carry it.

Proof. (a) If \(p\) is maximal, no candidate ranks strictly higher. If not, some \(q \succ p\) is proposed with probability \(v > 0\) each round, so \(p\) survives \(t\) rounds with probability at most \((1-v)^t\).

  1. Fixed case: a candidate that loses the hit is rejected. Self-judged: with probability at least some \(v > 0\) the first candidate of a round has the empty test set and misses k, and by (c) it is accepted. Parent-judged: with probability \(v_1 > 0\) the first candidate keeps every hit and has the empty test set, so it is accepted. In the next round the parent is trivial, and a candidate missing k is accepted with probability \(v_2 > 0\). Either way the survival probability decays geometrically.

  2. The condition for \(\mathcal T'\) quantifies over fewer blocks. \(\square\)

The reflexivity proposition (S4), with full-support V
the case for reflexivity
(a) Fixed criterion
keeps only its own maxima: a pattern best under another criterion is reached, never held
the price
(b) Reflexive criterion
keeps nothing forever: every hit is lost in finite time
Bartley's danger
(c) Self-judgment
favours laxness: the trivial criterion approves every candidate

Part (a) is the case for reflexivity: a pattern that is best only under another criterion is reached but never held. Part (b) is the price: nothing in one lineage is safe, so whatever keeps a reflexive system’s knowledge must lie outside it, in selection among lineages by an external anchor. Part (c) looks like a third danger, which Bartley saw: a pancritical rationalist “could be argued, or argue himself, out of his rationalism” (Bartley 1984, ch. 5). The reflexive-criterion experiment (X5) answers it below: self-approval is real, but it only speeds the loss of content, by a factor of about 1.7.

8.2 2. The design conjecture

Conjecture I.6.3 is the design conjecture, stated once as Conjecture I.5.12 in post I.5. It covers fixed-criterion and reflexive processes alike, since both are adaptive synthesis tasks.

8.3 3. Keeping is blind too

One might think that full self-reachability (C3) needs reflexivity, because patterns that survive only under other criteria would otherwise be unreachable. It does not hold: an enumerator over pairs of pattern and criterion reaches every pair, and no condition on reachable sets separates a person from an enumerator (post I.2, Proposition I.2.14). Proposition I.6.2(a) shows that a fixed criterion limits keeping, not reaching. So the next try is a condition on keeping.

Definition I.6.4 (Retention-universal). A stochastic system \(S\) is retention-universal if for every partial computable \(f\) some state in \(R_S(s_0)\), post I.2’s own-step reachable set, holds a pattern computing \(f\) forever with positive probability.

A full-support random generator fails this. It still does not help.

Proposition I.6.5 (Keeping is blind too). Some system with no criterion at all is persistently self-reaching and retention-universal.

Proof. Take two registers: a generator that draws a fresh program with full support every step, like system (c) of post I.2, and a kept slot that answers inputs. At step \(t\) copy the generator’s program into the slot with probability \((t+1)^{-2}\). The generator never stops, so every reachable state is self-reaching. Every program reaches the slot with positive probability, and from time \(t\) stays there forever with probability

\[\prod_{s > t} \left(1 - (s+1)^{-2}\right) > 0 . \qquad \square\]

The annealing enumerator
generator
a fresh program, full support, every step
copy with probability (t+1)⁻²→
kept slot
answers inputs; keeps any program forever with positive probability
No criterion anywhere.

This annealing enumerator keeps anything, and what it keeps depends on no task. So neither what a system reaches nor what it keeps separates it from an enumerator. What remains is what the keeping depends on.

Three tries at what makes a person
What it reaches
blind: Prop. I.2.14
→
What it keeps
blind too: Prop. I.6.5
→
What the keeping depends on
an external anchor: Conj. I.6.6

Conjecture I.6.6 (The anchor). What a person has beyond self-reachability is a reflexive adaptive synthesis task run on its own states, in which the keeping of patterns and of criteria depends counterfactually on an external anchor. Test: in a model with E in I, remove the anchor and check whether what is kept stops tracking the world. The reflexive-criterion experiment (X5) is a first check. Refuted if a system without external anchor keeps criteria and content that track the world.

This describes a process, not a class of machines. A laptop running an anchored reflexive process satisfies it too.

8.4 4. The reflexive-criterion experiment (X5)

We ask what happens when E lies in I, with and without an external anchor. We predicted faster growth than with a fixed criterion when there is an anchor, and collapse into the trivial criterion when there is none. Refutation condition: no collapse without anchor.

Choice of machine. We use Part II’s bit-string population model (meme-constructor.population), not Push3, because there the trivial criterion is one pattern and collapse can be read off. For Push programs “keeps everything” is undecidable in general (Rice 1953). The price is a closed family of 64 criteria.

Definition I.6.7 (Model of the reflexive-criterion experiment).

  • Medium. One 42-bit string per host. Six point blocks of six bits carry the content, and \(F_\text{real}\) is the number of hits. A seventh block carries the criterion: bit k set means “test block k”. Both are copied by the same symmetric noise: each bit is lost or gained with probability 0.02, each block is redrawn with probability 0.03. So blind variation does not push the test set either way.
  • Criterion. The loss-detecting family of section 1, up to 50 reconstructions per copy, first kept one used.
  • Judge. The fixed criterion always uses the test set \(\{0, 1, 2\}\). Self-judged: the candidate’s own. Parent-judged: the parent’s.
  • Anchor. 100 hosts. Parents are drawn with weights \(\exp(\beta F_\text{real})\). At \(\beta = 0\) nothing outside I selects hosts or criteria. At \(\beta = 1\) reality ranks hosts, independently of any meme or host, an external anchor in the sense of post 4 at second order: criteria are selected only through the content they kept.
  • Controls. “Trivial E, anchor” fixes the empty test set, so only hosts are selected. “Fixed E (all tested), anchor” fixes the full test set, the right criterion given in advance.
One host: a 42-bit string
six content blocks, six bits each
a block is a hit if it equals its hidden pattern; F_real = hits
content
criterion block
bit k set: test block k
criterion
Both copied by the same symmetric noise: loss or gain 0.02 per bit, redraw 0.03 per block.
The anchor
anchor
β = 1
reality ranks hosts by F_real; criteria are selected only through the content they kept
no anchor
β = 0
nothing outside I selects hosts or criteria
(def all-tests #{0 1 2 3 4 5})
(def regimes
  (assoc (rx/regimes)
         "fixed E (all tested), anchor" {:judge :fixed :fixed-tests all-tests :beta 1.0}))
regimes
{"fixed E, no anchor" {:judge :fixed, :beta 0.0},
 "fixed E, anchor" {:judge :fixed, :beta 1.0},
 "E in I, self-judged, no anchor" {:judge :self, :beta 0.0},
 "E in I, self-judged, anchor" {:judge :self, :beta 1.0},
 "E in I, parent-judged, no anchor" {:judge :parent, :beta 0.0},
 "E in I, parent-judged, anchor" {:judge :parent, :beta 1.0},
 "trivial E, anchor" {:judge :fixed, :fixed-tests #{}, :beta 1.0},
 "fixed E (all tested), anchor"
 {:judge :fixed, :fixed-tests #{0 1 4 3 2 5}, :beta 1.0}}

Proposition I.6.2(c) on one example. The parent hits every block and tests block 0. The candidate misses block 0. Self-judged, it is rejected while it tests block 0 and kept once it has dropped that test:

(let [L (rx/landscape {:n 6 :seed 1})
      pv (rx/full-content L #{0})
      lost (bit-xor pv 1)
      judge (fn [j T] (:keep? ((rx/evaluator j nil) L pv (rx/with-tests L lost T) nil)))]
  {:self-judged-still-tests-0 (judge :self #{0})
   :self-judged-dropped-test (judge :self #{})
   :parent-judged-dropped-test (judge :parent #{})})
{:self-judged-still-tests-0 false,
 :self-judged-dropped-test true,
 :parent-judged-dropped-test false}
Proposition I.6.2(c) on one example
parent
hits every block, tests block 0
candidate misses block 0→
still tests block 0
self-judged: rejected
drops that test→
tests nothing
self-judged: kept

8.4.1 Setting A: growth from nothing

All hosts start with no hits and the test set \(\{0, 1, 2\}\). 300 generations, seeds 1–5, landscape seed 1.

(def seeds [1 2 3 4 5])
(def res-a (rx/x5-over {:generations 300} regimes seeds))
(def colors
  {"fixed E, no anchor" "#2a78d6"
   "fixed E, anchor" "#2a78d6"
   "fixed E (all tested), anchor" "#6b4fbb"
   "fixed E (all tested), no anchor" "#6b4fbb"
   "E in I, self-judged, no anchor" "#eb6834"
   "E in I, self-judged, anchor" "#eb6834"
   "E in I, parent-judged, no anchor" "#1baf7a"
   "E in I, parent-judged, anchor" "#1baf7a"
   "trivial E, anchor" "#8a8a8a"})
(defn every-5th [series] (filter #(zero? (mod (:gen %) 5)) series))
(defn lines [res k dash-fn]
  (vec (for [[nm {:keys [mean-series]}] res]
         {:type "scatter" :mode "lines" :name nm
          :x (map :gen (every-5th mean-series)) :y (map k (every-5th mean-series))
          :line {:width 2 :color (colors nm "#444444") :dash (dash-fn nm)}})))
(defn anchor-dash [nm] (if (re-find #"no anchor" nm) "dot" "solid"))
(kind/plotly
 {:data (lines res-a :mean-hits anchor-dash)
  :layout {:title {:text "Setting A: mean hits per host (mean of seeds 1–5)"}
           :xaxis {:title {:text "generation"}}
           :yaxis {:title {:text "mean F_real (hits of 6)"} :range [0 6.2]}
           :legend {:orientation "h" :y -0.3}
           :margin {:t 50 :r 20}}})
(kind/plotly
 {:data (lines (dissoc res-a "trivial E, anchor") :mean-tests anchor-dash)
  :layout {:title {:text "Setting A: mean size of the test set in force"}
           :xaxis {:title {:text "generation"}}
           :yaxis {:title {:text "tested blocks (of 6)"} :range [0 6.2]}
           :legend {:orientation "h" :y -0.3}
           :margin {:t 50 :r 20}}})
(defn round2 [x] (when x (/ (Math/round (* 100.0 (double x))) 100.0)))
(defn table [res window]
  (kind/table
   (for [row (rx/final-table res window)]
     {:regime (:regime row)
      :mean-hits (round2 (:mean-hits row))
      :hits-per-seed (pr-str (mapv round2 (:mean-hits-per-seed row)))
      :tested-blocks (round2 (:mean-tests row))
      :trivial-share (round2 (:trivial-share row))
      :guarded-hits (round2 (:mean-guarded row))})))
(table res-a 50)
regime mean-hits hits-per-seed tested-blocks trivial-share guarded-hits
fixed E, no anchor 1.73 [2.29 0.97 1.75 1.57 2.07] 3.0 0.0 1.69
fixed E, anchor 5.34 [5.36 5.34 5.3 5.33 5.36] 3.0 0.0 3.0
E in I, self-judged, no anchor 0.3 [0.23 0.46 0.18 0.33 0.3] 3.12 0.01 0.21
E in I, self-judged, anchor 5.72 [5.73 5.71 5.74 5.71 5.69] 4.63 0.0 4.62
E in I, parent-judged, no anchor 0.48 [0.24 0.49 0.66 0.28 0.74] 2.95 0.03 0.37
E in I, parent-judged, anchor 5.76 [5.78 5.72 5.8 5.77 5.75] 4.76 0.0 4.75
trivial E, anchor 4.66 [4.66 4.63 4.69 4.65 4.68] 0.0 1.0 0.0
fixed E (all tested), anchor 6.0 [6.0 6.0 6.0 6.0 6.0] 6.0 0.0 6.0

Averages over the last 50 generations. Guarded hits are the hits per host that its own criterion tests, the ones it can defend. Trivial share is the fraction of hosts whose criterion in force is empty. Generations until the seed-mean first reaches 5 hits:

(into (sorted-map)
      (for [[nm {:keys [mean-series]}] res-a]
        [nm (rx/first-gen mean-series :mean-hits 5.0)]))
{"E in I, parent-judged, anchor" 52,
 "E in I, parent-judged, no anchor" nil,
 "E in I, self-judged, anchor" 44,
 "E in I, self-judged, no anchor" nil,
 "fixed E (all tested), anchor" 38,
 "fixed E, anchor" 55,
 "fixed E, no anchor" nil,
 "trivial E, anchor" nil}

Observation I.6.8 (Setting A, seeds 1–5). With the anchor, both reflexive regimes end higher than the fixed criterion \(\{0, 1, 2\}\), in every seed: 5.72 (self-judged) and 5.76 (parent-judged) hits against 5.34. They pass a mean of 5 hits after 44 and 52 generations, the fixed criterion after 55. But this comparison is built in favour of reflexivity. The fixed criterion tests only 3 of the 6 blocks, so it can never guard more than 3 hits, while the reflexive test sets grow from 3 to about 4.7. The fair control, a fixed criterion that tests all six blocks, beats both: 6.00 hits in every seed, and 5 hits after 38 generations. Host selection alone, with the trivial criterion, reaches 4.66.

Without the anchor, the fixed criterion accumulates 1.73 hits, while the reflexive regimes stay at 0.30 and 0.48. The trivial criterion is in force in 1.3 % and 3.2 % of hosts, about the \(2^{-6} \approx 0.016\) that blind drift of six bits gives it: no collapse toward it.

Setting A: mean hits of 6, last 50 generations
regime
anchor
no anchor
fixed E, tests {0, 1, 2}
5.34
1.73
E in I, self-judged
5.72
0.30
E in I, parent-judged
5.76
0.48
fixed E, all six tested
6.00
—
trivial E
4.66
—
— : not run.

8.4.2 Setting B: keeping what is known

Every host starts with all six hits, all tested, so that self-judgment has something to lose. That the unanchored reflexive regimes lose it is Proposition I.6.2(b); the setting measures how much faster self-judgment loses it.

(def res-b (rx/retention {:seeds seeds :generations 300}))
(kind/plotly
 {:data (vec (concat
              (for [[nm {:keys [mean-series]}] res-b]
                {:type "scatter" :mode "lines" :name (str nm ": hits")
                 :x (map :gen (every-5th mean-series)) :y (map :mean-hits (every-5th mean-series))
                 :line {:width 2 :color (colors nm "#2a78d6") :dash (anchor-dash nm)}})
              (for [[nm {:keys [mean-series]}] res-b
                    :when (re-find #"E in I" nm)]
                {:type "scatter" :mode "lines" :name (str nm ": tested blocks")
                 :x (map :gen (every-5th mean-series)) :y (map :mean-tests (every-5th mean-series))
                 :line {:width 1 :color (colors nm) :dash "dash"}})))
  :layout {:title {:text "Setting B: start with all hits, all tested (seeds 1–5)"}
           :xaxis {:title {:text "generation"}}
           :yaxis {:title {:text "per host (of 6)"} :range [0 6.2]}
           :legend {:orientation "h" :y -0.3}
           :margin {:t 50 :r 20}}})
(table res-b 50)
regime mean-hits hits-per-seed tested-blocks trivial-share guarded-hits
fixed E (all tested), no anchor 6.0 [6.0 6.0 6.0 6.0 6.0] 6.0 0.0 6.0
E in I, self-judged, no anchor 0.34 [0.21 0.31 0.44 0.2 0.51] 3.09 0.01 0.26
E in I, parent-judged, no anchor 0.19 [0.16 0.12 0.23 0.23 0.23] 3.01 0.02 0.13
E in I, self-judged, anchor 5.74 [5.75 5.73 5.76 5.75 5.71] 4.73 0.0 4.72
E in I, parent-judged, anchor 5.77 [5.8 5.75 5.8 5.81 5.71] 4.77 0.0 4.75

Generations until the seed-mean falls below 3 hits, and until the criterion guards less than one hit per host:

(into (sorted-map)
      (for [[nm {:keys [mean-series]}] res-b]
        [nm {:below-3-hits (rx/first-gen-below mean-series :mean-hits 3.0)
             :guards-below-1 (rx/first-gen-below mean-series :mean-guarded 1.0)}]))
{"E in I, parent-judged, anchor"
 {:below-3-hits nil, :guards-below-1 nil},
 "E in I, parent-judged, no anchor"
 {:below-3-hits 38, :guards-below-1 76},
 "E in I, self-judged, anchor"
 {:below-3-hits nil, :guards-below-1 nil},
 "E in I, self-judged, no anchor"
 {:below-3-hits 22, :guards-below-1 45},
 "fixed E (all tested), no anchor"
 {:below-3-hits nil, :guards-below-1 nil}}

Observation I.6.9 (Setting B, seeds 1–5). The fixed criterion that tests every block keeps all six hits. Without anchor, both reflexive regimes lose the content: 0.34 (self-judged) and 0.19 (parent-judged) hits over the last 50 generations, with test sets back at the neutral level of about 3. Self-judgment loses faster: the mean falls below 3 hits after 22 generations, against 38 when parent-judged, a factor of about 1.7. With the anchor, both keep about 5.75 hits and test about 4.75 blocks.

Setting B: start with all six hits, all tested
keeps 6
Fixed E, all tested
nothing is lost
keeps about 5.75
Reflexive, anchor
tests about 4.75 blocks
loses the content
Reflexive, no anchor
  • 0.34 (self-judged), 0.19 (parent-judged)
  • below 3 hits after 22 against 38 generations: ×1.7

Observation I.6.10 (robustness, not shown). Setting A with \(\beta = 0.5\), or with loss and gain probabilities 0.01 (seeds 1–5), gave the same order: anchored reflexive above the anchored fixed criterion \(\{0, 1, 2\}\) (5.49 and 5.60 against 4.94; 5.84 and 5.87 against 5.58). Unanchored reflexive regimes run for 1,000 generations (seeds 1–3) stayed below 0.5 hits.

8.4.3 Verdict

With an anchor, a reflexive criterion beats a fixed one that misses tests and loses to one that has the right tests from the start. What reflexivity buys is finding tests it was not given. Without an anchor the collapse prediction failed. The criterion did not become trivial in form but in function: it ended up testing blocks without hits, and such a test never rejects anything.

Verdict of the reflexive-criterion experiment (X5)
partly
With an anchor
  • beats a fixed criterion that misses tests
  • loses to one with the right tests from the start
collapse prediction failed
Without an anchor
  • not trivial in form, trivial in function
  • it tests blocks without hits

Conjecture I.6.11 (Unmoored criterion). With E in I and no external anchor at second order, the criterion does not collapse into “keep everything”. It becomes unmoored: it drifts as V dictates and stops protecting what it was selected to protect. Test: richer criterion families, including Push programs, measured by what they reject. Refuted by an unanchored reflexive criterion that goes on guarding content it did not start with.

Bartley’s fixed point. Bartley exempts one thing from revision. Critical argument “presupposes the notion of deducibility, i.e., the idea of the retransmission of falsity from conclusions to premises”, so “logic, then, cannot be part of the totality that is brought under test” (Bartley 1984, ch. 5). The model has an analogue. The test procedure, compare a block with reality and reject a detected loss, is the same in every regime. Only what is tested varies. The fixed procedure did not save the content, so a fixed organon of criticism is not an anchor. Reality selecting among hosts did.

What saved the content
not an anchor
The fixed test procedure
the same in every regime; it did not save the content
anchor
Reality selecting among hosts
it did

8.5 5. Fallibilism (C10)

A person who holds a true theory still holds it open to criticism. Exact copies of the function of a culture meme do occur (post 1), but none can be certified: there is no shared alphabet of concepts to compare against, and tests can refute a copy, never confirm it. So fallibilism is not the claim that every copy is wrong. It is the claim that no copy is ever treated as final: it stays open to criticism even when it is exact. Fallibilism is a property of the process, not of the accuracy of a copy. Creativity has to implement it as a critical environment.

Definition I.6.12 (Fallibilism (C10)). A process is fallibilist if it is reflexive (Definition I.6.1) and persistently self-reaching (post I.2, Definition I.2.6) in its patterns and its criteria: every state it reaches is itself self-reaching, so no state closes off the alternatives to anything it holds.

Fallibilism (C10), in two parts
Reflexive
the criterion is in I and varied
and→
Persistently self-reaching
in patterns and criteria
is→
Fallibilist
no state closes off the alternatives to anything it holds

In the small world of the reflexive-criterion experiment (X5), the reflexive regimes are fallibilist in this sense, and the fixed-criterion regimes are not. Three things follow.

Three consequences
Alone it does not separate
an enumerator is persistently self-reaching too (Prop. I.2.14) and keeps anything (Prop. I.6.5)
Without an anchor it loses what it knows
Prop. I.6.2(b); the unanchored regimes lost the content (Obs. I.6.9)
Even with an anchor it has a price
  • about 5.75 of 6 hits, where a right fixed criterion kept 6
  • a correct idea open to variation can only get worse

How a process that never fixes an idea keeps a correct design is the keeping question of post I.5.

Conjecture I.6.13 (Creativity is persistence plus anchored criticism). In plain words: a process that learns what to criticise must never make anything final, criteria included, and what its criticism keeps must follow the world. Formally: the criteria of a process come to guard content they were not given, and go on doing so when the task changes, only if the process is fallibilist (C10) and the keeping of its patterns and criteria depends counterfactually on an external anchor (Conjecture I.6.6). Without persistence a criterion stays where it is (Proposition I.6.2(a)). Without the anchor it drifts and guards nothing (Conjecture I.6.11).

Conjecture I.6.13: what each ingredient does
persistent
anchored
the criterion
missing persistence
no
yes
stays where it is (Prop. I.6.2(a))
missing the anchor
yes
no
drifts, guards nothing (Conj. I.6.11)
both
yes
yes
comes to guard content it was not given

Test. The reflexive-criterion experiment (X5) checks only the anchor half: only in the anchored reflexive regimes did the test sets grow, from 3 to about 4.7 blocks. It cannot check the persistence half, because in this model a test is never wrong: it only ever rejects losses. So a ratchet, whose criteria can gain tests but never drop them, is not fallibilist and would do at least as well here. The test needs a task that moves, so that a block worth guarding stops being worth it. Compare a ratchet, an unanchored reflexive process and an anchored one. Prediction: only the anchored fallibilist process keeps up. Refuted if the ratchet keeps up as well, or if the unanchored process does.

The test that is still to run: a task that moves
predicted to fall behind
Ratchet
criteria gain tests, never drop them: not fallibilist
predicted to fall behind
Unanchored reflexive
fallibilist, but keeping follows nothing outside
predicted to keep up
Anchored fallibilist
refuted if either of the others keeps up too

8.6 6. Critics (C11)

So far a criterion has been one thing: a ranking that decides which variant is kept. It is two things. First something reads the variant and says something about it. Then something decides. Splitting them shows what criticism needs and what it can do.

Definition I.6.14 (Criterion, aspect, critic (C11)). Let a hypothesis \(h\) be an attribute of an information medium \(I\).

  • A criterion \(c\) is a label task: it reads \(h\), leaves it as it is, and writes an aspect \(a_c(h)\) on a label substrate \(A\),

    \[L_c = \{\, h \to h \oplus a_c(h) \,\} \ \text{on}\ I \oplus A .\]

    “Fails test 3”, “longer than its parent” and “contradicts the evidence” are aspects.

  • A critic is a task from a hypothesis to a verdict: reject or keep, or a rank. It has a criterion as its subtask. It is the serial composition \(D\,L_c\) of the label task and a decision \(D\) that reads only the aspect.

A critic is a criterion, then a decision
hypothesis h
an attribute of I
criterion c: label task, reads h, leaves it→
aspect a_c(h)
on the label substrate A, e.g. "fails test 3"
decision D reads only the aspect→
verdict
keep, reject, or a rank
Critic = D L_c on I ⊕ A.

The criteria of post 4 and of this post are critics in this sense. An aspect need not lead to a rejection. An aspect that rejects nothing is still information about the hypothesis. It is what Popper calls a new problem, and it can be copied and passed on like any other idea. The label task is close to what constructor theory calls a non-perturbing measurement, with information as both input and output (Deutsch & Marletto 2015, §5).

A critic can only read what is written down. That is not a theorem. It is the conjecture on which Popper rests his account of why science works: a theory formulated in language becomes an object that can be criticised, and “scientists try to eliminate their false theories, they try to let them die in their stead” (Popper 1972, ch. 3).

Conjecture I.6.15 (Criticism needs a representation). Every critic acts on a representation of the hypothesis in an information medium. Where a variant is not represented, the only critic left is its execution: the organism dies, the plan fails when it is carried out. Refuted by a process that rejects variants before they are carried out, although they are nowhere instantiated as information.

Criticism needs a representation
the theory dies in our stead
Represented in an information medium
a critic can act before anything is carried out
the organism dies
Not represented
the only critic left is execution

Two things follow. The locus of elimination (Definition I.5.6 of post I.5) can be the representation only where this conjecture’s condition is met. And criticism of a representation may still run it: a critic that simulates a plan executes the representation, not the plan. That is how a theory dies in our stead.

What critics can do has a sharp limit.

Proposition I.6.16 (A critic can refute, never certify). Let the hypotheses be programs of an acceptable language, and assume Deutsch’s (1985) Church–Turing principle, so that every possible label task on program texts computes a partial computable function. Then:

  1. For every finite test, the critic “reject if \(h\) fails the test” is possible, and it never rejects a program that meets the test.
  2. For a total function \(f\), no possible critic keeps exactly the programs that compute \(f\).

Proof sketch. Part 1 runs \(h\) on the test inputs inside the critic (Proposition I.3.4, part 1). For part 2, a critic that kept exactly the programs for \(f\) would semi-decide “equals \(f\) on every input”, which Proposition I.3.4, part 3, rules out. \(\square\)

What a critic can do (Proposition I.6.16)
possible
Refute
"reject if h fails the test": never rejects a program that meets it
impossible
Certify
no critic keeps exactly the programs that compute a total f
the anchor
Experiment
a critic whose input includes the world: L_c on I ⊕ W ⊕ A

So a critic can find a fault, but it can never say “this one is right”. This is fallibilism as a statement about critics: what survives criticism is only not yet refuted. The critic that can refute what no text shows is the experiment. It is a critic whose input includes the world, \(L_c\) on \(I \oplus W \oplus A\), and that is what an external anchor (Conjecture I.6.6) is.

Creativity devises critics. A program that produces hypotheses is not yet creative in Popper’s sense. It must also produce critics: synthesis (C4) whose product is a critic. That is what the reflexive regimes of the reflexive-criterion experiment (X5) do in a small way: their test sets grew to blocks they were not given (Observation I.6.8). In these terms a fallibilist process (Definition I.6.12) is one that can still build a new critic of anything it holds, from every state it reaches.

8.7 7. The problem of creativity

What separates a person from a program enumerator is the problem of creativity (post I.2, Proposition I.2.14). The enumerator reaches every idea, every criterion and every critic, and keeps anything (Proposition I.6.5). So the difference cannot lie in what is reached or kept. This post and the ones before it leave three candidates. None is proved.

Three candidates for what separates a person from an enumerator
open
Anchored fallibilism
  • nothing is ever final, criteria included
  • what is kept follows the world
  • Conjecture I.6.13 (C10)
open
Critics that fit the problem
  • an enumerator lists every critic and uses none
  • a person builds the critic the problem calls for
  • Definition I.6.14 (C11)
open
Order of search
  • an enumerator finds every explanation eventually
  • a person finds one before it is needed
  • post 3; Levin's search
The book proves only the negative half: no condition on reachable or kept sets separates the two.

8.8 Summary

  • Reflexivity (C8): the criterion lies in the medium and is varied like everything else; otherwise the process is a fixed-criterion process. A fixed criterion keeps only its own maxima, a reflexive one keeps nothing forever in one lineage (S4).
  • Keeping is as blind as reaching (Proposition I.6.5). What is left is what the keeping depends on: an external anchor (Conjecture I.6.6).
  • The reflexive-criterion experiment (X5): with an anchor, a reflexive criterion beats a fixed one that misses tests and loses to one that has them. Without an anchor it becomes unmoored, not trivial, and the content is lost. Self-approval only speeds this, by about 1.7.
  • Fallibilism (C10): nothing is ever final, criteria included. Conjecture I.6.13: creativity is persistence plus anchored criticism.
  • Critics (C11): a criterion labels a hypothesis with an aspect, and a critic is a criterion plus a decision. Criticism needs a representation (Conjecture I.6.15, Popper’s). A critic can refute, never certify (Proposition I.6.16). Creativity devises critics.
  • What separates a person from an enumerator is the problem of creativity. Three candidates remain open (Section 7).

8.9 Open problems

  • The price of fallibilism. How does a process that never fixes an idea keep a correct design under continuing variation? This is the keeping question of post I.5, and whether it needs competition or only anchored criticism is open.
  • Person versus enumerator: the problem of creativity. Conjectures I.6.6 and I.6.13 and the three candidates of Section 7 describe a process, not a class of machines. Whether anything beyond the anchor separates a person from an enumerator running an anchored reflexive process is open.
  • Critics that devise critics. Extend the reflexive-criterion experiment so that \(V\) also produces critics, and measure when they beat a fixed set of critics. This is also a test of Conjecture I.6.13.
  • Richer criteria. The test of Conjecture I.6.11 with criterion programs in Push3, measured by what they reject.
  • The confound in the reflexive-criterion experiment (X5). The anchor selects content directly as well as criteria. The control “trivial E, anchor” measures only part of that.
  • Selection as erasure (C9) and the reversible-world experiment (X6) are planned for a post I.7.

8.10 References

  • Bartley, W. W. III (1962). The Retreat to Commitment. New York: Knopf. Revised 2nd ed., La Salle, IL: Open Court, 1984, ch. 5 “Pancritical Rationalism”. (verified: first edition by web search; quotations checked against the text of ch. 5 of the revised edition)
  • Deutsch, D. (1985). Quantum theory, the Church–Turing principle and the universal quantum computer. Proc. R. Soc. Lond. A 400(1818), 97–117. (verified in post I.2: bibliographic data and the principle)
  • Deutsch, D. & Marletto, C. (2015). Constructor theory of information. Proc. R. Soc. A 471(2174): 20140540. arXiv:1405.5563. §5. (verified: §5, eqs. 4–5, against the arXiv full text)
  • Popper, K. R. (1972). Objective Knowledge: An Evolutionary Approach. Oxford University Press, ch. 3 (“Epistemology without a knowing subject”, first 1967) and ch. 7. (ch. 3 quotation located via Wikiquote; not re-checked against the book)
  • Rice, H. G. (1953). Classes of recursively enumerable sets and their decision problems. Transactions of the American Mathematical Society 74(2), 358–366. (verified: bibliographic data)
  • Spector, L. & Robinson, A. (2002). Genetic programming and autoconstructive evolution with the Push programming language. Genetic Programming and Evolvable Machines 3(1), 7–40. doi:10.1023/A:1014538503543. (verified: bibliographic data and the description of Pushpop)
  • Schwerdtner, B. benjamin-schwerdtner-clj-push3, src/benjamin_schwerdtner/clj_push3_play/mutation/dual.clj and ideas/popperian-meta-evolution.org. (verified: read locally)
source: book2/notebooks/meme_constructor/computing/post_i6_adaptationism_to_popper.clj