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; } };