Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
INF3: Formal Languages and Computability
[go: Go Back, main page]


Formal Languages and Computability
INF3 Semester

Formal Languages and Computability

Course Tutors


Course Description

The goal of this course is to introduce three central areas of the theory of computation that anybody with a serious interest in computers should know about: the theories of automata, computability and complexity. These fundamental scientific areas study the main computational models that underlie the world of computing, their capabilities and their inherent limitations. As you will discover during this semester and in the remainder of your studies, apart from its intrinsic intellectual interest, the theory that we shall cover in this course has important practical applications in, e.g., compiler design, various design methodologies and notations (for instance, the UML notation you have met in passing in your Object-Oriented Analysis and Design course), speech recognition (which is partly addressed in the course Verbal interaktion i multimodal kontekst), text processing, and many facets of program analysis and implementation.

At the end of the course, you will be familiar with the basic computational models of Finite State and Pushdown Automata and with the classes of grammars that generate the languages recognized by these abstract computational devices. We shall also see that there are problems for which no algorithmic solution will ever exist, and realizing the existence of such inherently unsolvable problems has been one of the main achievements of 20th century mathematics. Roughly speaking, the subject matter of the theory of computability is the precise definition of the informal concept of algorithm, and the characterization of those problems that can (or, perhaps more intriguingly, cannot) conceivably be solved by means of algorithms. In the process of developing such a theory, we shall touch upon topics such as:

The last part of the course will be devoted to a brief introduction to the theory of computational complexity. In a nutshell, one may say that, whereas computability theory is concerned with the class of problems that can or cannot be solved algorithmically, complexity theory aims at characterizing the problems for which efficient algorithmic solutions can conceivably be found. The key concept that we shall touch upon in this part of the course is that of NP-complete problem.

As an alternative, excellent description of this course I strongly recommend the preface of Computers Ltd.: What They Really Can't Do (Oxford University Press) by David Harel. This lovely little book by one of Computer Science's best expositors is highly recommended reading. (See the review of this book in Plus magazine.)


Textbooks

The main textbook for the course is Introduction to the Theory of Computation by Michael Sipser. The author maintains a list of errata for the current edition of this book. This book is quite expensive, but it is very well written and readable.

As supplementary reading on the science of computing as a whole, I also strongly recommend the books:

  • Algorithmics: The Spirit of Computing by David Harel. Of special relevance to this course are chapters 6-9 ibidem.

  • Computers Ltd.: What They Really Can't Do (Oxford University Press) by David Harel.

    Note! You are not required to buy these two books. I'll suggest supplementary reading from these sources if and when I believe it may aid your general understanding of the topics that we cover in the course.


    Prerequisites

    The course assumes knowledge of basic discrete mathematics, such as the one that you have been using in the course Matematik 2B and in Algorithms and Data Structures. Those of you who would like to refresh their memory, or who are not confident about their understanding of the basic mathematics used in this course, are strongly encouraged to read, e.g., Chapter 0 of Sipser's book and/or Chapter 1 of the book Elements of the Theory of Computation (2nd edition) by Lewis and Papadimitriou. As practice makes perfect, I also recommend that you work out some of the exercises to be found in those references. Try, for example, exercises 0.2-0.5, 0.7, 0.10-0.11 in Sipser's book and/or exercises 1.1.1-1.1.4, 1.5.1-1.5.2 in the book by Lewis and Papadimitriou.

    Note: The above exercises are not really part of this course. How many you attempt to solve depends only upon your level of confidence with the mathematics that will be used as the course progresses.


    Course Material and Lecture Plan

    The course will consist of a series of 15 lectures, which will usually take place at 10:15am on Mondays and Fridays during term time. The location of the lectures will be room A4-106. Look at the semester calendar for updated information on the schedule for this (and all other) courses. In particular, there will be at least two days on which we'll have lectures both in the morning and in the afternoon. Details will be available from this web page and on the semester calendar.

    Our working language for the course will be English.

    Below, I am attempting to give you an a priori description of parts of the plan of the course. You are invited to take it with a large pinch of salt. The topic of each actual lecture may vary, depending on how fast the course progresses, and on how receptive you are to the topics of the course.


    Exercise Classes and Advice on Modus Operandi

    As usual, each lecture will have an associated exercise class. The exercises mentioned on the web page for a lecture should be solved during the exercise class that precedes the following lecture. For example, the exercises listed on the web page for lecture 1 should be solved before lecture 2. There will be no exercise class preceding the first lecture.

    In general, I shall give you more exercises than you might conceivably be able to solve during one exercise class. The exercises marked with a star are those that I consider more important for your understanding. All the exercises will be "doable", and working them out will greatly increase your understanding of the topics covered in the course. The best advice I can give you is to work them all out by yourselves, and to make sure you understand the solutions if the other members of your group (or me) gave you the solutions on a golden plate. Above all, don't give up if you cannot find the key to the solutions right away. Problem solving is often a matter of mental stamina as much as creativity.

    Above all, try to be critical of your solutions to the exercises. You may not need (some of) the material covered in this course in your future careers, but having an analytical and critical attitude will always help you.

    For further advice on how to learn this material (and, in fact, the material in any course) I strongly recommend that you look at the slides for the talk Psychologists' tips on how and how not to learn by Wilfrid Hodges. In particular, try to reflect upon the hints he gives, and ask yourselves how much you practice what he preaches. You might also wish to read How to Read Mathematics by Shai Simonson and Fernando Gouveau --- a collection of useful, down-to-earth tips on how to read, and learn from, mathematical texts


    Exam

    The exam will be individual and oral. Each student will be examined for at most 20 minutes on one of the topics listed in the exam prospectus that will be distributed during the last lecture. The topic will be selected randomly by each student. The student will be informed of his/her mark (on the standard 13-scale) after the oral exam. The student can choose to hold the exam in either Danish or English.

    Information on the exam is now available.


    This page will be actively modified over the autumn term 2004, and is currently undergoing heavy restructuring. You are invited to check it regularly during the autumn term. The page is dormant in the spring term.


    Luca Aceto, Department of Computer Science, Aalborg University.
    Last modified: .