Automata.Z3.Tests.Z3_STTests.MkGetTags2 C# (CSharp) Method

MkGetTags2() private static method

The corrected version of GetTags
private static MkGetTags2 ( Microsoft.Automata.STBuilder stb, Microsoft.Z3.Sort charSort ) : Microsoft.Automata.ST
stb Microsoft.Automata.STBuilder
charSort Microsoft.Z3.Sort
return Microsoft.Automata.ST
        private static STz3 MkGetTags2(STBuilderZ3 stb, Sort charSort)
        {
            var z3p = stb.Solver;
            Expr tt = z3p.True;
            Expr[] eps = new Expr[] { };
            List<Move<Rulez3>> rules = new List<Move<Rulez3>>();
            Expr lt = z3p.MkNumeral((int)'<', charSort);
            Expr gt = z3p.MkNumeral((int)'>', charSort);
            //final outputs are all epmpty
            rules.Add(stb.MkFinalOutput(0, tt, eps));
            rules.Add(stb.MkFinalOutput(1, tt, eps));
            rules.Add(stb.MkFinalOutput(2, tt, eps));
            Expr x = stb.MkInputVariable(charSort);
            Expr c = stb.MkRegister(charSort);
            //rules from q0
            rules.Add(stb.MkRule(0, 0, z3p.MkNeq(x, lt), x));
            rules.Add(stb.MkRule(0, 1, z3p.MkEq(x, lt), x));
            //rules from q1
            rules.Add(stb.MkRule(1, 2, z3p.MkNeq(x, lt), x));
            rules.Add(stb.MkRule(1, 1, z3p.MkEq(x, lt), x));
            //rules from q2
            rules.Add(stb.MkRule(2, 0, z3p.MkAnd(z3p.MkNeq(x, gt), z3p.MkNeq(x, lt)), x));
            rules.Add(stb.MkRule(2, 0, z3p.MkEq(x, gt), x, lt, c, gt));
            rules.Add(stb.MkRule(2, 1, z3p.MkEq(x, lt), x));

            STz3 st = stb.MkST("GetTags2", z3p.MkNumeral(0, charSort), charSort, charSort, charSort, 0, rules);
            return st;
        }