1. Use the construction given in the proof of Theorem 1.45 to give the state diagram of an NFA recognizing the union of the two languages recognized by M1 and M2: (L(M1) ∪ L(M2)).
2. Use the construction given in the proof of Theorem 1.47 to give the state diagram of an NFA recognizing the concatenation of the two languages recognized by M1 and M2: (L(M1) • L(M2)).
3. Use the construction given in the proof of Theorem 1.49 to give the state diagram of an NFA recognizing the star of the language recognized by DFA M1: (L(M1)*).
4. (Exercise 1.19b) Use the procedure described in Lemma 1.55
to convert the following regular expression to a nondeterministic finite
automaton.
5. (Exercise 1.21b) Use the procedure described in Lemma 1.60
to convert the following finite automaton to a regular expression.
Remove states in the following order: 1, 2, 3.
6. (Exercise 1.30) Describe the error in the following "proof" that 0*1* is not a regular language. (An error must exist because 0*1* is regular.) The proof is by contradiction. Assume that 0*1* is regular. Let p be the pumping length for 0*1* given by the pumping lemma. Choose s to be the string 0p1p. You know that s is a member of 0*1*, but Example 1.73 shows that s cannot be pumped. Thus you have a contradiction. So 0*1* is not regular.
7. If we try to apply the pumping lemma to a regular language, we cannot complete the proof. Explain what would go wrong if we tried to apply the pumping lemma to the language L = { } (L is the empty set).
8. Use the pumping lemma to show that the following languages are not regular:
9. For each of the following languages, determine if the
language is regular and prove your answer: