public boolean isLessOrEqual(PointerComposeState pState) {
   if (this == pState) {
     return true;
   }
   if (this.pointerState != pState.pointerState) {
     if (this.pointerState.getPointsToMap().size() > pState.pointerState.getPointsToMap().size()) {
       return false;
     }
     for (Entry<IRealLocation, LocationSet> pointsToEntry :
         pointerState.getPointsToMap().entrySet()) {
       LocationSet rightSide = pState.pointerState.getPointsToSet(pointsToEntry.getKey());
       if (rightSide == null || !rightSide.containsAll(pointsToEntry.getValue())) {
         return false;
       }
     }
   }
   if (this.heap != pState.heap) {
     for (Entry<IRealLocation, Memory> pointsToEntry : heap.get().entrySet()) {
       Memory rightSide = pState.heap.get(pointsToEntry.getKey());
       if (rightSide == null || !pointsToEntry.getValue().isLessOrEqual(rightSide)) {
         return false;
       }
     }
   }
   return true;
 }
 @Override
 public String toString() {
   String result = "pointer: " + pointerState.toString() + "\n";
   result += "heap: " + heap.toString() + "\n";
   for (IFaultResult warning : getCollector().getResults()) {
     result += "\n" + warning.toString();
   }
   return result;
 }
 @Override
 public PointerComposeState clone() {
   return new PointerComposeState(pointerState.clone(), heap.clone());
 }