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); }
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); }
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); }
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); }