type Set a = [a]bool;
function union(x : Set a, y : Set a) returns (Set a);
axiom (forall x : Set a, y : Set a, z : a :: (x[z] || y[z]) == union(x, y)[z]);
const intSet0 : Set int;
axiom (forall x:int :: intSet0[x] == (x == 0 || x == 2 || x == 3));
const intSet1 : Set int;
axiom (forall x:int :: intSet1[x] == (x == -5 || x == 3));
procedure P() returns () {
assert (forall x:int :: union(intSet0, intSet1)[x] ==
(x == -5 || x == 0 || x == 2 || x == 3));
}