Spring 2014: Formal Methods and Models [CS330]

General Description and Preliminary List of Topics

This course is an introduction to two kinds of formal systems—languages and logics—that are crucial to large numbers of areas in computer science. The study of formal languages underlies important aspects of compilers and other language processing systems, software engineering, agents and multiagent systems, game development, robotics, and networking. Formal logics and automatic reasoning are put to use in artificial intelligence, database theory, and software engineering. The course gives students practice in precise thinking and proof methods that play a role in the analysis of algorithms. Programming assignments in Prolog and other programming languages provide practical experience with these theoretical topics.

Topics include: Propositional Logic and Proofs; Predicate Logic and Proofs; Program Verification; Prolog; Finite Automata, Regular Expressions; Context-Free Grammars; Turing Machines and Solvability.


  1. Students will understand the concepts and relevance of logic, formal languages and automata theory, and computability.
  2. Students will be able to do mechanical formal proofs, program correctness proofs and solve problems in first-order logic.
  3. Students will be able to solve problems in elementary machine models: designing finite-state, pushdown and turing machines.
  4. Students will be able to solve problems in formal languages: writing regular expressions, regular grammars, and context-free grammars.


Quizzes: 20%
Programming Assignments: 20%
Exams: 60%

Quizzes and exams are closed book. The lowest quiz grade will be dropped. Programming assignments must be performed individually. Group work is NOT allowed. Any deviation from this policy will be considered a violation of the GMU Honor Code

In order to receive a passing grade in this class, each student will also meet at least once with their academic advisor during the semester.