Skip to main content

Turing’s 1949 Paper in Context

  • Conference paper
  • First Online:

Part of the book series: Lecture Notes in Computer Science ((LNTCS,volume 10307))

Abstract

Anyone who has written one knows how frustratingly difficult it can be to perfect a computer program. Some of the founding fathers of computing set out ideas for reasoning about software — one would say today ‘techniques for proving that a program satisfies its specification’. Alan Turing presented a paper entitled Checking a Large Routine that laid out a workable method for reasoning about programs. Sadly his paper had little impact. Understanding the problem faced, Turing’s proposal and what followed provides insight into how ideas evolve. Comparing three contributions from the 1940s with the current state of the art clarifies a problem that still costs society a fortune each year.

This is a preview of subscription content, log in via an institution.

Buying options

Chapter
USD   29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD   39.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD   54.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Learn about institutional subscriptions

Notes

  1. 1.

    Connections other than the citations between these three pioneering pieces of work are difficult to trace. The current author has tried to determine whether there is a direct link between von Neumann’s assertion boxes and Turing’s annotations. It is known that Turing visited the US during the war but there is no evidence that the urgent business of cryptography left any time to discuss program development ideas.

  2. 2.

    Acknowledgements to Curry’s influence are present in both the choice of name for the Haskell (functional) programming language and the term Curry-Howard correspondence (for proofs as programs).

  3. 3.

    The world’s first embodiment of an ‘electronic stored-program computer’ to run was the Manchester ‘Baby’ that executed its first program on midsummer’s day 1948.

  4. 4.

    In fact, some form of looping concept is central to the power of general purpose programs. One could say that they make it possible to compute properties that are not in the basic instructions of the programming language. This point is illustrated with recursive functions in [Pét66, Chap. 1] and applied to interesting data structures in the appendix of Rózsa Péter’s book. It is interesting to recall Tony Hoare’s comment that he couldn’t write Quicksort as a program until he learned a language that provided recursive procedures.

  5. 5.

    John McCarthy – who did much to promote formal methods – used the following imaginary scenario to highlight the need for termination arguments ‘an algorithm that might appear to ensure that someone becomes a millionaire: the person should walk along the street picking up any piece of paper — if it is a cheque made out to that person for one million dollars, take it to the bank; if not, discard the piece of paper and resume the process’.

  6. 6.

    Peter Naur proposed in a paper in the journal BIT ‘general snapshots’ as a way of annotating a program text to reason about its correctness. Naur’s system was based on comments in a program and was less formal than Floyd’s but it is another indication that the idea of decomposing an argument about correctness had reached its moment in time.

  7. 7.

    A full review of Turing’s 1949 paper with indications of the necessary typographical corrections is contained in [MJ84].

  8. 8.

    For example: ‘with n in line 29 we shall find a quantity in line 31 when the machine stops which is n’.

  9. 9.

    More detail on the history of reasoning about programs can be found in [Jon03].

  10. 10.

    Gerard Alberts has however made two important points (private communication March 2017): it is important to remember that van Wijngaarden’s background was numerical analysis rather than logic; furthermore, Alberts has evidence that van Wijngaarden ‘had little affinity’ with Turing and his work.

  11. 11.

    Repeated attempts to track down this elusive paper have so far yielded nothing: [Gor61] does not appear to be the missing document and [Gor68] is too late.

  12. 12.

    A similar conclusion is drawn in Priestly’s interesting book [Pri11, p. 302].

References

  1. Curry, H.B.: On the composition of programs for automatic computing. Naval Ordnance Laboratory Memorandum 9806, 19-8, 52 pp. (1949)

    Google Scholar 

  2. Floyd, R.W.: Assigning meanings to programs. In: Proceedings of Symposium in Applied Mathematics. Mathematical Aspects of Computer Science, vol. 19, pp. 19–32. American Mathematical Society (1967)

    Google Scholar 

  3. Gorn, S.: Specification languages for mechanical languages and their processors a baker’s dozen: a set of examples presented to ASA x3.4 subcommittee. Commun. ACM 4(12), 532–542 (1961)

    Article  MATH  Google Scholar 

  4. Gorn, S.: The identification of the computer, information sciences: their fundamental semiotic concepts and relationships. Found. Lang. 4, 339–372 (1968)

    MATH  Google Scholar 

  5. Goldstine, H.H., von Neuman, J.: Planning and coding of problems for an electronic computing instrument. Technical report, Institute of Advanced Studies, Princeton (1947)

    Google Scholar 

  6. Hoare, C.A.R.: An axiomatic basis for computer programming. Commun. ACM 12(10), 576–580, 583 (1969)

    Google Scholar 

  7. Hoare, C.A.R.: Proof of a program: FIND. Commun. ACM 14, 39–45 (1971)

    Article  MATH  Google Scholar 

  8. Jones, C.B.: The early search for tractable ways of reasoning about programs. IEEE Ann. Hist. Comput. 25(2), 26–49 (2003)

    Article  MathSciNet  Google Scholar 

  9. King, J.C.: A program verifier. In: Freiman, C.V. (ed.) Proceedings of the Information Processing, IFIP 1971, pp. 234–249. North-Holland (1971)

    Google Scholar 

  10. Morris, F.L., Jones, C.B.: An early program proof by Alan Turing. Ann. Hist. Comput. 6(2), 139–143 (1984)

    Article  MathSciNet  MATH  Google Scholar 

  11. Péter, R.: Recursive Functions. Academic Press, New York (1966)

    Google Scholar 

  12. Priestley, M.: A Science of Operations: Machines, Logic and the Invention of Programming. Springer Science & Business Media, London (2011)

    Book  MATH  Google Scholar 

  13. Turing, A.M.: Checking a large routine. In: Report of a Conference on High Speed Automatic Calculating Machines, pp. 67–69. University Mathematical Laboratory, Cambridge, June 1949

    Google Scholar 

  14. Wijngaarden, A.: Numerical analysis as an independent science. BIT 6, 66–81 (1966)

    Article  MathSciNet  MATH  Google Scholar 

  15. Woodcock, J., Larsen, P.G., Bicarregui, J., Fitzgerald, J.: Formal methods: practice and experience. ACM Comput. Surv. 41(4), 1–36 (2009)

    Article  Google Scholar 

Download references

Acknowledgements

I should like to dedicate this paper to Lockwood Morris (1943–2014) who was a great but under-appreciated scientist. We worked together on [MJ84] when we were both in Oxford and he subsequently spent his sabbatical with me in Manchester. As well as many happy memories, Lockwood did me a great personal favour in December 2013 which was sadly the last time we met.

I am extremely grateful to Liesbeth de Mol for bringing Curry’s work to my attention and to Gerard Alberts for interesting input on van Wijngaarden. Comments from anonymous referees have also helped improve the paper although some of their suggestions will not fit in the page ration. My funding for this research comes from the EPSRC Strata Platform Grant.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Cliff B. Jones .

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2017 Springer International Publishing AG

About this paper

Cite this paper

Jones, C.B. (2017). Turing’s 1949 Paper in Context. In: Kari, J., Manea, F., Petre, I. (eds) Unveiling Dynamics and Complexity. CiE 2017. Lecture Notes in Computer Science(), vol 10307. Springer, Cham. https://doi.org/10.1007/978-3-319-58741-7_4

Download citation

  • DOI: https://doi.org/10.1007/978-3-319-58741-7_4

  • Published:

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-319-58740-0

  • Online ISBN: 978-3-319-58741-7

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics