public Const(ConstDef def, FastTransducerInstance fti, Z3Provider z3p)
 {
     this.z3p = z3p;
     this.name = def.id.text;
     switch (def.sort.kind)
     {
         case (FastSortKind.Real):
             {
                 sort = z3p.RealSort;
                 break;
             }
         case (FastSortKind.Bool):
             {
                 sort = z3p.BoolSort;
                 break;
             }
         case (FastSortKind.Int):
             {
                 sort = z3p.IntSort;
                 break;
             }
         case (FastSortKind.String):
             {
                 sort = z3p.MkListSort(z3p.CharSort);
                 break;
             }
         case (FastSortKind.Tree):
             {
                 foreach (var enumSort in fti.enums)
                 {
                     if (enumSort.name == def.sort.name.text)
                     {
                         sort = enumSort.sort;
                         break;
                     }
                 }
                 break;
             }
     }
     this.value = GenerateZ3ExprFromExpr(def.expr, fti).Simplify();
 }
 //Generate Z3 term for const def
 private static bool GenerateConst(ConstDef def, FastTransducerInstance fti)
 {
     fti.consts.Add(new Const(def, fti, z3p));
     return true;
 }
 //Generate the C# corresponding to one constant
 private static bool GenerateConst(ConstDef def, StringBuilder sb)
 {
     sb.Append("public const " + ((def.sort.kind == FastSortKind.Real) ? "double" : def.sort.name.text) + " " +def.id.text + " = ");
     PrintExpr(new List<FastToken>(), def.expr, sb);
     sb.AppendLine(";");
     sb.AppendLine();
     return true;
 }