interface Math {
  method Min2(a: int, b: int) returns (ret: int)
    ensures a < b ==> ret = a
    ensures a >= b ==> ret = b

  method Min3Sum(a: int, b: int, c: int)
      returns (ret: int)
    ensures ret in {a+b a+c b+c}
    ensures forall x :: x in {a+b a+c b+c} ==> ret <= x

  method Min4(a: int, b: int, c: int, d: int)
      returns (ret: int)
    ensures ret in {a b c d}
    ensures forall x :: x in {a b c d} ==> ret <= x

  method Abs(a: int) returns (ret: int)
    ensures ret in {a (-a)} && ret >= 0
}

datamodel Math {}