import java.util.ArrayList; public class Pair<T> { protected /*@ spec_public @*/ T first, second; /*@ assignable first, second; @ ensures first == fst && second == snd; @*/ public Pair(T fst, T snd) { first = fst; second = snd; } /*@ ensures \result == first; @*/ public /*@ pure @*/ T getFirst() { return first; } /*@ ensures \result == second; @*/ public T getSecond() { return second; } /*@ public model_program { @ normal_behavior @ ensures \result != null && \result instanceof ArrayList<S> @ && \result.size() == 2; @ \result.add(0,p.run(first)); @ \result.add(1,p.run(second)); @ return res; @ } @*/ public <S> ArrayList<S> mapToAl(Proc<T,S> p) { ArrayList<S> res = new ArrayList<S>(2); res.add(0, p.run(first)); res.add(1, p.run(second)); return res; } }