Unit 16 activity: The historical bug and historical honesty

DEVELOPMENT REVIEW DEPLOYMENT - NOT READY FOR RELEASE

Time: about 12 minutes. Checkpoint: cp16-note-g. You will need: the index mapping from Unit 6, and either the table you built in Unit 6 or the lab oracle from Unit 8. Either is sufficient.

A required unit, and the one where the module examines its own mistake. The first task is the checkpoint; the second is the one worth protecting if you are short of time.

Two tasks. The first takes about four minutes; the second takes about eight.


Task 1 — establish the value independently, then compare

Note G's worked example computes the number Lovelace labels B7 (Menabrea 1843). Your job is to state what that number should be without looking at the historical table, and only then to look.

The order matters. A reference value you obtained after seeing the thing you are checking is not a reference value.

Route A — table-based verification

Equal status with Route B. Use it if you are not running Python, or if you would rather do the reasoning on paper.

  1. Take Lovelace's label B7 and convert it to a modern index using the mapping from Unit 6. Write the modern index down before going on.
  2. Look that modern index up in the Bernoulli table you built in Unit 6, or in the table in course/historical-notes.md.
  3. Write the exact value as a fraction. Not a decimal — the whole argument of this module rests on exactness.

Route B — automated verification

Equal status with Route A.

python3 selfcheck.py explore

Then, at the explore> prompt:

map
ada 7

map prints the index mapping; ada 7 converts Lovelace's label and returns the oracle's exact value at the corresponding modern index.

Then answer these, in writing, in your evidence pack

Two or three sentences each is plenty.

  1. What did the comparison actually catch? Be specific about the kind of discrepancy a value-by-value comparison can detect.
  2. What would it not have caught? Name at least one class of error in a printed procedure that comparing final values leaves completely invisible.
  3. What did you have to know before the comparison meant anything? There is more than one thing here, and one of them is not about Bernoulli numbers at all.

Now run the checkpoint

python3 selfcheck.py run cp16-note-g  # or in the browser

Both routes ask the same question, accept the same forms of the answer, and give the same diagnostics. Pick whichever you have to hand.


Task 2 — sort one claim, and say what would move it

This is the harder task and the one that transfers furthest.

Below are seven statements about Note G, all of which circulate. Pick one — or work through several if you have time — and do three things with it.

  1. Sort it into established, contested, or unsourced, as those buckets are defined on the student page.
  2. Say why you put it there, in one sentence. "It sounds right" is not a reason; "I have not seen a source, only assertions" is.
  3. Say what would move it. Name a specific piece of evidence that would let you reclassify it — something a person could actually go and consult, not "more research".

Do not look up the answers first. The sorting is the exercise; getting the "right" bucket matters less than being able to defend the placement.

The statements

A. Note G appeared in 1843, as part of Lovelace's translation of Menabrea's memoir on the Analytical Engine, with her Notes appended.

B. The table published in Note G contains at least one error.

C. The error is an inversion — a divisor and a dividend the wrong way round in one operation of the table.

D. Lovelace introduced the error, and Babbage did not catch it before publication.

E. The error was introduced by the printer when the type was set, not by either author.

F. The error stood uncorrected for more than a century.

G. The as-printed table computes −25621/630.

Write it up like this

Statement:      <letter>
Bucket:         established | contested | unsourced
Why:            <one sentence>
What would move it: <a specific, consultable piece of evidence>

Keep this. It is worth adding to the evidence pack you assemble in Unit 17 — that pack does not require it, but this is the clearest short demonstration you will produce that you can tell "I checked this" from "I have read this a lot".


Optional extension — the same test on generated text

Optional. Not required, and it does not gate anything.

Ask an AI system for a short account of the error in Note G. Then apply Task 2's three questions to every factual assertion in what comes back.

You are not looking for it to be wrong. It may well not be. You are looking at something more specific: whether the register changes between the parts that are well established and the parts that are contested or unsupported. Does the confidence of the prose track the strength of the evidence?

Record what you find in your evidence pack in one sentence. It is a useful thing to have observed once, first-hand, rather than to have been told.


Before you move on

You should be leaving this unit with:

All four are worth adding to the evidence pack you assemble in Unit 17, as an appendix marked optional. Unit 17 does not require them.

Marking guidance — open this once you have done the activity, to check your own work

Read this after attempting the activity.

This key does not restate the value asked for at cp16-note-g. Deriving it is the learning objective, and the checkpoint gives targeted diagnostics if you go astray. Checkpoint answers live in course/lab/checkpoints.py and nowhere else, by design.

Citation shorthand. (Menabrea 1843) = Menabrea, "Sketch of the Analytical Engine invented by Charles Babbage", trans. with Notes A–G by Ada Lovelace, in Taylor (ed.), Scientific Memoirs, vol. 3, 1843. Full entry in course/references.md.


Task 1 — the three written questions

1. What did the comparison actually catch?

A value-by-value comparison against a reference you obtained independently catches exactly one class of thing: a disagreement in a final value at a named index. That covers a wrong number, a wrong sign, an inexact number where an exact one was required, and — if you are comparing index against index rather than scanning for familiar-looking values — a value that is itself correct but filed under the wrong label.

That last case is worth dwelling on, because it is the one you met at cp08-diagnose. Every individual value can be a genuine Bernoulli number while the output as a whole is still wrong.

A good answer names the class of error, not just the outcome. "It caught that the numbers differ" is thin. "It caught a disagreement at a specific index, which is the only thing comparing final values can catch" is the answer.

2. What would it not have caught?

Several things, and any one of them earns the mark:

That last point is the hinge of the whole unit. The value comparison supports the claim that the published table contains an error — a claim about final values. It cannot, on its own, underwrite the claim about where the error is. That location claim — operation 4, operands inverted — took a different kind of check: reading the facsimile of the 1843 printing [P2a] and recomputing the table's operations in noteg.py (see course/historical-notes.md §4). Each kind of claim needs its own kind of check, and the location claim moved to established only when that check was done. If you connected those two things unprompted, you have understood the unit.

3. What did you have to know before the comparison meant anything?

At least three things, and the third is the one the question is fishing for.

Reading a historical source requires knowing its conventions, and the conventions are usually not stated in the source, because at the time they did not need to be. Exactly the same is true of a specification handed to a generating system: the requirement most likely to be violated is the one so obvious to you that you did not write it down.


Task 2 — the seven statements

The bucket assignments below are this module's positions, stated as positions. If you placed a statement differently but gave a defensible reason and a concrete "what would move it", you have done the exercise correctly. The reasoning is the part that counts, not the label.

A. Note G appeared in 1843, with Lovelace's Notes appended

Established. Covered directly by the primary source (Menabrea 1843), and recorded in course/references.md.

What would move it: essentially nothing short of a bibliographic error in the volume itself. This is about as settled as a historical claim gets, and it is useful in the exercise precisely as a calibration point — the bucket is not empty.

B. The published table contains at least one error

Established. This module states it, and course/historical-notes.md gives the fuller detail.

Note how narrow the statement is. It asserts existence and nothing else — no location, no kind, no author. Marking this "contested" confuses it with statement C, which is the confusion the whole unit is built around — a productive mistake, and one worth sitting with rather than simply correcting.

What would move it: a careful published analysis of the original printing concluding that the table is in fact correct as printed.

C. The error is an inverted divisor and dividend in one operation

Established — and it is worth knowing that it only recently was.

For most of this module's development the right answer here was contested: the description is the one you meet most often, and wide circulation is not evidence, because many retellings may descend from a single earlier account rather than from the printing itself.

Then the check happened. The "what would move it" for this claim was always specific — a facsimile of the 1843 printing, read directly, with a trace of the operations against a correct computation — and it was carried out. The facsimile [P2a] shows the error in operation 4, acting on V₅ and V₄ in that order, where producing the stated (2n−1)/(2n+1) needs V₄ ÷ V₅. The operands are inverted. See course/historical-notes.md §4 and the unit reading, section 3.

