← Back to article

Sources

Grounding, citations, and further reading for How Testing Proves Code.

All of this is optional. These are the primary and secondary sources behind the article, shown here as grounding for the historical claims. Nothing on this page is required reading.

The article itself is self-contained. This page exists so that the work is properly cited and so that anyone who wants to read the original Turing paper, the 1984 Morris and Jones reprint, or Hoare's own retrospective on the lineage knows where to find them.

About the Sources

Turing 1949: Checking a Large Routine

Turing, A. M. (1949). Report of a Conference on High Speed Automatic Calculating Machines, University Mathematical Laboratory, Cambridge, pp. 67-69.

The primary source. A three-page paper delivered orally at the inaugural EDSAC conference on 24 June 1949 and printed in the conference proceedings. Catalogued as AMT-B-8 in the King's College Turing Digital Archive. The facsimile is reproduced in this article's side-by-side reader and transcribed page by page next to each image scan.

Morris & Jones 1984: An Early Program Proof by Alan Turing

Morris, F. L. & Jones, C. B. (1984). IEEE Annals of the History of Computing, Vol. 6, No. 2, pp. 139-143.

The canonical reprint. Morris and Jones reproduce Turing's 1949 text in full with the typographical errors of the proceedings corrected, then comment on the proof technique. Their concluding remark is the published source for the claim that the paper did not influence the 1960s rediscoveries: "In spite of the early date of Turing's paper and the insight shown, we know of no evidence that the paper influenced the later contributors to the ideas of program proofs." Most subsequent literature cites this version rather than the original proceedings.

Hoare 2003: Assertions: A Personal Perspective

Hoare, C. A. R. (2003). IEEE Annals of the History of Computing, Vol. 25, No. 2, pp. 14-25.

Hoare's first-person retrospective on the history of assertions in programming, written more than thirty years after his 1969 axiomatic-basis paper. The article explicitly names Turing 1949 as the precursor of Hoare logic and acknowledges that neither he nor Floyd was aware of it when their own work was published. The most reliable primary-source basis for the "rediscovered independently" claim in the article's lead.

INRIA Toccata gallery

Toccata project, INRIA Saclay. Why3 verification gallery.

Modern verification artifact at toccata.gitlabpages.inria.fr. A complete Why3 mechanization of Turing's 1949 factorial routine, reproducing his original argument (flowchart, assertions on arcs, variant function for termination) in a contemporary proof assistant. Reads as a working pedagogical artifact: a 1949 proof technique still being executed line by line in 2024 by an SMT-backed verifier.

Opening Claims (Lead Paragraph and Pull Quote)

1Turing's 1949 EDSAC paper and the original assertion discipline

The pull-quote in the article ("The programmer should make a number of definite assertions which can be checked individually, and from which the correctness of the whole program easily follows.") is from page 67 of the conference proceedings. The paper as a whole introduces three ideas at once: (1) assertions on arcs: attach propositions to each connection in a flowchart so checking a global property reduces to a finite set of local checks; (2) inductive variables: identify quantities whose value across iterations is captured by the assertion at the loop head; (3) variant functions for termination: attach a quantity to each loop that strictly decreases and is bounded below, so partial correctness can be separated from a termination argument. The worked example is a factorial routine implemented in addition only.

Turing describes the technique in the language of his audience (1949 hardware programmers writing for EDSAC and similar machines) rather than in modern proof-theoretic vocabulary, which is part of why the technique sat dormant for so long: the paper does not look like a "proof" to a 1960s reader trained on formal logic.

Turing 1949, pp. 67-69. AMT-B-8 archive · facsimile reader ↩ Back to article

Part 1: The Paper (1949)

7Jones reads Turing 1949 as a modern verification text

Cliff Jones, half of the Morris and Jones 1984 reprint team, returned to Turing 1949 in a 2013 chapter for the Cooper and van Leeuwen volume Alan Turing: His Work and Impact. The chapter walks through Turing's flowchart, his assertions, and his variant function using contemporary verification vocabulary, and is the most accessible "what is in the 1949 paper, explained from a modern standpoint" pointer for a reader who finds the original proceedings text and the Morris and Jones commentary heavy going. Jones also confirms the dating and circumstances of the EDSAC conference, and gives his own retrospective on why the technique did not catch on at the time.

Jones, C. B. (2013). In Cooper & van Leeuwen (eds.), Alan Turing: His Work and Impact, Elsevier, pp. 455-460. Newcastle ePrints 183999 ↩ Back to article

Part 2: The Dormant Decades (1949 to 1983)

3Floyd's 1967 rediscovery of flowchart-with-assertions

