6.045: Automata, Computability, and Complexity Or, Great Ideas in Theoretical Computer Science Spring, 2010. Class 4 Nancy Lynch



Similar documents
Formal Languages and Automata Theory - Regular Expressions and Finite Automata -

C H A P T E R Regular Expressions regular expression

Automata and Computability. Solutions to Exercises

Finite Automata. Reading: Chapter 2

Regular Expressions and Automata using Haskell

CS154. Turing Machines. Turing Machine. Turing Machines versus DFAs FINITE STATE CONTROL AI N P U T INFINITE TAPE. read write move.

Automata and Formal Languages

Finite Automata. Reading: Chapter 2

Scanner. tokens scanner parser IR. source code. errors

Reading 13 : Finite State Automata and Regular Expressions

Regular Languages and Finite State Machines

Turing Machines: An Introduction

3515ICT Theory of Computation Turing Machines

Automata on Infinite Words and Trees

Deterministic Finite Automata

CS 3719 (Theory of Computation and Algorithms) Lecture 4

(IALC, Chapters 8 and 9) Introduction to Turing s life, Turing machines, universal machines, unsolvable problems.

CMPSCI 250: Introduction to Computation. Lecture #19: Regular Expressions and Their Languages David Mix Barrington 11 April 2013

Finite Automata and Regular Languages

CS5236 Advanced Automata Theory

Genetic programming with regular expressions

Regular Languages and Finite Automata

Regular Expressions with Nested Levels of Back Referencing Form a Hierarchy

ω-automata Automata that accept (or reject) words of infinite length. Languages of infinite words appear:

Pushdown Automata. place the input head on the leftmost input symbol. while symbol read = b and pile contains discs advance head remove disc from pile

CS103B Handout 17 Winter 2007 February 26, 2007 Languages and Regular Expressions

Compiler Construction

Lecture I FINITE AUTOMATA

CSE 135: Introduction to Theory of Computation Decidability and Recognizability

Pushdown automata. Informatics 2A: Lecture 9. Alex Simpson. 3 October, School of Informatics University of Edinburgh als@inf.ed.ac.

Lecture 2: Regular Languages [Fa 14]

CSC4510 AUTOMATA 2.1 Finite Automata: Examples and D efinitions Definitions

The Halting Problem is Undecidable

SRM UNIVERSITY FACULTY OF ENGINEERING & TECHNOLOGY SCHOOL OF COMPUTING DEPARTMENT OF SOFTWARE ENGINEERING COURSE PLAN

Computational Models Lecture 8, Spring 2009

Automata Theory. Şubat 2006 Tuğrul Yılmaz Ankara Üniversitesi

1 Definition of a Turing machine

Regular Languages and Finite Automata

6.080/6.089 GITCS Feb 12, Lecture 3

Informatique Fondamentale IMA S8

Introduction to Finite Automata

ÖVNINGSUPPGIFTER I SAMMANHANGSFRIA SPRÅK. 15 april Master Edition

How To Compare A Markov Algorithm To A Turing Machine

Introduction to Automata Theory. Reading: Chapter 1

Computability Theory

Markov random fields and Gibbs measures

Omega Automata: Minimization and Learning 1

THEORY of COMPUTATION

Mathematical Induction. Lecture 10-11

T Reactive Systems: Introduction and Finite State Automata

Lecture 1. Basic Concepts of Set Theory, Functions and Relations

CAs and Turing Machines. The Basis for Universal Computation

Fundamentele Informatica II

Online EFFECTIVE AS OF JANUARY 2013

THE TURING DEGREES AND THEIR LACK OF LINEAR ORDER

Lights and Darks of the Star-Free Star

Two Way F finite Automata and Three Ways to Solve Them

INCIDENCE-BETWEENNESS GEOMETRY

1. Give the 16 bit signed (twos complement) representation of the following decimal numbers, and convert to hexadecimal:

1. Nondeterministically guess a solution (called a certificate) 2. Check whether the solution solves the problem (called verification)

Honors Class (Foundations of) Informatics. Tom Verhoeff. Department of Mathematics & Computer Science Software Engineering & Technology

We can express this in decimal notation (in contrast to the underline notation we have been using) as follows: b + 90c = c + 10b

The common ratio in (ii) is called the scaled-factor. An example of two similar triangles is shown in Figure Figure 47.1

