>> Jeannette Wing: So it's my great pleasure to introduce to you Moshe Vardi. I'm going to read his short biographical sketch. He is the George Distinguished Service professor in Computational Engineering and the director of the Ken Kennedy Institute for Information Technology at Rice University. He is the co-recipient of three IBM Outstanding Innovation Awards, the ACM SIGACT Godel Prize, the ACM Kanellakis Award, the ACM SIGMOD Codd Award, the Blaise Pascal Medal, the IEEE Computer Society Good Award, the EATCS Distinguished Achievement Award, and the Southeastern University's Research Association's Distinguished Scientist Award. He is the author and co-author of over 400 papers as well as 2 books reasoning about knowledge and finite model theory and its applications. He is a fellow of ACM, AAAI, AAAS and IEEE. He is a member of the US National Academy of Engineering, the American Academy of Arts and Sciences, the European Academy of Science and Academia Europea. He holds honorary doctorates from the Saarland University in Germany and Orleans in France. And, as everyone knows he is the editor in chief of the CACM. So first of all I want to say that he is obviously a very distinguished scholar and academic and so on. But even with all of these service activities, what is impresses me so much about Moshe, he is still so active in his research. I am so envious of this because, for instance, I was on the LIX Program Committee this year and I saw all these submissions by Moshe Vardi. And these are deep papers. And then, when I was preparing my [inaudible] keynote I actually had to cite so many of Moshe's recent papers because of his continued contributions to logic and semantics of programming languages. So I'm really impressed by Moshe on his ability to keep up with research despite these enormous service contributions to the field. And then, I just want to emphasize he has a little blurb he is the editor and chief of CACM. I think that the young people in the audience have no idea of what that really means. Because even before I was a graduate student, CACM was the premier journal in ACM. Everyone -- I mean all of the really famous seminal papers were published CACM. And then, there was this period of time [Laughter]... >> Moshe Vardi: The dark ages. >> Jeannette Wing: I think it was the Lipton [inaudible] paper actually that started it. [Laughter] People actually stopped their membership to ACM because they thought, "Why get CACM?" It wasn't worth reading. And Moshe -- I really attribute -- singlehandedly turned that journal around, turned the prestige of CACM around so now everyone looks forward to their monthly issue of CACM. So we really owe Moshe that. [Applause] But today he is going to talk to us about logic. >> Moshe Vardi: Thank you for this almost embarrassing introduction. [Audience laughter] It reminds of a story about [inaudible] who submitted a paper and each one has a footnote next to his name. The first one wrote the footnote, "ATT Fellow." There was a fellowship from ATT. And the second had a footnote that said, "Hertz Fellow," because he has a Hertz Fellowship. And the third one wrote, "A jolly good fellow." [Audience laughter] >> Jeannette Wing: I'll have to remember that for next time. >> Moshe Vardi: And Moshe Vardi single-handedly together with about 100 other people revamped CACM and one of them was Jeannette, of course. So I want to talk about the logic revolution, the logical revolution. And I'll try to maybe summarize this first on one slide. Okay? During the past fifty years there has been extensive, continuous and growing interaction between logic and computer science. In many respects, logic provides computer science with both a unifying foundational framework and a tool for modeling computational systems. In fact, logic has been called "the calculus of computer science." The argument is that logic plays a fundamental role in computer science, similar to that played by calculus in the physical sciences and traditional engineering disciplines. Indeed, logic plays an important role in the area of computer science as disparate as machine architecture, computer-aided design, programming languages, databases, AI, algorithms and computability and complexity. This is really the summary of [inaudible] say in the next hour. This is in fact somewhat surprising, that there would be such a connection. Why should there be a connection between an obscure, old intellectual discipline going back 2,500 years and a very young intellectual discipline? Martin Davis in a 1988 paper where he wrote about this subject wrote, "When I was a student, even the topologists regarded mathematical logicians as living in outer space. Today the connections between logic and computers are a matter of engineering practice at every level of computer organization." And this was in 1988. And partly what I would try to answer in this talk is why on earth have these connections been successful? But partly we'll have to go back to explain where logic comes from and where modern logic, or mathematical logic comes from. And in some sense you can say that this goes back to the late nineteenth century when people started to try to formally reflect on the methodology of the sciences. And so you can think, "Okay, what is the basic method? What is physical science?" I mean, life science is only now in some sense trying to reach the same level of maturity going beyond just the lab. But in the physical sciences we have a very clear model: you build a mathematical model of reality. You analyze that mathematical model. You end up with some predictions of how the world ought to behave and then, you contrast it with the physical reality. And of course this is a bit of a caricature. Reality doesn't happen so neatly but that's the essence of it. And this raises the question, what is a mathematical model? And so this question which is mathematics starting to reflect on itself is really something that only started to happen late in the nineteenth century. People started trying to take the tools of mathematics and point them at mathematics itself. Self-reflection. And probably you can attribute it to the first important step in this direction, Frederick Ludwig Gottlob Frege published in 1879. It's a small book called "Begriffsschrift" which his a language or a script for concept, language for concept. And he is asking, "What is the language of mathematics?" And, he is trying to found mathematics on the basis of logic. This has become known as logicism. And the logic that emerges from this -- And I say "emerges" because this concept was not clear at the time; it took maybe 50 years before this became clear. But essentially you can say that as a logic, he developed first-order logic. And by that it means that he realized that every mathematical discourse is about basic objects, maybe numbers; predicates and operations on them, relations between them, maybe less than; and operations such as plus; Boolean operations where studied earlier studied by Boole: "and," "or," "implies;" and quantifiers introduced, I think, by [inaudible] again a few years earlier "for all" there "exists." So this is the basic element of every mathematical language so to speak. And we can go back and say Aristotle in the syllogism, "All men are mortal," we can be more precise and say, "For all x, if x is a man, then x is mortal." And now we have -- This doesn't have a pointer. Now we use a logical language. We use the inverted A to say "for all," so this says, "For all x." Man of x means x is a man. Arrow means imply. And mortal of x means x is mortal. So now we have a language; we can formalize all the syllogisms. But more importantly what comes out of it is that we also get -- And this takes a while before this happens; it happened in the twentieth century -- we get the definition of what is a mathematical model, what is a mathematical structure. And so at that point there are many, many mathematical structures. There are graphs, partial orders, groups, rings, fields, metric spaces, what have you. But the observation is they all have the same format, they all look the same; they have some domain, a collection of relations over these domains -And relation is a set of tuples with similarity -- and a set of functions over these domains. Okay? This is a mathematical model: domain, relations and functions. Okay? And for example, what is a graph? A graph is a set of nodes and a set of edges. And so the nodes are the domain. The edges of a graph, this is a binary relation. And now we can take the language of first-order logic and we can talk about graphs. We can say for all x there exists y such as out of x, y. This says that every node has an outgoing edge. So now we have a language to talk about graphs. Or if you want to talk about groups: groups who have a set of elements and one binary operation, the product operation. And we can say for all x and y, and there exists y such that x, y equals y times x. So this is a commutative group. So now we take the standard definition of one hand a mathematical structure and a standard language over the structure and we can describe mathematical properties of structures. So I will focus mostly on graphs kind of as the running example. Let's dig a little deeper: what happens when you have first-order logic on graphs? Your variable range is over nodes. And the atomic formulas are either saying there is an edge from x to y or x equality of x to y. And now you compose sentences using atomic formulas, using Boolean connective and quantifiers. And I'll show two examples. I want to say the node x has at least two distinct neighbors, so I will say, "There exists y and z such that node y equals z." So y and z must be distinct. And E of x, y means there's an edge from x to y and E of x, z, there's an edge from x to z. So x has two distinct neighbors. Now in this one I'm talking about some x. And we say is x is free in this formula; I haven't told you who that x is. It's just at this point a generic variable. Now I want to say every node or each node has at least two distinct neighbors. Now I will say for all x there exists y and z such that y is distinct from z and our edges are from x to y and x to z. Now the second one does not have any free variable. We call it a sentence and either it's true in the graph or not true in the graph. Either it's true in this graph, every node has two distinct neighbors or not. And we write it with this [inaudible] style; we said G satisfies phi. The graph has this property. This is a property of graphs. And the first sentence is a property of a particular element x and we have not yet said what x is. Now in 1902, Frege received a letter from Bertrand Russell, a young philosopher from the UK. And the letter starts very, very nicely. Frege reads the letter and he's very pleased. Russell writes, "I find myself in agreement with you in all essentials ... I find in your work discussions, distinctions, and definitions that one seeks in vain in the work of other logicians ...There is just one point where I have encountered a difficulty." [Audience laughter] Okay? This minor difficulty was so severe that when Frege's next book came out in 1903 in the appendix he adds, "There is nothing worse that can happen to a scientist than to have the foundation collapse just as the work is finished. I've been placed in this position by a letter from Mr. Bertrand Russell." So this of course became famous as Russell's paradox. And essentially what Russell found was a contradiction in Frege's book. So Frege had a beautiful system and only a little problem; it was inconsistent. So that led to the so-called foundational crash in mathematics. People dug, in that period, into the foundation of mathematics only to discover the foundations are in contradiction. So all of mathematics was a beautiful edifice but it stands on chicken feet. Into this crisis steps David Hilbert who is the foremost mathematician around the turn of the century, and he wants to fix this problem. He wants to solve the problem once and for all, and he wants to do it by formalizing mathematics and proving that it is consistent. Consistent means there is no contradiction; you cannot prove a statement and its negation. It is complete; you can answer all mathematical questions mathematically. And even more -- And this is, some say, the beginning of computer science -- it is decidable. You can do this mechanically. There is a decision procedure for every mathematical statement telling you whether it is true or false. Very, very ambition. In fact, it was so ambitious, it was doomed. [Audience laughter] And it was doomed fairly fast. It didn't take very long. [Audience laughter] It was starting in the 1920's and by the 30's it's all crashed. It's crashed by one hand Godel. The first two decisive blows are by Godel who proved that mathematics is incomplete, you cannot answer all mathematical questions mathematically, and you cannot even prove the consistency of mathematics mathematically. And this of course the Godelian sentence saying, "I am not provable." And this leads you to: if you assume it's provable, you run into a contradiction and its negation is not provable either. And then, a few years later using again the Godelian technique, self-referential technique, Church and Turing proved that first-order logic is undecidable. You cannot decide the truth of mathematical statements algorithmically. The first result of computer science is a negative result. And this problem, the so-called Decision Problem, was floating around for years but was posed in a very sharp way by Hilbert and Ackermann in 1928 book which the first book on mathematical logic, modern book on mathematical logic. And they called it Entscheidungsproblem, ladies and gentlemen, The Decision Problem. And independently Church and Turing -- Church a little bit before Turing but independently -- proved it's unsolvable. And of course Turning, we know now after last year was Turing's centennial, he defined Turing machines to define what is going to be computable and again, using diagonalization proved that termination is undecidable. So again, you construct a machine that terminates if and only if it doesn't terminate and then, you reduce it to the decision problem. That means if you look at where logic stood in 1936 in some sense you can say, "This is the foundation of mathematics." It's incomplete. It cannot prove its own consistency. It has unsolvable decision problem. The most fundamental computational model is itself already undecidable. What happened? We have a bunch of negative results. So there is some attempt to say, "Can we still get something?" as mathematicians do if the general problem is hard. "Let's specialize. Let's look at special cases." So there was some attempt to look at special cases. And one project was the Classification Project. Yuri was involved in that. I'm going to simplify, not give you all the gory details. But, it was a long project; it almost took 70 years from the beginning to the end, roughly from 1915 to 1983. That's a long time. And essentially then we found there is some small number of classes that are decidable. So let me jump ahead a little bit: the Monadic Class. What is the Monadic Class? It's first-order logic but your predicates, your relations are monadic; they are one place. No binary predicates. Now today this looks like a very, very weak logic, but all the syllogisms are all about mortal, Greek; they're all monadic predicates. So Monadic you can say something such as if for all xP of x and if all xP of x implies Q of x then it must follow that for all x Q of x. And in 1915, Leopold Lowenheim proved that this is decidable, and the techniques that he used are very important techniques. One is called the bounded-model property. It proved that if a sentence is satisfiable, has a model, the model cannot be too large relative to the sentence. So if you're given a sentence and you know its length, you can enumerate all models of that size and check whether it's a model [inaudible] this size. And you prove the bounded-model property by quantifier elimination. The thing that makes first-order logic expressive is the quantifiers; if you get rid of them, you're basically back to propropositional logic. So this is one class, Monadic logic. It's a fairly weak class. The other classes are socalled Prefix Classes. It depends on the [inaudible] of the quantifier. So the BernaysSchonfinkel Class is a bunch of "exists" followed by strings of "for all's." And Ackermann means that you can have alternation but you can only have one universal quantifier there. And Godel says you can have two universal quantifiers but then you do not have equality because just adding equality already makes it undecidable. So these are all actually very, very weak classes. There are very, very few applications where you can do something using these fragments. Very, very few. They're just generally simply too weak. So you can say instead, "Well, maybe this is too generic." Yes? You had a question? >>: The positional set is a subset. >> Moshe Vardi: We will get to positional set. Okay? Hold your thought. So one idea was, "Let's look at -- instead of being so generic just look at quantifiers and syntax, let's try to look at some semantics, some semantical domain. How about integer addition? What can be a simpler theory than integer addition where you have the natural numbers, you have equality and you have, let's say, one operation, the plus." So you can go ahead with this and you can start defining multiplication by constant. To say that y equals 2x, you write y equals x plus x. You can say that x is zero and because x is zero it means that means for all y either y equals x or y is greater than x. [inaudible] x is zero. And you can say that x is greater than y because there is some element z that is not zero and y equals y plus z. And so on and so forth. And then, essentially you discover quickly you can define integer programming and more. So this is clearly a non-trivial theory. You can definitely see important things in this theory. So in 1929, Mojzesz Presburger -- Mojzesz is Moshe so this is my namesake -- he axiomatized integer addition, sound and complete axiomatization, and he proved that this is a decidable theory. Okay? And he proves it essentially again by quantifier elimination. If you eliminate quantifiers, you end up with essentially, again, integer addition plus congruences, arithmetical congruences. And he showed this is decidable. Today we have also automata-theoretic techniques which perhaps are simpler to prove than decidability. So this is a beautiful result. Until we start looking at the complexity. Only in the 70's do we look to the complexity and we have a triply exponential upper bound and we have a doubly exponential lower bound. So after this result in 1974, Michael Rabin had a paper in IFIP. There used to be IFIP conferences. Some of you may remember, there used to be such conferences. So Michael Rabin has a paper "Theoretical Impediments to Artificial Intelligence." And he says, "The complexity results point to a need for a careful examination of the goals and methods in AI." This is a very polite way of telling AI, "Get the hell out of here." [Audience laughter] It will never happen. Even something as simple as reasoning about integer addition is completely unfeasible. That's essentially, when you read between the lines, what he's saying. "It's a pipe dream. It cannot happen." I want to talk about another positive result that people were able to get, another very nice positive result. This is reasoning about something very simple, about words. What can be simple reasoning about finite words? So let me remind you all on a little bit about automata theory. This is a very basic object that we get in any course on automata theory. You have the model of [inaudible], nondeterministic finite automata. And an automata is you have finite alphabet, a finite set of states, a set of initial states, and a nondeterministic transition function. So given a row takes you from S, a state in the letter, to a set of possible successful states. That's nondeterminism: a set of possible successful states. And a set of accepting states. And what you do is now you have a finite word. A automaton runs and running is just a sequence of states, and you start in some initial state. And each time you look at the [inaudible] function to give you a set of possible successful states. You just select one. And the important thing you do is you have to be smart about the selection so the final state has to be an accepting state. Okay? And here is a regular automaton. You can see here that when you enter on the left, and you can see the zero always will take you back to the left and one always takes you back to the right, and the red circle means you accept on the right. So you can see that you must accept on the right; therefore, the last letter must be one. So this is very simple. An automaton defines all the words that end with one. And as we know NFAs define the class of regular languages. It's very robust class, very rich theory, very nice behavior. So these are NFAs. Now in the late 50's people realized that a finite word is a mathematical structure; it's a particular type of mathematical structure. Okay, remember what is a mathematical structure? Domains, relations. Okay, what is the domain here? Well, the domain is a set of points. Right? It's an end position. Every position is an element of the domain. We'll use one predicate, binary predicate, dyadic predicate, to say which position comes to the left of which position. So it's a lessthan position. And we're using monadic predicates to tell you what letter is written in every position. So that means that you can now use first-order logic, even second-order logic, to talk about words by using atomic predicates and even -- I won't talk at length but you can use even set quantifiers to quantify over sets of positions. So let's look at this sentence. What does it say? It says there exists an x such as for all y, y not x less than y. So this says there exists an x that no y is bigger than x. That means x must be the last position. And P sub 1 of x. That means the last position is 1. So this is very similar to what I just said in this example. So we saw that the property of the last is 1, you can express it using an automaton or you express it using logic. And in 1957-8 three people independently -Buchi, Elgot in the United States, and Trakhtenbrot in the Soviet Union -- proved that these two languages have some expressive power. And they defined this class of regular languages in effect to give us the proof, to give us an effective translation in each direction. There is a little piece of history that I'm missing here. Buchi and Elgot brought one abstract followed by two different papers. So there must be something juicy here. But do you happen to know what happened there? >>: I don't know but I know Buchi, he was a very difficult man. [Audience laughter] >> Moshe Vardi: [Inaudible] abstract, they had to agree on so many words. After that they would not collaborate more. [Audience laughter] It must have been a hard collaboration. >>: Were they working on [inaudible]? >> Moshe Vardi: No, no. They announced this result in one abstract. So originally there was one abstract announced with these results. >>: Oh, I see. >> Moshe Vardi: And it used to be then in the notices, you publish abstracts to [inaudible] on the result. The paper would come later. This was like the conference that we do today. They would just publish an abstract to announce their result. Now this is of course a beautiful result on one hand, but it's a very useful result. What makes it useful? I want to talk about the so-called the non-emptiness problem. Given an automaton, does it accept any word? So given an NFA, is there any word accepted, is the language nonempty? So it's actually a very easy problem. Because if you think about it, it just means that there must be a way to go from an initial state to an accepting state. There must be some way to do that. So [inaudible] said, "Let's take the graph of the automaton to consist of all the nodes of the states. And there is an edge from S to T, it's possible to make a transition from S to T, any letter [inaudible]. So essentially it corresponds to going here, everything on the labels and you are left with a graph. And now it's actually an easy lemma. You can give it to any graduate student to prove that the automaton is not empty if and only if there is a path in the graph from initial to final state. And now clearly we can solve it by any kind of graph reachability algorithm. Easy problem. Now what's the analogous problem for logic? The analogous for logic is given a sentence, does t have a model? Is there any word that satisfies this sentence? Now this is a first-order sentence. A second-order sentence, it's not clear how you even approach it. How do you decide whether a given sentence is satisfiable? Well, the translations tells us very easily. It says that phi is satisfiable if and only the automaton is non-empty because the automaton and the sentence have the same set of models. And we know how to solve emptiness for automata. So we have an algorithm. Algorithm means first translate from logic to automata and then, run your graph reachability algorithm. Very simple algorithm. Except that when we go to the complexity analysis we discover that the translation which is a very simple translation is done by induction. And every step in induction may involve one exponential. But it's an induction. So you get a stack of exponentials whose height is itself linear. Now you could say, "Well, this is a simple algorithm. Just go back, think of a more clever algorithm." Right? There must be a better algorithm. Well, by 1974 we know that there isn't one because Larry Stockmeyer proved that even for first-order logic there is already no bounded-height tower of exponentials. Now in case you have never seen this tower of exponentials, let's do a recalculation here. Very quickly. [Audience laughter] Okay? 2 to the 2? 4, no problem. Okay. So far so good. 2 to the 2 to the 3? 256, manageable. 2 to the 2 to the 2 to the 4? Mmm, about 4 billion. Okay. That's not [inaudible] but still doable. 2 to the 2 to the 2 to the 2 to the 5 is roughly 10 to the billion. Okay? 10 to the billion is not an astronomical number. It's a cosmological number. [Audience laughter] It's more than if you take the whole known universe, like 40 billion years across, and you pack it with Planck's constants, which is 10 to the minus 35 meters. Pack it densely. You don't get that many things. So this is a very large number. Now somebody says, "Well, propositional logic is a special case of all this logic." So let's go back to propositional logic; let's go back to the middle of the nineteenth century. And we find George Boole who has a beautiful idea that you can go back to all the syllogisms and think of them in an algebraic fashion. So the nineteenth century is the century of algebra, everything became algebraic. And Boole realized that logic can be treated algebraically. And he writes, "If an adjective, as 'good,' is employed as a term of description, let us represent by a letter, as y, all things to which the description 'good' is applicable, i.e., 'all good things,' or the class of 'good things'. Let it further be agreed that by the combination x times y --" Here I'm using the algebraic convention that juxtaposition means multiplication -- "x times y shall be represented that class of things to which the name or description represented by x and y are simultaneously applicable. Thus, if x alone stands for 'white' things and y for 'sheep,' let xy stand for 'white sheep'." So Boole says conjunction is Boolean multiplication. So this is a big insight, to think of logic as an algebraic operation, in this case multiplication. And out of this we got what we call now SAT, Boolean satisfiability: given a Boolean expression using "and," "or," and "not," and you want to know, can you satisfy this? Is there an assignment of zeros and ones to the variables such that the whole expression gets the value one. So here is an expression. It's calling conjunction [inaudible]. It's a conjunction of this junction. And in this case there is indeed -- If you didn't solve it very quickly in your head, I'm going to tell you that this particular assignment will make it one. Now already in the nineteenth century realized that these are difficult problems to solve. So William Stanley Jevons, a British logician and economist, already wrote, "I have given much attention, therefore, to lessening both the manual and mental labor of the process --" The process is this kind of Boolean reasoning -- " and I shall describe several devices which may be adopted for saving trouble and risk of mistake." So he built the first logical computer. It has a nice shape of a piano, known as Logical Piano. Ernst Schroder who lives a little later wrote an amazing sentence, to me, "Getting a handle on the consequences of any premises, or at least the fastest method for obtaining these consequences, seems to me to be one of the noblest, if not the ultimate goal of mathematics and logic." Just to solve this logical reasoning problem. And there was a huge project in the Soviet Union in the 50's and early 60's described very nicely by [inaudible] in an article in the Annuals of the History of Computing to solve generally this class of search problems. This was the "Parabor" project. And it ended in the early 70's when Cook and Levin independently proved the Boolean Satisfiability is NPcomplete and, therefore, we don't think there is some clever way to somehow solve the problem. Yeah? >>: "Perebor," both a's should be e. >> Moshe Vardi: Both a's should be e. Okay. Thank you very much. Perebor. I always think, however, what does it mean when the language has such a short word for such hard work? [Audience laughter] What does it tell you about the language and about the culture? Thank you. So of course many of you here probably know that this gave us the class, the so-called phenomenon of NP-completeness. NP is a class of problems where we can check solutions quickly. We can check very quickly if a graph is has a HamiltonianCycle. If somebody gives us a [inaudible], I can check whether it visits every node exactly once. I can check if somebody gives me a factorization of a number. I can check it very quickly that it solves factorization by multiplying. But finding solutions is hard. And there are tens of thousands if not hundreds of thousands of problems that in NP where we can check solutions easily but finding solutions is hard. And NP-complete are the hardest problems in NP. And it means if you solve one NP-complete problem in polynomial, you can solve all of them in polynomial time. So this is an amazing phenomenon. And the focus has become one of the most outstanding problems in computer science. And one of the things, when we re-launched CACAM, I went to [inaudible] and I said, "Why don't you write a article on P versus NP." And he said, "What's there to write? All I can write is 'Still open.' Do you accept short articles?" I said, "Yes, but please elaborate." So he wrote an article about it and we realized that there was [inaudible] activity on the website. And the article, after it was in like three months, downloaded -- we had about fifty thousand downloads. And it was so interesting that this article on a completely theoretical subject, just saying the problem is still open, was getting so many downloads that we got an article in the New York Times just on the social phenomenon. There was nothing new to report. There was no scientific news. [Audience laughter] But we got a New York Times article. So Scott Aaronson [inaudible]; he writes beautifully. He wrote, "If P equal NP then the world would be a profoundly different place than we usually assume it to be. There would be no special value in 'creative leaps,' no fundamental gap between solving a problem and recognizing the solution once it is found. Everyone who could appreciate a symphony would be Mozart; everyone who could follow a step-by-step argument would be Gauss." So the common belief is a Boolean SAT cannot be solved in polynomial time. And then - In fact John gave a lead to it, logic became one of the first big projects in computer science. If you go and open [inaudible] the primary theoretical computer science conference during the 60's and 70's, and you will see that a major topic was how to prove correctness of programs. So this was a dream that was launched by Tony Hoare, one can say, in 1969 when he wrote, "When the correctness of a program, its compiler, and the hardware of the computer have all been established with a mathematical certainty, it will be possible to place great reliance on the results of the program." And as I said, this was a huge thrust of theoretic computer science. And then, in 1979 we had an article in CACM b De Millo, Lipton and Perlis and they wrote, "We believe that ... program verification is bound to fail. We cannot see how it's going to be able to affect anyone's confidence about programs." Very unambiguous language. And their argument was that the acceptance of a mathematical proof is a social process; people read the proof, they are convinced, they tell their friends, they discuss it and [inaudible] there is a process. And they argue that a computer proof will never go through the social process so the proofs are useless. That's their argument in a nutshell. So this is roughly, if you look at logic where it stood in 1980. 1980 is an important year because I became a PhD student. So here is where logic is: it is undecidable. The decidable fragments are too weak or too intractable. Even Boolean logic is already beyond our ability to do anything. Program verification is hopeless. So what can you say about it? Not a very promising career so to speak if you are going to focus on logic in computer science. Hmm? >>: [inaudible] at that point. >> Moshe Vardi: Just the naivety of youth, right? What can I say? And what I want to show you... >>: [inaudible] [Audience laughter] >> Moshe Vardi: What I want to show you in the rest of the talk is how things have changed. This is what I call the logical revolution. And I will try to talk about the successes. And of course this is just a sample. I'm sure I'm missing a lot so I'm probably missing things that are people who are right here in the room, so please bear with me. It's just a small sample that we can cover in 20 minutes to give you a sense of how things have changed. And I'll actually talk about databases, relational databases, Boolean reasoning, model checking and termination checking. And I swear that I prepared this talk even before I was invited here, so I will talk about Microsoft Research but it's not because I'm trying to suck up here. [Audience laughter] This talk, I prepared it before. >>: Fuzzy logic. >> Moshe Vardi: Hmm? >>: Fuzzy logic. >>: Fuzzy. >> Moshe Vardi: Fuzzy logic. I will not talk about fuzzy logic. So in essence putting 1980 as a pivotal year is a simplification because, I think, theory started turning already in the 70's. I mean history is always messier. And to me the first turning point was the relational databases, and this is where we went from model theory to relational theory. And so in classical mathematical logic a sentence is a sentence. It has no free variable. It is true or false on a graph and, therefore, it describes a set of models, the set of models of this graph or all the graph that satisfies this sentence. So model theory is the theory that talks about classes of structures described by logical sentences. That's what model theory is. Now model theory is interested, again, in the structure described by sentences. Formulas are a bit of a nuisance because they have free variables, so I'm not talking about anything specific. You have not yet told us what they're talking about. But Ted Codd realized -- In fact if you look at some textbooks in logic you realize that formulas are this nuisance. You have to go on the weight of the real thing which is sentences which have no free variables. When I was taught logic formulas were just necessary building blocks. But Ted Codd in 1970 or 71 maybe for this realizes that formulas are important because formulas define queries. Okay? So if we go back to this sentence, to this formula where x was free, "There exists y and z such that they are distinct and x has two distinct neighbors," you can think of it as a query. "Give me all the nodes that have two distinct neighbors." So for every formula I can now think of a formula as k free variables, and I can apply to a graph and say, "Give me all the bindings for the variables that will make the formula true." So you need the concept of binding of free variables. And this gives rise to relational databases in SQL. SQL by now is an over 30 billion-dollar industry. Microsoft has significant presence there. And this was actually one of the fastest turnarounds between paper and [inaudible]. I think you'll see [inaudible] before Cook, for example. [inaudible] for NP-completeness. Yeah? >>: So relational algebra was discovered by Tarski. >> Moshe Vardi: Right. Right. >>: [Inaudible] >> Moshe Vardi: Right. Right. Codd knew nothing about. >>: So the real significance of Codd is the application to databases. >> Moshe Vardi: Right. Right. You can say he has done nothing of importance. [Audience laughter] No, there were actually many people when they read his first paper, the conceptual paper, looked at this and said, "What is this? This is total --" There were people really who just completely dismissed the CCM paper. And there were many people who read the paper and said, "There's --" Content free. People described the first paper really as content-free. It's amazing. So Codd had really two important ideas. One is -- And again, [inaudible] trivial observations. One is that tables are relations. I don't exactly when people started using tables as a way to describe data, and Codd realized that this corresponded to the mathematical concept of relation. And of course any mathematician would say, "Of course," but Codd was the one who did it. And the second one is that formulas are queries. There was another thing that he argued, that by using algebraic treatment, you can compile them into algebraic expressions. And again he really invented essentially [inaudible] algebra. Yeah? >>: One important thing was that he concentrated on finite structures. >> Moshe Vardi: Right. I'll mention this in a minute. Thank you. Good point. Anyway, it was a project that started [inaudible] at IBM, San Jose and Berkeley and Oracle was the company to come ahead and kind of run around everybody. In fact the company was just called Relational Software and later renamed themselves after the database. And then, actually that first IBM development unit didn't want to do this. They had another project. But Oracle essentially forced their hand to get into this business. And so really the insight was -- People say, "Wait a minute. You just told us that firstorder logic is undecidable." But there are really two distinct problems. One is the truthevaluation problem. I give you a formula and a graph and a binding, tell me if the formula is now true. And the graph is finite, of course. The other one is given a formula, is there a graph and a binding satisfied? And satisfiability is undecidable but checking the formula is just one big nested loop. Go over all x, go over all y, try all assignments and see if it's true or not. I mean this is not very efficient but in principle its query is decidable. So this distinction is very, very important, between satisfiability and evaluating truth in a given finite structure. Now I talked about SAT and people started dealing with SAT almost for the very, very early computers, already Newell, Shaw and Simon in 1955 built a tool called "Logic Theorist" and they were able to prove all the theorems about propositional logic [inaudible]. And they were very proud. They wrote a letter to Russell telling him, "We're able to prove mechanically all of your theorems." And then, who started the study of SAT? Of course NSA. This was recently disclosed by Snowden, of course. [Audience laughter] So the first modern work on SAT is Davis and Putnam in an unpublished technical report of the NSA. And there was a sequence of papers. By the early 60's there was a standard method; it's called DPLL which is basically you convert a formula to conjunctive normal form and you do backtracking search. And there is only really essentially one heuristic if you have a unit-clause, if you have a conjunction just at P or not P then use it. Give it preference to anything that has non-ambiguity; use it as soon as possible. And there was a small community who has been working on it for many, many years making very, very, very small progress between the 60's and almost for thirty years; I would say very minimal progress has been made on it. However, from the roughly mid90's we had really essentially a revolution. And today there is this new body of techniques all based on DPLL but there was a bunch of heuristics called CDCL, conflictdriven clause learning, many more heuristics. Backjumping that is done just to backtrack and go one level at a time but go back fast of you can go back faster. Be smart about how you manage these unit-clause preferences. The small data structures whenever a branch of the search fails, draw a conclusion from your failure. Make sure you don't repeat the same failure again by learning new clauses. Be smart about how you branch. So it turns out this is a very important principle in computer science: is it better to be smart or fast? Because to be smart costs time and very often the answer is, "Don't be too smart. Don't be too smart for your own good but be very fast." And the heuristics today make a very careful balance in between being smart and being fast. And restart, that is if you're not going anywhere after a while, just give up. Go back to the beginning, re-randomize and restart, a whole bunch of heuristics. Two very important tools in the mid-90's: GRASP from Michigan and Chaff from Princeton in 2001. And today we solve problems with millions of variables. I mean to me this is just -- You know when I was a graduate student NP-complete was -- stay away from it. Even looking at the problem was dangerous. [Audience laughter] And today we solve problems with millions of variables. This is just, to me, a stunning development. Now here is a slide that was developed by Sanjit Seshia from Berkeley. And what he did, he took a bunch of tools and ran them. And now here's a more recent one. This was in 2007. He ran it on a 2007 machine. So this is only on the same machine, same benchmark. Same machine. Just the tools between 2000 and 2007. And you can see how we have [inaudible] orders of magnitude improvement over less than 10 years. This has become known as Moore's Law for such solvers. An amazing phenomenon. >>: Can I ask a quick question? >> Moshe Vardi: Yes. >>: So for historical reasons we've concentrated on SAT. >> Moshe Vardi: Right. >>: And there was this wonderful progress. >> Moshe Vardi: Yeah. >>: Now we have concentrated on something else, for example, integer programming. And then, it was would be a triumph not of logic but of arithmetic. >> Moshe Vardi: Well, you know, history is [inaudible]. But look, there, it's not so clear. I mean there are areas where we have concentrated on that people have worked for a long time, you know, really [inaudible] which is logic. But people have worked on it for a long time and progress is slow. QBF is -- I mean there are some successes -- I mean I'm trying to focus on the successes. There are many bodies along the way. Yeah? >>: But arguably integer programming model could have worked even better. >> Moshe Vardi: So actually there have been some attempts. In fact some of us have tried. I tried at some point to say that because next to me there are people who develop - just down the hall -- people who developed CPLEX. And they said, "Oh, integer programming. Integer programming." And so actually there's something back to the simplicity of SAT. It is so simple and it makes it easier to experiment and develop simple data structures. The turning around of heuristics and trying -- What we have now is just amazing switchboards of kind of cloudsoucing for heuristics and finding which one works. And is it just historical coincidence or is there something deeper? [Inaudible] was once asked about the French revolution, "What do you think about the French Revolution?" He said, "Too early to tell." [Audience laughter] So maybe you're right but, you know, come back with these questions in 50 years and discuss it. And the nice thing about SAT is over the last few years -- and much of this work has been done here -- it's not just a purely logical question, I think what's really -- I love the work being done here -- is how people have found so many different applications for this in the real live software engineering. So this has become, it's not just a theoretical work anymore; it's really become part of software engineering. And finally I'll give one example which is related to the issue of -- we talked about MSO. I'll talk about this. And this is again reasoning about program but in particular in the mid70's Pnueli realizes that there are many, many classes of programs. In fact even by the 70's most programs are not programs; they just have input and output. But, you know, what is the output of this machine? Everything is about interaction. So what Pneuli realizes in the mid-70's is you must reason about interaction and not about input and output. And he did logic for interaction. So he was hunting around and found a philosophical logic called temporal logic, and for which he received for this a Turing Award, which was just the right logic for talking about interaction. So he proposed temporal logic to talk about ongoing behavior. And he even in the first paper he already says, "It's decidable. You can reduce it to [inaudible] second-order logic. No problem." It's nonelementary. He was really not too concerned about it fortunately for us. Okay? And fortunately the [inaudible] committee did not reject the paper because it's nonelementary. And so I'll just give you some examples, just the flavor of temporal logic. This is not a talk about temporal logic, but you can say things such as mutual exclusion, always not, CS1 and CS2, process 1 in a critical section, process 2 in a critical section. Always request implies eventually grant. Always request implies the request must stay on until the grant is given. And all kind of very, very useful properties when you want to reason about ongoing behavior of programs. And again Pneuli was more interested in the mathematical theory and the logic of systems. But a few years later people started thinking, can we do this algorithmically? And there were two important papers about algorithmic verification by Clarke and Emerson and Queille and Sifakis. And they talk about the somewhat related logic called CTL. And they proved that whose state space is m, and you have a formula of size n, you can do the check in time m times n. Now there was some of a dispute between the CTL people and the LTL people. So Pneuli replied a couple of years later with his student, "Okay, if you use LTL -- even though originally I told you, you can do it in nonelementatry time by reduction to MSO -- there is another way to do it and now we only pay an exponential price in the formula." So it's linear in the size of the program and exponential in the formula, but now you cannot use automata. Now you have to use a set of heuristics called tableaux which I won't get into. But if you use this heuristic then you can do it in exponential time inside of nonelementary time which is, of course, a huge improvement. But it almost seems like if you want to use automata, you are doomed to have to do it in nonelementary. But it turns out that you can use automata. And the idea is, don't go to MSO. Okay? So Pierre Wolper and I looked at it in the early 80's, and we realized that if you focused on translating LTL formulas to automata but don't translate to MSO -- Find a direct translation -- then there is a direct translation which is exponential. So going from LTL to automata can be done in exponential blow up. And this is what I call the Exponential Computation Theorem. This is enough to give you really all the results that you want to have LTL satisfiability, satisfiability for [inaudible] in PSPACE. It follows from this that LTL model-checking is in exponential time. It follows from this. And today it is wide-spread industrial usage, not so much in using LTL itself but in using industrial languages such as PSL, property specification language, and SVA which is system variable assertions; these are all industrial standards that have been derived from LTL and the implementation is based on using this automata theoretic approach. And we can even go back to the very beginning. Remember, we started almost at the second big news which was Church and Turing, "First-order logic is undecidable because termination is undecidable." And then, in 2011 Cook, Podelski and Rybalchenko -- Byron Cook from Microsoft Cambridge -- wrote, "In contrast to popular belief, proving termination is not always impossible." This is, I guess, a British way of saying this. [Audience laughter] "Always impossible." Or maybe diagonalization. The reality is the terminator can prove termination or divergence of many, many Microsoft problems and many, many programs. Of course not all of them. The first question people ask, "Why don't you apply the terminator to itself?" And of course the answer in this case, it will not terminate." To me there is some very important insight here. Why is it that one hand we can prove the problem is unsolvable, undecidable, but in practice it doesn't seem to hard. And the reality is if you ever wrote a program, and probably everybody here wrote a program, if you program terminates or didn't terminate did not depend on the [inaudible] hypothesis. If it terminated, it terminated for very simple reasons and if it did not terminate, it was also for very, very simple reasons. And [inaudible] -- I don't know how many of you are familiar with the 3x plus 1 function. Okay, if you take -- And then we don't whether they terminate or not. Right? But if you give it a terminator, it's not going to solve this problem. Most of the termination problems are very easy problems and the terminator solves them fairly easily. So this brings us to the end of the talk. I think what I wanted to show that logic around 1980 seems like a total failure to today; it's an area where there're many successes, many challenges and many areas we have not made enough progress but the thoughts are even more exciting in some sense. And there are some, I think, important differences as opposed to, I think, the early period: much more focus on algorithms, not just on reasoning but on mechanical reasoning, on algorithms; heuristics are incredibly important, we don't understand them so mathematicians hate them but the success of SAT is due to a bag of heuristics and nobody really fully understands why they are so successful but they are very successful; lots of experimentations, lots and lots of experimentation. I mean the way we discovered SAT is by just crowdsourcing the problem, running it [inaudible] many, many heuristics and looking at all these combinations, finding the switchboards. Lots of tools, lots of systems; and I think that even more fundamentally -- when I was a graduate student, worst-case complexity ruled the day. I mean we were taught, "Okay, if you prove that one algorithm is quadratic and one is linear or n log n, surely the n log n algorithm is better. Right?" Worst-case complexity. And today it's a much more complicated picture. All can say about worst-case complexity is it barks but it doesn't necessarily bite. And I'll stop here. [Applause] >> Jeannette Wing: Well, we have plenty of time for questions. Ken? >>: You had mentioned some other applications of logic and computer science but not logic and programming. So is that a success story a failure or is it even logic? >> Moshe Vardi: [Inaudible] [Audience laughter] So I would say that many years ago I had a project when I was a research manager and we had to review some project. The manager [inaudible], "What I'm hearing here is a lot of hope." And I said, "All of research is about hope." So the answer is that reality is most of what we're going to do in our life is going to be forgotten. Right? This is it. Most of research is failure. John Bakus wrote -I don't know if anybody saw -- a beautiful piece that says, "We don't publish the failures. We publish the successes. So people get a distorted picture about research. Most of research is failure." This is true everywhere. It's true here. It's for everybody who does research. Now along the way sometimes because we are human beings and we have to be funded there's a lot of hype that comes along the way. And some of it we discover later. It didn't pan out. There are many that actually don't pan out. So I think logic programming is a panacea. This is the way -- In fact anybody who promises you panacea, you should be skeptic by now. So logic programming as a panacea was a failure. Actually there is one area, to me, that has come out of it that [inaudible] and this is called logic answer set programming. And this is way to do solve optimization problems using a version of logic programming. You combine it with many of the heuristics today of SAT; actually you combine it with search engines. And you get actually a fairly nice language to describe optimization problems and use a solver underneath to find a solution. So I'm sure there are people in this area that can say more. You know, remember that "The fifth generation, Japan is going to rise. This country might as well retire because of logic programming." That didn't happen. Yeah? >>: I'll make a comment. So a few years ago I gave a somewhat similar talk at the University of Chicago about the importance of logic, that it was [inaudible]. But my stress was in a different place. It is that engineers right here at Microsoft badly need logic and don't know it. So they don't know how to explain themselves. You speak [inaudible] to explain something to him and he says, "You think that -- Oh, now I understand. You're saying that this language is a subset of that language" which can mean so many different things. They don't have the vocabulary to speak about things they badly need. So everybody writes languages of different kinds here and the logic in education is ubiquitous. So, for example, if they all started calculus, never use it; they never started logic and use it all the time. [Audience laughter] So that was my stress there that do teach logic. So this is [inaudible] concerning. As a logician I am happy to hear [inaudible] but a little skepticism. For example, [inaudible] solved a problem using logic and [inaudible]. And [inaudible]. Also Cook, I spoke of Cook, so he came from logic. He didn't just look at what happened and say [inaudible]. Now [inaudible] completely different [inaudible]. So the whole thing came from [inaudible] engineering but that's [inaudible]. [Inaudible] exhaustive search came. There's no way you can prove it. And so he found a way to -- Nobody could even formulate, "What does it mean?" [Inaudible]. And he found a way to formulate it. So in his eyes it was about engineering at that time. >> Moshe Vardi: So actually I read [inaudible]'s paper. Electrical engineering is a bit of a stretch. A beautiful paper. I mean he does Cook and [inaudible] in about three pages. It's pretty amazing. >>: Four pages. >> Moshe Vardi: So it's pretty amazing. But I wouldn't call it -- I mean it's not necessarily declarative logic but it's very much a Turing machine so it is definitely logic. Look! I mean as I said before along every research area there is some hype along the way. There have been many attempts in complexity theory to try to bring some other -- We are so stuck there. We think the latest thing, what's it going to be? The algebraic geometry will save. People always think, "If we just bring some other mathematical domain into this." So far we have been humbled every time. People thought it would be proof complexity, it would be [inaudible] complexity, [inaudible] complexity, and all I can say is the German phrase, "Mensch [inaudible], Gott [inaudible]." Men plans. God laughs. So the complexity theory, God is laughing at us about every attempt including logic. In fact even on one hand -- People say, "Oh this was logic;" it was a communitorial argument and [inaudible]. And even in his own paper made the communitorial argument. So when people say, "Yes, but I thought about using logic," I was never [inaudible]. So in fact if you [inaudible] complexity, probably it's fair to say in that particular area, complexity helped logic more than the other way around because we can do separation results in logic using complexity theory. Not the other way around. So, you know, that's [inaudible] along the way. This is the way life is. >> Jeannette Wing: Education. >> Moshe Vardi: So I would actually broaden this because I think we have a problem is that we have four years for a Bachelor's Degree. In fact, if at all, people want to make it shorter, faster. Right? It's expensive. Everybody's talked about cost reduction. And we have a growing discipline. So now you want to say, "Well now we have distributed programming and web programming and search and data mining." And so the thing that's very easy to get squeezed is the theory courses. And it doesn't matter if it's logic or discrete math or automata theory. And people say, "Where are people going to use this automata theory?" So I'm not even talking about [inaudible] application. What we're losing there in educating a generation of computer scientists who simply don't know how to abstract because they have lost -- This generation still had to carry the [inaudible]. But we have a generation of people, they just cannot reason abstractly. If anything, we do know about complexity which is what we're dealing with whether it's software or hardware or systems. The only way we can think about complexity is by abstraction. And now my worry is, is that we're losing the ability to [inaudible] because that's what [inaudible] from all these courses in math. You learn to abstract. And by cutting, cutting, cutting and adding more and more courses on this topic and that topic, that's my big worry. Losing logic is part of it but I worry in a bigger way that we're losing the ability to abstract. >>: So I also would comment with a question. And it was sort of triggered by Yuri's comment. It's not just developers that don't understand that they need logic and vocabulary. It triggered the thought that back in CACM, Vince [inaudible] had an article in the October issue that was calling for more of a science of an understanding of programs. And I thought that the article was somewhat surprising and even stunning for its complete absence of any acknowledgement of the existence of logic and of logic in computer science. And it's a comment. I'm not expecting a response from that. But... >> Moshe Vardi: I review all -- We review all articles going to CACM except for the columns by the president of CACM. [Audience laughter] That's all I can say, [inaudible] policy. [Audience laughter] >>: On a related note, there was an NSF workshop [inaudible] was talking about the state of network protocol documentation and [inaudible] still like capacity and they still like tables and they use ASCII art for drawing state machines. And that's like still -- So it's like there's also sort of -- I mean, we're still working on getting languages and formalisms adopted by other disciplines who are in our industry just running ahead to find new protocols. >>: Right. So in this regard, just to close the thought from Yuri's comment: I would assert that Microsoft is actually the most enlightened in this respect in the industry. >> Moshe Vardi: Let me go farther. So in 2008 when Clark, Emerson and Sifakis received the Turing Award for model-checking, somebody sent me an e-mail pointing to a blog by someone that was from, I think, Google or Yahoo. A respectable theoretician and a member of [inaudible] community who wrote, "Oh, they got the Turing Award for model-checking? How can --" I’m rephrasing. I'm not maybe 100 percent, "How can someone receive a Turing Award for something I never heard anything about?" [Audience laughter] Okay? The claim was, "Look, if something was really important, I should have heard about it somehow. One way or another, in a hallway conversation, in Tokyo. Not that I need to [inaudible]; I need to have heard about it." And so on one hand, you know, logic is the declining in education. At the same time I think what Microsoft Research has done is show how important it is for the practice of software development. So formal method is flourishing much more in Europe than it is in the U.S. And this is time were actually, you know, we want to know if something is important. One way to look is to look at what's happening industry. And in fact what was shown here is how useful it can be to software development. So I have a hard time myself reconciling this paradox. Yeah? >>: So anyway the question is, on the idea of proof as a social process that Lipton and Perlis had mentioned, the systems and tools that we have today, they do internally try to prove things. >> Moshe Vardi: Yeah, I think that was -- they thought if it's going to be [inaudible] proofs. I mean they were so blind; they thought, "It's going to be [inaudible] proofs of correctness." And of course we already know by now that the proofs are humongous. [inaudible] already by then people were working on the [inaudible] of this. And they could have said the same thing and said, "[Inaudible] proofs are doomed. The challenge has to be fully mechanizing of these proofs." If they had said that, I think I would have agreed with them. But they stopped after one-half. And in fact it was ironic, right, because the modelchecking paper came up within two years. And they complete missed that idea that you can mechanize the proof. >>: So you characterized the SAT as being a pile of heuristics and we don't know why it works. And I hope that's... >> Moshe Vardi: Do you know? >>: I hope that's not entirely true. But the phrase had a ring to it, "A pile of heuristics and we don't know why it works" because I think that characterizes almost every large software system. [Audience laughter] If that's true, how do we get from that situation to a place where we can reason logically about a system? >> Moshe Vardi: So I think that to me I view the success of SAT as [inaudible] opportunity because I go to a theoretician and say, "Look, it's a [inaudible] problem." We all know we can generate problems with hundreds of variables and no [inaudible] can handle them. And then, the [inaudible] goes around and solves a problems with millions of variables. What does [inaudible] have to say about that? It just talks about the [inaudible] complexity. It gives us no guidance what problems are hard and what problems are easy. So right now I would say, I'm hoping there is some beautiful theory that's yet to be discovered that explains, "Okay, so this is begging for more theory [inaudible]. But this is too general. When you have something very complicated, you know, sometimes we understand and it takes a long time maybe. Right now I think we've had empirical success, we are a little bit like physics was like in the turn of the century. We have a lot of experiments but nobody could explain what the hell was going on. And to me, that's what's happening now. We have the experimental evidence that this works, that this is very easy. But I don't think we have a good theory. Not that I've seen. >>: Perhaps you could characterize Windows as an empirical success. Most of the time it doesn't crack. >> Moshe Vardi: I don't think it's a fair analogy. I mean, here we have a mathematical problem and we have, not a proof, but a lot of evidence that this is a hard problem but we cannot explain when it is hard and when it is not hard. In particular, for example one of the ways that Windows does work is a lot of the composition and orthogonality and separation of concerns. And I don't think you can say that about SAT. Just this particular combination of heuristics, it's just try this. No it doesn't work. Okay, try this. Shift it here. Do it here. Maybe I'm too pessimistic on this, but to me it's a switchboard that emerged experimentally and I don't view it quite -- It's not -- You know, people did try to apply in principle some software engineering principle to develop Windows, and I don't think the situation is similar. There are some SAT experts here. They can talk about it more than I can talk about it. Yeah? >>: I think we can make huge progress on every case complexity and things like that. But typical case, probably it's very hard to analyze because it involves human psychology. A simple example is typing. So typing is [inaudible] space complete. Typical problems are very easy to type. Why? Because when they write I need to make sure that I understand what I'm talking about. And that soft side of things is difficult to analyze. >> Moshe Vardi: But one could imagine that somebody would come up with some metric for SAT problems, something you can measure, something syntactical that you can measure. And it will some how be predictable whether a SAT solver will spend a lot of time on it or not. It's imaginable to me. I mean right now we don't have anything like that. I mean and look, another example that people struggle with for many years is to understand why we're so successful in linear programming. Linear programming was an example. Right? What is it [inaudible] in 1974 [inaudible] proved, if I'm correct, that simplex is exponential. And then in practice it works incredibly well. And people have actually tried [inaudible] complexity. And there was not a good explanation. But [inaudible] smooth complexity by Spielman and that's a much more satisfying explanation. You read this and you say, "Okay." And I actually thought, "Gee, I'd love to apply it to something other than programming." It's very hard. It seems to be very specific to classical problems or linear programming. But it took us a long time to find some mathematical explanation of why something works so well. So I'm hoping that something will emerge for SAT eventually that will explain what is special about the problem we are looking at. Why is it we cannot break RSA using SAT but we can solve [inaudible] with SAT. I think eventually we'll figure it out but it will take some time. >> Jeannette Wing: And another area where I find this is true with computer science right now is in machine learning. There are a lot of algorithms and there are a lot of data sets for which certain heuristics or parameters are set that work really well and others don't and we don't really understand why. So this may very well be just a phase in our field where we're -- you know, the paradigm right now is scale millions of variables, terabytes of data, whatever it is. [inaudible] complexity will catch up to figuring out why it all works. >> Moshe Vardi: Partly I think it's a social phenomenon in my opinion because somehow these kinds of problems have not yet caught up with -- We have a [inaudible] community of utterly -- Go to [inaudible] and you at awe of the brilliance, mathematical brilliance of people there. But they are not looking at these kinds of problems somehow. And when you tell them, "Oh it's messy. This is a real problem. We don't want to look at theory problems." [Audience laughter] It's how to convince them to look at these problems. And I will say if you look now -- So one of the reasons I think that we made such progress in SAT is because of the competition. Competitions have been very, very productive. People really want to compete. They want to win. They publish what wins. And the whole field progresses because of the competition. But the competitions are a hindrance to deep reflection about why things work. I mean, I had a student and I wanted the student to spend more time going into the deep, why, what's happening. And he told me, "But I will never win the competition with such a paper." So we finally found a way how to win some competition, okay, by doing something. But competitions are a two-edged sword; they help us one hand faster -- But there is a guy at -- Where is he? I think he's at CMU. Hooker. He's an industrial engineer or something like that. John Hooker I think. At CMU. And he wrote actually a paper years ago "Algorithms versus heuristics: we got it all wrong." And he said we're focusing so much on just improving runtime, we're not spending time trying to do [inaudible] how the algorithm works internally. It's a very hollow experiment trying to figure out what is happening, why does it work so fast. An our community somehow at this point does not appreciate it. So people go where the community wants them to go which is, "Go faster, young men. Go faster." Okay? Thank you very much. [Audience applause]