Automata
Homeworks for the course CS 3350, Spring 2023

General comment. The main purpose of most homeworks is to show how well you understand the algorithms.

In many cases, the resulting finite automata, pushdown automata, and Turing machines can be simplified, but please first literally apply the algorithm so that we know that you can use it.

If in addition to this, you also show how to make the corresponding Turing machine or finite automaton or whatever more concise, nothing wrong with that, the TA may even give you some extra points (if she has time to grade these additional things). But the most important thing is to show that you can follow the algorithm.

For simple examples that we give you as homeworks:

So, it is important to learn how to follow the algorithm.

If you deviate from the algorithm, how do we know that you learned the algorithms? It was the same with sorting.

In general:

1. (Due January 25) In class, we designed automata for recognizing integers and real numbers.

1.1. Use the same ideas to describe an automaton for recognizing good passwords. A good password should contain at least one letter and at least one digit.

A natural idea is to have 4 states: start (s), has letters but not digits (l), has digits but no letters (d), and has both (p). Start is the starting state, p is the only final state. The transitions are as follows:

1.2. Trace, step-by-step, how the finite automaton from Part 1.1 will check whether the following two words (sequences of symbols) are good passwords:

1.3. Write down the tuple <Q, Σ, δ, q0, F> corresponding to the automaton from Part 1.1:

1.4. Apply the general algorithm for union and intersection of two automata A and B to:

In Java, a name of the variable should start with a letter, all other symbols can be letters or digits. A natural idea is to have 3 states: start (s), correct name (c), and error (e). Start is the starting state, c is the only final state. The transitions are as follows: For simplicity, in your automaton for recognizing the union and intersection of the two languages, feel free to assume that you only have symbols 0, 1, and a.

Solution to Homework 1

2. (Due February 1)

Solution to Homework 2

3. (Due February 1) Apply the general algorithm for transforming the finite automaton into a regular language (i.e., a language described by a regular expression) to Automaton B from Problem 1.4. For simplicity, assume that we only have symbols 0, 1, and a. Eliminate first the error state, then the start state, and finally, the state c.

Solution to Homework 3

4. (Due February 8) Write and test a method that simulates a general finite automaton. Your program should enable the computer to simulate any given finite automaton and then to simulate, for any given word, step-by-step, how this automaton decides whether this word is accepted by the automaton.

The input to this method should include the full description of the corresponding finite automaton:

When simulating a finite automaton, your program needs to keep track, at each moment of time, of the current state. Initially, the state is q0 -- which is described by number 0.

Turn in:

Feel free to use Java, C, C++, Fortran, or any programming language in which the code is understandable.

5. (Due February 8) Suppose that someone marks every time the price of a share increases (I) by $1 and decreases (D) by $1. As a result, you get a sequence like IDII. Based on the sequence, we want to detect whether eventually, the price increased, i.e., whether the sequence contained more increases than decreases. Prove that the language of all the sequences corresponding to eventual increase is not regular.

Solution to Homework 5

6. (Due February 8) Show, step by step, how the following pushdown automaton -- that checks whether a word consisting of letters I and D describes a share whose price increases -- will accept the word IDII. This pushdown automaton has three states:

In the stack, in addition to the bottom symbol $, we have: The transitions are as follows: From w to w, we have the following transitions:

Solution to Homework 6

7. (Due February 8) Show, step by step, how the following grammar describing valid names for variables in an alphabet consisting of 0, 1, and a will generate the word a01. In this grammar, N stands for names, L for letters, and D for digits. The rules are: N → L, N → NL, N → ND, L → a, D → 0, and D → 1.

Solution to Homework 7

8. (Due March 1) In the corresponding lecture, we described an algorithm that, given a finite automaton, produces a context-free grammar -- a grammar that generate a word if and only if this word is accepted by the given automaton.

Solution to Homework 8

9. (Due March 1) Use a general algorithm to construct a (non-deterministic) pushdown automaton that corresponds to context-free grammar described in Problem 7. Show, step by step, how the word a01 will be accepted by this automaton.

Solution to Homework 9

10. (Due March 1) Transform the grammar from Homework 7 into Chomsky normal form.

Solution to Homework 10

11. (Due March 1) Use the general algorithm to transform the pushdown automaton from Problem 6 into a context-free grammar. Show, step-by-step, how the resulting grammar will generate the word IDII.

Solution to Homework 11

12. (Due March 8) For the grammar described in Homework 7, show how the word a01 can be represented as uvxyz in accordance with the pumping lemma for context-free grammars. Show that the corresponding word uvvxyyz will be generated by this grammar.

Solution to Homework 12

13. (Due March 8) Let us denote the most frequent letter in a language by M, the second most frequent by S, and the third most frequent by T. (For example, in English, the most frequent letter is the letter E.) Prove that the language of all the sequences of letters M, S, and T in which there are twice more M's than S's and three times more M's than T's is not context-free.

Solution to Homework 13

14. (Due March 8) Show, step by step, how the stack-based algorithm will transform the expression (3 / 1) − (1 * 3) into a postfix expression, and then how a second stack-based algorithm will compute the value of this postfix expression.

Solution to Homework 14

15. (Due March 22) Design a Turing machine that, given a unary number n, adds 2 to this number. Test it, step-by-step, on the example of n = 3.

Solution to Homework 15

16. (Due March 22) Design a Turing machine that, given a positive binary number n ≥ 4, subtracts 4 from this number. Test it, step-by-step, on the example of n = 6.

Solution to Homework 16

17. (Due March 22) Use the general algorithm to transform a finite automaton B from Homework 1.4 -- as simplified in Homework 3, into a Turing machine. Show step-by-step, on an example of a word a01, how this word will be processed by your Turing machine.

Solution to Homework 17

18. (Due April 5) Write a program that, given an arithmetic expression,

You can assume that the expression contains no variables, only numbers, and all the numbers are one-digit numbers, i.e., each of these numbers is either 0, or 1, or 2, ..., or 9. For example, your program should correctly process expressions like 2+3*4, but there is no need to process expressions like 11+22. For simplicity, assume that the only arithmetic operations are addition +, subtraction −, and multiplication *, and that there are no parentheses.

Comments:

19. (Due April 5) As described in the corresponding lecture, every grammar obtained from a finite automaton is LL(1). For the grammar from Homework 8, build the corresponding table.

Solution to Homework 19

20. (Due April 12) As we discussed in the corresponding lecture, a Turing machine can be described as a finite automata with two stacks:

On the example a Turing machine that computes n + 1 for a binary number n = 3, show, step-by-step:

Solution to Homework 20

21. (Due April 12) Write and test a method that simulates a general Turing machine. Your program should enable the computer to simulate any given Turing machine for accepting-rejecting and then to simulate, for any given word, step-by-step, how this Turing machine decides whether this word is accepted or not.

The input to this method should include:

This program needs to keep track of a current location of the head. Initially, this location is 0.

Your program should simulate the work of the Turing machine step-by-step. Return the printout of the method, the printout of the program that you used to test this method, and the printout of the result of this testing. Feel free to use Java, C, C+++, Fortran, or any programming language in which the code is understandable.

22. (Due April 12) Give two examples:

These examples should be different from what you learned in class -- a minor difference is OK.

Solution to Homework 22

23. (Due April 19) What is NP? What is P? What is NP-complete? What is NP-hard? Give brief definitions. Give an example of an NP-complete problem. Is P equal to NP?

Solution to Homework 23

24. (Due April 19) Prove that the cubic root of 18 is not a rational number.

Solution to Homework 24