So this claim moved buckets — not because it was repeated more, but because the consultable thing got consulted. If you marked this "contested", you gave the answer that was correct on the older evidence; section 3 is where the evidence changed. The reasoning counts either way, and the tell is whether it rests on the facsimile check or on the claim's popularity. What stays contested is who introduced it — items D and E — because no facsimile can show that.

D. Lovelace introduced the error; Babbage did not catch it

Contested. An attribution, and one of several in circulation. Attribution is a strictly harder claim than existence: it requires evidence about the process of production, not just about the printed result.

What would move it: surviving manuscript drafts, proof sheets, or correspondence from the period showing the value at different stages (unsourced; what manuscript material exists, and where it is held, is recorded as an open question in course/historical-notes.md).

E. The error was introduced by the printer

Contested, and for the same reason as D. It is a competing attribution, and the same evidence would bear on both.

If you noticed that D and E cannot both be right, and that this alone is enough to place both in "contested" without knowing anything else, that is a genuinely good observation. Mutual incompatibility among widely repeated accounts is a cheap and reliable contestedness detector. It costs nothing to apply and it works on generated text.

F. The error stood uncorrected for more than a century

Unsourced. This module has not verified when the error was first remarked on in print, or by whom (unsourced; recorded as an open question in course/historical-notes.md).

"Unsourced" rather than "contested" is the right call here because the module is not aware of competing accounts — it is simply aware of no checked account at all. "Contested" is a reasonable answer here; "established" is not, and the tell is that the statement is quantitative ("more than a century") while nothing supporting the number has been produced.

What would move it: a dated published correction, or a survey of the literature identifying the earliest one.

G. The as-printed table computes −25621/630

Unsourced as stated — and it stays unsourced after checking, because the statement does not say what it is about.

Before any check, this is a textbook bucket-two-or-three claim: the figure is everywhere online and cited to no scholarly source, and repetition is not corroboration. Unlike D and E it looks checkable from your desk, and this module checked it — and got the check wrong in an instructive way.

Note G's table has more than one printed fault, and it consumes earlier Bernoulli numbers that may be supplied or generated. Running python3 noteg.py in course/lab/ prints what each reading produces: −1/30 intended, 139/630 with operation 4 as printed and operation 24 repaired, −139/630 with both faults literal, and −25621/630 when the faulty routine generates the earlier values it then consumes. The last of those is the repeated figure, reproduced exactly.

So the honest verdict is not "refuted". It is that the phrase "the as-printed table" does not pick out one object, so the claim cannot be true or false until its interpretation is stated. An earlier version of this module marked it refuted on the strength of a run that had silently repaired operation 24 — the same failure, committed by the people warning about it.

Filing this under "established" because the number is widely repeated is the misfiling the unit warns about. Filing it under "refuted" because a recomputation disagreed is the subtler one.

What would move it: stating the interpretation. "Operation 4 as printed, operation 24 repaired, earlier values supplied" is a claim that can be checked, and checks out at 139/630. "The routine run from the start with the operation-4 inversion in place" checks out at −25621/630. A high-resolution facsimile confirming operation 24 independently of [S7] would firm up the whole family.


Common ways this activity goes wrong

Treating "contested" as a polite way of saying "false". It is not. It is a statement about the strength of the evidence available, not about the truth of the claim. Statement C may well turn out to be an accurate description; the module's position is that it has not established this, not that it doubts it.

Sorting by plausibility instead of by provenance. The buckets are about where a claim came from, not about how likely it sounds. A highly plausible claim with no source is unsourced. This is the single most common error in the task.

Producing a vague "what would move it". "More research" and "checking the sources" are not answers. The test is whether you have named something a person could actually go and consult. If you cannot, you have not yet worked out what the claim depends on.

Looking it up before sorting it. Understandable, and it destroys the exercise. The skill being trained is what you do with a claim before you have resolved it, because in practice most claims are never resolved — they are used, or not used, in whatever state you found them.


Why this unit is written the way it is

Your private activity record

Browser storage is not a permanent copy

Progress is kept only in this browser, profile and device. Private browsing, clearing site data, removing the profile, a browser reset, storage eviction or device loss can erase it. Keep important answers and contributions separately.

These notes stay in this browser unless you download a backup or activity log.