Robert Floyd's Assigning Meanings to Programs is the paper that the verification community usually credits as the origin of inductive assertion methods. Floyd attaches propositions to the arcs of a flowchart, defines verification as showing that each node preserves its incoming assertion, and gives a termination argument based on a well-founded ordering. The structural similarity to Turing's 1949 construction is striking once the two papers are placed side by side, which is exactly what Morris and Jones do in their 1984 reprint. Floyd does not cite Turing 1949. Eighteen years separate the two papers.

The "Floyd had never heard of it" framing in the article's lead is the strong reading of two converging pieces of evidence. The conservative reading, taken directly from the published sources, is that no one has produced evidence that Floyd was aware of Turing 1949 when he wrote his paper, and that Hoare's own retrospective groups the two of them together as having independently rediscovered the technique. See the deeper annotation under the "unaware" finding below.

Floyd, R. W. (1967). Proceedings of Symposium in Applied Mathematics, Vol. 19, American Mathematical Society. ↩ Back to article

4Hoare's 1969 axiomatic basis and the Hoare triple

Hoare's An Axiomatic Basis for Computer Programming introduces the notation {P} S {Q} (precondition, statement, postcondition) and a set of inference rules for reasoning about it. The framing is more formally logical than Floyd's flowchart-based reading, but the underlying object is the same: a program annotated with claims whose preservation at each step entails the overall claim. As with Floyd 1967, the paper does not cite Turing 1949.

Hoare, C. A. R. (1969). Communications of the ACM, Vol. 12, No. 10, pp. 576-580. ↩ Back to article

5Dijkstra's weakest-precondition calculus

Dijkstra's Guarded Commands, Nondeterminacy and Formal Derivation of Programs takes the same logical material and rewrites it as a predicate-transformer calculus: for each program construct, the weakest precondition that guarantees a given postcondition is computed mechanically. This is the third independent statement of the verification idea Turing introduced in 1949: a different surface presentation (predicate transformers instead of flowchart annotations or Hoare triples), but the same load-bearing claim that program correctness is a property to be derived, not a property to be sampled by testing.

Dijkstra, E. W. (1975). Communications of the ACM, Vol. 18, No. 8, pp. 453-457. ↩ Back to article

3+6Were Floyd and Hoare actually unaware of Turing 1949?

This is the article's most surprising historical claim, so it is worth setting out the citation walk in full. The published evidence comes from two sources:

  1. Morris and Jones 1984, in the closing paragraphs of the IEEE Annals reprint, write: "In spite of the early date of Turing's paper and the insight shown, we know of no evidence that the paper influenced the later contributors to the ideas of program proofs." This is a careful statement: it says no influence has been documented, not that Floyd and Hoare were demonstrably unaware. It is the strongest claim a historian can make from the absence of citation alone.
  2. Hoare 2003, in his own retrospective Assertions: A Personal Perspective, treats Turing 1949 as a separate ancestor that he and Floyd did not draw from at the time. The retrospective acknowledges the paper explicitly as the earliest known instance of the assertion technique, and groups his own 1969 paper with Floyd 1967 as later independent statements of the same idea.

A separate strand of evidence comes from the ACM Hoare Turing Award acknowledgements, which describe the 1949 paper as one "of which neither Floyd nor Hoare was aware in the 1960s." The conservative phrasing the article could use is therefore "was unaware" rather than "had never heard of it"; the published record supports the former precisely and the latter as a reasonable popular gloss.

Morris & Jones 1984, p. 143; Hoare 2003, pp. 14-25. ↩ Back to article

Part 3: The Recognition (1984 to present)

2The 1984 reprint that gave the paper its second life

By 1984 the verification community had three independent formalisms (Floyd, Hoare, Dijkstra) and a growing body of mechanized proof systems. Morris and Jones noticed that Turing's 1949 paper had said the same thing first, found the original proceedings, corrected the typographical errors that had made it hard to read, and reprinted the entire text in IEEE Annals of the History of Computing alongside a substantial commentary. The IEEE Annals version is now the standard citation for the paper, both because the proceedings are difficult to obtain and because the Morris and Jones corrections make the technical content followable.

This article uses the Morris and Jones commentary as its main secondary source for any claim about what Turing 1949 actually says, in preference to working from the proceedings text directly.

Morris & Jones, IEEE Annals of the History of Computing, Vol. 6, No. 2, April 1984, pp. 139-143. DOI ↩ Back to article

6Hoare's retrospective acknowledgement of the lineage

