property HasNext prefix start -> start: * start -> invalid: I = iterator(*) invalid -> valid: = hasNext(i) // treat as shorthand for = hasNext if (b) valid -> invalid: next(i) invalid -> error: next(i) property UnsafeIterator prefix start -> iterating: I = iterator(C) iterating -> modified: remove(c, *) iterating -> modified: add(c, *) modified -> error: next(i) property UnsafeMapIterator start -> start: * start -> gotView: View = keySet(M) start -> gotView: View = values(M) gotView -> iterating: I = iterator(view) iterating -> updated: put(m, *) updated -> error: next(i) property SkipIndexAfterRemove prefix start -> start: * start -> removed: remove(Collection, Index) removed -> ok: get(collection, index) removed -> error: get(collection, J) // TODO: if (j!=index)