Now for your questions:
(a,5) Describe in words how to calculate rho-1 on a number.
(b,10) Argue that the regular language
(00+01)*(epsilon + 0 + 1S*)
equals the language S*, and that every string has exactly one way to write it as a string in (00+01)* followed by a string in (epsilon + 0 + 1S*). (Here epsilon is the empty string, and I am using "+" for the union operator.)
(c,15) Argue that both alleged bijections (rho and P) are really bijections. That is, argue that any valid inputs to Chris' script will give outputs, that functions alleged to be inverses of each other really are, and that no two different inputs will give the same output.
The basic program is a function from some fixed number of inputs to one output, and only a constant number of variables may be used in a program. (The "1" in "input(1)" cannot be replaced by a variable, for example.) The basic statement is an assignment, with a variable on the left-hand side and an expression in variables, function calls, and number constants, using plus and times, on the right-hand side. The function ends when a value is assigned to "output" (as in a C/Java "return" statement).
The difference between the two languages is in their control structures. In Bloop you have a bounded loop. If P is a block of code and x is a variable not assigned to in P, then "loop x times P" is a block of code. In Floop you have "free loops" as well as bounded loops: if P is a block of code containing a "break" statement, then "loop P" is a block of code equivalent to C/Java "while (true) P". (Also see the clarifications of the syntax on the questions and answers page.)
Last modified 24 February 2003