예제 #1
0
파일: WS1S.cs 프로젝트: EgorGumin/Automata
        internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver)
        {
            //Automaton<BvSet> for formula
            var varCopy = variables.Append(X);
            var autPhi  = phi.getAutomaton(varCopy, solver);

            var newMoves = new List <Move <BDD> >();
            var k        = variables.Count + ((int)solver.Encoding);

            foreach (var move in autPhi.GetMoves())
            {
                var newCond = solver.OmitBit(move.Label, k);
                newMoves.Add(new Move <BDD>(move.SourceState, move.TargetState, newCond));
            }

            var res = Automaton <BDD> .Create(solver, autPhi.InitialState, autPhi.GetFinalStates(), newMoves);

            if (MINIMIZE)
            {
                res = res.Determinize(solver).Minimize(solver);
            }
            return(res);
        }