Boolean Algebra Part 1

Converting Finite Automata to Regular Expressions

Theory of Computation Chapter 2: Turing Machines

ASSIGNMENT ONE SOLUTIONS MATH 4805 / COMP 4805 / MATH 5605

Continued Fractions and the Euclidean Algorithm

Relational Databases

Basic Concepts of Set Theory, Functions and Relations

Computer Architecture Syllabus of Qualifying Examination

Implementation of Recursively Enumerable Languages using Universal Turing Machine in JFLAP

Hint 1. Answer (b) first. Make the set as simple as possible and try to generalize the phenomena it exhibits. [Caution: the next hint is an answer to

Testing LTL Formula Translation into Büchi Automata

CHAPTER 5. Number Theory. 1. Integers and Division. Discussion

Welcome to... Problem Analysis and Complexity Theory , 3 VU

26 Integers: Multiplication, Division, and Order

The Optimum One-Pass Strategy for Juliet

4.6 The Primitive Recursive Functions

CPSC 121: Models of Computation Assignment #4, due Wednesday, July 22nd, 2009 at 14:00

Notes on Complexity Theory Last updated: August, Lecture 1

CONTENTS 1. Peter Kahn. Spring 2007

Base Conversion written by Cathy Saxton

Lecture 2: Universality

Turing Machines, Part I

Quotient Rings and Field Extensions

Chapter 6: Episode discovery process

NFAs with Tagged Transitions, their Conversion to Deterministic Automata and Application to Regular Expressions

A Propositional Dynamic Logic for CCS Programs

6.3 Conditional Probability and Independence

WRITING PROOFS. Christopher Heil Georgia Institute of Technology

Graph Theory Problems and Solutions

MACM 101 Discrete Mathematics I

Automata and Formal Languages. Push Down Automata. Sipser pages Lecture 13. Tim Sheard 1

Math Workshop October 2010 Fractions and Repeating Decimals

Lecture 18 Regular Expressions

Solution to Homework 2

Transcription:

6.045: Automata, Computability, and Complexity Or, Great Ideas in Theoretical Computer Science Spring, 2010 Class 4 Nancy Lynch

Today Two more models of computation: Nondeterministic Finite Automata (NFAs) Add a guessing capability to FAs. But provably equivalent to FAs. Regular expressions A different sort of model---expressions rather than machines. Also provably equivalent. Topics: Nondeterministic Finite Automata and the languages they recognize NFAs vs. FAs Closure of FA-recognizable languages under various operations, revisited Regular expressions Regular expressions denote FA-recognizable languages Reading: Sipser, Sections 1.2, 1.3 Next: Section 1.4

Nondeterministic Finite Automata and the languages they recognize

Nondeterministic Finite Automata Generalize FAs by adding nondeterminism, allowing several alternative computations on the same input string. Ordinary deterministic FAs follow one path on each input. Two changes: Allow δ(q, a) to specify more than one successor state: a q a Add -transitions, transitions made for free, without consuming any input symbols. q 1 q 2 Formally, combine these changes:

Formal Definition of an NFA An NFA is a 5-tuple ( Q, Σ, δ, q 0, F ), where: Q is a finite set of states, Σ is a finite set (alphabet) of input symbols, δ: Q Σ P(Q) is the transition function, The arguments are a state and either an alphabet symbol or. Σ means Σ { }. The result is a set of states. q 0 Q, is the start state, and F Q is the set of accepting, or final states.

Formal Definition of an NFA An NFA is a 5-tuple ( Q, Σ, δ, q 0, F ), where: Q is a finite set of states, Σ is a finite set (alphabet) of input symbols, δ: Q Σ P(Q) is the transition function, q 0 Q, is the start state, and F Q is the set of accepting, or final states. How many states in P(Q)? 2 Q Example: Q = { a, b, c } P(Q) = {, {a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c} }

NFA Example 1 0,1 0 1 a b c Q = { a, b, c } Σ = { 0, 1 } q 0 = a 0 1 F = { c } a {a,b} {a} δ: b {c} c

NFA Example 2 0,1 b 0 1 c d a 0 1 a {a} {a} {b,c} b {c} c {d} d e {f} f {g} g 1 0 e f g

Nondeterministic Finite Automata NFAs are like DFAs with two additions: Allow δ(q, a) to specify more than one successor state. Add -transitions. Formally, an NFA is a 5-tuple ( Q, Σ, δ, q 0, F ), where: Q is a finite set of states, Σ is a finite set (alphabet) of input symbols, δ: Q Σ P(Q) is the transition function, Σ means Σ { }. q 0 Q, is the start state, and F Q is the set of accepting, or final states.

Example 1: NFA Examples 0,1 a 0 1 b c Example 2: 0,1 b 0 1 c d a 1 0 e f g

Informally: How NFAs compute Follow allowed arrows in any possible way, while consuming the designated input symbols. Optionally follow any arrow at any time, without consuming any input. Accepts a string if some allowed sequence of transitions on that string leads to an accepting state.

Example 1 0,1 a 0 1 b c L(M) = { w w ends with 01 } M accepts exactly the strings in this set. Computations for input word w = 101: Input word w: 1 0 1 States: a a a a Or: a a b c Since c is an accepting state, M accepts 101

Example 1 0,1 a 0 1 b c Computations for input word w = 0010: Possible states after 0: { a, b } Then after another 0: { a, b } After 1: { a, c } After final 0: { a, b } Since neither a nor b is accepting, M does not accept 0010. 0 0 0 { a } Æ { a, b } Æ { a, b } Æ { a, c } Æ { a, b } 1

Example 2 0,1 b 0 1 c d a 1 0 e f g L(M) = { w w ends with 01 or 10 } Computations for w = 0010: Possible states after no input: { a, b, e } After 0: { a, b, e, c } After 0: { a, b, e, c } After 1: { a, b, e, d, f } After 0: { a, b, e, c, g } Since g is accepting, M accepts 0010. 0 0 1 0 { a, b, e } Æ { a, b, e, c } Æ { a, b, e, c} Æ { a, b, e, d, f } Æ { a, b, e, c, g }

Example 2 0,1 b 0 1 c d a 1 0 e f g Computations for w = 0010: 0 0 { a, b, e } Æ { a, b, e, c } Æ { a, b, e, c } 1 0 Æ { a, b, e, d, f } Æ { a, b, e, c, g } Path to accepting state: 0 0 1 0 a Æ a Æ a Æ e Æ f Æ g

Viewing computations as a tree 0, 1 a b 0 1 c d 1 0 e f g In general, accept if there is a path labeled by the entire input string, possibly interspersed with s, leading to an accepting state. Here, leads to accepting state d. b a 1 e Input w = 01 b a 0 Stuck: No moves on or 1 e f 1 a b 0 c d 1 e Stuck: No moves on or 0 Done, accept

Formal definition of computation Define E(q) = set of states reachable from q using zero or more -moves (includes q itself). Example 2: E(a) = { a, b, e } Define δ*: Q Σ* P(Q), state and string yield a set of states: δ*( q, w ) = states that can be reached from q by following w. Defined iteratively: Compute δ*( q, a 1 a 2 a k ) by: S : = E(q) for i = 1 to k do S := r δ( r, ai) for some r in S E(r ) Or define recursively, LTTR.

Formal definition of computation δ*( q, w ) = states that can be reached from q by following w. String w is accepted if δ*( q 0, w ) F, that is, at least one of the possible end states is accepting. String w is rejected if it isn t accepted. L(M), the language recognized by NFA M, = { w w is accepted by M}.

NFAs vs. FAs

NFAs vs. DFAs DFA = Deterministic Finite Automaton, new name for ordinary Finite Automata (FA). To emphasize the difference from NFAs. What languages are recognized by NFAs? Since DFAs are special cases of NFAs, NFAs recognize at least the DFA-recognizable (regular) languages. Nothing else! Theorem: If M is an NFA then L(M) is DFA-recognizable. Proof: Given NFA M 1 = ( Q 1, Σ, δ 1, q 01, F 1 ), produce an equivalent DFA M 2 = ( Q 2, Σ, δ 2, q 02, F 2 ). Equivalent means they recognize the same language, L(M 2 ) = L(M 1 ). Each state of M 2 represents a set of states of M 1 : Q 2 = P(Q 1 ). Start state of M 2 is E(start state of M 1 ) = all states M 1 could be in after scanning : q 02 = E(q 01 ).

NFAs vs. DFAs Theorem: If M is an NFA then L(M) is DFArecognizable. Proof: Given NFA M 1 = ( Q 1, Σ, δ 1, q 01, F 1 ), produce an equivalent DFA M 2 = ( Q 2, Σ, δ 2, q 02, F 2 ). Q 2 = P(Q 1 ) q 02 = E(q 01 ) F 2 = { S Q 1 S F 1 } Accepting states of M 2 are the sets that contain an accepting state of M 1. δ 2 ( S, a ) = r S E( δ 1 ( r, a ) ) Starting from states in S, δ 2 ( S, a ) gives all states M 1 could reach after a and possibly some -transitions. M 2 recognizes L(M 1 ): At any point in processing the string, the state of M 2 represents exactly the set of states that M 1 could be in.

Example: NFA Æ DFA M 1 : 0,1 0 1 a b c States of M 2 :, {a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c} 1 0 δ 2 : {a} 0 1 {a,b} {a,c} Other 5 subsets aren t reachable from start state, don t bother drawing them. 0 1 F 2

NFAs vs. DFAs NFAs and DFAs have the same power. But sometimes NFAs are simpler than equivalent DFAs. Example: L = strings ending in 01 or 10 Simple NFA, harder DFA (LTTR) Example: L = strings having substring 101 Recall DFA: 0 1 0,1 NFA: a 1 0 1 b c d 0,1 1 0 1 0 0,1 Simpler---has the power to guess when to start matching.

NFAs vs. DFAs Which brings us back to last time. We got stuck in the proof of closure for DFA languages under concatenation: Example: L = { 0, 1 }* { 0 } { 0 }* 0,1 0 0 NFA can guess when the critical 0 occurs.

Closure of regular (FA- recognizable) languages under various operations, revisited

Closure under operations The last example suggests we retry proofs of closure of FA languages under concatenation and star, this time using NFAs. OK since they have the same expressive power (recognize the same languages) as DFAs. We already proved closure under common settheoretic operations---union, intersection, complement, difference---using DFAs. Got stuck on concatenation and star. First (warmup): Redo union proof in terms of NFAs.

Closure under union Theorem: FA-recognizable languages are closed under union. Old Proof: Start with DFAs M 1 and M 2 for the same alphabet Σ. Get another DFA, M 3, with L(M 3 ) = L(M 1 ) L(M 2 ). Idea: Run M 1 and M 2 in parallel on the same input. If either reaches an accepting state, accept.

Closure under union Example: M 1 : Substring 01 1 0 0,1 0 a b c 1 M 2 : Odd number of 1s M 3 : 0 0 0 ad bd 1 cd 0 0 0 1 1 1 1 0 0 ae be ce 1 d 1 1 e

Closure under union, general rule Assume: M 1 = ( Q 1, Σ, δ 1, q 01, F 1 ) M 2 = ( Q 2, Σ, δ 2, q 02, F 2 ) Define M 3 = ( Q 3, Σ, δ 3, q 03, F 3 ), where Q 3 =Q 1 Q 2 Cartesian product, {(q 1,q 2 ) q 1 Q 1 and q 2 Q 2 } δ 3 ((q 1,q 2 ), a) = (δ 1 (q 1, a), δ 2 (q 2, a)) q 03 = (q 01, q 02 ) F 3 ={ (q 1,q 2 ) q 1 F 1 or q 2 F 2 }

Closure under union Theorem: FA-recognizable languages are closed under union. New Proof: Start with NFAs M 1 and M 2. Get another NFA, M 3, with L(M 3 ) = L(M 1 ) L(M 2 ). M 1 Use final states from M 1 and M 2. Add new start state M 2

Closure under union Theorem: FA-recognizable languages are closed under union. New Proof: Simpler! Intersection: NFAs don t seem to help. Concatenation, star: Now try NFA-based constructions.

Closure under concatenation L 1 L 2 = { x y x L 1 and y L 2 } Theorem: FA-recognizable languages are closed under concatenation. Proof: Start with NFAs M 1 and M 2. Get another NFA, M 3, with L(M 3 ) = L(M 1 ) L(M 2 ). M 1 M 2 These are no longer final states. These are still final states.

Closure under concatenation Example: Σ = { 0, 1}, L 1 = Σ*, L 2 = {0} {0}*. L 1 L 2 = strings that end with a block of at least one 0 M 1 : M 2 : 0,1 NFAs 0 0 Now combine: 0,1 0 0

Closure under star L* = { x x = y 1 y 2 y k for some k 0, every y in L } = L 0 L 1 L 2 Theorem: FA-recognizable languages are closed under star. Proof: Start with FA M 1. Get an NFA, M 2, with L(M 2 ) = L(M 1 )*. M 1 Use final states from M 1 and M 2. Add new start state; it s also a final state, since is in L(M 1 )*.

Closure under star Example: Σ = { 0, 1}, L 1 = { 01, 10 } (L 1 )* = even-length strings where each pair consists of a 0 and a 1. M 1 : 0 1 1 0 Construct M 2 : 0 1 1 0

Closure, summary FA-recognizable (regular) languages are closed under set operations, concatenation, and star. Regular operations: Union, concatenation, and star. Can be used to build regular expressions, which denote languages. E.g., regular expression ( 0 1 )* 0 0* denotes the language { 0, 1 }* {0} {0}* Study these next

Regular Expressions

Regular expressions An algebraic-expression notation for describing (some) languages, rather than a machine representation. Languages described by regular expressions are exactly the FA-recognizable languages. That s why FA-recognizable languages are called regular. Definition: R is a regular expression over alphabet Σ exactly if R is one of the following: a, for some a in Σ,,, ( R 1 R 2 ), where R 1 and R 2 are smaller regular expressions, ( R 1 R 2 ), where R 1 and R 2 are smaller regular expressions, or ( R 1 * ), where R 1 is a smaller regular expression. A recursive definition.

Regular expressions Definition: R is a regular expression over alphabet Σ exactly if R is one of the following: a, for some a in Σ,,, ( R 1 R 2 ), where R 1 and R 2 are smaller regular expressions, ( R 1 R 2 ), where R 1 and R 2 are smaller regular expressions, or ( R 1 * ), where R 1 is a smaller regular expression. These are just formal expressions---we haven t said yet what they mean. Example: ( ( ( 0 1 ) )* 0 ) Abbreviations: Sometimes omit, use juxtaposition. Sometimes omit parens, use precedence of operations: * highest, then, then. Example: Abbreviate above as ( ( 0 1 ) )* 0 Example: ( 0 1 )* 111 ( 0 1 )*

How regular expressions denote languages Define the languages recursively, based on the expression structure: Definition: L(a) = { a }; one string, with one symbol a. L() = { }; one string, with no symbols. L( ) = ; no strings. L( R 1 R 2 ) = L( R 1 ) L( R 2 ) L( R 1 R 2 ) = L( R 1 ) L( R 2 ) L( R 1 * ) = ( L(R 1 ) )* Example: Expression ( ( 0 1 ) )* 0 denotes language { 0, 1 }* { 0 } = { 0, 1 }*, all strings. Example: ( 0 1 )* 111 ( 0 1 )* denotes { 0, 1 }* { 111 } { 0, 1 }*, all strings with substring 111.

More examples Definition: L(a) = { a }; one string, with one symbol a. L() = { }; one string, with no symbols. L( ) = ; no strings. L( R 1 R 2 ) = L( R 1 ) L( R 2 ) L( R 1 R 2 ) = L( R 1 ) L( R 2 ) L( R 1 * ) = ( L(R 1 ) )* Example: L = strings over { 0, 1 } with odd number of 1s. 0* 1 0* ( 0* 1 0* 1 0* )* Example: L = strings with substring 01 or 10. ( 0 1 )* 01 ( 0 1 )* ( 0 1 )* 10 ( 0 1 )* Abbreviate (writing Σ for ( 0 1 )): Σ* 01 Σ* Σ* 10 Σ*

More examples Example: L = strings with substring 01 or 10. ( 0 1 )* 01 ( 0 1 )* ( 0 1 )* 10 ( 0 1 )* Abbreviate: Σ* 01 Σ* Σ* 10 Σ* Example: L = strings with neither substring 01 or 10. Can t write complement. But can write: 0* 1*. Example: L = strings with no more than two consecutive 0s or two consecutive 1s Would be easy if we could write complement. ( 1 11 ) (( 0 00 ) (1 11 ) )* ( 0 00 ) Alternate one or two of each.

More examples Regular expressions commonly used to specify syntax. For (portions of) programming languages Editors Command languages like UNIX shell Example: Decimal numbers D D*. D* D*. D D*, where D is the alphabet { 0,, 9 } Need a digit either before or after the decimal point.

Regular Expressions Denote FA-Recognizable Languages

Languages denoted by regular expressions The languages denoted by regular expressions are exactly the regular (FA-recognizable) languages. Theorem 1: If R is a regular expression, then L(R) is a regular language (recognized by a FA). Proof: Easy. Theorem 2: If L is a regular language, then there is a regular expression R with L = L(R). Proof: Harder, more technical.

Theorem 1 Theorem 1: If R is a regular expression, then L(R) is a regular language (recognized by a FA). Proof: For each R, define an NFA M with L(M) = L(R). Proceed by induction on the structure of R: Show for the three base cases. Show how to construct NFAs for more complex expressions from NFAs for their subexpressions. Case 1: R = a a L(R) = { a } Accepts only a. Case 2: R = L(R) = { }. Accepts only

Theorem 1 Theorem 1: If R is a regular expression, then L(R) is a regular language (recognized by a FA). Proof: Case 3: R = L(R) = Accepts nothing. Case 4: R = R 1 R 2 M 1 recognizes L(R 1 ), M 1 M 2 recognizes L(R 2 ). Same construction we used to show regular languages are closed under M 2 union.

Theorem 1 Theorem 1: If R is a regular expression, then L(R) is a regular language (recognized by a FA). Proof: Case 5: R = R 1 R 2 M 1 recognizes L(R 1 ), M 2 recognizes L(R 2 ). Same construction we used to show regular languages are closed under concatenation. M 1 M 2

Theorem 1 Theorem 1: If R is a regular expression, then L(R) is a regular language (recognized by a FA). Proof: Case 6: R = (R 1 )* M 1 recognizes L(R 1 ), Same construction we used to show regular languages are closed under star. M 1

Example for Theorem 1 L = ab a* Construct machines recursively: a: a b: b ab: a b a*: a a b ab a*: a

Theorem 2 Theorem 2: If L is a regular language, then there is a regular expression R with L = L(R). Proof: For each NFA M, define a regular expression R with L(R) = L(M). Show with an example: b a a a x y z Convert to a special form with only one final state, no incoming arrows to start state, no outgoing arrows from final state. b b q 0 b a a a b x y z q f b

Theorem 2 b a a a b q 0 x y z q f b Now remove states one at a time (any order), replacing labels of edges with more complicated regular expressions. First remove z: q 0 b a a b a* x y q f b New label b a* describes all strings that can move the machine from state y to state q f, visiting (just) z any number of times.

Theorem 2 q 0 b a a b a* x b y q f Then remove x: q 0 b*a a bb* a y b a* q f New label b*a describes all strings that can move the machine from q 0 to y, visiting (just) x any number of times. New label a bb* a describes all strings that can move the machine from y to y, visiting (just) x any number of times.

Theorem 2 q 0 a bb* a b*a b a* y q f Finally, remove y: b*a (a bb* a)* b a* q 0 q f New label describes all strings that can move the machine from q 0 to q f, visiting (just) y any number of times. This final label is the needed regular expression.

Theorem 2 Define a generalized NFA (gnfa). Same as NFA, but: Only one accept state, start state. Start state has no incoming arrows, accept state no outgoing arrows. Arrows are labeled with regular expressions. How it computes: Follow an arrow labeled with a regular expression R while consuming a block of input that is a word in the language L(R). Convert the original NFA M to a gnfa. Successively transform the gnfa to equivalent gnfas (recognize same language), each time removing one state. When we have 2 states and one arrow, the regular expression R on the arrow is the final answer: R q 0 q f

Theorem 2 To remove a state x, consider every pair of other states, y and z, including y = z. New label for edge (y, z) is the union of two expressions: What was there before, and One for paths through (just) x. If y z: y z we get: y z S U R x T R SU*T If y = z: R U R SU*T S y x y T

Next time Existence of non-regular languages Showing specific languages aren t regular The Pumping Lemma Algorithms that answer questions about FAs. Reading: Sipser, Section 1.4; some pieces from 4.1

MIT OpenCourseWare http://ocw.mit.edu 6.045J / 18.400J Automata, Computability, and Complexity Spring 2011 For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.