2 (* EWD 673: On Weak and Strong Termination *)
10 val any_bool () : bool
11 val any_nat () : int ensures { result >= 0 }
13 let s (x: ref int) (y: ref int) =
14 requires { !x >= 0 /\ !y >= 0 }
15 while !x > 0 || !y > 0 do
16 invariant { !x >= 0 /\ !y >= 0 }
18 if !x > 0 then begin decr x; y := any_nat () end;