CSE 460 - Solutions to Sample Final Exam Exam # Fall Semester, 2000 Name The The The The 1.0 2.0 3.0 4.0 points points points points on on on on this this this this exam exam exam exam sum sum sum sum to to to to 26. 23. 21. 16. There is one question on Chomsky Normal Form worth a total of 3 extra credit 4.0 points. 1. Draw the computation tree of PDA M on input string aabb. Is the input string accepted? [4, 1.0] • Q = {B, C, D, E, F, G, H} • Σ = {a, b} • Γ = {a, X, Y, Z} • q0 = B • Z0 = Z • A = {E, H} • δ: Move Current Input Top of Next Stack Number State Symbol Stack State Update --------------------------------------------------------1 B /\ Z C X 2 B /\ Z F Y 3 4 5 6 7 C C C D D a a b b /\ X a a a X C C D D E aX aa /\ /\ X 8 9 10 11 F F F G a a b b Y a a a F F G G aaY aaa /\ /\ 1 12 G /\ (C, (C, (C, (D, (D, (E, Y H Y (B, aabb, Z) / \ / \ aabb, X) (F, aabb, Y) abb, aX) (F, abb, aaY) bb, aaX) (F, bb, aaaaY) b, aX) (F, b, aaaY) /\, X) (F, /\, aaY) /\, X) The input string aabb is accepted because we reach configuration E, λ, X). 2. Consider the following grammar G1 defined in abbreviated format. S → SSS | b. (a) Give the 4 shortest strings in L(G1 ). [2, 1.0] b, bbb, bbbbb, bbbbbbb (b) Draw a leftmost derivation of the string bbbbb. [2, 1.0] S ⇒ SSS ⇒ bSS ⇒ bbS ⇒ bbSSS ⇒ bbbSS ⇒ bbbbS ⇒ bbbbb (c) Draw the derivation tree that corresponds to your leftmost derivation above. [2, 1.0] S /|\ / | \ S S S / / /|\ / / / | \ b b S S S | | | | | | b b b (d) Draw the rightmost derivation that corresponds to your leftmost derivation above. [2, 1.0] S ⇒ SSS ⇒ SSSSS ⇒ SSSSb ⇒ SSSbb ⇒ SSbbb ⇒ Sbbbb ⇒ bbbbb (e) Prove that G1 is an ambiguous grammar. [2, 2.0] I can prove G1 is ambiguous by coming up with an alternative leftmost derivation of bbbbb such as S ⇒ SSS ⇒ bSS ⇒ bSSSS ⇒ bbSSS ⇒ bbbSS ⇒ bbbbS ⇒ bbbbb (f) What is L(G1 )? [2, 1.0] L(G1 ) is the set of strings with an odd number of b’s. (g) Give a regular expression r such that L(r) = L(G1 ). [2, 1.0] b(bb)∗ 3. Given the following two grammars G1 and G2 , construct a new grammar G3 such that L(G3 ) = L(G1 ) ∪ L(G1 )L(G2 ). [2, 2.0] 2 • G1 : S → SSS | a • G2 : S → b | bb | bbb We could do this by first applying the concatenation construction and then the set union construction. However, we can do this shorter by observing this language is also L(G1 )(λ ∪ L(G2 ). This leads to • V = {S, T, U } • Σ = {a, b} • Start variable S • S → T U | T , T → T T T | a, U → b | bb | bbb 4. Consider the following grammar G. • V = {S, U } • Σ = {a, b} • Start variable is U • Productions – U → bbU | S – S → aS | λ Suppose M is the PDA that results from applying the construction given in class so that L(M ) = L(G). List all the transitions in M . [2, 2.0] Current Input Top of Next Stack State Symbol Stack State Update ---------------------------------------------q0 /\ Z q1 UZ q1 /\ Z q2 Z q1 /\ U q1 bbU q1 /\ U q1 S q1 /\ S q1 aS q1 /\ S q1 /\ q1 a a q1 /\ q1 b b q1 /\ 5. Questions about regular language constructions (a) Suppose we apply the construction covered in class to construct an NFA-λ M3 from NFA-λ M1 with 8 accepting states and NFA-λ M2 with 7 accepting states such that L(M3 ) = L(M1 ) ∪ L(M2 ). How many accepting states does M3 have? [2, 2.0] 15 accepting states (b) Suppose we apply the construction of Theorem 4.1 and construct an FSA M5 from NFA M4 with 3 states total, 1 of which is accepting, such that L(M5 ) = L(M4 ). How many accepting states does M5 have counting all states that are unreachable from the initial state? [2,2.0] 4 accepting states 3 6. C ++ Program P and language Y (P ) (a) For any program P , which of the following represents Y (P ): [2, 1.0] • The set of strings P accepts. • The set of strings P rejects. • The set of strings P loops on. The set of strings P accepts. (b) Suppose program P loops on input string aa. Is it possible that Y (P ) is solvable? Why or why not? [2, 3.0] Yes, it is possible. Y (P ) is solvable if some program solves L(P ). This program cannot be P since P loops on aa, but some other program might decide L(P ) which would make it solvable. 7. In each of the following scenarios concerning problems P1 and P2 , describe what additional facts must be true about problems P1 and P2 . The correct answer should be one of {none, P1 is solvable, P2 is solvable, P1 is not solvable, P2 is not solvable}. [2, 3.0] (a) P2 is not solvable and P1 ≤ P2 . None. (b) P2 is solvable and P1 ≤ P2 . P1 is solvable. (c) P1 is not solvable and P1 ≤ P2 . P2 is not solvable. (d) P1 is solvable and P1 ≤ P2 . None. 8. Classify the following statements as true or false. No proof is necessary. [7, 3.0] (a) Every FSA is an NFA. True (b) There exists a regular language L such that L cannot be accepted by a deterministic FSA. False (c) There exists a CFL L such that L cannot be accepted by a deterministic PDA. True (d) If L1 ⊆ L2 and L2 is regular, then L1 must be regular. False (e) The Halting problem where the input program is an FSA is unsolvable. False (f) Every regular language can be accepted by some FSA with only 3 states. False (g) Every CFL can be accepted by some PDA with only 3 states. True 9. Give a CFG G such that L(G) is the set of strings over {a,b} with two more a’s than b’s. [2, 4.0] • V = {S, E} • Σ = {a, b} • Start variable S • S → EaEaE, E → aEbE | bEaE | λ 4 10. Consider the following incomplete construction. • Input – PDA M1 = (Q1 , Σ, Γ1 , q1 , Z1 , A1 , δ1 ) – PDA M2 = (Q2 , Σ, Γ2 , q2 , Z2 , A2 , δ2 ) • Output – PDA M3 = (Q3 , Σ, Γ3 , q3 , Z3 , A3 , δ3 ) such that L(M3 ) = L(M1 ) ∪ L(M2 ). (a) Fill in the values for each of the components of M3 . You may assume that no renaming is needed. [2, 4.0] • • • • • • Q3 = Q1 ∪ Q2 ∪ {p} where p is a new symbol not in Q1 ∪ Q2 . Γ3 = Γ1 ∪ Γ2 ∪ {Z} where Z is a new symbol not in Γ1 ∪ Γ2 . q3 = p Z3 = Z A3 = A1 ∪ A2 δ3 = δ1 ∪ δ2 ∪ {(p, λ, Z, q1 , Z1 ), (p, λ, Z, q2 , Z2 )} This construction is a generalization of the one used to combine two NFA’s together to handle set union. (b) What does this construction help us prove? [2, 3.0] That CFL’s are closed under set union. 11. Applying closure properties (a) Which one of the following five closure property “proofs” actually proves that the language L IS context-free? [2, 1.0] (ii) (b) Which one of the following five closure property “proofs” actually proves that the language L IS NOT context-free? [2, 3.0] (v) i. We show L1 ∩ L = L2 where L1 is a context-free language and L2 is a half-solvable but not solvable language. ii. We show that L1 ∩ L2 = L where L1 is a context-free but not regular language and L2 is a finite language. iii. We show that L1 ∩ L = L2 where L1 is a context-free language and L2 is not a context-free language. iv. We show that L1 ∩ L2 = L where L1 is a context-free language and L2 is a contextfree language. v. We show that L1 ∩L = L2 where L1 is a regular language and L2 is not a half-solvable language. 12. Consider the language L = {ai bj | j < i}. Let n be the integer from the pumping lemma. For each of the following strings, state whether or not they can or cannot be used in a pumping lemma proof that L is not regular. For those which can be used, give a value of k that works. For those which cannot be used, describe why they cannot be used. [3, 2.0] and [2, 4.0] (a) an bn Cannot be used because it is not in L (b) a11 b10 Cannot be used because it does not hold for large n 5 (c) a2n bn Cannot be used because it “pumps.” Let u = λ, v = a, and w = a2n−1 bn . For all values of k ≥ 0, uv k w ∈ L. The problem is when k = 0, we can only guarantee one a is eliminated which still leaves us in the language. (d) a2n+1 b2n This can be used, and the only value of k which works is 0. (e) (ab)n a Cannot be used because it “pumps.” Let u = λ, v = ab, and w = (ab)n−1 a. For all values of k ≥ 0, uv k w ∈ L. Since v contains an equal number of a’s and b’s, no matter how many times v is pumped, we stay in the language. 13. Provide the start of a table which proves that all the strings in aa∗ are pairwise distinguishable with respect to the language T W OCOP IES = {ww | w ∈ {a, b}∗ }. [2, 4.0] bab bbaabb bbbaaabbb ... -------------------------------------------------a IN OUT OUT ... aa OUT IN OUT ... aaa OUT OUT IN ... ... ... ... ... ... 14. Consider grammar G = ({S}, {a, b}, S, S → ab|aSb) and the language AB = {an bn | n ≥ 1}. (a) In order to prove that L(G) ⊆ AB, which of the following statements would we try and prove? Circle your answer. [2, 2.0] • S ⇒∗G x implies x ∈ AB • x ∈ AB implies S ⇒∗G x The first choice is correct. (b) Modify the above statement so that it represents an infinite set of statements parameterized by n, the number of steps required to derive string x. [2, 2.0] ∀n ≥ 1 S ⇒nG x implies x ∈ AB (c) Suppose we prove your answer to part (b) is correct using induction on n. Prove the base case. [2, 2.0] The base case is n = 1. The only string which can be derived in 1 step is the string ab which clearly is in AB. Thus the base case holds. (d) Now consider the inductive case. Is a strong induction hypothesis required? Why or why not? [2, 3.0] No, it would not. The reason is that I will end up with S ⇒ aSb ⇒n x which means that x has the form aub where S ⇒n u. Since it takes exactly n steps, a normal induction hypothesis will suffice. 15. Suppose your are using a debugger to check the correctness of a program P . First describe how debuggers such as ddd and gdb operate on P . Next suppose the halting problem is solvable. Describe how this might change the way a debugger operates on P . [2, 3.0] 6 Debuggers such as ddd and gdb operate on P by executing P on an input x of your choosing step by step. They allow you to set breakpoints and view the current configuration of P on x at any time during the computation. They do not perform any analysis of program P . If the halting problem were solvable, we might be able to create a debugger which analyzes program P to determine if it is correct rather than simply executing it on an input string. 16. Ambiguous grammars (a) Define what it means for a CFG G to be ambiguous. [2, 1.0] A grammar is ambiguous if there exists some string x ∈ L(G) such that there are two distinct parse trees for string x. (b) Identify which one of the following statements most accurately represents why we do not like ambiguous grammars. Circle your answer. [2, 3.0] • If the grammar for a programming language is ambiguous, there is more than one way to interpret the meaning of some programs. • If the grammar for a programming language is ambiguous, there is more than one way to write a program to solve some problems. • If the grammar for a programming language is ambiguous, there is more than one way to build a compiler for that programming language. The first choice is correct. 17. Let EM P T Y R and EM P T Y G be defined as follows: • EM P T Y R – Input: regular expression r – Question: Is L(r) = {}? • EM P T Y G – Input: CFG G – Question: Is L(G) = {}? Suppose f is a function that shows that EM P T Y R ≤ EM P T Y G. (a) Give a specification for f . That is, state what its input and output should be and how they should be related to each other. [2, 2.0] The input should be a regular expression r. The output should be a CFG G such that L(G) = L(r). (b) Give an algorithm f that shows that EM P T Y R ≤ EM P T Y G. You do not need to specify all the details of your algorithm, but your answer should be fairly complete. One possibility is to describe this algorithm in terms of another algorithm we have seen in class highlighting where this algorithm is different from the previous construction. [2, 4.0] One way to do this is to modify the algorithm which converts a regular expression into an NFA-λ into one which converts a regular expression into a CFG. The base cases are easily handled by grammars of the form S → a or S → λ or a grammar with no productions. The recursive cases are handled by applying the CFG constructions for union, concatenate, and Kleene closure in place of the corresponding NFA-λ constructions. 7 18. For program P 000 , assume that the input alphabet is {0, 1}. Consider the following program P3 • Input: A program P 0 and an integer x which is input for program P 0 • Output: A program P 000 as follows: bool main(string z) { P’(x); if ((|z| % 2) == 0) return(no); else return(yes); } bool P’(int x) /* Details unspecified */ (a) If P 0 halts on x, what is Y (P 000 )? [2, 1.0] Y (P 000 ) is the set of odd length strings over {0, 1}. (b) If P 0 loops on x, what is Y (P 000 )? [2, 1.0] Y (P 000 ) = {} (c) This program P3 can be used to prove that the halting problem transforms to some of the following problems. Identify all such problems, and for those which this does not apply, state whether or not there is a Yes→No violation or a No→Yes violation. You must get at least 5 correct to receive any credit. [2, 4.0] i. ii. iii. iv. v. vi. Input: Input: Input: Input: Input: Input: Program Program Program Program Program Program P. P. P. P. P. P. Yes/No Yes/No Yes/No Yes/No Yes/No Yes/No Question: Question: Question: Question: Question: Question: Is Y (P ) nonempty? Is Y (P ) is infinite? Is Y (P ) is regular? Is Y (P ) is context-free? Does Y (P ) contain 00? Does Y (P ) contain 000? It works for the first, second, and sixth options. The third has a No→Yes violation. The fourth has a No→Yes violation. The fifth has a Yes→No violation. 19. Let me define the NotAccepting Problem N as follows: • Input: Program P , integer x which is an input to program P . • Yes/No Question: Does P not accept x? Consider the following incomplete diagonalization proof that N , the NotAccepting Problem, is not solvable. • Assume N is solvable. • Let P N be the program which solves N . – P N exists by the definition of solvable languages. • We construct a program D using P N which cannot exist. – Construction of D to be filled in. – Argument that D cannot exist omitted. • Contradiction. Our assumption that N is solvable must be false. • We conclude that N must not be solvable. 8 (a) Define what it means if P N (P, y) = yes for a program P and an integer y. A correct answer should be a single, very specific sentence about P and y. [2, 2.0] This means program P does not accept integer y. (b) Both of the following programs D cannot be used in the above proof. For each program, choose one clause of the IF-THEN-ELSE statement which causes a problem and explain why that clause is a problem. [2, 4.0] • D1 bool main(int y) { program P = calculate(y); if (PN(P,y)) return(no); else return(yes); } program calculate(int x) /* Details unspecified */ bool PN(program P, int x) /* Details unspecified */ Both clauses are incorrect for this choice of D. If P N (P, y) = yes, this means P does not accept integer y. We need to do the opposite for the THEN case which means we need D to accept y to make D behave differently on input y. Likewise if P N (P, y) = no, this means P accepts input y which means we need D to not accept y. • D2 bool main(int y) { program P = calculate(y); if (PN(P,y)) while (1>0) {}; else return(no); } program calculate(int x) /* Details unspecified */ bool PN(program P, int x) /* Details unspecified */ In this case, only the first clause is incorrect. We need to accept y in this case. The ELSE clause correctly does not accept y. (c) Give a program D which would work in the above proof. [2, 4.0] bool main(int y) { program P = calculate(y); if (PN(P,y)) return(yes); else return(no); } program calculate(int x) /* Details unspecified */ bool PN(program P, int x) /* Details unspecified */ 20. To receive any credit for the following problem, you must use the algorithm described in the textbook. Consider the following grammar with start variable S. S → T U V, T → λ | bT, U → λ | aU, V → λ | ccV (a) Show the grammar that results after eliminating null productions. [1, extra credit 4.0] • S → T | U | V | TU | TV | UV | TUV • T → b | bT • U → a | aU 9 • V → cc | ccV (b) Show the grammar that results after eliminating unit productions. [1, 4.0] • • • • S → b | bT | a | aU | cc | ccV | T U | T V | U V | T U V T → b | bT U → a | aU V → cc | ccV (c) Show the grammar in Chomsky Normal Form. [1, 4.0] • • • • • • • • • S → b | BT | a | AU | CC | CD | T U | T V | U V | T E T → b | BT U → a | AU V → cc | CD A→a B→b C→c D → CV E → UV 10
© Copyright 2024