method main(n: int)
{
    var x := n;
    var y := 0;

    while x > 0
        invariant x + y == n
    {
        x := x - 1;
        y := y + 1;
    }

    assert x == 0 ==> y == n;
}

method check_array_positive(a: array<int>)
    returns (b: bool)
    ensures b <==> forall i | 0 <= i < a.Length :: a[i] > 0
{
    var j := 0;

    while j < a.Length
      invariant j <= a.Length
      invariant forall i | 0 <= i < j :: a[i] > 0
    {
        if a[j] <= 0 {
            return false;
        }
        j := j + 1;
    }

    return true;
}
