/*@ code_java_math */ public class EscModelFields { private int rep; //@ in value; //@ public model int value; //@ private represents value = -rep; //@ public invariant value >= 0; //@ requires v >= 0; //@ modifies this.*; //@ ensures value == v; public EscModelFields(int v) { rep = -v; } //@ requires this != other; //@ modifies value; //@ ensures value == (other.value + \old(value)); public void increase(EscModelFields other) { //@ ghost boolean b = (\lbl SAME this == other); rep = rep + other.rep; } //@ assignable \nothing; //@ ensures \result.value == (other.value + value); public EscModelFields add(EscModelFields other) { int r = rep + other.rep; return new EscModelFields(-r); } }