Logic for Component-based Software Development Kung-Kiu Lau Department of Computer Science, University of Manchester Manchester M13 9PL, United Kingdom kung-kiu@cs.man.ac.uk Mario Ornaghi Dipartimento di Scienze dell'Informazione, Universita' degli studi di Milano Via Comelico 39/41, 20135 Milano, Italy ornaghi@dsi.unimi.it Abstract: The title of this paper is styled on that of Kowalski's seminal book Logic for Problem Solving [Kowalski:79]. This is because in this paper we want to discuss how logic can play a crucial part in next-generation component-based software development, just as Kowalski showed in [Kowalski:79] that logic can be used for programming. Our starting point is the following quote from the Preface of [Kowalski:79]: ``In contrast with conventional computing methodology, which employs different formalisms for expressing programs, specifications, databases, queries and integrity constraints, logic provides a single uniform language for all these tasks.'' with which we whole-heartedly agree. Unfortunately, despite this potential advantage, it would be fair to say that hitherto Logic Programming has not made any impact on Software Engineering. In fact, it has missed the boat, as far as the latter is concerned. We believe that for Software Engineering, logical systems stronger and more expressive than Logic Programs are needed. In this paper we want to show that full first-order logic can be used as a basis for developing a declarative (model-theoretic) approach to Software Engineering, in particular component-based software development. Currently Software Engineering is moving from object-oriented to component-based development (CBD), but it will not succeed, in our view, unless components have suitable declarative semantics. We believe that the declarative nature of logic specifications and programs will give Logic Programming the chance of a second bite at the cherry, to become a force in CBD, which has been hailed as ``the Industrial Revolution for IT''!