Indice
Preliminary test for the course on Models of Computation
There are no prerequisites for MOD, but we expect the students to have some familiarity with discrete mathematics, first-order logic formulas, context-free grammars, and code fragments in imperative and functional style.
We encourage the students to use the following basic exercises to self-assess their level of knowledge for the above arguments.
Exercise 1
Write the formal definitions of injective function and surjective function. Prove that the composition of two injective functions (respectively of two surjective functions) is an injective function (respectively, a surjective function).
Exercise 2
Are the formulas “(∀x. P(x)) ⇒ Q” and “∀x. (P(x) ⇒ Q)” equivalent?
Exercise 3
Let 7n denote the nth power of 7. Prove by induction that for any natural number n > 1 we have that 3 divides 7n - 1.
Exercise 4
Consider the strings (i.e., finite sequences) of symbols {0,1}. Let #0(s) and #1(s) denote the number of occurrences of 0 and 1 in the string s, respectively, and let sn denote the sequence obtained as the concatenation of n instances of the string s. Define context-free grammars that generate each of the following languages
- The set of all and only strings s such that #1(s) is odd.
- The set of all and only strings s such that #0(s) = #1(s).
- The set of all and only strings s such that s = (01)n for some natural number n.
- The set of all and only strings s such that s = 0n 1n for some natural number n.
Exercise 5
Let us consider the imperative code fragment
while (x!=0 and y!=0) do { x := x-y; y := y-1 }
where x and y are two integer variables. For which initial values of x and y does the execution of the above program terminate?