internal override Automaton <IMonadicPredicate <BDD, T> > getAutomaton(SimpleList <Variable> variables, ICartesianAlgebraBDD <T> alg) { var aut = phi.getAutomaton(variables, alg); var res = aut.Determinize(alg).Complement(alg).Minimize(alg); foreach (var x in phi.GetFreeVariables(true)) { var sing = new WS1SSingleton <T>(x).getAutomaton(variables, alg); res = res.Intersect(sing, alg).Determinize(alg).Minimize(alg); } return(res); }
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); }