コード例 #1
0
        internal override Automaton <BDD> getAutomatonBDD(SimpleList <Variable> variables, IBDDAlgebra alg, int nrOfLabelBits)
        {
            var aut1 = phi1.getAutomatonBDD(variables, alg, nrOfLabelBits);
            var aut2 = phi2.getAutomatonBDD(variables, alg, nrOfLabelBits);
            var res  = aut1.Complement(alg).Intersect(aut2.Complement(alg), alg).Complement(alg);

            res = res.Determinize(alg).Minimize(alg);
            return(res);
        }
コード例 #2
0
        internal override Automaton <BDD> getAutomatonBDD(SimpleList <Variable> variables, IBDDAlgebra alg, int nrOfLabelBits)
        {
            var aut1 = phi1.getAutomatonBDD(variables, alg, nrOfLabelBits);
            var aut2 = phi2.getAutomatonBDD(variables, alg, nrOfLabelBits);
            var aut  = aut1.Intersect(aut2, alg);

            aut = aut.Minimize(alg);
            return(aut);
        }
コード例 #3
0
        internal override Automaton <BDD> getAutomatonBDD(SimpleList <Variable> variables, IBDDAlgebra alg, int nrOfLabelBits)
        {
            var aut = phi.getAutomatonBDD(variables, alg, nrOfLabelBits);
            var res = aut.Determinize(alg).Complement(alg).Minimize(alg);

            foreach (var x in phi.EnumerateFreeVariablesPossiblyWithDuplicates())
            {
                if (x.IsFirstOrder)
                {
                    var sing = new WS1SSingleton <T>(x).getAutomatonBDD(variables, alg, nrOfLabelBits);
                    res = res.Intersect(sing, alg).Determinize(alg).Minimize(alg);
                }
            }
            return(res);
        }
コード例 #4
0
        internal override Automaton <BDD> getAutomatonBDD(SimpleList <Variable> variables, IBDDAlgebra alg, int nrOfLabelBits)
        {
            //the existential variable will shadow any previous occurrence with the same name
            //because when looking up the index of var it will be the last occurrence
            var varIndex     = variables.Count + nrOfLabelBits;
            var variablesExt = variables.Append(var);
            var autPhi       = phi.getAutomatonBDD(variablesExt, alg, nrOfLabelBits);

            //Project away the the existential variable
            var newMoves = new List <Move <BDD> >();

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

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

            var res = aut.Determinize(alg);

            res = res.Minimize(alg);

            return(res);
        }