In Logic Programming ( 25 and 26) the language of logic is used as a declarative programming language. Prolog uses resolution as its underlying proof mechanism. The logical structure of relational databases is explained ( 27) in set theoretical terms and it is shown how the language of set theory can be used as a Structured Query Language (SQL). Computability, Undecidability and Complexity are treated in sections 28, 29, and 30, respectively, in terms of Turing machines. The undecidability of the validity problem for predicate logic and the NP-completeness of the satisfiability problem for propositional logic are shown in a similiar way. Chomsky's notion of grammar and its relation to the notion of automation is presented in section 31. Both untyped and typed lambda calculus are treated in sections 32 and 33, respectively. The role epistemic logic can play in the description of distributed systems is explained ( 34). In section 35 and 36, temporal logic is used both for verification by hand and for automatic verification. A tableaux-based automated theorem prover for classical logic is elaborated in the Appendix. Each section ends with a number of exercises; the answers can be found at the end of this book.