Hoare 2003 is the strongest piece of evidence the article uses for the claim that the verification community has now formally recovered the lineage back to Turing 1949. The retrospective is written by the person whose own name is on one of the rediscoveries; it explicitly identifies Turing 1949 as the precursor; and it does so without claiming awareness of the paper at the time the rediscovery was made. It is the cleanest acknowledgement available, and the closest the published literature comes to settling the "had never heard of it" question on its own terms. Paired with Morris and Jones 1984, it forms the two-source basis for everything the article says about the long silence and the eventual rediscovery.

Hoare, C. A. R. (2003). IEEE Annals of the History of Computing, Vol. 25, No. 2, pp. 14-25. ↩ Back to article

The INRIA Toccata gallery hosts a working Why3 mechanization of Turing's 1949 factorial routine. The mechanized proof reproduces the flowchart structure, attaches the inductive assertions Turing wrote on the arcs, and discharges the verification conditions through an SMT solver. Parallel exercises exist in Coq, Isabelle/HOL, and Lean. The pedagogical value of the Toccata mechanization is that it makes the underlying logic of the 1949 paper concrete: the assertions become Why3 invariants, the variant becomes a Why3 variant clause, and the proof obligations that fall out are exactly the local checks Turing described in prose.

INRIA Toccata gallery. checking_a_large_routine.en.html ↩ Back to article

EDSAC and the Conference Context

9Martin Campbell-Kelly's EDSAC simulator at Warwick

Martin Campbell-Kelly's EDSAC simulator at the University of Warwick is the standard pedagogical artefact for the 1949 machine. The site distributes a Windows-native simulator, an initial-orders bootstrap loader, a tutorial that walks the user through assembling a routine in the original notation, and scans of the contemporary programming literature. For a reader who wants to understand what Turing's "routine" actually looked like in storage, what it took to load it onto paper tape, and how the operator interacted with the machine, this is the working resource.

The simulator's documentation is also the proximate source for the Cambridge anniversary material below: the Warwick Links page is the only place on the open web where the EDSAC99 commemorative site is still being actively pointed at.

Campbell-Kelly, M. www.dcs.warwick.ac.uk/~edsac/ ↩ Back to article

10EDSAC99: the 50th anniversary commemorative site

The Cambridge Computer Laboratory hosted a two-day event on 15-16 April 1999 to mark fifty years since the machine first ran. The commemorative site preserves the programme, the souvenir booklet, statistics from the original installation, archival reminiscences from people who used the machine in its working life, and a separate page indexing surviving EDSAC simulators. It is the closest the web has to a single-stop primary-source archive for the 1949 conference setting that frames Turing's paper.

University of Cambridge Computer Laboratory (1999). cl.cam.ac.uk/events/EDSAC99/ ↩ Back to article

11Cambridge Computer Laboratory archive photographs

The Computer Laboratory's "Relics" archive collects photographs of EDSAC and its operating environment, with captions identifying the people, the year, and the equipment in each image. Useful when an article needs to ground a sentence about "an operator reading off a cathode-ray display" or "the inaugural EDSAC conference" in an actual photograph rather than a sketch.

University of Cambridge Computer Laboratory. cl.cam.ac.uk/relics/archive_photos.html ↩ Back to article

12The 1945 report that proposed the stored-program architecture

John von Neumann's First Draft of a Report on the EDVAC, circulated in June 1945 while von Neumann was consulting on the EDVAC project at the Moore School in Philadelphia, is the canonical written proposal for the stored-program computer. The report argues that program instructions should live in the same memory as data, so the machine can read, execute, and modify them through the same hardware paths. Every machine the article discusses (Manchester Baby, Mark 1, EDSAC, EDVAC) implements this proposal. Before it, programming meant physically configuring the machine: routing patch cables on ENIAC, setting plugboards on Colossus, punching paper tape for the Harvard Mark I. The First Draft is the moment "software" becomes a possible category of thing.

von Neumann, J. (1945). Moore School of Electrical Engineering, University of Pennsylvania. overview ↩ Back to article

13Manchester Baby: the first stored program ever run

The Small-Scale Experimental Machine at Manchester, known as the Baby, executed its first stored program on 21 June 1948, eleven months before EDSAC. The program was Tom Kilburn's 52-instruction routine to find the highest proper divisor of a number, and its execution is the moment when the stored-program proposal in the EDVAC First Draft became a physical fact. The Baby's successor, the Manchester Mark 1, was the machine Turing was working on as deputy director when he came south to Cambridge to read his paper at the EDSAC conference. Useful context for an article that names EDSAC: EDSAC is not the first computer that ran software, it is the third or fourth, and the first to provide a regular computing service.

Williams, F. C. and Kilburn, T., Manchester, 1948. en.wikipedia.org/wiki/Manchester_Baby ↩ Back to article