public void TestSTdomRestr()
{
STBuilderZ3 stb = new STBuilderZ3(new Z3Provider(BitWidth.BV16));
string d = @"^($){2,}$";
var D = stb.CreateFromRegex("D", d).EliminateEpsilons();
var SMT = D.Solver;
STz3 A = MkDecodeWithFinalOutputs(stb, D.InputSort);
STz3 AD = A.RestrictDomain(D);
//AD.ShowAsGraph();
AD.AssertTheory();
Expr x = SMT.MkConst("x", AD.InputListSort);
Expr y = SMT.MkConst("y", AD.OutputListSort);
Expr decode_x_to_y = SMT.MkApp(AD.Acceptor, x, y);
var model = SMT.MainSolver.GetModel(decode_x_to_y, x, y);
string x_val = model[x].GetStringValue(false);
string y_val = model[y].GetStringValue(false);
Assert.IsTrue(x_val.StartsWith("$$"));
Assert.IsTrue(y_val.StartsWith("$$"));
}