Abstract
The term ‘Halting Problem’ arguably refers to computer science’s most celebrated impossibility result and to the core notion underlying the language-theoretic approach to security. Computer professionals often ignore the Halting Problem however. In retrospect, this is not too surprising given that several advocates of computability theory implicitly follow Christopher Strachey’s alleged 1965 proof of his Halting Problem (which is about executable – i.e., hackable – programs) rather than Martin Davis’s correct 1958 version or his 1994 account (each of which is solely about mathematical objects). For the sake of conceptual clarity, particularly for researchers pursuing a coherent science of cybersecurity, I will scrutinize Strachey’s 1965 line of reasoning – which is widespread today – both from a charitable, historical angle and from a critical, engineering perspective.
Introduction
Wireless networks, sensors, and software are transforming our societies into an Internet of Things. We are starting to use Internet-connected drones, self-driving cars, and pacemakers designed to facilitate long-distance patient monitoring by doctors. These promising technologies also have negative impacts, some of which are unknown or downplayed by experts, companies, and marketers. When actual problems arise, pacemakers’ software must be updated quickly to prevent malicious hackers from attacking such devices and taking over control of patients’ lives. Drones and cars could become controlled remotely by malicious parties [30].
Identifying and anticipating such problems and preparing for risk mitigation is an urgent matter, in order to ensure human safety. Anticipation by responsible engineers is feasible in principle but lacking in practice. A possible reason for this omission is that software has become too intricate, even for experts, compared to, say, the
The next part in this introduction conveys a flavor of technical contributions that can be expected from following a historical methodology (Section 1.1). Then I focus on security researchers’ bread-and-butter distinction between models and modeled artefacts (Section 1.2). I reflect on the tendency to blur the distinction (Section 1.3) and zoom in on specific terminology (Section 1.4). In Section 2, I pay historical attention to the so-called “Turing Fix” in order to contextualize the language-theoretic approach to security. Coming to the body of this paper, Section 3 provides a technical, historical analysis of the Halting Problem pertaining to computer programs; that is, hackable technology. A potentially fruitful discussion follows in Section 4.
Merits of historical research
“By the time physicists began to note the limitations of software, the missile defense program was moving forward with a momentum all its own.” [54, p. 84]
“Dozens of demonstrations by hackers and security researchers have proven it is entirely possible for criminals fifteen hundred miles away to seize control of your car when you are driving sixty-five miles per hour down the highway.” [30, p. 363]
Conflating the model and the modeled artefact
Slayton’s narrative suggests that there is no technological fix for missile defence. Zooming in on the Reagan administration, Dave Parnas and other software engineers protested against the Strategic Defense Initiative (SDI) by alluding, in part, to an unjustified belief in a foolproof mapping of mathematical objects onto engineered artefacts – a central theme of the present article. Proving mathematical programs correct, Parnas explained, does not imply that the SDI software itself is correct [43, p. 1334]. The mathematical program (= the model) should not be confused with the executable computer program (= that which is modeled). Parnas has argued against this kind of conflation throughout his career: “Most of the many published proofs of programs [in computer science] are actually proofs about models of programs, models that ignore the very properties of digital computers that cause many of the ‘bugs’ we are trying to eliminate.” [44]
Model-modelee conflations are the nuts and bolts of the present article. A more famous example of such a conflation and its ramifications is the Y2K or millennium bug. As the previous century came to a close, an increasing number of stakeholders became aware of the difference between a computer program (= an executable model) and the dates used in daily discourse (= modelee). Many people became worried about the limited regime of applicability of industrial computer programs [36, p. 42], because those programs modeled dates (1970, 1900, and 2000) with only two digits (70, 00, and 00, respectively). One implication of this discrepancy between the model and the modelee was that a person born in 1900 turned zero years old in 2000, according to the computer program.
The model-modelee conflation underlying the Y2K bug led to financial repercussions in the 1990s, not to the loss of human lives. Unfortunately, the same can probably not be said indefinitely of modern pacemakers of which thousands have already had to be upgraded due to a security vulnerability [30, Ch.14], [22]. Stakeholders who (implicitly) believe in a foolproof mapping – i.e., who conflate the mathematical model of the pacemaker’s software with the deployed software itself (= modeled artefact) – will put too much weight on the “security proofs” obtained by researchers. Stakeholders include computer professionals, although, once again, security experts are fortunately among the skeptics [37,65].
All these examples, along with those forthcoming, convey an overarching theme: The history of science & technology is, besides a history of progress, one of conflations between models and modeled artefacts.
Eight more examples of conflations, and primarily of model-modelee conflations, follow in order to get the main theme across before zooming in on computability theory per se. First, in linguistics it is not uncommon to mistake the sentences deduced from a formal grammar for a natural language [51, Ch.3]. Second, in strong artificial intelligence one is trained to equate the computation of functions with cognition, rather than “merely” model the latter with the former [24, p. 378]. Third, software scholars tend to fuse the categories of Turing machines and stored-program computers [16]. Fourth, engineers mistake a C computer program for a system realization [35, p. 4839]. Fifth, and similar to Parnas’s critique, computer scientists: “should not confuse mathematical models with reality and verification is nothing but a model of believability.” – De Millo et al. [21, p. 279]
The practice of conflating
The practice of conflating mathematical objects (models) and engineered artefacts (modelees) is powerful and troubling at the same time. It paves the way for:
Mathematical rigor in the science of computer programming, which has led, among other breakthroughs, to powerful software analysis tools, e.g. [10]. Treating computer programs as mathematical objects allows for technical advancements in the software industry. In other words: some conflations are useful, if not both deliberate and useful.
Ignorance of the model’s limited regime of applicability in relation to the modelee [36, p. 42].
As Parnas’s critique presented previously indicates, it is not uncommon for computer scientists to confuse the mathematical results of the model in hand with the real-world properties of the modeled artefact (i.e., the deployed software in a missile defence system).
Likewise, ignorance of the modeling activity and too much devotion to the mathematical enterprise can lead to the decision to take the human entirely out of the control loop (of a real missile defence system or vehicle), which can easily result in more casualties than when humans and technology form a creative partnership, cf. [41].
The tendency to conflate models and modelees is omnipresent in mathematical ideals of engineering. Engineering is about making the modeled artefact similar to the model [36], and thus correlates knowledge and the making of artefacts. That is why engineering often starts from the assumption of an identification of a model and modelee, and then works its ways against the ‘resistance of the material object’ or ‘the resistance of the modelee.’ Thus, ‘viewing the modelee as identical to the model’ is both a source of insight (as in 1 above) and of error (as in 2 above), and making this distinction between 1 and 2 is a matter of testing and ‘a posteriori’ experience.1
Thanks to Erhard Schüttpelz for sharing this bird’s-eye view with me.
Mathematical objects such as mathematical programs and computable functions are, in the present paper, consistently distinguished from physical objects, such as computer programs. The latter, also called engineered artefacts, consume energy and take up physical space (while the same cannot be said of mathematical objects).
The categorical distinction just made might be perceived as simplistic, and some readers will likely come across Platonic undertones in the sequel. In anticipation of criticism along these lines, I provide three responses. First, separating mathematical from physical objects can be accomplished without subscribing to Platonism per se [53]. Second, most if not all historical actors mentioned in the present article (implicitly) approved of the aforementioned categorical separation (and possibly even of Platonism itself). Third, and to the best of my knowledge, philosophers of computing have yet to thoroughly investigate physicalism, idealism, and other philosophical positions in connection with computer programming. For instance, it would be interesting in future work to scrutinize Strachey’s 1965 proof from the perspective of mentalism.
Two further remarks can be made about the terminology used in this article.
Strictly speaking a distinction can be made between a computer program (stored in, say, a laptop) and an executing computer program (in a laptop). Nonetheless, both objects consume energy and take up physical space; it is partly for this reason that I shall simply call both objects engineered artefacts.
A mathematical program typically serves as a mathematical model of both a computer program and, especially, of an executing computer program. All objects introduced in the previous sentence (be they physical or mathematical) can be represented with a program text, which is, say, printed on paper.
For a different (yet seemingly compatible) analysis I refer to Ray Turner’s philosophy [63] and the following two stipulations in particular:
Turner distinguishes between symbolic programs and abstract mathematical objects. The former can be equated to the latter provided we incorporate the semantics of the containing language in our discourse. (I make no such distinction; instead, I use the umbrella term ‘mathematical program.’) Turner states that programs are not purely mathematical entities, for the former have to be physically manifested. (I use the term ‘computer program’ in this paper.)
Unlike me, Turner consistently uses the term ‘technical artifact’ to unify the symbolic and physical guises of programs [63, p. 52]. Further research would be required in order to compare Turner’s analysis with the ideas presented in this paper.
Additional philosophical grounding can be found in the textbooks of Timothy Colburn [9], William Rapaport [46], and Giuseppe Primiero [45], not in the present paper. The sequel is, after all, written with a historical and a technical hat, not with the hat of a philosopher. I let my historical actors speak for themselves, i.e., I use their words, and therefore often eschew definitions at the outset.
Language theory and security
Another way of expressing the tendency to conflate between the model and the modeled artefact is as follows: Many computer scientists implicitly believe in a foolproof mapping of computing models onto running machines. The belief in foolproof mapping is a point of discussion among technical historians and philosophers – including James Moor [42], Brian Cantwell Smith [55], James Fetzer [23,25], Colburn [9], Donald MacKenzie [38], and Edgar Daylight [18] – yet it is often neglected among computer scientists. For the sake of being precise, as will be attempted next, provocations become difficult to completely avoid: It is not uncommon to observe computer scientists talk about their computing models as if these are the very computers and computer programs that they are analyzing, constructing, or executing. An awareness of their belief in a foolproof mapping is in various cases implicit, if present at all. Computer scientists – and relatively few software and security engineers – believe in a Turing Fix in that they, often heedlessly, treat a laptop as a Turing machine or a computer program as a Turing machine program in their research, thereby downplaying the modeling activity in hand.
The genuine praise for engineers, expressed in the previous passage, does not imply that conceptual clarity pertaining to security research cannot be increased (from a Turing-Fix perspective). Examples are presented in Section 2.1 and Section 2.2. The present paper’s focus on the Halting Problem is motivated and elaborated in Section 3.
Fred Cohen and Eric Filiol
The abstract of Fred Cohen’s seminal 1987 paper, ‘Computer Viruses: Theory and Experiments’ [8], states: “This paper introduces ‘computer viruses’ and examines their potential for causing widespread damage to computer systems. Basic theoretical results are presented, and the infeasibility of viral defense in large classes of systems is shown. […]” [8, p. 22] “Protection from denial of services requires the detection of halting programs which is well known to be undecidable [28].” [8, p. 22] In this paper we model ‘computer viruses’ as Turing machines and subsequently use a classical undecidability result from computability theory to gain insights into the industrial problem of building viral defense systems.
Later on in his paper, Cohen states that he has presented infeasibility results that “are not operating system or implementation specific, but are based on the fundamental properties of systems” [my emphasis]. Continuing, he writes that “they reflect realistic assumptions about systems currently in use” [8, p. 34]. However, historians of computing will stress that the Turing-machine model of computation is not the only model that has been used throughout history in attempts to achieve these research goals. Indeed, many Turing
Strictly speaking, Cohen conflates industrial problems such as the “detection” of computer viruses and theoretical notions such as “undecidability.” For example, “Precise detection [of computer viruses] is undecidable, however, statistical methods may be used to limit undetected spreading either in time or in extent.” [8, p. 34] “Several undecidable problems have been identified with respect to viruses and countermeasures.” [8, p. 34]
A similar and more recent account on computer viruses is Eric Filiol’s 2005 book, Computer Viruses: From Theory to Applications [26]. Filiol begins the technical part of his exposition by putting “Turing machines” front and center yet without acknowledging that he is, in fact, selecting only one possible modeling technique. In Filiol’s words: “The formalization of viral mechanisms makes heavy use of the concept of Turing machines. This is logical since computer viruses are nothing but computer programs with particular functionalities. […] A Turing machine […] is the abstract representation of what a computer is and of the programs that may be executed with it.” [26, p. 3, my emphasis]
Filiol’s reasoning is only valid and effective if all researchers (and all hackers across the globe) accept that computer programs can be adequately modeled, and can only be adequately modeled, with Turing machines. But accepting either of these two premises would amount to ignoring a large part of the history of computer science and current-day practice. Alternative models of computation, such as linear bounded automata, have been introduced in the past precisely because the Turing-machine model was deemed inadequate [39]. In technical terms, neither the model fidelity of a Turing machine, nor that of a linear bounded automaton, is absolutely perfect with regard to the modeled artefacts in hand; i.e., ordinary programs, virus programs, computers, and other engineered artefacts (cf. Section 3). We should expect that a science of cybersecurity will not be built around a single model – Fred B. Schneider [50, p. 51]
Len Sassaman et al.
On the praising one hand, historical observations concerning the importance of Turing
Paraphrased from the wikipedia entry on “language-based security.” (Accessed on 11 October 2019.)
Many people seem to prefer – and perhaps justifiably so – to mathematically model
The bread-and-butter distinction in security research is, after all, that between models and modeled artefacts. So the extra nuance is hopefully appreciated by my readership. The following two more points are perhaps well-known too, yet deserve to be emphasized in the present context as well.
Proving mathematical properties on one particular model (language L in the
The mathematical language L embodies conceptual knowledge about programming practices. This knowledge is “secondary and representational, hence, it is necessarily incomplete and partial, and it is error-prone (rightly evoking Cartesian doubt)” – a message that I have appropriated from Peter Brödner’s insightful work [5] and which is also conveyed from a different angle in Cantwell Smith’s celebrated 1985 paper ‘The Limits of Correctness’ [55]. Another source of inspiration comes from Edward Lee’s plenary talk ‘Verifying Real-Time Software is Not Reasonable (Today),’ presented at the Haifa Verification Conference in 2012, where Lee described the Kopetz Principle – after Hermann Kopetz, from whom he learned it – with the following words: “Many (predictive) properties that we assert about systems (determinism, timeliness, reliability) are in fact not properties of an implemented system, but rather properties of a model of the system. We can make definitive statements about models, from which we can infer properties of system realizations. The validity of this inference depends on model fidelity, which is always approximate.”
I refer to Lee’s 2017 book Plato and the Nerd [36] for the bigger picture.
“Their choice of example facilitates the confusion, given that the word “play” refers to both the text and the performance, the representation and the thing represented. […] These authors may have been misled by the practice, common but usually well defined in the literature, of using the word “entity” to refer both to categories of things (cars, people, companies) and to instances of those categories (my old 240Z, Jacques Martin, IBM).” [2]
Agre’s narrative lends credence to the vexing claim, that, “the conflation of representation and reality is a common and significant feature of the whole computer science literature” [2].
Until recently, security research was deemed mostly orthogonal to language-theoretic considerations, which do prevail in compilation, programming language design, and other well-established branches of computer science. I borrow this observation from Sergey Bratus et al. [4, p. 20]. As proponents of the language-theoretic approach to security, these authors seek a better understanding of the writings of Alonzo Church, Turing, et al. In their words: Computer security’s core subjects of study–trust and trustworthiness in computing systems–involve practical questions such as “What execution paths can programs be trusted to not take under any circumstances, no matter what the inputs?” and “Which properties of inputs can a particular security system verify, and which are beyond its limits?” These ultimately lead to the principal questions of computer science since the times of Church and Turing: “What can a given machine compute?” and “What is computable?” – Quoted from Bratus et al. [4, p. 16]
The advent of computability theory is indeed largely due to Church, Turing, Kurt Gödel, Emil Post, and other logicians. And the appropriation of the “Turing machine” concept by computer programmers after the second world war is a story that has been told, albeit only recently [6,17,19]. But the advent of undecidability results in programming has yet to be thoroughly analyzed and documented. The present author has made a preliminary contribution in this regard [15] and (hopefully) a more definite one in the following pages.
Half a century ago Bob Floyd demonstrated that no algorithm can decide whether infinitely many arbitrary context-free grammars are ambiguous [27]. On the other hand, Floyd knew very well that a context-free grammar is merely The undecidability result in hand, not unlike mathematical results in adjacent engineering disciplines, holds for the mathematical models of the engineered artefacts, not for the engineered artefacts themselves.
Let us call the fidelity of a mathematical model the degree to which it emulates the engineered artefact, also called the target [36, p. 41]. In various research communities, the model fidelity is always deemed to be approximate [35,55,61] and mindful researchers use the model only when the target is “operating within” the “regime of applicability of the model” [36, p. 42]. For the case study discussed next – Christopher Strachey’s 1965 Halting Problem – I will argue that the model fidelity is indeed imperfect. Specifically, Strachey ignored the fidelity altogether in his activity of modeling physical computations, in which he used computable partial functions (mathematical objects) as models for executable programs (engineered artefacts).
Strachey’s 1965 letter
Strachey’s letter ‘An impossible program’ appeared in January 1965 in the Computer Journal with the following opening sentence: “A well-known piece of folklore among programmers holds” – folklore which I call Strachey’s Halting Problem – that it is “impossible to write a program which can examine any other program and tell, in every case, if it will terminate or get into a closed loop when it is run.” [59]
Strachey’s narrative stands in stark contrast to the purely mathematical expositions of the Halting Problem, provided by Stephen Kleene, Martin Davis, and other logicians in the 1950s (not to re-mention, of course, the writings of Church, Post, and Turing in earlier years). Consider, for instance, having a look at Davis’s Halting Problem in his 1958 book Computability & Unsolvability, which is about Turing machines only, not technology [12, p. 70]. To be more precise, Davis’s proof concerns numerical codes of Turing machines, obtained via a Gödel-style coding. His proof rests on Kleene’s T predicate, which is defined over natural numbers and used in the context of computable functions.
The folklore erroneously attributes the proof of the undecidability of the Halting Problem to Turing, as clarified by Jack Copeland [11, p. 40]: “The halting problem was so named (and, it appears, first stated) by Martin Davis.(*) The proposition that the halting problem cannot be solved by computing machine is known as the ‘halting theorem.’ (It is often said that Turing stated and proved the halting theorem in ‘On Computable Numbers’, but strictly this is not true.)” (*) “See M. Davis, Computability and Unsolvability (New York: MacGraw Hill, 1958), 70. Davis thinks it likely that he first used the term ‘halting problem’ in a series of lectures that he gave at the Control Systems Laboratory at the University of Illinois inn 1952 (letter from Davis to Copeland, 12 Dec. 2001).”
The proof is also sometimes erroneously attributed to Stephen Kleene. The reason of this incorrect attribution could be explained by the fact that in Kleene [33, p. 382] one finds the following statement (even if no proof of it is given): “So by Turing’s thesis (or via the equivalence of general recursiveness and computability, by Church’s thesis) there is no algorithm for deciding whether any given number x is the Gödel number of a machine which, when started scanning x in standard position with the tape elsewhere blank, eventually stops scanning x, 1 in standard position.”
Returning now to Strachey 1965, the follow-up sentences in his letter suggest – and the Strachey archives in Oxford support my historical interpretation3
Although Strachey was appropriating ideas from the lambda calculus, his incentives to do so were mostly orthogonal to the topic of incomputability. Moreover, his close collaboration with the logician Dana Scott only began around 1969 [58, p. 116].
“I have never actually seen a proof of this in print, and though Alan Turing once gave me a verbal proof (in a railway carriage on the way to a Conference at the NPL in 1953), I unfortunately and promptly forgot the details. This left me with an uneasy feeling that the proof must be long or complicated, but in fact it is so short and simple that it may be of interest to casual readers. The version below uses CPL, but not in any essential way.” [59]
I equate “program” with “program capable of being run”.
– H.G. ApSimon, 27 August 1965.
The rest of Strachey’s letter is his alleged proof in Fig. 1. I encourage the reader to scrutinize Fig. 1 before reading on. It makes an excellent exam question.
Strachey’s proof relies on the notion of recursion. In this regard I mention that historical accounts pertaining to
Moreover, anticipating the – in my eyes, unjustified – critique that my analysis might be (a bit) anachronistic, I emphasize that there is no reason to believe, given the current state of the art in the history of programming languages [60], why Strachey could not suppose that

Strachey’s alleged 1965 proof [59].
Strachey’s 1965 letter invoked three kinds of reactions in Volume 8 (issues 1, 3, and 4) of the Computer Journal. The first reaction is mostly of historical interest: some readers complained about the concept of ‘proof by contradiction,’ some were used to encountering it in geometry and other classical domains, not in computer programming.
The second kind of complaint is important but also forgiving from a historical perspective. Strictly, Fig. 1 is incorrect for the following reason:
It’s the third kind of reaction that still sticks today. Using my own terminology: Strachey was modeling engineered artefacts ( [Strachey’s] letter was of particular interest to me because I had, several months ago, proved that it is indeed possible to write such a program […] – W.D. Maurer, 27 August 1965
Strachey’s line of reasoning in Fig. 1 can thus be improved by formalizing his modeling activity, as I shall do in the following paragraphs.
Improving Strachey’s proof
Let R denote a The reader can formalize in compliance with the solely mathematical – and correct – 1994 exposition of Davis et al. [13]. Intuitively, Has an imperfect model fidelity.
Concerning the second point: a computable partial function is an idealization of a program executing on a physical machine. Three examples of idealization follow. First, the actual running time is abstracted away. One could, unlike Strachey, choose to model this aspect as well, but the point is that one will never be able to mathematically capture the real happening completely (cf. The Kopetz Principle in Section 2.2). Second, any program executing on any physical machine consumes a finite memory footprint. To improve – but, again, not perfectionize – the model fidelity, it would perhaps make more sense to resort to weaker models of computation. In fact, and as stressed before, at some point in history computer scientists started preferring linear bounded automata and finite state machines, perceiving them as less baroque than Turing machines.5
See Michael Mahoney [39, p. 133]. Note also that I use the terms “Turing machine” and “computable partial function” interchangeably. This simplification would be unwarranted if Strachey and I were attempting to address the fundamental question What is an algorithm? [20], rather than: What is an impossible program? Another relevant question has recently been addressed by William Rapaport: What is a computer? [46].
See Davis et al. [13] for the rigor. The crux is that computable partial functions
Suppose
We say that B implements A if and only if A models B. Now, suppose that a
Consider the
Note, below, that If If Computable Boolean function T exists. The model fidelity is “good enough.”
In each case we have a contradiction. So, at least one assumption does not hold. Our assumptions include:
Strachey only took Assumption 1 into consideration and concluded, by reductio ad absurdum, that it did not hold. But who says engineered artefact
So far, I have avoided referring to a semi-related concept: “The Physical Church-Turing thesis.” It should be stressed at least once, that, contrary to what one finds in computer science textbooks, there is no general consensus, let alone a mathematical justification, that this thesis holds [52].
In retrospect, some critical readers will insist that Assumption 2 is a fact, not an assumption. Once one assumes that
There are several ways to respond to these insightful remarks, which in fact come from an anonymous critical reader for which I express my gratitude. First, suppose that I concur. Then the crux of my analysis remains intact: Assumption 3 is the main issue of the present article, not Assumption 2 (as my critical reader confirms). Second, the remarks of my critical reader were also expressed in Volume 8 of the Computer Journal by yet other scholars than those mentioned in the present article. No consensus on the matter was obtained in 1965, nor (apparently) up till this sentence in the present article, which is a point worth making explicit here. Third, strictly speaking, I disagree with the critical reader: there is a categorical difference between a computable function (a mathematical object) and a textual representation of that function, with the latter serving as a prescription for a physical computation on a real computer.8
This categorical distinction is actually between abstract objects and the so-called “technical artefacts” of Ray Turner [62]. I have built on that distinction in my book [18] and prefer to avoid it here, for I aspire reaching out to a more general audience.
The relation between basic computability theory, computer science, and computing practice, is something that is always taken for granted. At the very least, this paper has shown instead, with a simple but paradigmatic example, that this relation is subtle and could have several, distinct, and not necessarily consistent, interpretations.
To be more precise, I have provided a critical reading of a short letter by Christopher Strachey to the Computer Journal (1965), which presents a proof of the undecidability of the Halting Problem. The letter uses the (nowadays usual) diagonal technique, formulating it into a real programming language (Strachey’s own There are no programs in
Like in many papers in programming language theory, when an author says “this program does that” it is always tacitly assumed that the utterance means “this program, when executed on an abstract machine with unlimited memory, unbounded time, true unbounded integer arithmetic, and perfect fidelity for at least conditional and while statements, does that.” In itself, it is a harmless way of simplifying an exposition, provided both the speaker and the listener agree on the convention. In this paper I have argued that this is not always the case.
Separation of concerns
The presented analysis suggests that a good dissemination strategy, regarding undecidability and its practical relevance, should comply more with Martin Davis’s aforementioned expositions rather than with Strachey’s. The crux is to remain solely in the mathematical realm of computable partial functions or Turing machines when explaining undecidability to students and fellow researchers. A refined remark holds for undecidability results pertaining specifically to mathematically modeled computer viruses (cf. Section 2). A mathematical object such as a function cannot be executed nor hacked. A separate concern, then, is to discuss and debate how that mathematical impossibility result could – by means of a Turing complete modeling language of computation – have bearing on the engineered artefacts that are being modeled.
Historical interpretation
My educated guess is that in 1965 – not to mention today – almost every engineer would have preferred not to model unbounded-memory computations when perusing the computational limits of programming technology. The engineer would explain that, in the interest of finding a useful “limit on technology,” s/he would preferably resort to finite state machines instead of computable partial functions. However, even then the model fidelity is far from perfect; a computer is not a finite state machine, it can only be modeled as such.
What about programming language experts in the 1960s and 1970s who, due to their very research agenda, were abstracting away from their computing machinery? On the one hand, some programming language experts (such as Edsger W. Dijkstra) insisted on using finite state machines in their mathematical work [18, Ch.6]. On the other hand, and as discussed above, mathematicians such as Strachey preferred using computable partial functions. (Although the reader should keep in mind that the italicized adjectives in the previous sentence are of my choosing and that Strachey’s 1965 letter is solely about “functions.”) All this begs the following questions pertaining to Strachey:
Why did Strachey rely on infinite memory in his analysis of computation? (Similarly, why did Cohen and Filiol do so as well in the context of modeling computer viruses? – See Section 2.) Why did Strachey present his alleged proof in the first place?
With regard to the first question: the short answer is that it allowed Strachey, in his programming language research in the 1960s, to proceed from the simplest mathematical case (infinite memory) to the more complex (man-made constraints) of intrinsically finite artefacts – paraphrasing J.W. Waite, Jr [18, p. 216]. A longer answer, also in connection with Dijkstra’s views, appears in Chapter 6 of Turing Tales [18]. Concerning the second question, the only justification I can find is intellectual pleasantry and based on Strachey’s personal writings I don’t think he would disagree with me either.
In sum, Strachey’s 1965 letter needs drastic re-writing before it can be disseminated “as a proof” to fellow computer scientists today. As a university lecturer, I have been asked to teach Strachey’s proof – and, likewise, to defend Hopcroft et al.’s faulty reasoning (presented in Appendix A) – “as such” to Master’s students; that is, to fuse real systems and models of computation. Or, to use the words of one of Strachey’s readers in 1965: … for determining whether or not a program gets into a closed loop is something programmers are doing every day. It would be very odd if some of the tests and intuition they use in doing this could not be turned into worthwhile compiler diagnostics. Writers of these in the world of practical application should not let Strachey’s formidable piece of generality frighten them off! – P.J.H. King
Footnotes
Acknowledgements
Thanks to Erhard Schüttpelz and Michiel Van Oudheusden for commenting on multiple drafts of the present paper. Gratitude to Simone Martini and Liesbeth De Mol for discussing Strachey’s Halting Problem with me for several months. I also received detailed and useful comments from two anonymous referees of the annual conference Computability in Europe (2018); one reviewer is the “anonymous critical reader” mentioned in Section 3.4. That person now turns out to be Simone Martini again. I have used his feedback extensively, especially at the beginning of Section 4. I also thank three anonymous referees of the present journal, Computability, for providing encouraging and extensive feedback in 2019. Three insightful, technical comments in Section 3.1 come verbatim from the second referee. He also aptly pointed out, in a 2020 review, that the findings of Len Adleman [1] and the more recent work of Jean-Yves Marion [
] could be discussed in connection with my scrutiny of ‘modeling computer viruses.’ Finally, I praise Karine Chemla’s diligence as acting editor of this article.
Hopcroft,Motwani,and Ullman
Strachey’s 1965 proof is widespread in computer science today, as the following two sections pertaining to Hopcroft et al. illustrate.9
Extracted from my blog: www.dijkstrascry.com/HopcroftUllman.
Maurer
One lengthy response to Strachey’s 1965 letter came from Ward Douglas Maurer on 27 August 1965, presented below. Maurer demonstrated a common line of reasoning in engineering which is based on a finite abstraction, not an infinite abstraction, of computer memory. Maurer observed that with his approach Strachey’s diagonal argument fails. Sir, I have just come across Strachey’s letter (The Computer Journal, Jan. 1965, reprinted in Computing Reviews, July 1965) on the impossibility of writing a program which “can examine any other program and tell, in every case, whether it will terminate or get into a closed loop when it is run.” The letter was of particular interest to me because I had, several months ago, proved that it is indeed possible to write such a program, at least in the case of finite memory. It may be of interest to compare my approach with Strachey’s (and Prof. Turing’s) to observe why the results are not in fact contradictory. A computer with finite memory has a finite number of states A program is now a particular state S of the computer. (A program may, of course, be represented by various states S, each of which has the same values in that subset of M in which the program is stored; but this point is not essential to the argument.) To determine whether the program S terminates, one simply calculates It is interesting to note that Strachey’s disproof does not seem to involve memory; it is applicable to programs running in finite memory, and itself uses a finite procedure which does not use recursion or pushdown storage. The difficulty seems to be that what was actually proved above is the following: Given any program in a finite memory M, there exists a program in a finite memory Sincerely yours, W.D. Maurer
Notes
“I am delighted to find that some useful theorems are at last emerging in the field on programming language theory.”
– Christopher Strachey in 1971
“We are captured by a historic tradition that sees programs as mathematical functions and programming as the central practice for translating these functions into working systems.”
– Peter J. Denning in 2004
