I do not understand why we use ==> instead of just using && all the time to perform implication. Take this code I found online, for example:
var a: array <int> := new int[3];
a[0], a[1], a[2] := 1,1,1;
assert forall j:: 0 <= j < a.length ==> a[j] == 1;
assert exists j:: 0 <= j < a.length && a[j] == 1;
Why not just use && instead of implication. Because we are using implication, the left side can be false and the right side will still be true. i.e. an array index can be out of bounds, and at that index, say, a[-10], the element would be 1. a[-10] == 1