예제 #1
0
파일: WS1S.cs 프로젝트: EgorGumin/Automata
        internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver)
        {
            var pos1 = variables.IndexOf(var1) + ((int)solver.Encoding);
            var pos2 = variables.IndexOf(var2) + ((int)solver.Encoding);

            //var trueBv = MkTrue(variables, solver);
            var pos1is0 = solver.MkBitFalse(pos1);
            var pos1is1 = solver.MkBitTrue(pos1);
            var pos2is0 = solver.MkBitFalse(pos2);
            var pos2is1 = solver.MkBitTrue(pos2);

            var both0      = solver.MkAnd(pos1is0, pos2is0);
            var pos11pos20 = solver.MkAnd(pos1is1, pos2is0);
            var pos10pos21 = solver.MkAnd(pos1is0, pos2is1);

            //Create automaton for condition
            var moves = new Move <BDD>[] {
                new Move <BDD>(0, 0, both0),
                new Move <BDD>(0, 1, pos11pos20),
                new Move <BDD>(1, 1, both0),
                new Move <BDD>(1, 2, pos10pos21),
                new Move <BDD>(2, 2, both0),
            };

            return(Automaton <BDD> .Create(solver, 0, new int[] { 2 }, moves));//.Determinize(solver).Minimize(solver);
        }
예제 #2
0
파일: WS1S.cs 프로젝트: EgorGumin/Automata
        internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver)
        {
            var pos1 = variables.IndexOf(var1) + ((int)solver.Encoding);
            var pos2 = variables.IndexOf(var2) + ((int)solver.Encoding);

            var both1  = solver.MkAnd(solver.MkBitTrue(pos1), solver.MkBitTrue(pos2));
            var both0  = solver.MkAnd(solver.MkBitFalse(pos1), solver.MkBitFalse(pos2));
            var eqCond = solver.MkOr(both0, both1);

            //Create automaton for condition
            var moves = new Move <BDD>[] { new Move <BDD>(0, 0, eqCond) };

            return(Automaton <BDD> .Create(solver, 0, new int[] { 0 }, moves));//.Determinize(solver).Minimize(solver);
        }
예제 #3
0
파일: WS1S.cs 프로젝트: EgorGumin/Automata
        internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver)
        {
            var pos = variables.IndexOf(var) + ((int)solver.Encoding);

            //var trueBv = MkTrue(variables, solver);
            var posIs1 = solver.MkBitTrue(pos);
            var posIs0 = solver.MkBitFalse(pos);

            //Create automaton for condition
            var moves = new Move <BDD>[] {
                new Move <BDD>(0, 0, posIs0),
                new Move <BDD>(0, 1, posIs1),
                new Move <BDD>(1, 1, posIs0)
            };

            return(Automaton <BDD> .Create(solver, 0, new int[] { 1 }, moves));
        }
예제 #4
0
파일: WS1S.cs 프로젝트: EgorGumin/Automata
        internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver)
        {
            var k = variables.IndexOf(var) + ((int)solver.Encoding);
            //var trueBv = MkTrue(variables, solver);

            //Compute predicates for k-th bit is 0 or 1
            //var posIs1 = solver.MkAnd(new BDD[] { trueBv, solver.MkSetWithBitTrue(k), solver.ShiftLeft(pred, variables.Count) });
            //var posIs0 = solver.MkAnd(trueBv, solver.MkSetWithBitFalse(k));
            var posIs1 = solver.MkAnd(solver.MkBitTrue(k), pred);
            var posIs0 = solver.MkBitFalse(k);
            var psi    = solver.MkOr(posIs0, posIs1);

            //Create automaton for condition
            var moves = new Move <BDD>[] { new Move <BDD>(0, 0, psi) };

            return(Automaton <BDD> .Create(solver, 0, new int[] { 0 }, moves));
        }
예제 #5
0
파일: WS1S.cs 프로젝트: EgorGumin/Automata
        internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver)
        {
            var pos1 = variables.IndexOf(X1) + ((int)solver.Encoding);
            var pos2 = variables.IndexOf(X2) + ((int)solver.Encoding);

            //pos1is1 implies pos2is1
            //  is equivalent to
            //not(pos1is1) or pos2is1
            //  is equivalent to
            //pos1is0 or pos2is1
            //var trueBv = MkTrue(variables, solver);
            var pos2is1    = solver.MkBitTrue(pos2);
            var pos1is0    = solver.MkBitFalse(pos1);
            var subsetCond = solver.MkOr(pos1is0, pos2is1);


            //Create automaton for condition
            var moves = new Move <BDD>[] { new Move <BDD>(0, 0, subsetCond) };

            return(Automaton <BDD> .Create(solver, 0, new int[] { 0 }, moves));//.Determinize(solver).Minimize(solver);
        }