Q1 Syntax (a) This true/false part was answered well by everyone (b) This part asked to derive certain strings in the grammar, and was answered well by almost everyone. A single mark was deducted from anyone who misused notation. (c) This part asked to compute the parse table and was answered well by the vast majority of students. (d) This part asked to construct grammars to express certain languages. It was answered completely correctly by about half of students. Of those who didn’t answer it correctly, it was usually the final part in which one substring is required to be the reverse of another that caused problems. There were also a large number of small mistakes, such as forgetting an empty string case. (e) This part asked to construct an LL(1) grammar equivalent to a given grammar. Most students were either completely correct, or lost a mark for mistreating the unary postfix "tycon" operator, which required a slightly different treatment from the binary operators (depending on how it was approached). (f) This part asked to construct a grammar to express the language of all words where any two occurrences of 1 are separated by an even number of letters. Well done to the 17 students who correctly identified that such strings can contain at most two 1s. Most students ensured that the 1s are separated by an even number of zeros, for which partial marks were awarded. (g) This part asked to show that no string of shape uauvbv can be written as ww for some choice of w. Four students gave a fully correct argument, either by arguing that the distinguished a and b must occur at the same position in the first and second w respectively, or that the number of a in any word of shape uauvbv must be odd whereas the number of a in any word of shape ww must be even. Q2 Semantics (a) This part was about identifying expressions and statements and evaluating denotation and operational semantics. Generally very well answered with most marks being lost to misreading the question or miscalculations rather than misunderstandings. (b) The part was about a new language construct and semantic equivalence. This question was less well answered. Many students demonstrated that they understood the behaviour of the new construct in supporting questions but struggled in constructing a proof of semantics equivalence. (c) This part was about program termination and proof by induction. For a three start question, this was answered very well. Most students were able to evaluate the program and identify a state in which it does not terminate. The proof by induction required to show that the program terminates was a tricky question and, although only a few students were able to identify a suitable induction variant, many students were able to structure the argument appropriately and apply strong induction. Q3 Computability (a) This part asked to show a function was computable. It was generally well-answered; some students gave confusing code that did not do the right thing. Many remembered to invoke the Church-Turing thesis when they didn't write in WHILE. (b) This 1* part asked about the truth of certain statements. It was also done reasonably well, with an average of 4/5. Many students got subpart (v) wrong: there are certainly invertible functions that are not computable. (c) This 2* part asked about the truth of certain statements. It was slightly more challenging, with many students getting (ii) wrong: as this unit is about N -> N, all computers are as powerful as While. (v) was also problematic, with many students forgetting that being a bijection and being computable don't necessary have something to do with each other. (d) This part asked to determine if a predicate is semi-decidable. It proved surprisingly challenging, despite being a straightforward adaptation of arguments given in the unit. Many students were not able to adapt the "try all numbers from 0 to 10^5" argument. The average was slightly shorter, at 3.91/5. (e) and (f) asked to show undecidability of some predicate. These were the most challenging questions in Q3, both involving a reduction. Students did very well compared to previous years, achieving averages of 2.58/5 and 2.10/5 respectively, with 41% of the year being able to convincingly perform the reduction in (e) and 32% in (f). For (e) this number might be inflated: many students repeated a reduction from the notes verbatim, which by chance happened to also work for this problem.