//@ model import org.jmlspecs.models.JMLObjectBag; public abstract class PriorityQueue { //@ public nullable model JMLObjectBag queue; //@ ghost non_null JMLObjectBag ghostQueue; in queue; //@ private represents queue <- ghostQueue; public PriorityQueue() { //@ set ghostQueue = new JMLObjectBag(); } /*@ public normal_behavior @ ensures queue.equals(\old(queue).insert(o)); @ modifies queue; @*/ public abstract void enqueue(/*@non_null@*/ Comparable o); /*@ public normal_behavior @ requires !isEmpty(); @ ensures \old(queue).has(\result) && @ queue.equals(\old(queue).remove(\result)) && @ (\forall Comparable o; queue.has(o); \result.compareTo(o) <= 0); @ modifies queue; @*/ public abstract /*@non_null@*/ Comparable removeFirst(); /*@ public normal_behavior @ ensures \result == (queue.isEmpty()); @*/ public abstract /*@pure@*/ boolean isEmpty(); }