class ctr { \fbox{doubly-bounded \c{counter}
int n, lb, ub;
public:
ctr(int l, int, u) : n(0), lb(l), ub(u) {
promise( invariant() );
}
void inc() {
require( n < ub );
n++;
promise( invariant() );
}
void dec() {
require( lb < n );
n--;
promise( invariant() );
}
int value() { return n; }
protected:
bool invariant() { return lb <= n && n <= ub; }
};