/**
  * Translates a BoogieType to a Prover Type
  *
  * @param t
  * @return
  */
 private ProverType type2ProverSort(BoogieType t) {
   if (t.getName().compareTo("int") == 0) {
     return theoremProver.getIntType();
   } else if (t.getName().compareTo("bool") == 0) {
     return theoremProver.getBooleanType();
   } else if (t.getName().compareTo("$stringsizetype") == 0) {
     ProverType[] argTypes = {theoremProver.getIntType()};
     return theoremProver.getArrayType(argTypes, theoremProver.getIntType());
   } else if (t instanceof BoogieFieldType) {
     return theoremProver.getIntType();
   } else if (t instanceof BoogieArrayType) {
     ProverType[] argTypes = {theoremProver.getIntType()};
     return theoremProver.getArrayType(
         argTypes, type2ProverSort(((BoogieArrayType) t).getNestedType()));
   } else if (t instanceof HeapType) {
     ProverType[] argTypes = {theoremProver.getIntType(), theoremProver.getIntType()};
     return theoremProver.getArrayType(argTypes, theoremProver.getIntType());
   } else if (t instanceof BoogieObjectType) {
     return theoremProver.getIntType();
   }
   // TODO: not tested!
   return theoremProver.getIntType();
 }
 private String z3_type2SMT2(BoogieType t) {
   if (t.getName().compareTo("bool") == 0) {
     return "Bool";
   } else if (t instanceof BoogieArrayType) {
     BoogieArrayType barrt = (BoogieArrayType) t;
     StringBuilder sb = new StringBuilder();
     sb.append("(Array Int ");
     sb.append(z3_type2SMT2(barrt.getNestedType()));
     sb.append(") ");
     return sb.toString();
   } else {
     return "Int";
   }
 }