function {:existential true} b0(x:bool, y:bool): bool; function {:existential true} b1(x:bool, y:bool): bool; function {:existential true} b2(x:bool, y:bool): bool; var g: int; procedure main() modifies g; ensures b0(g == 0, g == 5); { g := 0; if(*) { g := 5; } call foo(); } procedure foo() modifies g; requires b1(g == 0, g == 5); ensures b2(g == 0, g == 5); { assume g != 5; }