/** * 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"; } }