예제 #1
0
        internal override Automaton <BDD> getDFA(List <string> variables, BDD alphabet, CharSetSolver solver)
        {
            //Automaton<BDD> for formula
            var varCopy = new List <string>(variables);

            varCopy.Insert(0, variable);
            var autPhi = phi.getDFA(varCopy, alphabet, solver);

            //Remove first bit from each move
            var newMoves = new List <Move <BDD> >();

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

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

            var dfamin = dfanew.Minimize(solver);

            return(dfamin);
        }
예제 #2
0
        internal override Automaton<BDD> getDFA(List<string> variables, BDD alphabet, CharSetSolver solver)
        {
            //Automaton<BDD> for formula
            var varCopy = new List<string>(variables);
            varCopy.Insert(0, variable);
            var autPhi = phi.getDFA(varCopy, alphabet, solver);

            //Remove first bit from each move
            var newMoves = new List<Move<BDD>>();
            foreach (var move in autPhi.GetMoves())
            {
                var newCond = solver.LShiftRight(move.Label);
                newMoves.Add(new Move<BDD>(move.SourceState, move.TargetState, newCond));
            }

            var dfanew = Automaton<BDD>.Create(autPhi.InitialState, autPhi.GetFinalStates(), newMoves).Determinize(solver);
            var dfamin = dfanew.Minimize(solver);

            return dfamin;
        }