Topics in Programming Languages, a Philosophical Analysis Through the Case of Prolog
Total Page:16
File Type:pdf, Size:1020Kb
i Topics in Programming Languages, a Philosophical Analysis through the case of Prolog Luís Homem Universidad de Salamanca Facultad de Filosofia A thesis submitted for the degree of Doctor en Lógica y Filosofía de la Ciencia Salamanca 2018 ii This thesis is dedicated to family and friends iii Acknowledgements I am very grateful for having had the opportunity to attend classes with all the Epimenides Program Professors: Dr.o Alejandro Sobrino, Dr.o Alfredo Burrieza, Dr.o Ángel Nepomuceno, Dr.a Concepción Martínez, Dr.o Enrique Alonso, Dr.o Huberto Marraud, Dr.a María Manzano, Dr.o José Miguel Sagüillo, and Dr.o Juan Luis Barba. I would like to extend my sincere thanks and congratulations to the Academic Com- mission of the Program. A very special gratitude goes to Dr.a María Manzano-Arjona for her patience with the troubles of a candidate with- out a scholarship, or any funding for the work, and also to Dr.o Fer- nando Soler-Toscano, for his quick and sharp amendments, corrections and suggestions. Lastly, I cannot but offer my heartfelt thanks to all the members and collaborators of the Center for Philosophy of Sciences of the University of Lisbon (CFCUL), specially Dr.a Olga Pombo, who invited me to be an integrated member in 2011. iv Abstract Programming Languages seldom find proper anchorage in philosophy of logic, language and science. What is more, philosophy of language seems to be restricted to natural languages and linguistics, and even philosophy of logic is rarely framed into programming language topics. Natural languages history is intrinsically acoustics-to-visual, phonetics- to-writing, whereas computing programming languages, under man– machine interaction, aspire to visual-to-acoustics, writing-to-phonetics instead, namely through natural language processing. One such pro- gramming language as Prolog has the peculiar attribute of having been unfolded in the passage from grammar studies, linguistics and formal symbolic grammar studies to the very specific and incipient compu- tational enterprises of natural language processing and logic program- ming. Recounting Prolog’s philosophical, mechanical and algorithmic harbingers endorse us to the mechanical-computational background explored by Pascal, Leibniz, Boole, Jacquard, Babbage, Zuse, until reaching to the ACE (Alan Turing) and the EDVAC (von Neumann). Recursion theory and computability (Turing, Church, Gödel, Kleene), cryptography and information theory (Shannon), permit us to inter- pret ahead the evolving realm of programming languages. The line from λ-Calculus to Lisp, and from Lisp to the Algol-family program- ming languages, the procedural and declarative split with the C lan- guage and Prolog, and the ensuing syntax and semantic branching explosion are here investigated in relation with the original élan of both C and Prolog. Philosophy of mathematics different approaches – structuralist, formalist, logicist, intuitionist – are confronted with com- putability, and furthermore, logic programming and Prolog, studying v closely such authors as Frege, Gödel, and Wittgenstein. The logicist, first-order complete and atomist nature of logic programming, settled on Horn clauses with SLD-resolution, is subsequently examined. Like- wise, the path from linguistic semiotics and the linguistics turn from the Saussurian Course Générale to the Chomsky-Schützenberger hierarchy, with a clear glance towards automata and complexity theories, all in all with a common background on the ancient P¯an. ini grammar, drives the research far wider than the use of the Backus-Naur form in Saussurian semiotics and programming languages, yet forgotten about. It permits to describe Prolog as a typical by-pass product of computational logi- cism and linguistics structuralism, with the philosophical design of the Chomsky-Schützenberger hierarchy, specially apt to (strong) AI illu- sion, as seen by its input into the Fifth Generation Computer Systems (FGCS) in Japan. It also brings about how the syntax-structuralism and the phonological destitution in natural language processing his- tory (firsthand in automated theorem-proving, but also in statistical machine learning), and in logic programming and Prolog alike (through Q-Systems), are sign of a most general destitution of philosophy of mu- sic in western philosophy of language, reason enough to convoke the Medievalist Boethius, and the Contemporary provenience of the gen- erative theory of tonal music. The separate and individual treads of the different artificers of Prolog – Alain Colmeraueur’s work in the ma- chine translation prototype, Philippe Roussel’s work in SL-Resolution and in the Prolog manual, and Robert Kowalski’s work on the de- velopment of the Turing-complete logic programming paradigm – are framed in the investigation, inasmuch as, more broadly, Kantian critic philosophy, with the aim of endowing a classical thoughtfulness to arti- ficiality, computing and informational philosophy, technology studies, and programming languages, with Prolog highlighted. Kant’s anti- nomies are forethought under the light of these premises, and infor- matic anew antinomies are interacted with the concept of virtuality in the computus era, by contrast with that of calculus. More narrowly, vi the Kantian doctrine of schemata is faced up against the core of pro- gramming languages theory through a topic that the author has, con- ventionally, named S-Mentalism, meaning the possibility of equaling computable functions with computer vision hierarchy and, inasmuch as the inversion of Kant’s account of schemata, the proper inversion of the von Neumann or Princeton computer architecture (image philosophy and ontological concepts, such as Bergson’s "La Pensée et le Mou- vant", "Matière et mémoire" and Deleuze’s "L’Image-Mouvement" and "L’Image-Temps" reveal themselves very fit to one such cogita- tion). With this is also brought in the encounter with the Euclidean parallel geometry, a long lasting tradition until Bolyai-Lobachevsky, mainly under the relaxation of the fifth parallel postulate, having had a determining fate in philosophy of physics (from Riemannn to Ein- stein). In like manner, diagonalization proofs from Cantor to Gödel (and the diagonalization process contained in computability and cryp- tography in informational communication) is shown to have enrolled the proper history of computation, with flagrant topological dimen- sions included. Logic programming and Prolog are, along this line, explored by calling upon the subject of the least possible constraint limits to logic and its inherent paradoxes, inevitably constituted also in programming languages topics and theory. vii Contents I Prolog, The Language of Mathematical and Dynamic Antinomies in Artificial Intelligence 1 1 Prolog and Logic Programming, a Declarative Language in Phi- losophy of Science, Essential Decomposed Fundamentals 2 1.1 Preliminary Historical & Philosophical Remarks . .6 1.1.1 The von Neumann Architecture, Artificial Neurons, and In- formation Theory . 19 1.1.2 Informatic Anew Antinomies . 77 1.1.3 Appendix on Virtuality . 105 2 Natural Language Processing in Prolog 113 2.1 W-grammars and Q-systems in Natural Language Processing . 113 2.1.1 The Chomsky-Schützenberger Hierarchy . 116 2.1.1.1 From Saussure’s Linguistics to the Algebraic The- ory of Context-Free Languages . 123 2.1.1.2 Musical Interlude . 129 2.1.1.3 The Chomsky Hierarchy in Boethius’ Triptych . 136 II Core Prolog 142 2.2 Essentials . 143 2.3 Past Convergent Fragments of λ-Calculus, Lisp, and Algol 60-68, and ahead divergent fragments of C/C++, Java, and Python . 202 Bibliography 224 viii List of Figures 1.1 Interpretation of multiplication. (Shannon’s "Figure 3") . 29 1.2 The Parallells Vth Euclidean Postulate (and Paradox). 72 1.3 Computational Complexity Classes . 76 2.1 The Chomsky Hierarchy . 116 2.2 The Chomsky hierarchy contained in Boethius’ triptych . 137 ix Part I Prolog, The Language of Mathematical and Dynamic Antinomies in Artificial Intelligence 1 Chapter 1 Prolog and Logic Programming, a Declarative Language in Philosophy of Science, Essential Decomposed Fundamentals Prolog is a computational and logical programming language created in the Fall of 1972 (after a first preliminary version in late 1971), the name stands for Programming in Logic (in French Programmation en Logique) [78, 276, 223, 224, 125, 120]. A definitive version of Prolog was finally completed in 1973, and although the syn- tax retained the form of the preliminary version, it can be correctly said that its constitution has been the harbinger and prior direct (logical and computational) correspondent of all current Prolog(s). In this statement we are portraying, thus, the Prolog version of 1973 as having been the first in a direct line to the first ISO standardized Prolog (1995) and all its due natural corrigenda, considered in the time span the Warren Abstract Machine (WAM) (1983) as the de facto standard for all Prolog compilers/interpreters [78, 79, 321, 65]. The names involved in the core conception of the programming language Prolog are, above all, those of Alain Colmerauer, Philippe Roussel and Robert Kowalski, even if the foundational and philosophical articulation of a "Machine-Oriented Logic Based on the Resolution Principle" [316] (1965) belonged to J.L. Robinson. We can not neglect the various subsumed and hidden intellectual achievements without which Prolog could not have ever taken its form, such as the DPLL Algo- 2 rithm by Martin Davis, Hilary Putnam, George Logemann and Donald Loveland (1962), the (Alfred) Horn clauses