function union( [a] bool, [a] bool) returns ( [a] bool); axiom (forall // error: alpha has to occur in dummy types x : [a] bool, y : [a] bool, z : int :: { union(x, y)[z] } union(x, y)[z] == (x[z] || y[z])); function poly() returns (a); axiom (forall x : [a] bool, y : [a] bool, z : int :: { union(x, y)[z], poly() : alpha } union(x, y)[z] == (x[z] || y[z]));