method metodaExemplu(x : int, y : int) returns (r : int) { var z := x + y; return 17; r := 13; return; r := z; } method ex1() { var r := metodaExemplu(13, 14); print r; // 17 } method minMax(x : int, y : int) returns (min : int, max : int) { if x < y { min := x; max := y; } else { min := y; max := x; } } /* method fail1() { var z := 0; /* if 3 > 4 z := 13; else z := 14; */ } */ method ex2() { var min, max := minMax(18, 13); // print min, max; // 13, 18 } method minMax1(x : int, y : int) returns (min : int, max : int) ensures min <= x <= max ensures min <= y <= max ensures min == x || min == y ensures max == x || max == y { if x < y { min := x; max := y; } else { min := y; max := x; } } method minMax2(x : int, y : int) returns (min : int, max : int) ensures min <= x <= max ensures min <= y <= max // ensures min == x || min == y // ensures max == x || max == y { if x < y { min := x; max := y; } else { min := y; max := x; } } method useMinMax() { assert 1 < 3; // assert 3 < 1; // (fails) // assert forall x : int :: x < x + 13; var x, y := minMax(13, 18); // assert x <= y; (fails) var a, b := minMax1(13, 18); assert a <= b; assert a == 13; var u, v := minMax2(13, 18); assert u <= v; // assert u == 13; (fails) }