class C { var value:int; predicate inv { acc(value) } function get():int requires inv; { unfolding inv in value } method set(newval:int) requires inv; ensures inv && get()==newval; { unfold inv; value:=newval; fold inv; } method callmethod0() requires inv; ensures inv && get()==3; { call set(3); } method callmethod1() { call set(3); // ERROR: should fail } method ifc() requires inv; ensures inv && get()>old(get()) { if(get()>0) { call set(get()+get()); } else { call set(2); } } method loop0() returns (r:int) requires inv && get()>0; ensures inv && r==get(); { r:=0; while (r0; ensures inv && r==get(); { r:=0; while (r