We introduced loop invariants and the four "loopy questions":
- initialization: does it start right?
- termination: does it end right?
- progress: does it eventually finish?
- preservation: is the invariant always true at the end of the loop body?
We applied this to developing pseudocode for heap insertion and removal, as well as binary search