due: Monday, September 30
For each of the following Cubex statements, give typing contexts Δ and Γ (assume Ψ=Ψ0 and the other contexts are empty) in which it type checks with some return type and outgoing context, or else explain why it can't be done.
if (x + 2 == 4) return x;
x := 0; while (f(x,y)) x := x + f(y,x);
return [b, get([3, f], y)];
In context Ψ = ∅ and Θ = A, B,
show the full typing derivation proving that Iterable<A&B> is a subtype of Iterable<A>&Iterable<B>.
“do-until” statement:
do s until (e)
The do-until statement executes the statement s until afterwards e evaluates to true.
In particular, s is evaluated at least once, and is always evaluated by the time e is evaluated.
Consequently, the following program is safe
x := 0;
do {
y := x + 1;
x := y + 1;
} until (x * y > 100)
return integerToString(x * y);
and produces the string “132”.
Give a suitable type rule for do-until extending the Cubex specification for statements without returns.
(CS 5120 only) A common pattern in Cubex is to have iterables that are either empty or singleton.
Extend the various typing and validity rules so that Cubex has a new type Maybe<T> that is a subtype of Iterable<T> and covariant with respect to T.
There should be special rules making [] and [e] be Maybes.
Lastly, add rules for a new statement exists (v in e) s that is like for but only works on Maybes.