type Box, C;
function box(a) returns (Box);
function unbox(Box) returns (a);
axiom (forall x:a :: unbox(box(x)) == x);
axiom (forall x:Box :: {unbox(x):a} box(unbox(x):a) == x);
axiom (forall x:Box :: box(unbox(x)) == x); // warning
procedure P() {
var b : Box;
var i : C;
assert unbox(box(13)) == 13;
i := unbox(b);
assert b == box(i);
assert false;
}