internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver) { var pos1 = variables.IndexOf(var1) + ((int)solver.Encoding); var pos2 = variables.IndexOf(var2) + ((int)solver.Encoding); //var trueBv = MkTrue(variables, solver); var pos1is0 = solver.MkBitFalse(pos1); var pos1is1 = solver.MkBitTrue(pos1); var pos2is0 = solver.MkBitFalse(pos2); var pos2is1 = solver.MkBitTrue(pos2); var both0 = solver.MkAnd(pos1is0, pos2is0); var pos11pos20 = solver.MkAnd(pos1is1, pos2is0); var pos10pos21 = solver.MkAnd(pos1is0, pos2is1); //Create automaton for condition var moves = new Move <BDD>[] { new Move <BDD>(0, 0, both0), new Move <BDD>(0, 1, pos11pos20), new Move <BDD>(1, 1, both0), new Move <BDD>(1, 2, pos10pos21), new Move <BDD>(2, 2, both0), }; return(Automaton <BDD> .Create(solver, 0, new int[] { 2 }, moves));//.Determinize(solver).Minimize(solver); }
internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver) { var pos1 = variables.IndexOf(var1) + ((int)solver.Encoding); var pos2 = variables.IndexOf(var2) + ((int)solver.Encoding); var both1 = solver.MkAnd(solver.MkBitTrue(pos1), solver.MkBitTrue(pos2)); var both0 = solver.MkAnd(solver.MkBitFalse(pos1), solver.MkBitFalse(pos2)); var eqCond = solver.MkOr(both0, both1); //Create automaton for condition var moves = new Move <BDD>[] { new Move <BDD>(0, 0, eqCond) }; return(Automaton <BDD> .Create(solver, 0, new int[] { 0 }, moves));//.Determinize(solver).Minimize(solver); }
internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver) { var pos = variables.IndexOf(var) + ((int)solver.Encoding); //var trueBv = MkTrue(variables, solver); var posIs1 = solver.MkBitTrue(pos); var posIs0 = solver.MkBitFalse(pos); //Create automaton for condition var moves = new Move <BDD>[] { new Move <BDD>(0, 0, posIs0), new Move <BDD>(0, 1, posIs1), new Move <BDD>(1, 1, posIs0) }; return(Automaton <BDD> .Create(solver, 0, new int[] { 1 }, moves)); }
internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver) { var k = variables.IndexOf(var) + ((int)solver.Encoding); //var trueBv = MkTrue(variables, solver); //Compute predicates for k-th bit is 0 or 1 //var posIs1 = solver.MkAnd(new BDD[] { trueBv, solver.MkSetWithBitTrue(k), solver.ShiftLeft(pred, variables.Count) }); //var posIs0 = solver.MkAnd(trueBv, solver.MkSetWithBitFalse(k)); var posIs1 = solver.MkAnd(solver.MkBitTrue(k), pred); var posIs0 = solver.MkBitFalse(k); var psi = solver.MkOr(posIs0, posIs1); //Create automaton for condition var moves = new Move <BDD>[] { new Move <BDD>(0, 0, psi) }; return(Automaton <BDD> .Create(solver, 0, new int[] { 0 }, moves)); }
internal override Automaton <BDD> getAutomaton(SimpleList <string> variables, CharSetSolver solver) { var pos1 = variables.IndexOf(X1) + ((int)solver.Encoding); var pos2 = variables.IndexOf(X2) + ((int)solver.Encoding); //pos1is1 implies pos2is1 // is equivalent to //not(pos1is1) or pos2is1 // is equivalent to //pos1is0 or pos2is1 //var trueBv = MkTrue(variables, solver); var pos2is1 = solver.MkBitTrue(pos2); var pos1is0 = solver.MkBitFalse(pos1); var subsetCond = solver.MkOr(pos1is0, pos2is1); //Create automaton for condition var moves = new Move <BDD>[] { new Move <BDD>(0, 0, subsetCond) }; return(Automaton <BDD> .Create(solver, 0, new int[] { 0 }, moves));//.Determinize(solver).Minimize(solver); }